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 "media/renderers/video_renderer_impl.h" | 5 #include "media/renderers/video_renderer_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/callback_helpers.h" | 9 #include "base/callback_helpers.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 } | 123 } |
124 | 124 |
125 void VideoRendererImpl::Initialize( | 125 void VideoRendererImpl::Initialize( |
126 DemuxerStream* stream, | 126 DemuxerStream* stream, |
127 const PipelineStatusCB& init_cb, | 127 const PipelineStatusCB& init_cb, |
128 const SetDecryptorReadyCB& set_decryptor_ready_cb, | 128 const SetDecryptorReadyCB& set_decryptor_ready_cb, |
129 const StatisticsCB& statistics_cb, | 129 const StatisticsCB& statistics_cb, |
130 const BufferingStateCB& buffering_state_cb, | 130 const BufferingStateCB& buffering_state_cb, |
131 const base::Closure& ended_cb, | 131 const base::Closure& ended_cb, |
132 const PipelineStatusCB& error_cb, | 132 const PipelineStatusCB& error_cb, |
133 const WallClockTimeCB& wall_clock_time_cb, | 133 const TimeSource::WallClockTimeCB& wall_clock_time_cb, |
134 const base::Closure& waiting_for_decryption_key_cb) { | 134 const base::Closure& waiting_for_decryption_key_cb) { |
135 DCHECK(task_runner_->BelongsToCurrentThread()); | 135 DCHECK(task_runner_->BelongsToCurrentThread()); |
136 base::AutoLock auto_lock(lock_); | 136 base::AutoLock auto_lock(lock_); |
137 DCHECK(stream); | 137 DCHECK(stream); |
138 DCHECK_EQ(stream->type(), DemuxerStream::VIDEO); | 138 DCHECK_EQ(stream->type(), DemuxerStream::VIDEO); |
139 DCHECK(!init_cb.is_null()); | 139 DCHECK(!init_cb.is_null()); |
140 DCHECK(!statistics_cb.is_null()); | 140 DCHECK(!statistics_cb.is_null()); |
141 DCHECK(!buffering_state_cb.is_null()); | 141 DCHECK(!buffering_state_cb.is_null()); |
142 DCHECK(!ended_cb.is_null()); | 142 DCHECK(!ended_cb.is_null()); |
143 DCHECK(!wall_clock_time_cb.is_null()); | 143 DCHECK(!wall_clock_time_cb.is_null()); |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 task_runner_->PostTask( | 326 task_runner_->PostTask( |
327 FROM_HERE, base::Bind(buffering_state_cb_, BUFFERING_HAVE_NOTHING)); | 327 FROM_HERE, base::Bind(buffering_state_cb_, BUFFERING_HAVE_NOTHING)); |
328 } else { | 328 } else { |
329 wait_time = std::min(kIdleTimeDelta, latest_possible_paint_time_ - now); | 329 wait_time = std::min(kIdleTimeDelta, latest_possible_paint_time_ - now); |
330 } | 330 } |
331 | 331 |
332 UpdateStatsAndWait_Locked(wait_time); | 332 UpdateStatsAndWait_Locked(wait_time); |
333 continue; | 333 continue; |
334 } | 334 } |
335 | 335 |
336 base::TimeTicks target_paint_time = | 336 base::TimeTicks target_paint_time = wall_clock_time_cb_.Run( |
337 wall_clock_time_cb_.Run(ready_frames_.front()->timestamp()); | 337 ready_frames_.front()->timestamp(), TimeSource::SINGLE_TIMESTAMP); |
338 | 338 |
339 // If media time has stopped, don't attempt to paint any more frames. | 339 // If media time has stopped, don't attempt to paint any more frames. |
340 if (target_paint_time.is_null()) { | 340 if (target_paint_time.is_null()) { |
341 UpdateStatsAndWait_Locked(kIdleTimeDelta); | 341 UpdateStatsAndWait_Locked(kIdleTimeDelta); |
342 continue; | 342 continue; |
343 } | 343 } |
344 | 344 |
345 // Deadline is defined as the duration between this frame and the next | 345 // Deadline is defined as the duration between this frame and the next |
346 // frame, using the delta between this frame and the previous frame as the | 346 // frame, using the delta between this frame and the previous frame as the |
347 // assumption for frame duration. | 347 // assumption for frame duration. |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
401 } | 401 } |
402 } | 402 } |
403 | 403 |
404 void VideoRendererImpl::PaintNextReadyFrame_Locked() { | 404 void VideoRendererImpl::PaintNextReadyFrame_Locked() { |
405 DCHECK(!use_new_video_renderering_path_); | 405 DCHECK(!use_new_video_renderering_path_); |
406 lock_.AssertAcquired(); | 406 lock_.AssertAcquired(); |
407 | 407 |
408 scoped_refptr<VideoFrame> next_frame = ready_frames_.front(); | 408 scoped_refptr<VideoFrame> next_frame = ready_frames_.front(); |
409 ready_frames_.pop_front(); | 409 ready_frames_.pop_front(); |
410 | 410 |
411 last_media_time_ = wall_clock_time_cb_.Run(next_frame->timestamp()); | 411 last_media_time_ = wall_clock_time_cb_.Run(next_frame->timestamp(), |
| 412 TimeSource::SINGLE_TIMESTAMP); |
412 | 413 |
413 paint_cb_.Run(next_frame); | 414 paint_cb_.Run(next_frame); |
414 | 415 |
415 task_runner_->PostTask( | 416 task_runner_->PostTask( |
416 FROM_HERE, | 417 FROM_HERE, |
417 base::Bind(&VideoRendererImpl::AttemptRead, weak_factory_.GetWeakPtr())); | 418 base::Bind(&VideoRendererImpl::AttemptRead, weak_factory_.GetWeakPtr())); |
418 } | 419 } |
419 | 420 |
420 void VideoRendererImpl::DropNextReadyFrame_Locked() { | 421 void VideoRendererImpl::DropNextReadyFrame_Locked() { |
421 DCHECK(!use_new_video_renderering_path_); | 422 DCHECK(!use_new_video_renderering_path_); |
422 TRACE_EVENT0("media", "VideoRendererImpl:frameDropped"); | 423 TRACE_EVENT0("media", "VideoRendererImpl:frameDropped"); |
423 | 424 |
424 lock_.AssertAcquired(); | 425 lock_.AssertAcquired(); |
425 | 426 |
426 last_media_time_ = | 427 last_media_time_ = wall_clock_time_cb_.Run(ready_frames_.front()->timestamp(), |
427 wall_clock_time_cb_.Run(ready_frames_.front()->timestamp()); | 428 TimeSource::SINGLE_TIMESTAMP); |
428 | 429 |
429 ready_frames_.pop_front(); | 430 ready_frames_.pop_front(); |
430 frames_dropped_++; | 431 frames_dropped_++; |
431 | 432 |
432 task_runner_->PostTask( | 433 task_runner_->PostTask( |
433 FROM_HERE, | 434 FROM_HERE, |
434 base::Bind(&VideoRendererImpl::AttemptRead, weak_factory_.GetWeakPtr())); | 435 base::Bind(&VideoRendererImpl::AttemptRead, weak_factory_.GetWeakPtr())); |
435 } | 436 } |
436 | 437 |
437 void VideoRendererImpl::FrameReady(VideoFrameStream::Status status, | 438 void VideoRendererImpl::FrameReady(VideoFrameStream::Status status, |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
723 (algorithm_->frames_queued() == 1u && | 724 (algorithm_->frames_queued() == 1u && |
724 algorithm_->average_frame_duration() == base::TimeDelta())) { | 725 algorithm_->average_frame_duration() == base::TimeDelta())) { |
725 rendered_end_of_stream_ = true; | 726 rendered_end_of_stream_ = true; |
726 task_runner_->PostTask(FROM_HERE, ended_cb_); | 727 task_runner_->PostTask(FROM_HERE, ended_cb_); |
727 } | 728 } |
728 | 729 |
729 return effective_frames; | 730 return effective_frames; |
730 } | 731 } |
731 | 732 |
732 } // namespace media | 733 } // namespace media |
OLD | NEW |