summaryrefslogtreecommitdiff
path: root/video_engine/vie_input_manager.cc
diff options
context:
space:
mode:
authorpbos@webrtc.org <pbos@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2013-03-08 13:12:29 +0000
committerpbos@webrtc.org <pbos@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2013-03-08 13:12:29 +0000
commit8623e9b81c9bcac0de3f1bb590a270101e72bec5 (patch)
tree9eb8ae045e9e4fc1c18df95ba8f3e85c5769466b /video_engine/vie_input_manager.cc
parent7b6cbc9757efa758349061cdbbaa8e39a831cb6c (diff)
downloadwebrtc-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.cc33
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) {