| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/base/pipeline.h" | 5 #include "media/base/pipeline.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> |
| 8 | 9 |
| 9 #include "base/bind.h" | 10 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" |
| 11 #include "base/callback.h" | 12 #include "base/callback.h" |
| 12 #include "base/callback_helpers.h" | 13 #include "base/callback_helpers.h" |
| 13 #include "base/command_line.h" | 14 #include "base/command_line.h" |
| 14 #include "base/compiler_specific.h" | 15 #include "base/compiler_specific.h" |
| 15 #include "base/location.h" | 16 #include "base/location.h" |
| 16 #include "base/metrics/histogram.h" | 17 #include "base/metrics/histogram.h" |
| 17 #include "base/single_thread_task_runner.h" | 18 #include "base/single_thread_task_runner.h" |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 DCHECK(!error_cb.is_null()); | 74 DCHECK(!error_cb.is_null()); |
| 74 DCHECK(!seek_cb.is_null()); | 75 DCHECK(!seek_cb.is_null()); |
| 75 DCHECK(!metadata_cb.is_null()); | 76 DCHECK(!metadata_cb.is_null()); |
| 76 DCHECK(!buffering_state_cb.is_null()); | 77 DCHECK(!buffering_state_cb.is_null()); |
| 77 | 78 |
| 78 base::AutoLock auto_lock(lock_); | 79 base::AutoLock auto_lock(lock_); |
| 79 CHECK(!running_) << "Media pipeline is already running"; | 80 CHECK(!running_) << "Media pipeline is already running"; |
| 80 running_ = true; | 81 running_ = true; |
| 81 | 82 |
| 82 demuxer_ = demuxer; | 83 demuxer_ = demuxer; |
| 83 renderer_ = renderer.Pass(); | 84 renderer_ = std::move(renderer); |
| 84 ended_cb_ = ended_cb; | 85 ended_cb_ = ended_cb; |
| 85 error_cb_ = error_cb; | 86 error_cb_ = error_cb; |
| 86 seek_cb_ = seek_cb; | 87 seek_cb_ = seek_cb; |
| 87 metadata_cb_ = metadata_cb; | 88 metadata_cb_ = metadata_cb; |
| 88 buffering_state_cb_ = buffering_state_cb; | 89 buffering_state_cb_ = buffering_state_cb; |
| 89 duration_change_cb_ = duration_change_cb; | 90 duration_change_cb_ = duration_change_cb; |
| 90 add_text_track_cb_ = add_text_track_cb; | 91 add_text_track_cb_ = add_text_track_cb; |
| 91 waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb; | 92 waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb; |
| 92 | 93 |
| 93 task_runner_->PostTask( | 94 task_runner_->PostTask( |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 void Pipeline::Suspend(const PipelineStatusCB& suspend_cb) { | 142 void Pipeline::Suspend(const PipelineStatusCB& suspend_cb) { |
| 142 task_runner_->PostTask( | 143 task_runner_->PostTask( |
| 143 FROM_HERE, base::Bind(&Pipeline::SuspendTask, weak_factory_.GetWeakPtr(), | 144 FROM_HERE, base::Bind(&Pipeline::SuspendTask, weak_factory_.GetWeakPtr(), |
| 144 suspend_cb)); | 145 suspend_cb)); |
| 145 } | 146 } |
| 146 | 147 |
| 147 void Pipeline::Resume(scoped_ptr<Renderer> renderer, | 148 void Pipeline::Resume(scoped_ptr<Renderer> renderer, |
| 148 base::TimeDelta timestamp, | 149 base::TimeDelta timestamp, |
| 149 const PipelineStatusCB& seek_cb) { | 150 const PipelineStatusCB& seek_cb) { |
| 150 task_runner_->PostTask( | 151 task_runner_->PostTask( |
| 151 FROM_HERE, base::Bind(&Pipeline::ResumeTask, weak_factory_.GetWeakPtr(), | 152 FROM_HERE, |
| 152 base::Passed(renderer.Pass()), timestamp, seek_cb)); | 153 base::Bind(&Pipeline::ResumeTask, weak_factory_.GetWeakPtr(), |
| 154 base::Passed(std::move(renderer)), timestamp, seek_cb)); |
| 153 } | 155 } |
| 154 | 156 |
| 155 float Pipeline::GetVolume() const { | 157 float Pipeline::GetVolume() const { |
| 156 base::AutoLock auto_lock(lock_); | 158 base::AutoLock auto_lock(lock_); |
| 157 return volume_; | 159 return volume_; |
| 158 } | 160 } |
| 159 | 161 |
| 160 void Pipeline::SetVolume(float volume) { | 162 void Pipeline::SetVolume(float volume) { |
| 161 if (volume < 0.0f || volume > 1.0f) | 163 if (volume < 0.0f || volume > 1.0f) |
| 162 return; | 164 return; |
| (...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 700 if (state_ != kSuspended) { | 702 if (state_ != kSuspended) { |
| 701 DCHECK(state_ == kStopping || state_ == kStopped) | 703 DCHECK(state_ == kStopping || state_ == kStopped) |
| 702 << "Receive resume in unexpected state: " << state_; | 704 << "Receive resume in unexpected state: " << state_; |
| 703 seek_cb.Run(PIPELINE_ERROR_INVALID_STATE); | 705 seek_cb.Run(PIPELINE_ERROR_INVALID_STATE); |
| 704 return; | 706 return; |
| 705 } | 707 } |
| 706 DCHECK(!renderer_); | 708 DCHECK(!renderer_); |
| 707 DCHECK(!pending_callbacks_.get()); | 709 DCHECK(!pending_callbacks_.get()); |
| 708 | 710 |
| 709 SetState(kResuming); | 711 SetState(kResuming); |
| 710 renderer_ = renderer.Pass(); | 712 renderer_ = std::move(renderer); |
| 711 | 713 |
| 712 // Set up for a seek. (Matches setup in SeekTask().) | 714 // Set up for a seek. (Matches setup in SeekTask().) |
| 713 // TODO(sandersd): Share implementation with SeekTask(). | 715 // TODO(sandersd): Share implementation with SeekTask(). |
| 714 seek_cb_ = seek_cb; | 716 seek_cb_ = seek_cb; |
| 715 renderer_ended_ = false; | 717 renderer_ended_ = false; |
| 716 text_renderer_ended_ = false; | 718 text_renderer_ended_ = false; |
| 717 start_timestamp_ = std::max(timestamp, demuxer_->GetStartTime()); | 719 start_timestamp_ = std::max(timestamp, demuxer_->GetStartTime()); |
| 718 | 720 |
| 719 // Queue the asynchronous actions required to start playback. Unlike DoSeek(), | 721 // Queue the asynchronous actions required to start playback. Unlike DoSeek(), |
| 720 // we need to initialize the renderer ourselves (we don't want to enter state | 722 // we need to initialize the renderer ourselves (we don't want to enter state |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 861 metadata_cb_.Run(metadata); | 863 metadata_cb_.Run(metadata); |
| 862 } | 864 } |
| 863 | 865 |
| 864 void Pipeline::BufferingStateChanged(BufferingState new_buffering_state) { | 866 void Pipeline::BufferingStateChanged(BufferingState new_buffering_state) { |
| 865 DVLOG(1) << __FUNCTION__ << "(" << new_buffering_state << ") "; | 867 DVLOG(1) << __FUNCTION__ << "(" << new_buffering_state << ") "; |
| 866 DCHECK(task_runner_->BelongsToCurrentThread()); | 868 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 867 buffering_state_cb_.Run(new_buffering_state); | 869 buffering_state_cb_.Run(new_buffering_state); |
| 868 } | 870 } |
| 869 | 871 |
| 870 } // namespace media | 872 } // namespace media |
| OLD | NEW |