Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(449)

Side by Side Diff: content/renderer/media/video_track_adapter.cc

Issue 964293002: VideoCaptureImpl & relatives small cleanup. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: emircan@s comments Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/video_track_adapter.h" 5 #include "content/renderer/media/video_track_adapter.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 double min_aspect_ratio, 84 double min_aspect_ratio,
85 double max_aspect_ratio, 85 double max_aspect_ratio,
86 double max_frame_rate) const; 86 double max_frame_rate) const;
87 87
88 bool IsEmpty() const; 88 bool IsEmpty() const;
89 89
90 private: 90 private:
91 virtual ~VideoFrameResolutionAdapter(); 91 virtual ~VideoFrameResolutionAdapter();
92 friend class base::RefCountedThreadSafe<VideoFrameResolutionAdapter>; 92 friend class base::RefCountedThreadSafe<VideoFrameResolutionAdapter>;
93 93
94 virtual void DoDeliverFrame( 94 void DoDeliverFrame(const scoped_refptr<media::VideoFrame>& frame,
wolenetz 2015/03/02 23:51:09 nit: ditto update CL description to include this,
mcasas 2015/03/03 15:40:52 Acknowledged.
95 const scoped_refptr<media::VideoFrame>& frame, 95 const media::VideoCaptureFormat& format,
96 const media::VideoCaptureFormat& format, 96 const base::TimeTicks& estimated_capture_time);
97 const base::TimeTicks& estimated_capture_time);
98 97
99 // Returns |true| if the input frame rate is higher that the requested max 98 // Returns |true| if the input frame rate is higher that the requested max
100 // frame rate and |frame| should be dropped. 99 // frame rate and |frame| should be dropped.
101 bool MaybeDropFrame(const scoped_refptr<media::VideoFrame>& frame, 100 bool MaybeDropFrame(const scoped_refptr<media::VideoFrame>& frame,
102 float source_frame_rate); 101 float source_frame_rate);
103 102
104 // Bound to the IO-thread. 103 // Bound to the IO-thread.
105 base::ThreadChecker io_thread_checker_; 104 base::ThreadChecker io_thread_checker_;
106 105
107 // The task runner where we will release VideoCaptureDeliverFrameCB 106 // The task runner where we will release VideoCaptureDeliverFrameCB
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 } 249 }
251 250
252 bool VideoTrackAdapter::VideoFrameResolutionAdapter::MaybeDropFrame( 251 bool VideoTrackAdapter::VideoFrameResolutionAdapter::MaybeDropFrame(
253 const scoped_refptr<media::VideoFrame>& frame, 252 const scoped_refptr<media::VideoFrame>& frame,
254 float source_frame_rate) { 253 float source_frame_rate) {
255 DCHECK(io_thread_checker_.CalledOnValidThread()); 254 DCHECK(io_thread_checker_.CalledOnValidThread());
256 255
257 // Do not drop frames if max frame rate hasn't been specified or the source 256 // Do not drop frames if max frame rate hasn't been specified or the source
258 // frame rate is known and is lower than max. 257 // frame rate is known and is lower than max.
259 if (max_frame_rate_ == 0.0f || 258 if (max_frame_rate_ == 0.0f ||
260 (source_frame_rate > 0 && 259 (source_frame_rate > 0 && source_frame_rate <= max_frame_rate_)) {
261 source_frame_rate <= max_frame_rate_)) {
262 return false; 260 return false;
263 } 261 }
264 262
265 const double delta_ms = 263 const double delta_ms =
266 (frame->timestamp() - last_time_stamp_).InMillisecondsF(); 264 (frame->timestamp() - last_time_stamp_).InMillisecondsF();
267 265
268 // Check if the time since the last frame is completely off. 266 // Check if the time since the last frame is completely off.
269 if (delta_ms < 0 || delta_ms > kMaxTimeInMsBetweenFrames) { 267 if (delta_ms < 0 || delta_ms > kMaxTimeInMsBetweenFrames) {
270 // Reset |last_time_stamp_| and fps calculation. 268 // Reset |last_time_stamp_| and fps calculation.
271 last_time_stamp_ = frame->timestamp(); 269 last_time_stamp_ = frame->timestamp();
(...skipping 29 matching lines...) Expand all
301 keep_frame_counter_ += max_frame_rate_ / frame_rate_; 299 keep_frame_counter_ += max_frame_rate_ / frame_rate_;
302 if (keep_frame_counter_ >= 1) { 300 if (keep_frame_counter_ >= 1) {
303 keep_frame_counter_ -= 1; 301 keep_frame_counter_ -= 1;
304 // Keep the frame. 302 // Keep the frame.
305 return false; 303 return false;
306 } 304 }
307 DVLOG(3) << "Drop frame. Input frame_rate_ " << frame_rate_ << "."; 305 DVLOG(3) << "Drop frame. Input frame_rate_ " << frame_rate_ << ".";
308 return true; 306 return true;
309 } 307 }
310 308
311 void VideoTrackAdapter:: 309 void VideoTrackAdapter::VideoFrameResolutionAdapter::DoDeliverFrame(
312 VideoFrameResolutionAdapter::DoDeliverFrame(
313 const scoped_refptr<media::VideoFrame>& frame, 310 const scoped_refptr<media::VideoFrame>& frame,
314 const media::VideoCaptureFormat& format, 311 const media::VideoCaptureFormat& format,
315 const base::TimeTicks& estimated_capture_time) { 312 const base::TimeTicks& estimated_capture_time) {
316 DCHECK(io_thread_checker_.CalledOnValidThread()); 313 DCHECK(io_thread_checker_.CalledOnValidThread());
317 for (std::vector<VideoIdCallbackPair>::const_iterator it = callbacks_.begin(); 314 for (const auto& it : callbacks_)
318 it != callbacks_.end(); ++it) { 315 it.second.Run(frame, format, estimated_capture_time);
319 it->second.Run(frame, format, estimated_capture_time);
320 }
321 } 316 }
322 317
323 void VideoTrackAdapter::VideoFrameResolutionAdapter::AddCallback( 318 void VideoTrackAdapter::VideoFrameResolutionAdapter::AddCallback(
324 const MediaStreamVideoTrack* track, 319 const MediaStreamVideoTrack* track,
325 const VideoCaptureDeliverFrameCB& callback) { 320 const VideoCaptureDeliverFrameCB& callback) {
326 DCHECK(io_thread_checker_.CalledOnValidThread()); 321 DCHECK(io_thread_checker_.CalledOnValidThread());
327 callbacks_.push_back(std::make_pair(track, callback)); 322 callbacks_.push_back(std::make_pair(track, callback));
328 } 323 }
329 324
330 void VideoTrackAdapter::VideoFrameResolutionAdapter::RemoveCallback( 325 void VideoTrackAdapter::VideoFrameResolutionAdapter::RemoveCallback(
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 muted_state_(false), 368 muted_state_(false),
374 frame_counter_(0), 369 frame_counter_(0),
375 source_frame_rate_(0.0f) { 370 source_frame_rate_(0.0f) {
376 DCHECK(io_message_loop_.get()); 371 DCHECK(io_message_loop_.get());
377 } 372 }
378 373
379 VideoTrackAdapter::~VideoTrackAdapter() { 374 VideoTrackAdapter::~VideoTrackAdapter() {
380 DCHECK(adapters_.empty()); 375 DCHECK(adapters_.empty());
381 } 376 }
382 377
383 void VideoTrackAdapter::AddTrack( 378 void VideoTrackAdapter::AddTrack(const MediaStreamVideoTrack* track,
384 const MediaStreamVideoTrack* track, 379 VideoCaptureDeliverFrameCB frame_callback,
385 VideoCaptureDeliverFrameCB frame_callback, 380 int max_width,
386 int max_width, 381 int max_height,
387 int max_height, 382 double min_aspect_ratio,
388 double min_aspect_ratio, 383 double max_aspect_ratio,
389 double max_aspect_ratio, 384 double max_frame_rate) {
390 double max_frame_rate) {
391 DCHECK(thread_checker_.CalledOnValidThread()); 385 DCHECK(thread_checker_.CalledOnValidThread());
392 386
393 io_message_loop_->PostTask( 387 io_message_loop_->PostTask(
394 FROM_HERE, 388 FROM_HERE,
395 base::Bind(&VideoTrackAdapter::AddTrackOnIO, 389 base::Bind(&VideoTrackAdapter::AddTrackOnIO,
396 this, track, frame_callback, gfx::Size(max_width, max_height), 390 this, track, frame_callback, gfx::Size(max_width, max_height),
397 min_aspect_ratio, max_aspect_ratio, max_frame_rate)); 391 min_aspect_ratio, max_aspect_ratio, max_frame_rate));
398 } 392 }
399 393
400 void VideoTrackAdapter::AddTrackOnIO( 394 void VideoTrackAdapter::AddTrackOnIO(const MediaStreamVideoTrack* track,
401 const MediaStreamVideoTrack* track, 395 VideoCaptureDeliverFrameCB frame_callback,
402 VideoCaptureDeliverFrameCB frame_callback, 396 const gfx::Size& max_frame_size,
403 const gfx::Size& max_frame_size, 397 double min_aspect_ratio,
404 double min_aspect_ratio, 398 double max_aspect_ratio,
405 double max_aspect_ratio, 399 double max_frame_rate) {
406 double max_frame_rate) {
407 DCHECK(io_message_loop_->BelongsToCurrentThread()); 400 DCHECK(io_message_loop_->BelongsToCurrentThread());
408 scoped_refptr<VideoFrameResolutionAdapter> adapter; 401 scoped_refptr<VideoFrameResolutionAdapter> adapter;
409 for (FrameAdapters::const_iterator it = adapters_.begin(); 402 for (const auto& it : adapters_) {
410 it != adapters_.end(); ++it) { 403 if (it->ConstraintsMatch(max_frame_size, min_aspect_ratio,
411 if ((*it)->ConstraintsMatch(max_frame_size, min_aspect_ratio, 404 max_aspect_ratio, max_frame_rate)) {
412 max_aspect_ratio, max_frame_rate)) { 405 adapter = it.get();
413 adapter = it->get();
414 break; 406 break;
415 } 407 }
416 } 408 }
417 if (!adapter.get()) { 409 if (!adapter.get()) {
418 adapter = new VideoFrameResolutionAdapter(renderer_task_runner_, 410 adapter = new VideoFrameResolutionAdapter(renderer_task_runner_,
419 max_frame_size, 411 max_frame_size,
420 min_aspect_ratio, 412 min_aspect_ratio,
421 max_aspect_ratio, 413 max_aspect_ratio,
422 max_frame_rate); 414 max_frame_rate);
423 adapters_.push_back(adapter); 415 adapters_.push_back(adapter);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 } 484 }
493 } 485 }
494 486
495 void VideoTrackAdapter::DeliverFrameOnIO( 487 void VideoTrackAdapter::DeliverFrameOnIO(
496 const scoped_refptr<media::VideoFrame>& frame, 488 const scoped_refptr<media::VideoFrame>& frame,
497 const media::VideoCaptureFormat& format, 489 const media::VideoCaptureFormat& format,
498 const base::TimeTicks& estimated_capture_time) { 490 const base::TimeTicks& estimated_capture_time) {
499 DCHECK(io_message_loop_->BelongsToCurrentThread()); 491 DCHECK(io_message_loop_->BelongsToCurrentThread());
500 TRACE_EVENT0("video", "VideoTrackAdapter::DeliverFrameOnIO"); 492 TRACE_EVENT0("video", "VideoTrackAdapter::DeliverFrameOnIO");
501 ++frame_counter_; 493 ++frame_counter_;
502 for (FrameAdapters::iterator it = adapters_.begin(); 494 for (const auto& it : adapters_)
503 it != adapters_.end(); ++it) { 495 it->DeliverFrame(frame, format, estimated_capture_time);
504 (*it)->DeliverFrame(frame, format, estimated_capture_time);
505 }
506 } 496 }
507 497
508 void VideoTrackAdapter::CheckFramesReceivedOnIO( 498 void VideoTrackAdapter::CheckFramesReceivedOnIO(
509 const OnMutedCallback& set_muted_state_callback, 499 const OnMutedCallback& set_muted_state_callback,
510 uint64 old_frame_counter_snapshot) { 500 uint64 old_frame_counter_snapshot) {
511 DCHECK(io_message_loop_->BelongsToCurrentThread()); 501 DCHECK(io_message_loop_->BelongsToCurrentThread());
512 502
513 if (!monitoring_frame_rate_) 503 if (!monitoring_frame_rate_)
514 return; 504 return;
515 505
516 DVLOG_IF(1, old_frame_counter_snapshot == frame_counter_) 506 DVLOG_IF(1, old_frame_counter_snapshot == frame_counter_)
517 << "No frames have passed, setting source as Muted."; 507 << "No frames have passed, setting source as Muted.";
518 508
519 bool muted_state = old_frame_counter_snapshot == frame_counter_; 509 bool muted_state = old_frame_counter_snapshot == frame_counter_;
520 if (muted_state_ != muted_state) { 510 if (muted_state_ != muted_state) {
521 set_muted_state_callback.Run(muted_state); 511 set_muted_state_callback.Run(muted_state);
522 muted_state_ = muted_state; 512 muted_state_ = muted_state;
523 } 513 }
524 514
525 io_message_loop_->PostDelayedTask(FROM_HERE, 515 io_message_loop_->PostDelayedTask(FROM_HERE,
526 base::Bind(&VideoTrackAdapter::CheckFramesReceivedOnIO, this, 516 base::Bind(&VideoTrackAdapter::CheckFramesReceivedOnIO, this,
527 set_muted_state_callback, frame_counter_), 517 set_muted_state_callback, frame_counter_),
528 base::TimeDelta::FromSecondsD(kNormalFrameTimeoutInFrameIntervals / 518 base::TimeDelta::FromSecondsD(kNormalFrameTimeoutInFrameIntervals /
529 source_frame_rate_)); 519 source_frame_rate_));
530 } 520 }
531 521
532 } // namespace content 522 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698