Index: content/renderer/media/media_stream_video_capturer_source.cc |
diff --git a/content/renderer/media/media_stream_video_capturer_source.cc b/content/renderer/media/media_stream_video_capturer_source.cc |
index e03d440906d21fc26f969a89bcbbbaadcb1e9d73..b414f7a6eeb7cf9dd736a09cb54b99a8e61bed78 100644 |
--- a/content/renderer/media/media_stream_video_capturer_source.cc |
+++ b/content/renderer/media/media_stream_video_capturer_source.cc |
@@ -105,6 +105,7 @@ void VideoCapturerDelegate::GetCurrentSupportedFormats( |
void VideoCapturerDelegate::StartCapture( |
const media::VideoCaptureParams& params, |
const VideoCaptureDeliverFrameCB& new_frame_callback, |
+ scoped_refptr<base::SingleThreadTaskRunner> frame_callback_task_runner, |
const RunningCallback& running_callback) { |
DCHECK(params.requested_format.IsValid()); |
DCHECK(thread_checker_.CalledOnValidThread()); |
@@ -117,6 +118,13 @@ void VideoCapturerDelegate::StartCapture( |
RenderThreadImpl::current()->video_capture_impl_manager(); |
if (!manager) |
return; |
+ if (frame_callback_task_runner != |
+ RenderThreadImpl::current()->GetIOMessageLoopProxy()) { |
+ DCHECK(false) << "Only IO thread supported right now."; |
+ running_callback.Run(false); |
+ return; |
+ } |
+ |
stop_capture_cb_ = |
manager->StartCapture( |
session_id_, |
@@ -143,12 +151,11 @@ void VideoCapturerDelegate::OnStateUpdateOnRenderThread( |
DCHECK(thread_checker_.CalledOnValidThread()); |
DVLOG(3) << "OnStateUpdateOnRenderThread state = " << state; |
if (state == VIDEO_CAPTURE_STATE_STARTED && !running_callback_.is_null()) { |
- running_callback_.Run(MEDIA_DEVICE_OK); |
+ running_callback_.Run(true); |
return; |
} |
if (state > VIDEO_CAPTURE_STATE_STARTED && !running_callback_.is_null()) { |
- base::ResetAndReturn(&running_callback_).Run( |
- MEDIA_DEVICE_TRACK_START_FAILURE); |
+ base::ResetAndReturn(&running_callback_).Run(false); |
} |
} |
@@ -211,14 +218,17 @@ void VideoCapturerDelegate::OnDeviceSupportedFormatsEnumerated( |
} |
MediaStreamVideoCapturerSource::MediaStreamVideoCapturerSource( |
- const StreamDeviceInfo& device_info, |
const SourceStoppedCallback& stop_callback, |
- scoped_ptr<VideoCapturerDelegate> delegate) |
+ scoped_ptr<media::VideoCapturerSource> delegate) |
: delegate_(delegate.Pass()) { |
- SetDeviceInfo(device_info); |
SetStopCallback(stop_callback); |
} |
+void MediaStreamVideoCapturerSource::SetDeviceInfo( |
+ const StreamDeviceInfo& device_info) { |
+ MediaStreamVideoSource::SetDeviceInfo(device_info); |
+} |
+ |
MediaStreamVideoCapturerSource::~MediaStreamVideoCapturerSource() { |
} |
@@ -247,10 +257,17 @@ void MediaStreamVideoCapturerSource::StartSourceImpl( |
delegate_->StartCapture( |
new_params, |
frame_callback, |
- base::Bind(&MediaStreamVideoCapturerSource::OnStartDone, |
+ RenderThreadImpl::current() ? |
+ RenderThreadImpl::current()->GetIOMessageLoopProxy() : |
+ nullptr, |
+ base::Bind(&MediaStreamVideoCapturerSource::OnStarted, |
base::Unretained(this))); |
} |
+void MediaStreamVideoCapturerSource::OnStarted(bool result) { |
+ OnStartDone(result ? MEDIA_DEVICE_OK : MEDIA_DEVICE_TRACK_START_FAILURE); |
+} |
+ |
void MediaStreamVideoCapturerSource::StopSourceImpl() { |
delegate_->StopCapture(); |
} |