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 |