|  | /* | 
|  | *  Copyright (c) 2012 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. | 
|  | */ | 
|  |  | 
|  | #ifndef WEBRTC_VIDEO_ENGINE_VIE_INPUT_MANAGER_H_ | 
|  | #define WEBRTC_VIDEO_ENGINE_VIE_INPUT_MANAGER_H_ | 
|  |  | 
|  | #include <map> | 
|  |  | 
|  | #include "webrtc/modules/video_capture/include/video_capture.h" | 
|  | #include "webrtc/system_wrappers/interface/scoped_ptr.h" | 
|  | #include "webrtc/typedefs.h" | 
|  | #include "webrtc/video_engine/include/vie_capture.h" | 
|  | #include "webrtc/video_engine/vie_defines.h" | 
|  | #include "webrtc/video_engine/vie_frame_provider_base.h" | 
|  | #include "webrtc/video_engine/vie_manager_base.h" | 
|  |  | 
|  | namespace webrtc { | 
|  |  | 
|  | class Config; | 
|  | class CriticalSectionWrapper; | 
|  | class ProcessThread; | 
|  | class RWLockWrapper; | 
|  | class ViECapturer; | 
|  | class ViEExternalCapture; | 
|  | class VoiceEngine; | 
|  |  | 
|  | class ViEInputManager : private ViEManagerBase { | 
|  | friend class ViEInputManagerScoped; | 
|  | public: | 
|  | ViEInputManager(int engine_id, const Config& config); | 
|  | ~ViEInputManager(); | 
|  |  | 
|  | void SetModuleProcessThread(ProcessThread* module_process_thread); | 
|  |  | 
|  | // Returns number of capture devices. | 
|  | int NumberOfCaptureDevices(); | 
|  |  | 
|  | // Gets name and id for a capture device. | 
|  | int GetDeviceName(uint32_t device_number, | 
|  | char* device_nameUTF8, | 
|  | uint32_t device_name_length, | 
|  | char* device_unique_idUTF8, | 
|  | uint32_t device_unique_idUTF8Length); | 
|  |  | 
|  | // Returns the number of capture capabilities for a specified device. | 
|  | int NumberOfCaptureCapabilities(const char* device_unique_idUTF8); | 
|  |  | 
|  | // Gets a specific capability for a capture device. | 
|  | int GetCaptureCapability(const char* device_unique_idUTF8, | 
|  | const uint32_t device_capability_number, | 
|  | CaptureCapability& capability); | 
|  |  | 
|  | // Show OS specific Capture settings. | 
|  | int DisplayCaptureSettingsDialogBox(const char* device_unique_idUTF8, | 
|  | const char* dialog_titleUTF8, | 
|  | void* parent_window, | 
|  | uint32_t positionX, | 
|  | uint32_t positionY); | 
|  | int GetOrientation(const char* device_unique_idUTF8, | 
|  | RotateCapturedFrame& orientation); | 
|  |  | 
|  | // Creates a capture module for the specified capture device and assigns | 
|  | // a capture device id for the device. | 
|  | // Return zero on success, ViEError on failure. | 
|  | int CreateCaptureDevice(const char* device_unique_idUTF8, | 
|  | const uint32_t device_unique_idUTF8Length, | 
|  | int& capture_id); | 
|  | int CreateCaptureDevice(VideoCaptureModule* capture_module, | 
|  | int& capture_id); | 
|  | int CreateExternalCaptureDevice(ViEExternalCapture*& external_capture, | 
|  | int& capture_id); | 
|  | int DestroyCaptureDevice(int capture_id); | 
|  |  | 
|  | private: | 
|  | // Gets and allocates a free capture device id. Assumed protected by caller. | 
|  | bool GetFreeCaptureId(int* freecapture_id); | 
|  |  | 
|  | // Frees a capture id assigned in GetFreeCaptureId. | 
|  | void ReturnCaptureId(int capture_id); | 
|  |  | 
|  | // Gets the ViEFrameProvider for this capture observer. | 
|  | ViEFrameProviderBase* ViEFrameProvider( | 
|  | const ViEFrameCallback* capture_observer) const; | 
|  |  | 
|  | // Gets the ViEFrameProvider for this capture observer. | 
|  | ViEFrameProviderBase* ViEFrameProvider(int provider_id) const; | 
|  |  | 
|  | // Gets the ViECapturer for the capture device id. | 
|  | ViECapturer* ViECapturePtr(int capture_id) const; | 
|  |  | 
|  | const Config& config_; | 
|  | int engine_id_; | 
|  | scoped_ptr<CriticalSectionWrapper> map_cs_; | 
|  | scoped_ptr<CriticalSectionWrapper> device_info_cs_; | 
|  |  | 
|  | typedef std::map<int, ViEFrameProviderBase*> FrameProviderMap; | 
|  | FrameProviderMap vie_frame_provider_map_; | 
|  |  | 
|  | // Capture devices. | 
|  | VideoCaptureModule::DeviceInfo* capture_device_info_; | 
|  | int free_capture_device_id_[kViEMaxCaptureDevices]; | 
|  |  | 
|  | ProcessThread* module_process_thread_;  // Weak. | 
|  | }; | 
|  |  | 
|  | // Provides protected access to ViEInputManater. | 
|  | class ViEInputManagerScoped: private ViEManagerScopedBase { | 
|  | public: | 
|  | explicit ViEInputManagerScoped(const ViEInputManager& vie_input_manager); | 
|  |  | 
|  | ViECapturer* Capture(int capture_id) const; | 
|  | ViEFrameProviderBase* FrameProvider(int provider_id) const; | 
|  | ViEFrameProviderBase* FrameProvider(const ViEFrameCallback* | 
|  | capture_observer) const; | 
|  | }; | 
|  |  | 
|  | }  // namespace webrtc | 
|  |  | 
|  | #endif  // WEBRTC_VIDEO_ENGINE_VIE_INPUT_MANAGER_H_ |