Add VideoCaptureFactory so that we don't need to expose VideoCaptureImpl.
BUG=
TEST=
Review URL: http://webrtc-codereview.appspot.com/213002
git-svn-id: http://webrtc.googlecode.com/svn/trunk@727 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/src/modules/video_capture/main/interface/video_capture_factory.h b/src/modules/video_capture/main/interface/video_capture_factory.h
new file mode 100644
index 0000000..06c2fab
--- /dev/null
+++ b/src/modules/video_capture/main/interface/video_capture_factory.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+// This file contains interfaces used for creating the VideoCaptureModule
+// and DeviceInfo.
+
+#ifndef WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_INTERFACE_VIDEO_CAPTURE_FACTORY_H_
+#define WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_INTERFACE_VIDEO_CAPTURE_FACTORY_H_
+
+#include "video_capture.h"
+
+namespace webrtc {
+
+class VideoCaptureFactory {
+ public:
+ // Create a video capture module object
+ // id - unique identifier of this video capture module object.
+ // deviceUniqueIdUTF8 - name of the device.
+ // Available names can be found by using GetDeviceName
+ static VideoCaptureModule* Create(const WebRtc_Word32 id,
+ const WebRtc_UWord8* deviceUniqueIdUTF8);
+
+ // Create a video capture module object used for external capture.
+ // id - unique identifier of this video capture module object
+ // externalCapture - [out] interface to call when a new frame is captured.
+ static VideoCaptureModule* Create(const WebRtc_Word32 id,
+ VideoCaptureExternal*& externalCapture);
+
+ static VideoCaptureModule::DeviceInfo* CreateDeviceInfo(
+ const WebRtc_Word32 id);
+ static void DestroyDeviceInfo(VideoCaptureModule::DeviceInfo* deviceInfo);
+
+ private:
+ ~VideoCaptureFactory();
+};
+
+} // namespace webrtc
+
+#endif // WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_INTERFACE_VIDEO_CAPTURE_FACTORY_H_
diff --git a/src/modules/video_capture/main/source/video_capture.gypi b/src/modules/video_capture/main/source/video_capture.gypi
index 6bbdcdf..9429130 100644
--- a/src/modules/video_capture/main/source/video_capture.gypi
+++ b/src/modules/video_capture/main/source/video_capture.gypi
@@ -32,6 +32,7 @@
# interfaces
'../interface/video_capture.h',
'../interface/video_capture_defines.h',
+ '../interface/video_capture_factory.h',
# headers
'video_capture_config.h',
'video_capture_delay.h',
@@ -40,6 +41,7 @@
'device_info_impl.h',
# DEFINE PLATFORM INDEPENDENT SOURCE FILES
+ 'video_capture_factory.cc',
'video_capture_impl.cc',
'vplib_conversions.cc',
'device_info_impl.cc',
diff --git a/src/modules/video_capture/main/source/video_capture_factory.cc b/src/modules/video_capture/main/source/video_capture_factory.cc
new file mode 100644
index 0000000..d4d0a0f
--- /dev/null
+++ b/src/modules/video_capture/main/source/video_capture_factory.cc
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "video_capture_factory.h"
+#include "video_capture_impl.h"
+
+namespace webrtc
+{
+
+VideoCaptureModule* VideoCaptureFactory::Create(const WebRtc_Word32 id,
+ const WebRtc_UWord8* deviceUniqueIdUTF8) {
+ return videocapturemodule::VideoCaptureImpl::Create(id, deviceUniqueIdUTF8);
+}
+
+VideoCaptureModule* VideoCaptureFactory::Create(const WebRtc_Word32 id,
+ VideoCaptureExternal*& externalCapture) {
+ return videocapturemodule::VideoCaptureImpl::Create(id, externalCapture);
+}
+
+VideoCaptureModule::DeviceInfo* VideoCaptureFactory::CreateDeviceInfo(
+ const WebRtc_Word32 id) {
+ return videocapturemodule::VideoCaptureImpl::CreateDeviceInfo(id);
+}
+
+void VideoCaptureFactory::DestroyDeviceInfo(
+ VideoCaptureModule::DeviceInfo* deviceInfo) {
+ videocapturemodule::VideoCaptureImpl::DestroyDeviceInfo(deviceInfo);
+}
+
+} // namespace webrtc
diff --git a/src/modules/video_capture/main/test/android/jni/video_capture_module_android_test_jni.cc b/src/modules/video_capture/main/test/android/jni/video_capture_module_android_test_jni.cc
index 9d93fa3..93bd776 100644
--- a/src/modules/video_capture/main/test/android/jni/video_capture_module_android_test_jni.cc
+++ b/src/modules/video_capture/main/test/android/jni/video_capture_module_android_test_jni.cc
@@ -12,8 +12,7 @@
#include <android/log.h>
#include "org_webrtc_capturemoduleandroidtest_VideoCaptureModuleTest.h"
-#include "../../../interface/video_capture.h"
-#include "../../../source/video_capture_impl.h"
+#include "../../../interface/video_capture_factory.h"
#include "../../../../../video_render/main/interface/video_render.h"
#include "../../testAPI/testPlatformDependent.h"
#include "../../testAPI/testPlatformDependent.h"
@@ -117,11 +116,11 @@
{
if (!jniData._captureInfo) {
VideoCaptureModule::SetAndroidObjects(jniData.jvm, context);
- jniData._captureInfo = VideoCaptureImpl::CreateDeviceInfo(5);
+ jniData._captureInfo = VideoCaptureFactory::CreateDeviceInfo(5);
WebRtc_UWord8 id[256];
WebRtc_UWord8 name[256];
jniData._captureInfo->GetDeviceName(0, name, 256, id, 256);
- jniData._videoCapture = VideoCaptureImpl::Create(0, id);
+ jniData._videoCapture = VideoCaptureFactory::Create(0, id);
VideoCaptureCapability capability;
jniData._captureInfo->GetCapability(id, 0, capability);
diff --git a/src/video_engine/main/source/video_engine_core.gypi b/src/video_engine/main/source/video_engine_core.gypi
index 5ce804a..901e752 100644
--- a/src/video_engine/main/source/video_engine_core.gypi
+++ b/src/video_engine/main/source/video_engine_core.gypi
@@ -37,7 +37,6 @@
'include_dirs': [
'../interface',
'../../../modules/video_capture/main/interface',
- '../../../modules/video_capture/main/source',
'../../../modules/video_render/main/interface',
],
'direct_dependent_settings': {
diff --git a/src/video_engine/main/source/vie_capturer.cc b/src/video_engine/main/source/vie_capturer.cc
index bd8ef81..5de833b 100644
--- a/src/video_engine/main/source/vie_capturer.cc
+++ b/src/video_engine/main/source/vie_capturer.cc
@@ -18,8 +18,7 @@
#include "critical_section_wrapper.h"
#include "event_wrapper.h"
#include "module_common_types.h"
-#include "video_capture.h"
-#include "video_capture_impl.h"
+#include "video_capture_factory.h"
#include "video_processing.h"
#include "video_render_defines.h"
#include "thread_wrapper.h"
@@ -208,11 +207,11 @@
#ifndef WEBRTC_VIDEO_EXTERNAL_CAPTURE_AND_RENDER
if (deviceUniqueIdUTF8 == NULL)
{
- _captureModule = videocapturemodule::VideoCaptureImpl::Create(
+ _captureModule = VideoCaptureFactory::Create(
ViEModuleId(_engineId, _captureId), _externalCaptureModule);
} else
{
- _captureModule = videocapturemodule::VideoCaptureImpl::Create(
+ _captureModule = VideoCaptureFactory::Create(
ViEModuleId(_engineId, _captureId), deviceUniqueIdUTF8);
}
#endif
diff --git a/src/video_engine/main/source/vie_impl.cc b/src/video_engine/main/source/vie_impl.cc
index b5c3196..229667b 100644
--- a/src/video_engine/main/source/vie_impl.cc
+++ b/src/video_engine/main/source/vie_impl.cc
@@ -22,7 +22,6 @@
#ifdef WEBRTC_ANDROID
#include "video_capture.h"
-#include "video_capture_impl.h"
#include "video_render.h"
#endif
diff --git a/src/video_engine/main/source/vie_input_manager.cc b/src/video_engine/main/source/vie_input_manager.cc
index 9e8c38c..f420ad6 100644
--- a/src/video_engine/main/source/vie_input_manager.cc
+++ b/src/video_engine/main/source/vie_input_manager.cc
@@ -17,8 +17,7 @@
#include "common_types.h"
#include "critical_section_wrapper.h"
-#include "video_capture.h"
-#include "video_capture_impl.h"
+#include "video_capture_factory.h"
#include "video_coding.h"
#include "video_coding_defines.h"
#include "rw_lock_wrapper.h"
@@ -59,7 +58,7 @@
_ptrCaptureDeviceInfo=NULL;
#else
_ptrCaptureDeviceInfo =
- videocapturemodule::VideoCaptureImpl::CreateDeviceInfo(
+ VideoCaptureFactory::CreateDeviceInfo(
ViEModuleId(_engineId));
#endif
for (int idx = 0; idx < kViEMaxFilePlayers; idx++)
@@ -91,7 +90,7 @@
#ifndef WEBRTC_VIDEO_EXTERNAL_CAPTURE_AND_RENDER
if (_ptrCaptureDeviceInfo)
{
- videocapturemodule::VideoCaptureImpl::DestroyDeviceInfo(
+ VideoCaptureFactory::DestroyDeviceInfo(
_ptrCaptureDeviceInfo);
_ptrCaptureDeviceInfo = NULL;
}
diff --git a/src/video_engine/main/test/AutoTest/interface/tb_capture_device.h b/src/video_engine/main/test/AutoTest/interface/tb_capture_device.h
index 44aa961..fd0a792 100644
--- a/src/video_engine/main/test/AutoTest/interface/tb_capture_device.h
+++ b/src/video_engine/main/test/AutoTest/interface/tb_capture_device.h
@@ -12,7 +12,7 @@
#define WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_TB_CAPTURE_DEVICE_H_
#include "tb_interfaces.h"
-#include "video_capture.h"
+#include "video_capture_factory.h"
class tbCaptureDevice
{
diff --git a/src/video_engine/main/test/AutoTest/source/tb_capture_device.cc b/src/video_engine/main/test/AutoTest/source/tb_capture_device.cc
index 52e55bc..0cbbbfb 100644
--- a/src/video_engine/main/test/AutoTest/source/tb_capture_device.cc
+++ b/src/video_engine/main/test/AutoTest/source/tb_capture_device.cc
@@ -9,7 +9,6 @@
*/
#include "tb_capture_device.h"
-#include "video_capture_impl.h"
tbCaptureDevice::tbCaptureDevice(tbInterfaces& Engine, int& nrOfErrors) :
captureId(-1),
@@ -28,7 +27,7 @@
bool captureDeviceSet = false;
webrtc::VideoCaptureModule::DeviceInfo* devInfo =
- webrtc::videocapturemodule::VideoCaptureImpl::CreateDeviceInfo(0);
+ webrtc::VideoCaptureFactory::CreateDeviceInfo(0);
for (size_t captureIdx = 0;
captureIdx < devInfo->NumberOfDevices();
captureIdx++)
@@ -40,7 +39,7 @@
"ERROR: %s at line %d",
__FUNCTION__, __LINE__);
- vcpm_ = webrtc::videocapturemodule::VideoCaptureImpl::Create(
+ vcpm_ = webrtc::VideoCaptureFactory::Create(
captureIdx, uniqueId);
if (vcpm_ == NULL) // Failed to open this device. Try next.
{
@@ -57,7 +56,7 @@
break;
}
}
- webrtc::videocapturemodule::VideoCaptureImpl::DestroyDeviceInfo(devInfo);
+ webrtc::VideoCaptureFactory::DestroyDeviceInfo(devInfo);
numberOfErrors += ViETest::TestError(
captureDeviceSet, "ERROR: %s at line %d - Could not set capture device",
__FUNCTION__, __LINE__);
diff --git a/src/video_engine/main/test/AutoTest/source/vie_autotest_base.cc b/src/video_engine/main/test/AutoTest/source/vie_autotest_base.cc
index 014ff8b..8958ecd 100644
--- a/src/video_engine/main/test/AutoTest/source/vie_autotest_base.cc
+++ b/src/video_engine/main/test/AutoTest/source/vie_autotest_base.cc
@@ -15,7 +15,7 @@
#include "vie_autotest_defines.h"
#include "vie_autotest.h"
#include "engine_configurations.h"
-#include "video_capture_impl.h"
+#include "video_capture_factory.h"
int ViEAutoTest::ViEBaseStandardTest()
{
@@ -82,7 +82,7 @@
bool captureDeviceSet = false;
int captureId = 0;
webrtc::VideoCaptureModule::DeviceInfo* devInfo =
- webrtc::videocapturemodule::VideoCaptureImpl::CreateDeviceInfo(0);
+ webrtc::VideoCaptureFactory::CreateDeviceInfo(0);
for (unsigned int captureIdx = 0;
captureIdx < devInfo->NumberOfDevices();
@@ -95,7 +95,7 @@
"ERROR: %s at line %d",
__FUNCTION__, __LINE__);
- vcpm = webrtc::videocapturemodule::VideoCaptureImpl::Create(
+ vcpm = webrtc::VideoCaptureFactory::Create(
4571, uniqueId);
vcpm->AddRef();
numberOfErrors += ViETest::TestError(vcpm != NULL,
@@ -116,7 +116,7 @@
vcpm = NULL;
}
}
- webrtc::videocapturemodule::VideoCaptureImpl::DestroyDeviceInfo(devInfo);
+ webrtc::VideoCaptureFactory::DestroyDeviceInfo(devInfo);
numberOfErrors+= ViETest::TestError(
captureDeviceSet,
diff --git a/src/video_engine/main/test/AutoTest/source/vie_autotest_capture.cc b/src/video_engine/main/test/AutoTest/source/vie_autotest_capture.cc
index 76d815f..31aad65 100644
--- a/src/video_engine/main/test/AutoTest/source/vie_autotest_capture.cc
+++ b/src/video_engine/main/test/AutoTest/source/vie_autotest_capture.cc
@@ -28,7 +28,7 @@
#include "tb_interfaces.h"
#include "tb_video_channel.h"
-#include "video_capture_impl.h"
+#include "video_capture_factory.h"
class CaptureObserver: public webrtc::ViECaptureObserver
{
@@ -138,7 +138,7 @@
tbInterfaces ViE("WebRTCViECapture_Standard", numberOfErrors);
webrtc::VideoCaptureModule::DeviceInfo* devInfo =
- webrtc::videocapturemodule::VideoCaptureImpl::CreateDeviceInfo(0);
+ webrtc::VideoCaptureFactory::CreateDeviceInfo(0);
int numberOfCaptureDevices = devInfo->NumberOfDevices();
ViETest::Log("Number of capture devices %d", numberOfCaptureDevices);
@@ -229,7 +229,7 @@
__FUNCTION__, __LINE__);
webrtc::VideoCaptureModule* vcpm =
- webrtc::videocapturemodule::VideoCaptureImpl::Create(
+ webrtc::VideoCaptureFactory::Create(
deviceIndex, deviceUniqueName);
vcpm->AddRef();
numberOfErrors += ViETest::TestError(vcpm != NULL,
@@ -338,7 +338,7 @@
ViETest::Log(" ");
return numberOfErrors;
}
- webrtc::videocapturemodule::VideoCaptureImpl::DestroyDeviceInfo(devInfo);
+ webrtc::VideoCaptureFactory::DestroyDeviceInfo(devInfo);
ViETest::Log(" ");
ViETest::Log(" ViECapture Standard Test PASSED!");
@@ -386,7 +386,7 @@
int captureId = 0;
webrtc::VideoCaptureModule::DeviceInfo* devInfo =
- webrtc::videocapturemodule::VideoCaptureImpl::CreateDeviceInfo(0);
+ webrtc::VideoCaptureFactory::CreateDeviceInfo(0);
numberOfErrors += ViETest::TestError(devInfo != NULL,
"ERROR: %s at line %d", __FUNCTION__,
__LINE__);
@@ -398,7 +398,7 @@
__FUNCTION__, __LINE__);
webrtc::VideoCaptureModule* vcpm =
- webrtc::videocapturemodule::VideoCaptureImpl::Create(
+ webrtc::VideoCaptureFactory::Create(
0, deviceUniqueName);
vcpm->AddRef();
numberOfErrors += ViETest::TestError(vcpm != NULL, "ERROR: %s at line %d",
@@ -558,7 +558,7 @@
numberOfErrors += ViETest::TestError(error == 0, "ERROR: %s at line %d",
__FUNCTION__, __LINE__);
- webrtc::videocapturemodule::VideoCaptureImpl::DestroyDeviceInfo(devInfo);
+ webrtc::VideoCaptureFactory::DestroyDeviceInfo(devInfo);
vcpm->Release();
//***************************************************************
@@ -608,7 +608,7 @@
// Allocate the external capture device
webrtc::VideoCaptureModule* vcpm =
- webrtc::videocapturemodule::VideoCaptureImpl::Create(
+ webrtc::VideoCaptureFactory::Create(
0, externalCapture);
vcpm->AddRef();
numberOfErrors += ViETest::TestError(vcpm != NULL, "ERROR: %s at line %d",
diff --git a/src/video_engine/main/test/AutoTest/vie_auto_test.gypi b/src/video_engine/main/test/AutoTest/vie_auto_test.gypi
index 8330baf..f2aeb7f 100644
--- a/src/video_engine/main/test/AutoTest/vie_auto_test.gypi
+++ b/src/video_engine/main/test/AutoTest/vie_auto_test.gypi
@@ -24,7 +24,6 @@
'helpers/',
'../../interface',
'../../source',
- '../../../../modules/video_capture/main/source/',
'../../../../modules/video_coding/codecs/interface/',
'../../../../common_video/interface/',
],
diff --git a/third_party_mods/libjingle/source/talk/examples/peerconnection_client/conductor.cc b/third_party_mods/libjingle/source/talk/examples/peerconnection_client/conductor.cc
index b08647b..6bf9897 100644
--- a/third_party_mods/libjingle/source/talk/examples/peerconnection_client/conductor.cc
+++ b/third_party_mods/libjingle/source/talk/examples/peerconnection_client/conductor.cc
@@ -12,7 +12,7 @@
#include <utility>
-#include "modules/video_capture/main/source/video_capture_impl.h"
+#include "modules/video_capture/main/interface/video_capture_factory.h"
#include "talk/examples/peerconnection_client/defaults.h"
#include "talk/base/common.h"
#include "talk/base/logging.h"
@@ -222,7 +222,7 @@
scoped_refptr<webrtc::VideoCaptureModule> Conductor::OpenVideoCaptureDevice() {
webrtc::VideoCaptureModule::DeviceInfo* device_info(
- webrtc::videocapturemodule::VideoCaptureImpl::CreateDeviceInfo(0));
+ webrtc::VideoCaptureFactory::CreateDeviceInfo(0));
scoped_refptr<webrtc::VideoCaptureModule> video_device;
const size_t kMaxDeviceNameLength = 128;
@@ -237,11 +237,11 @@
kMaxUniqueIdLength);
// Try to open this device.
video_device =
- webrtc::videocapturemodule::VideoCaptureImpl::Create(0, unique_id);
+ webrtc::VideoCaptureFactory::Create(0, unique_id);
if (video_device.get())
break;
}
- webrtc::videocapturemodule::VideoCaptureImpl::DestroyDeviceInfo(device_info);
+ webrtc::VideoCaptureFactory::DestroyDeviceInfo(device_info);
return video_device;
}