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/filters/audio_renderer_impl.h" | 5 #include "media/filters/audio_renderer_impl.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 audio_buffer_stream_->set_config_change_observer(base::Bind( | 65 audio_buffer_stream_->set_config_change_observer(base::Bind( |
66 &AudioRendererImpl::OnConfigChange, weak_factory_.GetWeakPtr())); | 66 &AudioRendererImpl::OnConfigChange, weak_factory_.GetWeakPtr())); |
67 } | 67 } |
68 | 68 |
69 AudioRendererImpl::~AudioRendererImpl() { | 69 AudioRendererImpl::~AudioRendererImpl() { |
70 // Stop() should have been called and |algorithm_| should have been destroyed. | 70 // Stop() should have been called and |algorithm_| should have been destroyed. |
71 DCHECK(state_ == kUninitialized || state_ == kStopped); | 71 DCHECK(state_ == kUninitialized || state_ == kStopped); |
72 DCHECK(!algorithm_.get()); | 72 DCHECK(!algorithm_.get()); |
73 } | 73 } |
74 | 74 |
75 void AudioRendererImpl::StartRendering() { | 75 void AudioRendererImpl::StartTicking() { |
76 DVLOG(1) << __FUNCTION__; | 76 DVLOG(1) << __FUNCTION__; |
77 DCHECK(task_runner_->BelongsToCurrentThread()); | 77 DCHECK(task_runner_->BelongsToCurrentThread()); |
78 DCHECK(!rendering_); | 78 DCHECK(!rendering_); |
79 rendering_ = true; | 79 rendering_ = true; |
80 | 80 |
81 base::AutoLock auto_lock(lock_); | 81 base::AutoLock auto_lock(lock_); |
82 // Wait for an eventual call to SetPlaybackRate() to start rendering. | 82 // Wait for an eventual call to SetPlaybackRate() to start rendering. |
83 if (algorithm_->playback_rate() == 0) { | 83 if (algorithm_->playback_rate() == 0) { |
84 DCHECK(!sink_playing_); | 84 DCHECK(!sink_playing_); |
85 return; | 85 return; |
86 } | 86 } |
87 | 87 |
88 StartRendering_Locked(); | 88 StartRendering_Locked(); |
89 } | 89 } |
90 | 90 |
91 void AudioRendererImpl::StartRendering_Locked() { | 91 void AudioRendererImpl::StartRendering_Locked() { |
92 DVLOG(1) << __FUNCTION__; | 92 DVLOG(1) << __FUNCTION__; |
93 DCHECK(task_runner_->BelongsToCurrentThread()); | 93 DCHECK(task_runner_->BelongsToCurrentThread()); |
94 DCHECK_EQ(state_, kPlaying); | 94 DCHECK_EQ(state_, kPlaying); |
95 DCHECK(!sink_playing_); | 95 DCHECK(!sink_playing_); |
96 DCHECK_NE(algorithm_->playback_rate(), 0); | 96 DCHECK_NE(algorithm_->playback_rate(), 0); |
97 lock_.AssertAcquired(); | 97 lock_.AssertAcquired(); |
98 | 98 |
99 sink_playing_ = true; | 99 sink_playing_ = true; |
100 | 100 |
101 base::AutoUnlock auto_unlock(lock_); | 101 base::AutoUnlock auto_unlock(lock_); |
102 sink_->Play(); | 102 sink_->Play(); |
103 } | 103 } |
104 | 104 |
105 void AudioRendererImpl::StopRendering() { | 105 void AudioRendererImpl::StopTicking() { |
106 DVLOG(1) << __FUNCTION__; | 106 DVLOG(1) << __FUNCTION__; |
107 DCHECK(task_runner_->BelongsToCurrentThread()); | 107 DCHECK(task_runner_->BelongsToCurrentThread()); |
108 DCHECK(rendering_); | 108 DCHECK(rendering_); |
109 rendering_ = false; | 109 rendering_ = false; |
110 | 110 |
111 base::AutoLock auto_lock(lock_); | 111 base::AutoLock auto_lock(lock_); |
112 // Rendering should have already been stopped with a zero playback rate. | 112 // Rendering should have already been stopped with a zero playback rate. |
113 if (algorithm_->playback_rate() == 0) { | 113 if (algorithm_->playback_rate() == 0) { |
114 DCHECK(!sink_playing_); | 114 DCHECK(!sink_playing_); |
115 return; | 115 return; |
(...skipping 18 matching lines...) Expand all Loading... |
134 DVLOG(1) << __FUNCTION__ << "(" << time.InMicroseconds() << ")"; | 134 DVLOG(1) << __FUNCTION__ << "(" << time.InMicroseconds() << ")"; |
135 DCHECK(task_runner_->BelongsToCurrentThread()); | 135 DCHECK(task_runner_->BelongsToCurrentThread()); |
136 | 136 |
137 base::AutoLock auto_lock(lock_); | 137 base::AutoLock auto_lock(lock_); |
138 DCHECK(!rendering_); | 138 DCHECK(!rendering_); |
139 DCHECK_EQ(state_, kFlushed); | 139 DCHECK_EQ(state_, kFlushed); |
140 | 140 |
141 start_timestamp_ = time; | 141 start_timestamp_ = time; |
142 } | 142 } |
143 | 143 |
| 144 base::TimeDelta AudioRendererImpl::CurrentMediaTime() { |
| 145 DVLOG(1) << __FUNCTION__; |
| 146 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 147 |
| 148 // TODO(scherkus): Finish implementing when ready to switch Pipeline to using |
| 149 // TimeSource http://crbug.com/370634 |
| 150 NOTIMPLEMENTED(); |
| 151 |
| 152 return base::TimeDelta(); |
| 153 } |
| 154 |
| 155 TimeSource* AudioRendererImpl::GetTimeSource() { |
| 156 return this; |
| 157 } |
| 158 |
144 void AudioRendererImpl::Flush(const base::Closure& callback) { | 159 void AudioRendererImpl::Flush(const base::Closure& callback) { |
145 DVLOG(1) << __FUNCTION__; | 160 DVLOG(1) << __FUNCTION__; |
146 DCHECK(task_runner_->BelongsToCurrentThread()); | 161 DCHECK(task_runner_->BelongsToCurrentThread()); |
147 | 162 |
148 base::AutoLock auto_lock(lock_); | 163 base::AutoLock auto_lock(lock_); |
149 DCHECK_EQ(state_, kPlaying); | 164 DCHECK_EQ(state_, kPlaying); |
150 DCHECK(flush_cb_.is_null()); | 165 DCHECK(flush_cb_.is_null()); |
151 | 166 |
152 flush_cb_ = callback; | 167 flush_cb_ = callback; |
153 ChangeState_Locked(kFlushing); | 168 ChangeState_Locked(kFlushing); |
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
710 << buffering_state; | 725 << buffering_state; |
711 DCHECK_NE(buffering_state_, buffering_state); | 726 DCHECK_NE(buffering_state_, buffering_state); |
712 lock_.AssertAcquired(); | 727 lock_.AssertAcquired(); |
713 buffering_state_ = buffering_state; | 728 buffering_state_ = buffering_state; |
714 | 729 |
715 task_runner_->PostTask(FROM_HERE, | 730 task_runner_->PostTask(FROM_HERE, |
716 base::Bind(buffering_state_cb_, buffering_state_)); | 731 base::Bind(buffering_state_cb_, buffering_state_)); |
717 } | 732 } |
718 | 733 |
719 } // namespace media | 734 } // namespace media |
OLD | NEW |