Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Unified Diff: content/browser/renderer_host/media/video_capture_manager.cc

Issue 2108293002: VideoCaptureManager: remove ScopedVector and other smaller cleanups (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: emircan@s nits Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/renderer_host/media/video_capture_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/media/video_capture_manager.cc
diff --git a/content/browser/renderer_host/media/video_capture_manager.cc b/content/browser/renderer_host/media/video_capture_manager.cc
index e13e1573ccda9a1f71fc329db1415a1dfc71bb65..7ddfe507b9b924a1bd2920fb311539d87a6d2af3 100644
--- a/content/browser/renderer_host/media/video_capture_manager.cc
+++ b/content/browser/renderer_host/media/video_capture_manager.cc
@@ -330,8 +330,8 @@ void VideoCaptureManager::Close(int capture_session_id) {
return;
}
- DeviceEntry* const existing_device = GetDeviceEntryForMediaStreamDevice(
- session_it->second);
+ DeviceEntry* const existing_device =
+ GetDeviceEntryByTypeAndId(session_it->second.type, session_it->second.id);
if (existing_device) {
// Remove any client that is still using the session. This is safe to call
// even if there are no clients using the session.
@@ -363,7 +363,12 @@ void VideoCaptureManager::QueueStartDevice(
void VideoCaptureManager::DoStopDevice(DeviceEntry* entry) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- DCHECK(std::find(devices_.begin(), devices_.end(), entry) != devices_.end());
+ // TODO(mcasas): use a helper function https://crbug.com/624854.
+ DCHECK(
+ std::find_if(devices_.begin(), devices_.end(),
+ [entry](const std::unique_ptr<DeviceEntry>& device_entry) {
+ return device_entry.get() == entry;
+ }) != devices_.end());
// Find the matching start request.
for (DeviceStartQueue::reverse_iterator request =
@@ -403,13 +408,8 @@ void VideoCaptureManager::HandleQueuedStartRequest() {
return;
const int serial_id = request->serial_id();
- DeviceEntries::iterator entry_it = std::find_if(
- devices_.begin(), devices_.end(),
- [serial_id] (const DeviceEntry* e) {
- return e->serial_id == serial_id;
- });
- DCHECK(entry_it != devices_.end());
- DeviceEntry* entry = (*entry_it);
+ DeviceEntry* const entry = GetDeviceEntryBySerialId(serial_id);
+ DCHECK(entry);
#if defined(OS_MACOSX)
if (NeedToInitializeCaptureDeviceApi(entry->stream_type)) {
@@ -430,8 +430,7 @@ void VideoCaptureManager::HandleQueuedStartRequest() {
// We look up the device id from the renderer in our local enumeration
// since the renderer does not have all the information that might be
// held in the browser-side VideoCaptureDevice::Name structure.
- const media::VideoCaptureDeviceInfo* found =
- FindDeviceInfoById(entry->id, devices_info_cache_);
+ const media::VideoCaptureDeviceInfo* found = GetDeviceInfoById(entry->id);
if (found) {
entry->video_capture_controller()->DoLogOnIOThread(base::StringPrintf(
"Starting device: id: %s, name: %s, api: %s",
@@ -506,13 +505,8 @@ void VideoCaptureManager::OnDeviceStarted(
device_ptr->StopAndDeAllocate();
}
} else {
- DeviceEntries::iterator entry_it = std::find_if(
- devices_.begin(), devices_.end(),
- [serial_id] (const DeviceEntry* e) {
- return e->serial_id == serial_id;
- });
- DCHECK(entry_it != devices_.end());
- DeviceEntry* entry = *entry_it;
+ DeviceEntry* const entry = GetDeviceEntryBySerialId(serial_id);
+ DCHECK(entry);
DCHECK(!entry->video_capture_device());
entry->SetVideoCaptureDevice(std::move(device));
@@ -649,7 +643,7 @@ void VideoCaptureManager::StopCaptureForClient(
DCHECK(controller);
DCHECK(client_handler);
- DeviceEntry* entry = GetDeviceEntryForController(controller);
+ DeviceEntry* entry = GetDeviceEntryByController(controller);
if (!entry) {
NOTREACHED();
return;
@@ -693,11 +687,9 @@ void VideoCaptureManager::PauseCaptureForClient(
DCHECK_CURRENTLY_ON(BrowserThread::IO);
DCHECK(controller);
DCHECK(client_handler);
- DeviceEntry* entry = GetDeviceEntryForController(controller);
- if (!entry) {
- NOTREACHED();
- DVLOG(1) << "Got Null entry while pausing capture";
- }
+ DeviceEntry* entry = GetDeviceEntryByController(controller);
+ if (!entry)
+ NOTREACHED() << "Got Null entry while pausing capture";
// Do not pause Content Video Capture devices, e.g. Tab or Screen capture.
if (entry->stream_type != MEDIA_DEVICE_VIDEO_CAPTURE)
@@ -716,11 +708,9 @@ void VideoCaptureManager::ResumeCaptureForClient(
DCHECK(controller);
DCHECK(client_handler);
- DeviceEntry* entry = GetDeviceEntryForController(controller);
- if (!entry) {
- NOTREACHED();
- DVLOG(1) << "Got Null entry while resuming capture";
- }
+ DeviceEntry* entry = GetDeviceEntryByController(controller);
+ if (!entry)
+ NOTREACHED() << "Got Null entry while resuming capture";
// Do not resume Content Video Capture devices, e.g. Tab or Screen capture.
if (entry->stream_type != MEDIA_DEVICE_VIDEO_CAPTURE)
@@ -733,7 +723,7 @@ void VideoCaptureManager::RequestRefreshFrameForClient(
VideoCaptureController* controller) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- if (DeviceEntry* entry = GetDeviceEntryForController(controller)) {
+ if (DeviceEntry* entry = GetDeviceEntryByController(controller)) {
if (media::VideoCaptureDevice* device = entry->video_capture_device()) {
device_task_runner_->PostTask(
FROM_HERE,
@@ -760,7 +750,7 @@ bool VideoCaptureManager::GetDeviceSupportedFormats(
// Return all available formats of the device, regardless its started state.
media::VideoCaptureDeviceInfo* existing_device =
- FindDeviceInfoById(it->second.id, devices_info_cache_);
+ GetDeviceInfoById(it->second.id);
if (existing_device)
*supported_formats = existing_device->supported_formats;
return true;
@@ -779,7 +769,7 @@ bool VideoCaptureManager::GetDeviceFormatsInUse(
// Return the currently in-use format(s) of the device, if it's started.
DeviceEntry* device_in_use =
- GetDeviceEntryForMediaStreamDevice(it->second);
+ GetDeviceEntryByTypeAndId(it->second.type, it->second.id);
if (device_in_use) {
// Currently only one format-in-use is supported at the VCC level.
formats_in_use->push_back(
@@ -801,12 +791,11 @@ void VideoCaptureManager::SetDesktopCaptureWindowId(
void VideoCaptureManager::MaybePostDesktopCaptureWindowId(
media::VideoCaptureSessionId session_id) {
SessionMap::iterator session_it = sessions_.find(session_id);
- if (session_it == sessions_.end()) {
+ if (session_it == sessions_.end())
return;
- }
DeviceEntry* const existing_device =
- GetDeviceEntryForMediaStreamDevice(session_it->second);
+ GetDeviceEntryByTypeAndId(session_it->second.type, session_it->second.id);
if (!existing_device) {
DVLOG(2) << "Failed to find an existing screen capture device.";
return;
@@ -846,7 +835,7 @@ void VideoCaptureManager::GetPhotoCapabilities(
media::ScopedResultCallback<
VideoCaptureDevice::GetPhotoCapabilitiesCallback> callback) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- VideoCaptureDevice* device = GetVideoCaptureDeviceFromSessionId(session_id);
+ VideoCaptureDevice* device = GetVideoCaptureDeviceBySessionId(session_id);
if (!device)
return;
// Unretained(device) is safe to use here because |device| would be null if it
@@ -862,7 +851,7 @@ void VideoCaptureManager::TakePhoto(
media::ScopedResultCallback<VideoCaptureDevice::TakePhotoCallback>
callback) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- VideoCaptureDevice* device = GetVideoCaptureDeviceFromSessionId(session_id);
+ VideoCaptureDevice* device = GetVideoCaptureDeviceBySessionId(session_id);
if (!device)
return;
// Unretained(device) is safe to use here because |device| would be null if it
@@ -968,61 +957,85 @@ void VideoCaptureManager::ConsolidateDevicesInfoOnDeviceThread(
on_devices_enumerated_callback.Run(new_devices_info_cache);
}
-VideoCaptureManager::DeviceEntry*
-VideoCaptureManager::GetDeviceEntryForMediaStreamDevice(
- const MediaStreamDevice& device_info) {
+void VideoCaptureManager::DestroyDeviceEntryIfNoClients(DeviceEntry* entry) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ // Removal of the last client stops the device.
+ if (!entry->video_capture_controller()->HasActiveClient() &&
+ !entry->video_capture_controller()->HasPausedClient()) {
+ DVLOG(1) << "VideoCaptureManager stopping device (type = "
+ << entry->stream_type << ", id = " << entry->id << ")";
- for (DeviceEntry* device : devices_) {
- if (device_info.type == device->stream_type && device_info.id == device->id)
- return device;
+ // The DeviceEntry is removed from |devices_| immediately. The controller is
+ // deleted immediately, and the device is freed asynchronously. After this
+ // point, subsequent requests to open this same device ID will create a new
+ // DeviceEntry, VideoCaptureController, and VideoCaptureDevice.
+ DoStopDevice(entry);
+ // TODO(mcasas): use a helper function https://crbug.com/624854.
+ DeviceEntries::iterator device_it =
+ std::find_if(devices_.begin(), devices_.end(),
+ [entry](const std::unique_ptr<DeviceEntry>& device_entry) {
+ return device_entry.get() == entry;
+ });
+ devices_.erase(device_it);
}
- return nullptr;
}
media::VideoCaptureDevice*
-VideoCaptureManager::GetVideoCaptureDeviceFromSessionId(int session_id) {
+VideoCaptureManager::GetVideoCaptureDeviceBySessionId(int session_id) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
SessionMap::const_iterator session_it = sessions_.find(session_id);
if (session_it == sessions_.end())
return nullptr;
DeviceEntry* const device_info =
- GetDeviceEntryForMediaStreamDevice(session_it->second);
- if (!device_info)
- return nullptr;
- return device_info->video_capture_device();
+ GetDeviceEntryByTypeAndId(session_it->second.type, session_it->second.id);
+ return device_info ? device_info->video_capture_device() : nullptr;
}
VideoCaptureManager::DeviceEntry*
-VideoCaptureManager::GetDeviceEntryForController(
+VideoCaptureManager::GetDeviceEntryByTypeAndId(
+ MediaStreamType type,
+ const std::string& device_id) const {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ for (const std::unique_ptr<DeviceEntry>& device : devices_) {
+ if (type == device->stream_type && device_id == device->id)
+ return device.get();
+ }
+ return nullptr;
+}
+
+VideoCaptureManager::DeviceEntry*
+VideoCaptureManager::GetDeviceEntryByController(
const VideoCaptureController* controller) const {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
// Look up |controller| in |devices_|.
- for (DeviceEntry* device : devices_) {
+ for (const std::unique_ptr<DeviceEntry>& device : devices_) {
if (device->video_capture_controller() == controller)
- return device;
+ return device.get();
}
return nullptr;
}
-void VideoCaptureManager::DestroyDeviceEntryIfNoClients(DeviceEntry* entry) {
+VideoCaptureManager::DeviceEntry* VideoCaptureManager::GetDeviceEntryBySerialId(
+ int serial_id) const {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- // Removal of the last client stops the device.
- if (!entry->video_capture_controller()->HasActiveClient() &&
- !entry->video_capture_controller()->HasPausedClient()) {
- DVLOG(1) << "VideoCaptureManager stopping device (type = "
- << entry->stream_type << ", id = " << entry->id << ")";
- // The DeviceEntry is removed from |devices_| immediately. The controller is
- // deleted immediately, and the device is freed asynchronously. After this
- // point, subsequent requests to open this same device ID will create a new
- // DeviceEntry, VideoCaptureController, and VideoCaptureDevice.
- DoStopDevice(entry);
- DeviceEntries::iterator device_it = std::find(devices_.begin(),
- devices_.end(),
- entry);
- devices_.erase(device_it);
+ for (const std::unique_ptr<DeviceEntry>& device : devices_) {
+ if (device->serial_id == serial_id)
+ return device.get();
}
+ return nullptr;
+}
+
+media::VideoCaptureDeviceInfo* VideoCaptureManager::GetDeviceInfoById(
+ const std::string& id) {
+ for (auto& it : devices_info_cache_) {
+ if (it.name.id() == id)
+ return &it;
+ }
+ return nullptr;
}
VideoCaptureManager::DeviceEntry* VideoCaptureManager::GetOrCreateDeviceEntry(
@@ -1038,7 +1051,7 @@ VideoCaptureManager::DeviceEntry* VideoCaptureManager::GetOrCreateDeviceEntry(
// Check if another session has already opened this device. If so, just
// use that opened device.
DeviceEntry* const existing_device =
- GetDeviceEntryForMediaStreamDevice(device_info);
+ GetDeviceEntryByTypeAndId(device_info.type, device_info.id);
if (existing_device) {
DCHECK_EQ(device_info.type, existing_device->stream_type);
return existing_device;
@@ -1051,20 +1064,10 @@ VideoCaptureManager::DeviceEntry* VideoCaptureManager::GetOrCreateDeviceEntry(
DeviceEntry* new_device =
new DeviceEntry(device_info.type, device_info.id,
std::move(video_capture_controller), params);
- devices_.push_back(new_device);
+ devices_.emplace_back(new_device);
return new_device;
}
-media::VideoCaptureDeviceInfo* VideoCaptureManager::FindDeviceInfoById(
- const std::string& id,
- media::VideoCaptureDeviceInfos& device_vector) {
- for (auto& it : device_vector) {
- if (it.name.id() == id)
- return &(it);
- }
- return nullptr;
-}
-
void VideoCaptureManager::SetDesktopCaptureWindowIdOnDeviceThread(
media::VideoCaptureDevice* device,
gfx::NativeViewId window_id) {
@@ -1128,7 +1131,7 @@ void VideoCaptureManager::ReleaseDevices() {
if (entry->stream_type != MEDIA_DEVICE_VIDEO_CAPTURE)
continue;
- DoStopDevice(entry);
+ DoStopDevice(entry.get());
}
}
@@ -1154,7 +1157,7 @@ void VideoCaptureManager::ResumeDevices() {
if (!device_in_queue) {
// Session ID is only valid for Screen capture. So we can fake it to
// resume video capture devices here.
- QueueStartDevice(kFakeSessionId, entry, entry->parameters);
+ QueueStartDevice(kFakeSessionId, entry.get(), entry->parameters);
}
}
}
« no previous file with comments | « content/browser/renderer_host/media/video_capture_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698