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

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

Issue 8480028: support video device enumeration from renderer process. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 1 month 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
Index: content/browser/renderer_host/media/media_stream_dispatcher_host.cc
===================================================================
--- content/browser/renderer_host/media/media_stream_dispatcher_host.cc (revision 111389)
+++ content/browser/renderer_host/media/media_stream_dispatcher_host.cc (working copy)
@@ -43,6 +43,10 @@
IPC_MESSAGE_HANDLER(MediaStreamHostMsg_GenerateStream, OnGenerateStream)
IPC_MESSAGE_HANDLER(MediaStreamHostMsg_StopGeneratedStream,
OnStopGeneratedStream)
+ IPC_MESSAGE_HANDLER(MediaStreamHostMsg_EnumerateVideoDevices,
+ OnEnumerateVideoDevices)
+ IPC_MESSAGE_HANDLER(MediaStreamHostMsg_OpenVideoDevice,
+ OnOpenVideoDevice)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP_EX()
return handled;
@@ -101,6 +105,40 @@
streams_.erase(it);
}
+void MediaStreamDispatcherHost::OnEnumerateVideoDevices(
+ int render_view_id,
+ int page_request_id,
+ const std::string& security_origin) {
+ DVLOG(1) << "MediaStreamDispatcherHost::OnEnumerateVideoDevices("
+ << render_view_id << ", "
+ << page_request_id << ", "
+ << security_origin << ")";
+
+ std::string label;
+ manager()->EnumerateVideoDevices(this, render_process_id_, render_view_id,
+ security_origin, &label);
+ DCHECK(!label.empty());
+ streams_[label] = StreamRequest(render_view_id, page_request_id);
+}
+
+void MediaStreamDispatcherHost::OnOpenVideoDevice(
+ int render_view_id,
+ int page_request_id,
+ const std::string& device_id,
+ const std::string& security_origin) {
+ DVLOG(1) << "MediaStreamDispatcherHost::OnOpenVideoDevice("
+ << render_view_id << ", "
+ << page_request_id << ", device_id: "
+ << device_id.c_str() << ", "
+ << security_origin << ")";
+
+ std::string label;
+ manager()->OpenVideoDevice(this, render_process_id_, render_view_id,
+ device_id, security_origin, &label);
+ DCHECK(!label.empty());
+ streams_[label] = StreamRequest(render_view_id, page_request_id);
+}
+
void MediaStreamDispatcherHost::StreamGenerated(
const std::string& label,
const StreamDeviceInfoArray& audio_devices,
@@ -161,4 +199,65 @@
index));
}
+void MediaStreamDispatcherHost::VideoDevicesEnumerated(
+ const std::string& label,
+ const StreamDeviceInfoArray& devices) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DVLOG(1) << "MediaStreamDispatcherHost::VideoDevicesEnumerated("
+ << ", {label = " << label << "})";
+
+ StreamMap::iterator it = streams_.find(label);
+ DCHECK(it != streams_.end());
+ StreamRequest request = it->second;
+ streams_.erase(it);
+
+ Send(new MediaStreamMsg_VideoDevicesEnumerated(
+ request.render_view_id, request.page_request_id, devices));
+}
+
+void MediaStreamDispatcherHost::VideoDevicesEnumerationFailed(
+ const std::string& label) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DVLOG(1) << "MediaStreamDispatcherHost::VideoDevicesEnumerationFailed("
+ << ", {label = " << label << "})";
+
+ StreamMap::iterator it = streams_.find(label);
+ DCHECK(it != streams_.end());
+ StreamRequest request = it->second;
+ streams_.erase(it);
+
+ Send(new MediaStreamMsg_VideoDevicesEnumerationFailed(
+ request.render_view_id, request.page_request_id));
+}
+
+void MediaStreamDispatcherHost::VideoDeviceOpened(
+ const std::string& label,
+ const StreamDeviceInfo& video_device) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DVLOG(1) << "MediaStreamDispatcherHost::VideoDeviceOpened("
+ << ", {label = " << label << "})";
+
+ StreamMap::iterator it = streams_.find(label);
+ DCHECK(it != streams_.end());
+ StreamRequest request = it->second;
+
+ Send(new MediaStreamMsg_VideoDeviceOpened(
+ request.render_view_id, request.page_request_id, label, video_device));
+}
+
+void MediaStreamDispatcherHost::VideoDeviceOpenFailed(
+ const std::string& label) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ DVLOG(1) << "MediaStreamDispatcherHost::VideoDeviceOpenFailed("
+ << ", {label = " << label << "})";
+
+ StreamMap::iterator it = streams_.find(label);
+ DCHECK(it != streams_.end());
+ StreamRequest request = it->second;
+ streams_.erase(it);
+
+ Send(new MediaStreamMsg_VideoDeviceOpenFailed(request.render_view_id,
+ request.page_request_id));
+}
+
} // namespace media_stream

Powered by Google App Engine
This is Rietveld 408576698