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
This commit is contained in:
wu@webrtc.org 2011-10-11 17:13:51 +00:00
parent 199f4defd3
commit ea89922b56
14 changed files with 114 additions and 36 deletions

View File

@ -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_

View File

@ -32,6 +32,7 @@
# interfaces # interfaces
'../interface/video_capture.h', '../interface/video_capture.h',
'../interface/video_capture_defines.h', '../interface/video_capture_defines.h',
'../interface/video_capture_factory.h',
# headers # headers
'video_capture_config.h', 'video_capture_config.h',
'video_capture_delay.h', 'video_capture_delay.h',
@ -40,6 +41,7 @@
'device_info_impl.h', 'device_info_impl.h',
# DEFINE PLATFORM INDEPENDENT SOURCE FILES # DEFINE PLATFORM INDEPENDENT SOURCE FILES
'video_capture_factory.cc',
'video_capture_impl.cc', 'video_capture_impl.cc',
'vplib_conversions.cc', 'vplib_conversions.cc',
'device_info_impl.cc', 'device_info_impl.cc',

View File

@ -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

View File

@ -12,8 +12,7 @@
#include <android/log.h> #include <android/log.h>
#include "org_webrtc_capturemoduleandroidtest_VideoCaptureModuleTest.h" #include "org_webrtc_capturemoduleandroidtest_VideoCaptureModuleTest.h"
#include "../../../interface/video_capture.h" #include "../../../interface/video_capture_factory.h"
#include "../../../source/video_capture_impl.h"
#include "../../../../../video_render/main/interface/video_render.h" #include "../../../../../video_render/main/interface/video_render.h"
#include "../../testAPI/testPlatformDependent.h" #include "../../testAPI/testPlatformDependent.h"
#include "../../testAPI/testPlatformDependent.h" #include "../../testAPI/testPlatformDependent.h"
@ -117,11 +116,11 @@ Java_org_webrtc_capturemoduleandroidtest_VideoCaptureModuleTest_StartCapture(
{ {
if (!jniData._captureInfo) { if (!jniData._captureInfo) {
VideoCaptureModule::SetAndroidObjects(jniData.jvm, context); VideoCaptureModule::SetAndroidObjects(jniData.jvm, context);
jniData._captureInfo = VideoCaptureImpl::CreateDeviceInfo(5); jniData._captureInfo = VideoCaptureFactory::CreateDeviceInfo(5);
WebRtc_UWord8 id[256]; WebRtc_UWord8 id[256];
WebRtc_UWord8 name[256]; WebRtc_UWord8 name[256];
jniData._captureInfo->GetDeviceName(0, name, 256, id, 256); jniData._captureInfo->GetDeviceName(0, name, 256, id, 256);
jniData._videoCapture = VideoCaptureImpl::Create(0, id); jniData._videoCapture = VideoCaptureFactory::Create(0, id);
VideoCaptureCapability capability; VideoCaptureCapability capability;
jniData._captureInfo->GetCapability(id, 0, capability); jniData._captureInfo->GetCapability(id, 0, capability);

View File

@ -37,7 +37,6 @@
'include_dirs': [ 'include_dirs': [
'../interface', '../interface',
'../../../modules/video_capture/main/interface', '../../../modules/video_capture/main/interface',
'../../../modules/video_capture/main/source',
'../../../modules/video_render/main/interface', '../../../modules/video_render/main/interface',
], ],
'direct_dependent_settings': { 'direct_dependent_settings': {

View File

@ -18,8 +18,7 @@
#include "critical_section_wrapper.h" #include "critical_section_wrapper.h"
#include "event_wrapper.h" #include "event_wrapper.h"
#include "module_common_types.h" #include "module_common_types.h"
#include "video_capture.h" #include "video_capture_factory.h"
#include "video_capture_impl.h"
#include "video_processing.h" #include "video_processing.h"
#include "video_render_defines.h" #include "video_render_defines.h"
#include "thread_wrapper.h" #include "thread_wrapper.h"
@ -208,11 +207,11 @@ WebRtc_Word32 ViECapturer::Init(const WebRtc_UWord8* deviceUniqueIdUTF8,
#ifndef WEBRTC_VIDEO_EXTERNAL_CAPTURE_AND_RENDER #ifndef WEBRTC_VIDEO_EXTERNAL_CAPTURE_AND_RENDER
if (deviceUniqueIdUTF8 == NULL) if (deviceUniqueIdUTF8 == NULL)
{ {
_captureModule = videocapturemodule::VideoCaptureImpl::Create( _captureModule = VideoCaptureFactory::Create(
ViEModuleId(_engineId, _captureId), _externalCaptureModule); ViEModuleId(_engineId, _captureId), _externalCaptureModule);
} else } else
{ {
_captureModule = videocapturemodule::VideoCaptureImpl::Create( _captureModule = VideoCaptureFactory::Create(
ViEModuleId(_engineId, _captureId), deviceUniqueIdUTF8); ViEModuleId(_engineId, _captureId), deviceUniqueIdUTF8);
} }
#endif #endif

View File

@ -22,7 +22,6 @@
#ifdef WEBRTC_ANDROID #ifdef WEBRTC_ANDROID
#include "video_capture.h" #include "video_capture.h"
#include "video_capture_impl.h"
#include "video_render.h" #include "video_render.h"
#endif #endif

View File

@ -17,8 +17,7 @@
#include "common_types.h" #include "common_types.h"
#include "critical_section_wrapper.h" #include "critical_section_wrapper.h"
#include "video_capture.h" #include "video_capture_factory.h"
#include "video_capture_impl.h"
#include "video_coding.h" #include "video_coding.h"
#include "video_coding_defines.h" #include "video_coding_defines.h"
#include "rw_lock_wrapper.h" #include "rw_lock_wrapper.h"
@ -59,7 +58,7 @@ ViEInputManager::ViEInputManager(const int engineId)
_ptrCaptureDeviceInfo=NULL; _ptrCaptureDeviceInfo=NULL;
#else #else
_ptrCaptureDeviceInfo = _ptrCaptureDeviceInfo =
videocapturemodule::VideoCaptureImpl::CreateDeviceInfo( VideoCaptureFactory::CreateDeviceInfo(
ViEModuleId(_engineId)); ViEModuleId(_engineId));
#endif #endif
for (int idx = 0; idx < kViEMaxFilePlayers; idx++) for (int idx = 0; idx < kViEMaxFilePlayers; idx++)
@ -91,7 +90,7 @@ ViEInputManager::~ViEInputManager()
#ifndef WEBRTC_VIDEO_EXTERNAL_CAPTURE_AND_RENDER #ifndef WEBRTC_VIDEO_EXTERNAL_CAPTURE_AND_RENDER
if (_ptrCaptureDeviceInfo) if (_ptrCaptureDeviceInfo)
{ {
videocapturemodule::VideoCaptureImpl::DestroyDeviceInfo( VideoCaptureFactory::DestroyDeviceInfo(
_ptrCaptureDeviceInfo); _ptrCaptureDeviceInfo);
_ptrCaptureDeviceInfo = NULL; _ptrCaptureDeviceInfo = NULL;
} }

View File

@ -12,7 +12,7 @@
#define WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_TB_CAPTURE_DEVICE_H_ #define WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_TB_CAPTURE_DEVICE_H_
#include "tb_interfaces.h" #include "tb_interfaces.h"
#include "video_capture.h" #include "video_capture_factory.h"
class tbCaptureDevice class tbCaptureDevice
{ {

View File

@ -9,7 +9,6 @@
*/ */
#include "tb_capture_device.h" #include "tb_capture_device.h"
#include "video_capture_impl.h"
tbCaptureDevice::tbCaptureDevice(tbInterfaces& Engine, int& nrOfErrors) : tbCaptureDevice::tbCaptureDevice(tbInterfaces& Engine, int& nrOfErrors) :
captureId(-1), captureId(-1),
@ -28,7 +27,7 @@ tbCaptureDevice::tbCaptureDevice(tbInterfaces& Engine, int& nrOfErrors) :
bool captureDeviceSet = false; bool captureDeviceSet = false;
webrtc::VideoCaptureModule::DeviceInfo* devInfo = webrtc::VideoCaptureModule::DeviceInfo* devInfo =
webrtc::videocapturemodule::VideoCaptureImpl::CreateDeviceInfo(0); webrtc::VideoCaptureFactory::CreateDeviceInfo(0);
for (size_t captureIdx = 0; for (size_t captureIdx = 0;
captureIdx < devInfo->NumberOfDevices(); captureIdx < devInfo->NumberOfDevices();
captureIdx++) captureIdx++)
@ -40,7 +39,7 @@ tbCaptureDevice::tbCaptureDevice(tbInterfaces& Engine, int& nrOfErrors) :
"ERROR: %s at line %d", "ERROR: %s at line %d",
__FUNCTION__, __LINE__); __FUNCTION__, __LINE__);
vcpm_ = webrtc::videocapturemodule::VideoCaptureImpl::Create( vcpm_ = webrtc::VideoCaptureFactory::Create(
captureIdx, uniqueId); captureIdx, uniqueId);
if (vcpm_ == NULL) // Failed to open this device. Try next. if (vcpm_ == NULL) // Failed to open this device. Try next.
{ {
@ -57,7 +56,7 @@ tbCaptureDevice::tbCaptureDevice(tbInterfaces& Engine, int& nrOfErrors) :
break; break;
} }
} }
webrtc::videocapturemodule::VideoCaptureImpl::DestroyDeviceInfo(devInfo); webrtc::VideoCaptureFactory::DestroyDeviceInfo(devInfo);
numberOfErrors += ViETest::TestError( numberOfErrors += ViETest::TestError(
captureDeviceSet, "ERROR: %s at line %d - Could not set capture device", captureDeviceSet, "ERROR: %s at line %d - Could not set capture device",
__FUNCTION__, __LINE__); __FUNCTION__, __LINE__);

View File

@ -15,7 +15,7 @@
#include "vie_autotest_defines.h" #include "vie_autotest_defines.h"
#include "vie_autotest.h" #include "vie_autotest.h"
#include "engine_configurations.h" #include "engine_configurations.h"
#include "video_capture_impl.h" #include "video_capture_factory.h"
int ViEAutoTest::ViEBaseStandardTest() int ViEAutoTest::ViEBaseStandardTest()
{ {
@ -82,7 +82,7 @@ int ViEAutoTest::ViEBaseStandardTest()
bool captureDeviceSet = false; bool captureDeviceSet = false;
int captureId = 0; int captureId = 0;
webrtc::VideoCaptureModule::DeviceInfo* devInfo = webrtc::VideoCaptureModule::DeviceInfo* devInfo =
webrtc::videocapturemodule::VideoCaptureImpl::CreateDeviceInfo(0); webrtc::VideoCaptureFactory::CreateDeviceInfo(0);
for (unsigned int captureIdx = 0; for (unsigned int captureIdx = 0;
captureIdx < devInfo->NumberOfDevices(); captureIdx < devInfo->NumberOfDevices();
@ -95,7 +95,7 @@ int ViEAutoTest::ViEBaseStandardTest()
"ERROR: %s at line %d", "ERROR: %s at line %d",
__FUNCTION__, __LINE__); __FUNCTION__, __LINE__);
vcpm = webrtc::videocapturemodule::VideoCaptureImpl::Create( vcpm = webrtc::VideoCaptureFactory::Create(
4571, uniqueId); 4571, uniqueId);
vcpm->AddRef(); vcpm->AddRef();
numberOfErrors += ViETest::TestError(vcpm != NULL, numberOfErrors += ViETest::TestError(vcpm != NULL,
@ -116,7 +116,7 @@ int ViEAutoTest::ViEBaseStandardTest()
vcpm = NULL; vcpm = NULL;
} }
} }
webrtc::videocapturemodule::VideoCaptureImpl::DestroyDeviceInfo(devInfo); webrtc::VideoCaptureFactory::DestroyDeviceInfo(devInfo);
numberOfErrors+= ViETest::TestError( numberOfErrors+= ViETest::TestError(
captureDeviceSet, captureDeviceSet,

View File

@ -28,7 +28,7 @@
#include "tb_interfaces.h" #include "tb_interfaces.h"
#include "tb_video_channel.h" #include "tb_video_channel.h"
#include "video_capture_impl.h" #include "video_capture_factory.h"
class CaptureObserver: public webrtc::ViECaptureObserver class CaptureObserver: public webrtc::ViECaptureObserver
{ {
@ -138,7 +138,7 @@ int ViEAutoTest::ViECaptureStandardTest()
tbInterfaces ViE("WebRTCViECapture_Standard", numberOfErrors); tbInterfaces ViE("WebRTCViECapture_Standard", numberOfErrors);
webrtc::VideoCaptureModule::DeviceInfo* devInfo = webrtc::VideoCaptureModule::DeviceInfo* devInfo =
webrtc::videocapturemodule::VideoCaptureImpl::CreateDeviceInfo(0); webrtc::VideoCaptureFactory::CreateDeviceInfo(0);
int numberOfCaptureDevices = devInfo->NumberOfDevices(); int numberOfCaptureDevices = devInfo->NumberOfDevices();
ViETest::Log("Number of capture devices %d", numberOfCaptureDevices); ViETest::Log("Number of capture devices %d", numberOfCaptureDevices);
@ -229,7 +229,7 @@ int ViEAutoTest::ViECaptureStandardTest()
__FUNCTION__, __LINE__); __FUNCTION__, __LINE__);
webrtc::VideoCaptureModule* vcpm = webrtc::VideoCaptureModule* vcpm =
webrtc::videocapturemodule::VideoCaptureImpl::Create( webrtc::VideoCaptureFactory::Create(
deviceIndex, deviceUniqueName); deviceIndex, deviceUniqueName);
vcpm->AddRef(); vcpm->AddRef();
numberOfErrors += ViETest::TestError(vcpm != NULL, numberOfErrors += ViETest::TestError(vcpm != NULL,
@ -338,7 +338,7 @@ int ViEAutoTest::ViECaptureStandardTest()
ViETest::Log(" "); ViETest::Log(" ");
return numberOfErrors; return numberOfErrors;
} }
webrtc::videocapturemodule::VideoCaptureImpl::DestroyDeviceInfo(devInfo); webrtc::VideoCaptureFactory::DestroyDeviceInfo(devInfo);
ViETest::Log(" "); ViETest::Log(" ");
ViETest::Log(" ViECapture Standard Test PASSED!"); ViETest::Log(" ViECapture Standard Test PASSED!");
@ -386,7 +386,7 @@ int ViEAutoTest::ViECaptureAPITest()
int captureId = 0; int captureId = 0;
webrtc::VideoCaptureModule::DeviceInfo* devInfo = webrtc::VideoCaptureModule::DeviceInfo* devInfo =
webrtc::videocapturemodule::VideoCaptureImpl::CreateDeviceInfo(0); webrtc::VideoCaptureFactory::CreateDeviceInfo(0);
numberOfErrors += ViETest::TestError(devInfo != NULL, numberOfErrors += ViETest::TestError(devInfo != NULL,
"ERROR: %s at line %d", __FUNCTION__, "ERROR: %s at line %d", __FUNCTION__,
__LINE__); __LINE__);
@ -398,7 +398,7 @@ int ViEAutoTest::ViECaptureAPITest()
__FUNCTION__, __LINE__); __FUNCTION__, __LINE__);
webrtc::VideoCaptureModule* vcpm = webrtc::VideoCaptureModule* vcpm =
webrtc::videocapturemodule::VideoCaptureImpl::Create( webrtc::VideoCaptureFactory::Create(
0, deviceUniqueName); 0, deviceUniqueName);
vcpm->AddRef(); vcpm->AddRef();
numberOfErrors += ViETest::TestError(vcpm != NULL, "ERROR: %s at line %d", numberOfErrors += ViETest::TestError(vcpm != NULL, "ERROR: %s at line %d",
@ -558,7 +558,7 @@ int ViEAutoTest::ViECaptureAPITest()
numberOfErrors += ViETest::TestError(error == 0, "ERROR: %s at line %d", numberOfErrors += ViETest::TestError(error == 0, "ERROR: %s at line %d",
__FUNCTION__, __LINE__); __FUNCTION__, __LINE__);
webrtc::videocapturemodule::VideoCaptureImpl::DestroyDeviceInfo(devInfo); webrtc::VideoCaptureFactory::DestroyDeviceInfo(devInfo);
vcpm->Release(); vcpm->Release();
//*************************************************************** //***************************************************************
@ -608,7 +608,7 @@ int ViEAutoTest::ViECaptureExternalCaptureTest()
// Allocate the external capture device // Allocate the external capture device
webrtc::VideoCaptureModule* vcpm = webrtc::VideoCaptureModule* vcpm =
webrtc::videocapturemodule::VideoCaptureImpl::Create( webrtc::VideoCaptureFactory::Create(
0, externalCapture); 0, externalCapture);
vcpm->AddRef(); vcpm->AddRef();
numberOfErrors += ViETest::TestError(vcpm != NULL, "ERROR: %s at line %d", numberOfErrors += ViETest::TestError(vcpm != NULL, "ERROR: %s at line %d",

View File

@ -24,7 +24,6 @@
'helpers/', 'helpers/',
'../../interface', '../../interface',
'../../source', '../../source',
'../../../../modules/video_capture/main/source/',
'../../../../modules/video_coding/codecs/interface/', '../../../../modules/video_coding/codecs/interface/',
'../../../../common_video/interface/', '../../../../common_video/interface/',
], ],

View File

@ -12,7 +12,7 @@
#include <utility> #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/examples/peerconnection_client/defaults.h"
#include "talk/base/common.h" #include "talk/base/common.h"
#include "talk/base/logging.h" #include "talk/base/logging.h"
@ -222,7 +222,7 @@ void Conductor::ConnectToPeer(int peer_id) {
scoped_refptr<webrtc::VideoCaptureModule> Conductor::OpenVideoCaptureDevice() { scoped_refptr<webrtc::VideoCaptureModule> Conductor::OpenVideoCaptureDevice() {
webrtc::VideoCaptureModule::DeviceInfo* device_info( webrtc::VideoCaptureModule::DeviceInfo* device_info(
webrtc::videocapturemodule::VideoCaptureImpl::CreateDeviceInfo(0)); webrtc::VideoCaptureFactory::CreateDeviceInfo(0));
scoped_refptr<webrtc::VideoCaptureModule> video_device; scoped_refptr<webrtc::VideoCaptureModule> video_device;
const size_t kMaxDeviceNameLength = 128; const size_t kMaxDeviceNameLength = 128;
@ -237,11 +237,11 @@ scoped_refptr<webrtc::VideoCaptureModule> Conductor::OpenVideoCaptureDevice() {
kMaxUniqueIdLength); kMaxUniqueIdLength);
// Try to open this device. // Try to open this device.
video_device = video_device =
webrtc::videocapturemodule::VideoCaptureImpl::Create(0, unique_id); webrtc::VideoCaptureFactory::Create(0, unique_id);
if (video_device.get()) if (video_device.get())
break; break;
} }
webrtc::videocapturemodule::VideoCaptureImpl::DestroyDeviceInfo(device_info); webrtc::VideoCaptureFactory::DestroyDeviceInfo(device_info);
return video_device; return video_device;
} }