diff options
author | pbos@webrtc.org <pbos@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2013-03-08 13:12:29 +0000 |
---|---|---|
committer | pbos@webrtc.org <pbos@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2013-03-08 13:12:29 +0000 |
commit | 8623e9b81c9bcac0de3f1bb590a270101e72bec5 (patch) | |
tree | 9eb8ae045e9e4fc1c18df95ba8f3e85c5769466b /video_engine/vie_input_manager.cc | |
parent | 7b6cbc9757efa758349061cdbbaa8e39a831cb6c (diff) | |
download | webrtc-8623e9b81c9bcac0de3f1bb590a270101e72bec5.tar.gz |
Lazy capture_device_info acquisition.
BUG=1484
Review URL: https://webrtc-codereview.appspot.com/1169005
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@3641 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'video_engine/vie_input_manager.cc')
-rw-r--r-- | video_engine/vie_input_manager.cc | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/video_engine/vie_input_manager.cc b/video_engine/vie_input_manager.cc index 937d1c5e..841ddf5b 100644 --- a/video_engine/vie_input_manager.cc +++ b/video_engine/vie_input_manager.cc @@ -29,6 +29,7 @@ namespace webrtc { ViEInputManager::ViEInputManager(const int engine_id) : engine_id_(engine_id), map_cs_(CriticalSectionWrapper::CreateCriticalSection()), + device_info_cs_(CriticalSectionWrapper::CreateCriticalSection()), vie_frame_provider_map_(), capture_device_info_(NULL), module_process_thread_(NULL) { @@ -38,8 +39,7 @@ ViEInputManager::ViEInputManager(const int engine_id) for (int idx = 0; idx < kViEMaxCaptureDevices; idx++) { free_capture_device_id_[idx] = true; } - capture_device_info_ = VideoCaptureFactory::CreateDeviceInfo( - ViEModuleId(engine_id_)); + for (int idx = 0; idx < kViEMaxFilePlayers; idx++) { free_file_id_[idx] = true; } @@ -71,6 +71,10 @@ void ViEInputManager::SetModuleProcessThread( int ViEInputManager::NumberOfCaptureDevices() { WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideo, ViEId(engine_id_), "%s", __FUNCTION__); + CriticalSectionScoped cs(device_info_cs_.get()); + if (capture_device_info_ == NULL) + capture_device_info_ = VideoCaptureFactory::CreateDeviceInfo( + ViEModuleId(engine_id_)); assert(capture_device_info_); return capture_device_info_->NumberOfDevices(); } @@ -82,6 +86,10 @@ int ViEInputManager::GetDeviceName(WebRtc_UWord32 device_number, WebRtc_UWord32 device_unique_idUTF8Length) { WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideo, ViEId(engine_id_), "%s(device_number: %d)", __FUNCTION__, device_number); + CriticalSectionScoped cs(device_info_cs_.get()); + if (capture_device_info_ == NULL) + capture_device_info_ = VideoCaptureFactory::CreateDeviceInfo( + ViEModuleId(engine_id_)); assert(capture_device_info_); return capture_device_info_->GetDeviceName(device_number, device_nameUTF8, device_name_length, @@ -93,6 +101,10 @@ int ViEInputManager::NumberOfCaptureCapabilities( const char* device_unique_idUTF8) { WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideo, ViEId(engine_id_), "%s", __FUNCTION__); + CriticalSectionScoped cs(device_info_cs_.get()); + if (capture_device_info_ == NULL) + capture_device_info_ = VideoCaptureFactory::CreateDeviceInfo( + ViEModuleId(engine_id_)); assert(capture_device_info_); return capture_device_info_->NumberOfCapabilities(device_unique_idUTF8); } @@ -104,6 +116,10 @@ int ViEInputManager::GetCaptureCapability( WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideo, ViEId(engine_id_), "%s(device_unique_idUTF8: %s, device_capability_number: %d)", __FUNCTION__, device_unique_idUTF8, device_capability_number); + CriticalSectionScoped cs(device_info_cs_.get()); + if (capture_device_info_ == NULL) + capture_device_info_ = VideoCaptureFactory::CreateDeviceInfo( + ViEModuleId(engine_id_)); assert(capture_device_info_); VideoCaptureCapability module_capability; int result = capture_device_info_->GetCapability(device_unique_idUTF8, @@ -128,6 +144,10 @@ int ViEInputManager::GetOrientation(const char* device_unique_idUTF8, WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideo, ViEId(engine_id_), "%s(device_unique_idUTF8: %s,)", __FUNCTION__, device_unique_idUTF8); + CriticalSectionScoped cs(device_info_cs_.get()); + if (capture_device_info_ == NULL) + capture_device_info_ = VideoCaptureFactory::CreateDeviceInfo( + ViEModuleId(engine_id_)); assert(capture_device_info_); VideoCaptureRotation module_orientation; int result = capture_device_info_->GetOrientation(device_unique_idUTF8, @@ -156,6 +176,10 @@ int ViEInputManager::DisplayCaptureSettingsDialogBox( void* parent_window, WebRtc_UWord32 positionX, WebRtc_UWord32 positionY) { + CriticalSectionScoped cs(device_info_cs_.get()); + if (capture_device_info_ == NULL) + capture_device_info_ = VideoCaptureFactory::CreateDeviceInfo( + ViEModuleId(engine_id_)); assert(capture_device_info_); return capture_device_info_->DisplayCaptureSettingsDialogBox( device_unique_idUTF8, dialog_titleUTF8, parent_window, positionX, @@ -191,6 +215,11 @@ int ViEInputManager::CreateCaptureDevice( // Make sure the device name is valid. bool found_device = false; + CriticalSectionScoped cs_devinfo(device_info_cs_.get()); + if (capture_device_info_ == NULL) + capture_device_info_ = VideoCaptureFactory::CreateDeviceInfo( + ViEModuleId(engine_id_)); + assert(capture_device_info_); for (WebRtc_UWord32 device_index = 0; device_index < capture_device_info_->NumberOfDevices(); ++device_index) { if (device_unique_idUTF8Length > kVideoCaptureUniqueNameLength) { |