| 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 |