Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/media/media_stream_video_capturer_source.h" | 5 #include "content/renderer/media/media_stream_video_capturer_source.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback_helpers.h" | 8 #include "base/callback_helpers.h" |
| 9 #include "base/location.h" | 9 #include "base/location.h" |
| 10 #include "content/renderer/media/video_capture_impl_manager.h" | 10 #include "content/renderer/media/video_capture_impl_manager.h" |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 98 session_id_, | 98 session_id_, |
| 99 media::BindToCurrentLoop( | 99 media::BindToCurrentLoop( |
| 100 base::Bind( | 100 base::Bind( |
| 101 &VideoCapturerDelegate::OnDeviceFormatsInUseReceived, | 101 &VideoCapturerDelegate::OnDeviceFormatsInUseReceived, |
| 102 weak_factory_.GetWeakPtr()))); | 102 weak_factory_.GetWeakPtr()))); |
| 103 } | 103 } |
| 104 | 104 |
| 105 void VideoCapturerDelegate::StartCapture( | 105 void VideoCapturerDelegate::StartCapture( |
| 106 const media::VideoCaptureParams& params, | 106 const media::VideoCaptureParams& params, |
| 107 const VideoCaptureDeliverFrameCB& new_frame_callback, | 107 const VideoCaptureDeliverFrameCB& new_frame_callback, |
| 108 scoped_refptr<base::SingleThreadTaskRunner> frame_callback_task_runner, | |
| 108 const RunningCallback& running_callback) { | 109 const RunningCallback& running_callback) { |
| 109 DCHECK(params.requested_format.IsValid()); | 110 DCHECK(params.requested_format.IsValid()); |
| 110 DCHECK(thread_checker_.CalledOnValidThread()); | 111 DCHECK(thread_checker_.CalledOnValidThread()); |
| 111 running_callback_ = running_callback; | 112 running_callback_ = running_callback; |
| 112 | 113 |
| 114 | |
| 113 // NULL in unit test. | 115 // NULL in unit test. |
| 114 if (!RenderThreadImpl::current()) | 116 if (!RenderThreadImpl::current()) |
| 115 return; | 117 return; |
| 116 VideoCaptureImplManager* manager = | 118 VideoCaptureImplManager* manager = |
| 117 RenderThreadImpl::current()->video_capture_impl_manager(); | 119 RenderThreadImpl::current()->video_capture_impl_manager(); |
| 118 if (!manager) | 120 if (!manager) |
| 119 return; | 121 return; |
| 122 if (frame_callback_task_runner != | |
| 123 RenderThreadImpl::current()->GetIOMessageLoopProxy()) { | |
| 124 DCHECK(false) << "Only IO thread supported right now."; | |
| 125 running_callback.Run(false); | |
| 126 return; | |
| 127 } | |
| 128 | |
| 120 stop_capture_cb_ = | 129 stop_capture_cb_ = |
| 121 manager->StartCapture( | 130 manager->StartCapture( |
| 122 session_id_, | 131 session_id_, |
| 123 params, | 132 params, |
| 124 media::BindToCurrentLoop(base::Bind( | 133 media::BindToCurrentLoop(base::Bind( |
| 125 &VideoCapturerDelegate::OnStateUpdateOnRenderThread, | 134 &VideoCapturerDelegate::OnStateUpdateOnRenderThread, |
| 126 weak_factory_.GetWeakPtr())), | 135 weak_factory_.GetWeakPtr())), |
| 127 new_frame_callback); | 136 new_frame_callback); |
| 128 } | 137 } |
| 129 | 138 |
| 130 void VideoCapturerDelegate::StopCapture() { | 139 void VideoCapturerDelegate::StopCapture() { |
| 131 // Immediately make sure we don't provide more frames. | 140 // Immediately make sure we don't provide more frames. |
| 132 DVLOG(3) << "VideoCapturerDelegate::StopCapture()"; | 141 DVLOG(3) << "VideoCapturerDelegate::StopCapture()"; |
| 133 DCHECK(thread_checker_.CalledOnValidThread()); | 142 DCHECK(thread_checker_.CalledOnValidThread()); |
| 134 if (!stop_capture_cb_.is_null()) { | 143 if (!stop_capture_cb_.is_null()) { |
| 135 base::ResetAndReturn(&stop_capture_cb_).Run(); | 144 base::ResetAndReturn(&stop_capture_cb_).Run(); |
| 136 } | 145 } |
| 137 running_callback_.Reset(); | 146 running_callback_.Reset(); |
| 138 source_formats_callback_.Reset(); | 147 source_formats_callback_.Reset(); |
| 139 } | 148 } |
| 140 | 149 |
| 141 void VideoCapturerDelegate::OnStateUpdateOnRenderThread( | 150 void VideoCapturerDelegate::OnStateUpdateOnRenderThread( |
| 142 VideoCaptureState state) { | 151 VideoCaptureState state) { |
| 143 DCHECK(thread_checker_.CalledOnValidThread()); | 152 DCHECK(thread_checker_.CalledOnValidThread()); |
| 144 DVLOG(3) << "OnStateUpdateOnRenderThread state = " << state; | 153 DVLOG(3) << "OnStateUpdateOnRenderThread state = " << state; |
| 145 if (state == VIDEO_CAPTURE_STATE_STARTED && !running_callback_.is_null()) { | 154 if (state == VIDEO_CAPTURE_STATE_STARTED && !running_callback_.is_null()) { |
| 146 running_callback_.Run(MEDIA_DEVICE_OK); | 155 running_callback_.Run(true); |
| 147 return; | 156 return; |
| 148 } | 157 } |
| 149 if (state > VIDEO_CAPTURE_STATE_STARTED && !running_callback_.is_null()) { | 158 if (state > VIDEO_CAPTURE_STATE_STARTED && !running_callback_.is_null()) { |
| 150 base::ResetAndReturn(&running_callback_).Run( | 159 base::ResetAndReturn(&running_callback_).Run(false); |
| 151 MEDIA_DEVICE_TRACK_START_FAILURE); | |
| 152 } | 160 } |
| 153 } | 161 } |
| 154 | 162 |
| 155 void VideoCapturerDelegate::OnDeviceFormatsInUseReceived( | 163 void VideoCapturerDelegate::OnDeviceFormatsInUseReceived( |
| 156 const media::VideoCaptureFormats& formats_in_use) { | 164 const media::VideoCaptureFormats& formats_in_use) { |
| 157 DVLOG(3) << "OnDeviceFormatsInUseReceived: " << formats_in_use.size(); | 165 DVLOG(3) << "OnDeviceFormatsInUseReceived: " << formats_in_use.size(); |
| 158 DCHECK(thread_checker_.CalledOnValidThread()); | 166 DCHECK(thread_checker_.CalledOnValidThread()); |
| 159 // StopCapture() might have destroyed |source_formats_callback_| before | 167 // StopCapture() might have destroyed |source_formats_callback_| before |
| 160 // arriving here. | 168 // arriving here. |
| 161 if (source_formats_callback_.is_null()) | 169 if (source_formats_callback_.is_null()) |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 206 kVideoFrameRates[j], media::PIXEL_FORMAT_I420)); | 214 kVideoFrameRates[j], media::PIXEL_FORMAT_I420)); |
| 207 } | 215 } |
| 208 } | 216 } |
| 209 base::ResetAndReturn(&source_formats_callback_).Run(default_formats); | 217 base::ResetAndReturn(&source_formats_callback_).Run(default_formats); |
| 210 } | 218 } |
| 211 } | 219 } |
| 212 | 220 |
| 213 MediaStreamVideoCapturerSource::MediaStreamVideoCapturerSource( | 221 MediaStreamVideoCapturerSource::MediaStreamVideoCapturerSource( |
| 214 const StreamDeviceInfo& device_info, | 222 const StreamDeviceInfo& device_info, |
| 215 const SourceStoppedCallback& stop_callback, | 223 const SourceStoppedCallback& stop_callback, |
| 216 scoped_ptr<VideoCapturerDelegate> delegate) | 224 scoped_refptr<media::VideoCapturerSource> delegate) |
| 217 : delegate_(delegate.Pass()) { | 225 : delegate_(delegate) { |
| 218 SetDeviceInfo(device_info); | 226 SetDeviceInfo(device_info); |
| 219 SetStopCallback(stop_callback); | 227 SetStopCallback(stop_callback); |
| 220 } | 228 } |
| 221 | 229 |
| 222 MediaStreamVideoCapturerSource::~MediaStreamVideoCapturerSource() { | 230 MediaStreamVideoCapturerSource::~MediaStreamVideoCapturerSource() { |
| 223 } | 231 } |
| 224 | 232 |
| 225 void MediaStreamVideoCapturerSource::GetCurrentSupportedFormats( | 233 void MediaStreamVideoCapturerSource::GetCurrentSupportedFormats( |
| 226 int max_requested_width, | 234 int max_requested_width, |
| 227 int max_requested_height, | 235 int max_requested_height, |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 240 media::VideoCaptureParams new_params; | 248 media::VideoCaptureParams new_params; |
| 241 new_params.requested_format = format; | 249 new_params.requested_format = format; |
| 242 if (device_info().device.type == MEDIA_TAB_VIDEO_CAPTURE || | 250 if (device_info().device.type == MEDIA_TAB_VIDEO_CAPTURE || |
| 243 device_info().device.type == MEDIA_DESKTOP_VIDEO_CAPTURE) { | 251 device_info().device.type == MEDIA_DESKTOP_VIDEO_CAPTURE) { |
| 244 new_params.resolution_change_policy = | 252 new_params.resolution_change_policy = |
| 245 media::RESOLUTION_POLICY_DYNAMIC_WITHIN_LIMIT; | 253 media::RESOLUTION_POLICY_DYNAMIC_WITHIN_LIMIT; |
| 246 } | 254 } |
| 247 delegate_->StartCapture( | 255 delegate_->StartCapture( |
| 248 new_params, | 256 new_params, |
| 249 frame_callback, | 257 frame_callback, |
| 250 base::Bind(&MediaStreamVideoCapturerSource::OnStartDone, | 258 RenderThreadImpl::current() ? NULL : |
| 259 RenderThreadImpl::current()->GetIOMessageLoopProxy(), | |
|
perkj_chrome
2015/02/09 14:50:27
indentation
| |
| 260 base::Bind(&MediaStreamVideoCapturerSource::OnStarted, | |
| 251 base::Unretained(this))); | 261 base::Unretained(this))); |
| 252 } | 262 } |
| 253 | 263 |
| 264 void MediaStreamVideoCapturerSource::OnStarted(bool result) { | |
| 265 OnStartDone(result ? MEDIA_DEVICE_OK : MEDIA_DEVICE_TRACK_START_FAILURE); | |
| 266 } | |
| 267 | |
| 254 void MediaStreamVideoCapturerSource::StopSourceImpl() { | 268 void MediaStreamVideoCapturerSource::StopSourceImpl() { |
| 255 delegate_->StopCapture(); | 269 delegate_->StopCapture(); |
| 256 } | 270 } |
| 257 | 271 |
| 258 } // namespace content | 272 } // namespace content |
| OLD | NEW |