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;
 }