Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Side by Side Diff: media/filters/audio_renderer_impl.cc

Issue 393313004: Fold DecoderStream::Stop() into the dtor. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 30 matching lines...) Expand all
41 } // namespace 41 } // namespace
42 42
43 AudioRendererImpl::AudioRendererImpl( 43 AudioRendererImpl::AudioRendererImpl(
44 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 44 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
45 media::AudioRendererSink* sink, 45 media::AudioRendererSink* sink,
46 ScopedVector<AudioDecoder> decoders, 46 ScopedVector<AudioDecoder> decoders,
47 const SetDecryptorReadyCB& set_decryptor_ready_cb, 47 const SetDecryptorReadyCB& set_decryptor_ready_cb,
48 AudioHardwareConfig* hardware_config) 48 AudioHardwareConfig* hardware_config)
49 : task_runner_(task_runner), 49 : task_runner_(task_runner),
50 sink_(sink), 50 sink_(sink),
51 audio_buffer_stream_(task_runner, 51 audio_buffer_stream_(new AudioBufferStream(task_runner,
52 decoders.Pass(), 52 decoders.Pass(),
53 set_decryptor_ready_cb), 53 set_decryptor_ready_cb)),
54 hardware_config_(hardware_config), 54 hardware_config_(hardware_config),
55 now_cb_(base::Bind(&base::TimeTicks::Now)), 55 now_cb_(base::Bind(&base::TimeTicks::Now)),
56 state_(kUninitialized), 56 state_(kUninitialized),
57 buffering_state_(BUFFERING_HAVE_NOTHING), 57 buffering_state_(BUFFERING_HAVE_NOTHING),
58 rendering_(false), 58 rendering_(false),
59 sink_playing_(false), 59 sink_playing_(false),
60 pending_read_(false), 60 pending_read_(false),
61 received_end_of_stream_(false), 61 received_end_of_stream_(false),
62 rendered_end_of_stream_(false), 62 rendered_end_of_stream_(false),
63 weak_factory_(this) { 63 weak_factory_(this) {
64 audio_buffer_stream_.set_splice_observer(base::Bind( 64 audio_buffer_stream_->set_splice_observer(base::Bind(
65 &AudioRendererImpl::OnNewSpliceBuffer, weak_factory_.GetWeakPtr())); 65 &AudioRendererImpl::OnNewSpliceBuffer, weak_factory_.GetWeakPtr()));
66 audio_buffer_stream_.set_config_change_observer(base::Bind( 66 audio_buffer_stream_->set_config_change_observer(base::Bind(
67 &AudioRendererImpl::OnConfigChange, weak_factory_.GetWeakPtr())); 67 &AudioRendererImpl::OnConfigChange, weak_factory_.GetWeakPtr()));
68 } 68 }
69 69
70 AudioRendererImpl::~AudioRendererImpl() { 70 AudioRendererImpl::~AudioRendererImpl() {
71 // Stop() should have been called and |algorithm_| should have been destroyed. 71 // Stop() should have been called and |algorithm_| should have been destroyed.
72 DCHECK(state_ == kUninitialized || state_ == kStopped); 72 DCHECK(state_ == kUninitialized || state_ == kStopped);
73 DCHECK(!algorithm_.get()); 73 DCHECK(!algorithm_.get());
74 } 74 }
75 75
76 void AudioRendererImpl::StartRendering() { 76 void AudioRendererImpl::StartRendering() {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 DoFlush_Locked(); 149 DoFlush_Locked();
150 } 150 }
151 151
152 void AudioRendererImpl::DoFlush_Locked() { 152 void AudioRendererImpl::DoFlush_Locked() {
153 DCHECK(task_runner_->BelongsToCurrentThread()); 153 DCHECK(task_runner_->BelongsToCurrentThread());
154 lock_.AssertAcquired(); 154 lock_.AssertAcquired();
155 155
156 DCHECK(!pending_read_); 156 DCHECK(!pending_read_);
157 DCHECK_EQ(state_, kFlushed); 157 DCHECK_EQ(state_, kFlushed);
158 158
159 audio_buffer_stream_.Reset(base::Bind(&AudioRendererImpl::ResetDecoderDone, 159 audio_buffer_stream_->Reset(base::Bind(&AudioRendererImpl::ResetDecoderDone,
160 weak_factory_.GetWeakPtr())); 160 weak_factory_.GetWeakPtr()));
161 } 161 }
162 162
163 void AudioRendererImpl::ResetDecoderDone() { 163 void AudioRendererImpl::ResetDecoderDone() {
164 DCHECK(task_runner_->BelongsToCurrentThread()); 164 DCHECK(task_runner_->BelongsToCurrentThread());
165 { 165 {
166 base::AutoLock auto_lock(lock_); 166 base::AutoLock auto_lock(lock_);
167 if (state_ == kStopped) 167 if (state_ == kStopped)
168 return; 168 return;
169 169
170 DCHECK_EQ(state_, kFlushed); 170 DCHECK_EQ(state_, kFlushed);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 algorithm_.reset(); 209 algorithm_.reset();
210 time_cb_.Reset(); 210 time_cb_.Reset();
211 flush_cb_.Reset(); 211 flush_cb_.Reset();
212 } 212 }
213 213
214 if (sink_) { 214 if (sink_) {
215 sink_->Stop(); 215 sink_->Stop();
216 sink_ = NULL; 216 sink_ = NULL;
217 } 217 }
218 218
219 audio_buffer_stream_.Stop(callback); 219 audio_buffer_stream_.reset();
scherkus (not reviewing) 2014/07/16 17:49:48 will we be getting rid of Audio/VideoRenderer::Sto
xhwang 2014/07/16 23:45:49 Yes, that's the plan. I'd like to do the transitio
220 task_runner_->PostTask(FROM_HERE, callback);
220 } 221 }
221 222
222 void AudioRendererImpl::StartPlayingFrom(base::TimeDelta timestamp) { 223 void AudioRendererImpl::StartPlayingFrom(base::TimeDelta timestamp) {
223 DVLOG(1) << __FUNCTION__ << "(" << timestamp.InMicroseconds() << ")"; 224 DVLOG(1) << __FUNCTION__ << "(" << timestamp.InMicroseconds() << ")";
224 DCHECK(task_runner_->BelongsToCurrentThread()); 225 DCHECK(task_runner_->BelongsToCurrentThread());
225 226
226 base::AutoLock auto_lock(lock_); 227 base::AutoLock auto_lock(lock_);
227 DCHECK(!sink_playing_); 228 DCHECK(!sink_playing_);
228 DCHECK_EQ(state_, kFlushed); 229 DCHECK_EQ(state_, kFlushed);
229 DCHECK_EQ(buffering_state_, BUFFERING_HAVE_NOTHING); 230 DCHECK_EQ(buffering_state_, BUFFERING_HAVE_NOTHING);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 ChannelLayoutToChannelCount( 291 ChannelLayoutToChannelCount(
291 stream->audio_decoder_config().channel_layout()), 292 stream->audio_decoder_config().channel_layout()),
292 hw_params.input_channels(), 293 hw_params.input_channels(),
293 hw_params.sample_rate(), 294 hw_params.sample_rate(),
294 hw_params.bits_per_sample(), 295 hw_params.bits_per_sample(),
295 hardware_config_->GetHighLatencyBufferSize()); 296 hardware_config_->GetHighLatencyBufferSize());
296 } 297 }
297 298
298 audio_clock_.reset(new AudioClock(audio_parameters_.sample_rate())); 299 audio_clock_.reset(new AudioClock(audio_parameters_.sample_rate()));
299 300
300 audio_buffer_stream_.Initialize( 301 audio_buffer_stream_->Initialize(
301 stream, 302 stream,
302 false, 303 false,
303 statistics_cb, 304 statistics_cb,
304 base::Bind(&AudioRendererImpl::OnAudioBufferStreamInitialized, 305 base::Bind(&AudioRendererImpl::OnAudioBufferStreamInitialized,
305 weak_factory_.GetWeakPtr())); 306 weak_factory_.GetWeakPtr()));
306 } 307 }
307 308
308 void AudioRendererImpl::OnAudioBufferStreamInitialized(bool success) { 309 void AudioRendererImpl::OnAudioBufferStreamInitialized(bool success) {
309 DCHECK(task_runner_->BelongsToCurrentThread()); 310 DCHECK(task_runner_->BelongsToCurrentThread());
310 311
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 } 481 }
481 482
482 void AudioRendererImpl::AttemptRead_Locked() { 483 void AudioRendererImpl::AttemptRead_Locked() {
483 DCHECK(task_runner_->BelongsToCurrentThread()); 484 DCHECK(task_runner_->BelongsToCurrentThread());
484 lock_.AssertAcquired(); 485 lock_.AssertAcquired();
485 486
486 if (!CanRead_Locked()) 487 if (!CanRead_Locked())
487 return; 488 return;
488 489
489 pending_read_ = true; 490 pending_read_ = true;
490 audio_buffer_stream_.Read(base::Bind(&AudioRendererImpl::DecodedAudioReady, 491 audio_buffer_stream_->Read(base::Bind(&AudioRendererImpl::DecodedAudioReady,
491 weak_factory_.GetWeakPtr())); 492 weak_factory_.GetWeakPtr()));
492 } 493 }
493 494
494 bool AudioRendererImpl::CanRead_Locked() { 495 bool AudioRendererImpl::CanRead_Locked() {
495 lock_.AssertAcquired(); 496 lock_.AssertAcquired();
496 497
497 switch (state_) { 498 switch (state_) {
498 case kUninitialized: 499 case kUninitialized:
499 case kInitializing: 500 case kInitializing:
500 case kFlushing: 501 case kFlushing:
501 case kFlushed: 502 case kFlushed:
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 << buffering_state; 701 << buffering_state;
701 DCHECK_NE(buffering_state_, buffering_state); 702 DCHECK_NE(buffering_state_, buffering_state);
702 lock_.AssertAcquired(); 703 lock_.AssertAcquired();
703 buffering_state_ = buffering_state; 704 buffering_state_ = buffering_state;
704 705
705 task_runner_->PostTask(FROM_HERE, 706 task_runner_->PostTask(FROM_HERE,
706 base::Bind(buffering_state_cb_, buffering_state_)); 707 base::Bind(buffering_state_cb_, buffering_state_));
707 } 708 }
708 709
709 } // namespace media 710 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698