| 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/filters/video_renderer_impl.h" | 5 #include "media/filters/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/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 } | 50 } |
| 51 | 51 |
| 52 void VideoRendererImpl::Play(const base::Closure& callback) { | 52 void VideoRendererImpl::Play(const base::Closure& callback) { |
| 53 DCHECK(task_runner_->BelongsToCurrentThread()); | 53 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 54 base::AutoLock auto_lock(lock_); | 54 base::AutoLock auto_lock(lock_); |
| 55 DCHECK_EQ(kPrerolled, state_); | 55 DCHECK_EQ(kPrerolled, state_); |
| 56 state_ = kPlaying; | 56 state_ = kPlaying; |
| 57 callback.Run(); | 57 callback.Run(); |
| 58 } | 58 } |
| 59 | 59 |
| 60 void VideoRendererImpl::Pause(const base::Closure& callback) { | |
| 61 DCHECK(task_runner_->BelongsToCurrentThread()); | |
| 62 base::AutoLock auto_lock(lock_); | |
| 63 DCHECK_NE(state_, kUninitialized); | |
| 64 state_ = kPaused; | |
| 65 callback.Run(); | |
| 66 } | |
| 67 | |
| 68 void VideoRendererImpl::Flush(const base::Closure& callback) { | 60 void VideoRendererImpl::Flush(const base::Closure& callback) { |
| 69 DCHECK(task_runner_->BelongsToCurrentThread()); | 61 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 70 base::AutoLock auto_lock(lock_); | 62 base::AutoLock auto_lock(lock_); |
| 71 DCHECK_EQ(state_, kPaused); | 63 DCHECK_NE(state_, kUninitialized); |
| 72 flush_cb_ = callback; | 64 flush_cb_ = callback; |
| 73 state_ = kFlushing; | 65 state_ = kFlushing; |
| 74 | 66 |
| 75 // This is necessary if the |video_frame_stream_| has already seen an end of | 67 // This is necessary if the |video_frame_stream_| has already seen an end of |
| 76 // stream and needs to drain it before flushing it. | 68 // stream and needs to drain it before flushing it. |
| 77 ready_frames_.clear(); | 69 ready_frames_.clear(); |
| 78 received_end_of_stream_ = false; | 70 received_end_of_stream_ = false; |
| 79 rendered_end_of_stream_ = false; | 71 rendered_end_of_stream_ = false; |
| 80 video_frame_stream_.Reset( | 72 video_frame_stream_.Reset( |
| 81 base::Bind(&VideoRendererImpl::OnVideoFrameStreamResetDone, | 73 base::Bind(&VideoRendererImpl::OnVideoFrameStreamResetDone, |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 base::AutoLock auto_lock(lock_); | 113 base::AutoLock auto_lock(lock_); |
| 122 playback_rate_ = playback_rate; | 114 playback_rate_ = playback_rate; |
| 123 } | 115 } |
| 124 | 116 |
| 125 void VideoRendererImpl::Preroll(base::TimeDelta time, | 117 void VideoRendererImpl::Preroll(base::TimeDelta time, |
| 126 const PipelineStatusCB& cb) { | 118 const PipelineStatusCB& cb) { |
| 127 DCHECK(task_runner_->BelongsToCurrentThread()); | 119 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 128 base::AutoLock auto_lock(lock_); | 120 base::AutoLock auto_lock(lock_); |
| 129 DCHECK(!cb.is_null()); | 121 DCHECK(!cb.is_null()); |
| 130 DCHECK(preroll_cb_.is_null()); | 122 DCHECK(preroll_cb_.is_null()); |
| 131 DCHECK(state_ == kFlushed || state_== kPaused) << "state_ " << state_; | 123 DCHECK(state_ == kFlushed || state_ == kPlaying) << "state_ " << state_; |
| 132 | 124 |
| 133 if (state_ == kFlushed) { | 125 if (state_ == kFlushed) { |
| 134 DCHECK(time != kNoTimestamp()); | 126 DCHECK(time != kNoTimestamp()); |
| 135 DCHECK(!pending_read_); | 127 DCHECK(!pending_read_); |
| 136 DCHECK(ready_frames_.empty()); | 128 DCHECK(ready_frames_.empty()); |
| 137 } else { | 129 } else { |
| 138 DCHECK(time == kNoTimestamp()); | 130 DCHECK(time == kNoTimestamp()); |
| 139 } | 131 } |
| 140 | 132 |
| 141 state_ = kPrerolling; | 133 state_ = kPrerolling; |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 442 void VideoRendererImpl::AttemptRead_Locked() { | 434 void VideoRendererImpl::AttemptRead_Locked() { |
| 443 DCHECK(task_runner_->BelongsToCurrentThread()); | 435 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 444 lock_.AssertAcquired(); | 436 lock_.AssertAcquired(); |
| 445 | 437 |
| 446 if (pending_read_ || received_end_of_stream_ || | 438 if (pending_read_ || received_end_of_stream_ || |
| 447 ready_frames_.size() == static_cast<size_t>(limits::kMaxVideoFrames)) { | 439 ready_frames_.size() == static_cast<size_t>(limits::kMaxVideoFrames)) { |
| 448 return; | 440 return; |
| 449 } | 441 } |
| 450 | 442 |
| 451 switch (state_) { | 443 switch (state_) { |
| 452 case kPaused: | |
| 453 case kPrerolling: | 444 case kPrerolling: |
| 454 case kPrerolled: | 445 case kPrerolled: |
| 455 case kPlaying: | 446 case kPlaying: |
| 456 pending_read_ = true; | 447 pending_read_ = true; |
| 457 video_frame_stream_.Read(base::Bind(&VideoRendererImpl::FrameReady, | 448 video_frame_stream_.Read(base::Bind(&VideoRendererImpl::FrameReady, |
| 458 weak_factory_.GetWeakPtr())); | 449 weak_factory_.GetWeakPtr())); |
| 459 return; | 450 return; |
| 460 | 451 |
| 461 case kUninitialized: | 452 case kUninitialized: |
| 462 case kInitializing: | 453 case kInitializing: |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 530 statistics_cb_.Run(statistics); | 521 statistics_cb_.Run(statistics); |
| 531 | 522 |
| 532 frames_decoded_ = 0; | 523 frames_decoded_ = 0; |
| 533 frames_dropped_ = 0; | 524 frames_dropped_ = 0; |
| 534 } | 525 } |
| 535 | 526 |
| 536 frame_available_.TimedWait(wait_duration); | 527 frame_available_.TimedWait(wait_duration); |
| 537 } | 528 } |
| 538 | 529 |
| 539 } // namespace media | 530 } // namespace media |
| OLD | NEW |