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 52741fdd494120d7d69ed0314098fbdf19648810..4cf279b0503521d6ebfcb9da561b04fe28a513e0 100644 |
--- a/content/browser/renderer_host/media/video_capture_manager.cc |
+++ b/content/browser/renderer_host/media/video_capture_manager.cc |
@@ -115,7 +115,7 @@ void VideoCaptureManager::Start( |
void VideoCaptureManager::Stop( |
const media::VideoCaptureSessionId& capture_session_id, |
- base::Closure stopped_cb) { |
+ const base::Closure& stopped_cb) { |
DVLOG(1) << "VideoCaptureManager::Stop, id " << capture_session_id; |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
device_loop_->PostTask( |
@@ -124,6 +124,18 @@ void VideoCaptureManager::Stop( |
stopped_cb)); |
} |
+void VideoCaptureManager::TryConfigureEncodedBitstream( |
+ const media::VideoCaptureSessionId& session_id, |
+ const media::RuntimeVideoEncodingParameters& params) { |
+ device_loop_->PostTask( |
+ FROM_HERE, |
+ base::Bind( |
+ &VideoCaptureManager::OnTryConfigureEncodedBitstream, |
+ this, |
+ session_id, |
+ params)); |
+} |
+ |
void VideoCaptureManager::UseFakeDevice() { |
use_fake_device_ = true; |
} |
@@ -168,8 +180,10 @@ void VideoCaptureManager::OnOpen(int capture_session_id, |
vc_device_name.unique_id = device.device.id; |
if (use_fake_device_) { |
+ const bool encoded_capture = |
+ (device.device.type == MEDIA_SCREEN_ENCODED_VIDEO_CAPTURE); |
video_capture_device = |
- media::FakeVideoCaptureDevice::Create(vc_device_name); |
+ media::FakeVideoCaptureDevice::Create(vc_device_name, encoded_capture); |
} else { |
switch (device.device.type) { |
case MEDIA_DEVICE_VIDEO_CAPTURE: { |
@@ -277,7 +291,7 @@ void VideoCaptureManager::OnStart( |
void VideoCaptureManager::OnStop( |
const media::VideoCaptureSessionId capture_session_id, |
- base::Closure stopped_cb) { |
+ const base::Closure& stopped_cb) { |
DCHECK(IsOnDeviceThread()); |
DVLOG(1) << "VideoCaptureManager::OnStop, id " << capture_session_id; |
@@ -307,6 +321,17 @@ void VideoCaptureManager::OnStop( |
} |
} |
+void VideoCaptureManager::OnTryConfigureEncodedBitstream( |
+ const media::VideoCaptureSessionId& session_id, |
+ const media::RuntimeVideoEncodingParameters& params) { |
+ DCHECK(IsOnDeviceThread()); |
+ media::VideoCaptureDevice* video_capture_device = |
+ GetDeviceInternal(session_id); |
+ if (!video_capture_device) |
+ return; |
+ video_capture_device->TryConfigureEncodedBitstream(params); |
+} |
+ |
void VideoCaptureManager::OnOpened(MediaStreamType stream_type, |
int capture_session_id) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
@@ -404,7 +429,7 @@ void VideoCaptureManager::GetAvailableDevices( |
if (!use_fake_device_) { |
media::VideoCaptureDevice::GetDeviceNames(device_names); |
} else { |
- media::FakeVideoCaptureDevice::GetDeviceNames(device_names); |
+ media::FakeVideoCaptureDevice::GetDeviceNames(device_names, false); |
} |
break; |
@@ -412,6 +437,10 @@ void VideoCaptureManager::GetAvailableDevices( |
device_names->clear(); |
break; |
+ case MEDIA_SCREEN_ENCODED_VIDEO_CAPTURE: |
+ device_names->clear(); |
+ break; |
+ |
default: |
NOTREACHED(); |
break; |
@@ -464,7 +493,7 @@ bool VideoCaptureManager::DeviceInUse( |
void VideoCaptureManager::AddController( |
const media::VideoCaptureParams& capture_params, |
VideoCaptureControllerEventHandler* handler, |
- base::Callback<void(VideoCaptureController*)> added_cb) { |
+ const base::Callback<void(VideoCaptureController*)>& added_cb) { |
DCHECK(handler); |
device_loop_->PostTask( |
FROM_HERE, |
@@ -475,7 +504,7 @@ void VideoCaptureManager::AddController( |
void VideoCaptureManager::DoAddControllerOnDeviceThread( |
const media::VideoCaptureParams capture_params, |
VideoCaptureControllerEventHandler* handler, |
- base::Callback<void(VideoCaptureController*)> added_cb) { |
+ const base::Callback<void(VideoCaptureController*)>& added_cb) { |
DCHECK(IsOnDeviceThread()); |
media::VideoCaptureDevice* video_capture_device = |
@@ -530,6 +559,31 @@ void VideoCaptureManager::DoRemoveControllerOnDeviceThread( |
} |
} |
+void VideoCaptureManager::RequestEncodingCapabilities( |
+ const media::VideoCaptureSessionId& session_id, |
+ const base::Callback<void( |
+ const media::VideoEncodingCapabilities&)>& caps_cb) { |
+ device_loop_->PostTask( |
+ FROM_HERE, |
+ base::Bind( |
+ &VideoCaptureManager::DoRequestEncodingCapabilitiesOnDeviceThread, |
+ this, |
+ session_id, |
+ caps_cb)); |
+} |
+ |
+void VideoCaptureManager::DoRequestEncodingCapabilitiesOnDeviceThread( |
+ const media::VideoCaptureSessionId& session_id, |
+ const base::Callback<void( |
+ const media::VideoEncodingCapabilities&)>& caps_cb) { |
+ DCHECK(IsOnDeviceThread()); |
+ media::VideoCaptureDevice* video_capture_device = |
+ GetDeviceInternal(session_id); |
+ if (!video_capture_device) |
+ return; |
+ caps_cb.Run(video_capture_device->GetEncodingCapabilities()); |
+} |
+ |
media::VideoCaptureDevice* VideoCaptureManager::GetDeviceInternal( |
int capture_session_id) { |
DCHECK(IsOnDeviceThread()); |