OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_track.h" | 5 #include "content/renderer/media/media_stream_video_track.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
11 #include "base/macros.h" | 11 #include "base/macros.h" |
| 12 #include "base/memory/ptr_util.h" |
12 #include "base/single_thread_task_runner.h" | 13 #include "base/single_thread_task_runner.h" |
13 #include "base/threading/thread_task_runner_handle.h" | 14 #include "base/threading/thread_task_runner_handle.h" |
14 #include "content/renderer/media/media_stream_constraints_util_video_device.h" | 15 #include "content/renderer/media/media_stream_constraints_util_video_device.h" |
| 16 #include "media/capture/video_capture_types.h" |
15 | 17 |
16 namespace content { | 18 namespace content { |
17 | 19 |
18 namespace { | 20 namespace { |
19 void ResetCallback(std::unique_ptr<VideoCaptureDeliverFrameCB> callback) { | 21 void ResetCallback(std::unique_ptr<VideoCaptureDeliverFrameCB> callback) { |
20 // |callback| will be deleted when this exits. | 22 // |callback| will be deleted when this exits. |
21 } | 23 } |
22 | 24 |
23 // Empty method used for keeping a reference to the original media::VideoFrame. | 25 // Empty method used for keeping a reference to the original media::VideoFrame. |
24 // The reference to |frame| is kept in the closure that calls this method. | 26 // The reference to |frame| is kept in the closure that calls this method. |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 | 196 |
195 return wrapped_black_frame; | 197 return wrapped_black_frame; |
196 } | 198 } |
197 | 199 |
198 // static | 200 // static |
199 blink::WebMediaStreamTrack MediaStreamVideoTrack::CreateVideoTrack( | 201 blink::WebMediaStreamTrack MediaStreamVideoTrack::CreateVideoTrack( |
200 MediaStreamVideoSource* source, | 202 MediaStreamVideoSource* source, |
201 const blink::WebMediaConstraints& constraints, | 203 const blink::WebMediaConstraints& constraints, |
202 const MediaStreamVideoSource::ConstraintsCallback& callback, | 204 const MediaStreamVideoSource::ConstraintsCallback& callback, |
203 bool enabled) { | 205 bool enabled) { |
| 206 DCHECK(IsOldVideoConstraints()); |
204 blink::WebMediaStreamTrack track; | 207 blink::WebMediaStreamTrack track; |
205 track.initialize(source->owner()); | 208 track.initialize(source->owner()); |
206 track.setTrackData( | 209 track.setTrackData( |
207 new MediaStreamVideoTrack(source, constraints, callback, enabled)); | 210 new MediaStreamVideoTrack(source, constraints, callback, enabled)); |
208 return track; | 211 return track; |
209 } | 212 } |
210 | 213 |
211 // static | 214 // static |
| 215 blink::WebMediaStreamTrack MediaStreamVideoTrack::CreateVideoTrack( |
| 216 MediaStreamVideoSource* source, |
| 217 const MediaStreamVideoSource::ConstraintsCallback& callback, |
| 218 bool enabled) { |
| 219 blink::WebMediaStreamTrack track; |
| 220 track.initialize(source->owner()); |
| 221 track.setTrackData(new MediaStreamVideoTrack(source, callback, enabled)); |
| 222 return track; |
| 223 } |
| 224 |
| 225 // static |
| 226 blink::WebMediaStreamTrack MediaStreamVideoTrack::CreateVideoTrack( |
| 227 MediaStreamVideoSource* source, |
| 228 const VideoTrackAdapterSettings& adapter_settings, |
| 229 const base::Optional<bool>& noise_reduction, |
| 230 bool is_screencast, |
| 231 double min_frame_rate, |
| 232 const MediaStreamVideoSource::ConstraintsCallback& callback, |
| 233 bool enabled) { |
| 234 blink::WebMediaStreamTrack track; |
| 235 track.initialize(source->owner()); |
| 236 track.setTrackData(new MediaStreamVideoTrack( |
| 237 source, adapter_settings, noise_reduction, is_screencast, min_frame_rate, |
| 238 callback, enabled)); |
| 239 return track; |
| 240 } |
| 241 |
| 242 // static |
212 MediaStreamVideoTrack* MediaStreamVideoTrack::GetVideoTrack( | 243 MediaStreamVideoTrack* MediaStreamVideoTrack::GetVideoTrack( |
213 const blink::WebMediaStreamTrack& track) { | 244 const blink::WebMediaStreamTrack& track) { |
214 if (track.isNull() || | 245 if (track.isNull() || |
215 track.source().getType() != blink::WebMediaStreamSource::TypeVideo) { | 246 track.source().getType() != blink::WebMediaStreamSource::TypeVideo) { |
216 return nullptr; | 247 return nullptr; |
217 } | 248 } |
218 return static_cast<MediaStreamVideoTrack*>(track.getTrackData()); | 249 return static_cast<MediaStreamVideoTrack*>(track.getTrackData()); |
219 } | 250 } |
220 | 251 |
221 MediaStreamVideoTrack::MediaStreamVideoTrack( | 252 MediaStreamVideoTrack::MediaStreamVideoTrack( |
222 MediaStreamVideoSource* source, | 253 MediaStreamVideoSource* source, |
| 254 const MediaStreamVideoSource::ConstraintsCallback& callback, |
| 255 bool enabled) |
| 256 : MediaStreamTrack(true), |
| 257 frame_deliverer_( |
| 258 new MediaStreamVideoTrack::FrameDeliverer(source->io_task_runner(), |
| 259 enabled)), |
| 260 adapter_settings_(base::MakeUnique<VideoTrackAdapterSettings>( |
| 261 VideoTrackAdapterSettings())), |
| 262 is_screencast_(false), |
| 263 min_frame_rate_(0.0), |
| 264 source_(source->GetWeakPtr()) { |
| 265 if (IsOldVideoConstraints()) { |
| 266 blink::WebMediaConstraints constraints; |
| 267 constraints.initialize(); |
| 268 source->AddTrackLegacy( |
| 269 this, |
| 270 base::Bind(&MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO, |
| 271 frame_deliverer_), |
| 272 constraints, callback); |
| 273 } else { |
| 274 source->AddTrack( |
| 275 this, VideoTrackAdapterSettings(), |
| 276 base::Bind(&MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO, |
| 277 frame_deliverer_), |
| 278 callback); |
| 279 } |
| 280 } |
| 281 |
| 282 MediaStreamVideoTrack::MediaStreamVideoTrack( |
| 283 MediaStreamVideoSource* source, |
223 const blink::WebMediaConstraints& constraints, | 284 const blink::WebMediaConstraints& constraints, |
224 const MediaStreamVideoSource::ConstraintsCallback& callback, | 285 const MediaStreamVideoSource::ConstraintsCallback& callback, |
225 bool enabled) | 286 bool enabled) |
226 : MediaStreamTrack(true), | 287 : MediaStreamTrack(true), |
227 frame_deliverer_( | 288 frame_deliverer_( |
228 new MediaStreamVideoTrack::FrameDeliverer(source->io_task_runner(), | 289 new MediaStreamVideoTrack::FrameDeliverer(source->io_task_runner(), |
229 enabled)), | 290 enabled)), |
230 constraints_(constraints), | 291 constraints_(constraints), |
231 source_(source->GetWeakPtr()) { | 292 source_(source->GetWeakPtr()) { |
| 293 DCHECK(IsOldVideoConstraints()); |
232 DCHECK(!constraints.isNull()); | 294 DCHECK(!constraints.isNull()); |
233 source->AddTrack(this, | 295 source->AddTrackLegacy( |
234 base::Bind( | 296 this, |
235 &MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO, | 297 base::Bind(&MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO, |
236 frame_deliverer_), | 298 frame_deliverer_), |
237 constraints, callback); | 299 constraints, callback); |
| 300 } |
| 301 |
| 302 MediaStreamVideoTrack::MediaStreamVideoTrack( |
| 303 MediaStreamVideoSource* source, |
| 304 const VideoTrackAdapterSettings& adapter_settings, |
| 305 const base::Optional<bool>& noise_reduction, |
| 306 bool is_screen_cast, |
| 307 double min_frame_rate, |
| 308 const MediaStreamVideoSource::ConstraintsCallback& callback, |
| 309 bool enabled) |
| 310 : MediaStreamTrack(true), |
| 311 frame_deliverer_( |
| 312 new MediaStreamVideoTrack::FrameDeliverer(source->io_task_runner(), |
| 313 enabled)), |
| 314 adapter_settings_( |
| 315 base::MakeUnique<VideoTrackAdapterSettings>(adapter_settings)), |
| 316 noise_reduction_(noise_reduction), |
| 317 is_screencast_(is_screen_cast), |
| 318 min_frame_rate_(min_frame_rate), |
| 319 source_(source->GetWeakPtr()) { |
| 320 DCHECK(!IsOldVideoConstraints()); |
| 321 source->AddTrack( |
| 322 this, adapter_settings, |
| 323 base::Bind(&MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO, |
| 324 frame_deliverer_), |
| 325 callback); |
238 } | 326 } |
239 | 327 |
240 MediaStreamVideoTrack::~MediaStreamVideoTrack() { | 328 MediaStreamVideoTrack::~MediaStreamVideoTrack() { |
241 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 329 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
242 DCHECK(sinks_.empty()); | 330 DCHECK(sinks_.empty()); |
243 Stop(); | 331 Stop(); |
244 DVLOG(3) << "~MediaStreamVideoTrack()"; | 332 DVLOG(3) << "~MediaStreamVideoTrack()"; |
245 } | 333 } |
246 | 334 |
247 void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink, | 335 void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink, |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 383 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
296 if (source_) { | 384 if (source_) { |
297 source_->RemoveTrack(this); | 385 source_->RemoveTrack(this); |
298 source_ = NULL; | 386 source_ = NULL; |
299 } | 387 } |
300 OnReadyStateChanged(blink::WebMediaStreamSource::ReadyStateEnded); | 388 OnReadyStateChanged(blink::WebMediaStreamSource::ReadyStateEnded); |
301 } | 389 } |
302 | 390 |
303 void MediaStreamVideoTrack::getSettings( | 391 void MediaStreamVideoTrack::getSettings( |
304 blink::WebMediaStreamTrack::Settings& settings) { | 392 blink::WebMediaStreamTrack::Settings& settings) { |
305 const media::VideoCaptureFormat* format = source_->GetCurrentFormat(); | 393 base::Optional<media::VideoCaptureFormat> format = |
| 394 source_->GetCurrentFormat(); |
306 if (format) { | 395 if (format) { |
307 settings.frameRate = format->frame_rate; | 396 settings.frameRate = format->frame_rate; |
308 settings.videoKind = GetVideoKindForFormat(*format); | 397 settings.videoKind = GetVideoKindForFormat(*format); |
309 } | 398 } |
310 if (width_ && height_) { | 399 if (width_ && height_) { |
311 settings.width = width_; | 400 settings.width = width_; |
312 settings.height = height_; | 401 settings.height = height_; |
313 } | 402 } |
314 switch (source_->device_info().device.video_facing) { | 403 switch (source_->device_info().device.video_facing) { |
315 case media::MEDIA_VIDEO_FACING_NONE: | 404 case media::MEDIA_VIDEO_FACING_NONE: |
(...skipping 20 matching lines...) Expand all Loading... |
336 } | 425 } |
337 | 426 |
338 void MediaStreamVideoTrack::OnReadyStateChanged( | 427 void MediaStreamVideoTrack::OnReadyStateChanged( |
339 blink::WebMediaStreamSource::ReadyState state) { | 428 blink::WebMediaStreamSource::ReadyState state) { |
340 DCHECK(main_render_thread_checker_.CalledOnValidThread()); | 429 DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
341 for (auto* sink : sinks_) | 430 for (auto* sink : sinks_) |
342 sink->OnReadyStateChanged(state); | 431 sink->OnReadyStateChanged(state); |
343 } | 432 } |
344 | 433 |
345 } // namespace content | 434 } // namespace content |
OLD | NEW |