1 /* 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef WEBRTC_VIDEO_ENGINE_VIE_INPUT_MANAGER_H_ 12 #define WEBRTC_VIDEO_ENGINE_VIE_INPUT_MANAGER_H_ 13 14 #include <map> 15 16 #include "webrtc/modules/video_capture/include/video_capture.h" 17 #include "webrtc/system_wrappers/interface/scoped_ptr.h" 18 #include "webrtc/typedefs.h" 19 #include "webrtc/video_engine/include/vie_capture.h" 20 #include "webrtc/video_engine/vie_defines.h" 21 #include "webrtc/video_engine/vie_frame_provider_base.h" 22 #include "webrtc/video_engine/vie_manager_base.h" 23 24 namespace webrtc { 25 26 class Config; 27 class CriticalSectionWrapper; 28 class ProcessThread; 29 class RWLockWrapper; 30 class ViECapturer; 31 class ViEExternalCapture; 32 class VoiceEngine; 33 34 class ViEInputManager : private ViEManagerBase { 35 friend class ViEInputManagerScoped; 36 public: 37 ViEInputManager(int engine_id, const Config& config); 38 ~ViEInputManager(); 39 40 void SetModuleProcessThread(ProcessThread* module_process_thread); 41 42 // Returns number of capture devices. 43 int NumberOfCaptureDevices(); 44 45 // Gets name and id for a capture device. 46 int GetDeviceName(uint32_t device_number, 47 char* device_nameUTF8, 48 uint32_t device_name_length, 49 char* device_unique_idUTF8, 50 uint32_t device_unique_idUTF8Length); 51 52 // Returns the number of capture capabilities for a specified device. 53 int NumberOfCaptureCapabilities(const char* device_unique_idUTF8); 54 55 // Gets a specific capability for a capture device. 56 int GetCaptureCapability(const char* device_unique_idUTF8, 57 const uint32_t device_capability_number, 58 CaptureCapability& capability); 59 60 // Show OS specific Capture settings. 61 int DisplayCaptureSettingsDialogBox(const char* device_unique_idUTF8, 62 const char* dialog_titleUTF8, 63 void* parent_window, 64 uint32_t positionX, 65 uint32_t positionY); 66 int GetOrientation(const char* device_unique_idUTF8, 67 RotateCapturedFrame& orientation); 68 69 // Creates a capture module for the specified capture device and assigns 70 // a capture device id for the device. 71 // Return zero on success, ViEError on failure. 72 int CreateCaptureDevice(const char* device_unique_idUTF8, 73 const uint32_t device_unique_idUTF8Length, 74 int& capture_id); 75 int CreateCaptureDevice(VideoCaptureModule* capture_module, 76 int& capture_id); 77 int CreateExternalCaptureDevice(ViEExternalCapture*& external_capture, 78 int& capture_id); 79 int DestroyCaptureDevice(int capture_id); 80 81 private: 82 // Gets and allocates a free capture device id. Assumed protected by caller. 83 bool GetFreeCaptureId(int* freecapture_id); 84 85 // Frees a capture id assigned in GetFreeCaptureId. 86 void ReturnCaptureId(int capture_id); 87 88 // Gets the ViEFrameProvider for this capture observer. 89 ViEFrameProviderBase* ViEFrameProvider( 90 const ViEFrameCallback* capture_observer) const; 91 92 // Gets the ViEFrameProvider for this capture observer. 93 ViEFrameProviderBase* ViEFrameProvider(int provider_id) const; 94 95 // Gets the ViECapturer for the capture device id. 96 ViECapturer* ViECapturePtr(int capture_id) const; 97 98 const Config& config_; 99 int engine_id_; 100 scoped_ptr<CriticalSectionWrapper> map_cs_; 101 scoped_ptr<CriticalSectionWrapper> device_info_cs_; 102 103 typedef std::map<int, ViEFrameProviderBase*> FrameProviderMap; 104 FrameProviderMap vie_frame_provider_map_; 105 106 // Capture devices. 107 VideoCaptureModule::DeviceInfo* capture_device_info_; 108 int free_capture_device_id_[kViEMaxCaptureDevices]; 109 110 ProcessThread* module_process_thread_; // Weak. 111 }; 112 113 // Provides protected access to ViEInputManater. 114 class ViEInputManagerScoped: private ViEManagerScopedBase { 115 public: 116 explicit ViEInputManagerScoped(const ViEInputManager& vie_input_manager); 117 118 ViECapturer* Capture(int capture_id) const; 119 ViEFrameProviderBase* FrameProvider(int provider_id) const; 120 ViEFrameProviderBase* FrameProvider(const ViEFrameCallback* 121 capture_observer) const; 122 }; 123 124 } // namespace webrtc 125 126 #endif // WEBRTC_VIDEO_ENGINE_VIE_INPUT_MANAGER_H_ 127