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

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: comments addressed 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
« no previous file with comments | « media/filters/audio_renderer_impl.h ('k') | media/filters/decoder_stream.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 state_(kUninitialized), 55 state_(kUninitialized),
56 buffering_state_(BUFFERING_HAVE_NOTHING), 56 buffering_state_(BUFFERING_HAVE_NOTHING),
57 rendering_(false), 57 rendering_(false),
58 sink_playing_(false), 58 sink_playing_(false),
59 pending_read_(false), 59 pending_read_(false),
60 received_end_of_stream_(false), 60 received_end_of_stream_(false),
61 rendered_end_of_stream_(false), 61 rendered_end_of_stream_(false),
62 weak_factory_(this) { 62 weak_factory_(this) {
63 audio_buffer_stream_.set_splice_observer(base::Bind( 63 audio_buffer_stream_->set_splice_observer(base::Bind(
64 &AudioRendererImpl::OnNewSpliceBuffer, weak_factory_.GetWeakPtr())); 64 &AudioRendererImpl::OnNewSpliceBuffer, weak_factory_.GetWeakPtr()));
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::StartRendering() {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 DoFlush_Locked(); 148 DoFlush_Locked();
149 } 149 }
150 150
151 void AudioRendererImpl::DoFlush_Locked() { 151 void AudioRendererImpl::DoFlush_Locked() {
152 DCHECK(task_runner_->BelongsToCurrentThread()); 152 DCHECK(task_runner_->BelongsToCurrentThread());
153 lock_.AssertAcquired(); 153 lock_.AssertAcquired();
154 154
155 DCHECK(!pending_read_); 155 DCHECK(!pending_read_);
156 DCHECK_EQ(state_, kFlushed); 156 DCHECK_EQ(state_, kFlushed);
157 157
158 audio_buffer_stream_.Reset(base::Bind(&AudioRendererImpl::ResetDecoderDone, 158 audio_buffer_stream_->Reset(base::Bind(&AudioRendererImpl::ResetDecoderDone,
159 weak_factory_.GetWeakPtr())); 159 weak_factory_.GetWeakPtr()));
160 } 160 }
161 161
162 void AudioRendererImpl::ResetDecoderDone() { 162 void AudioRendererImpl::ResetDecoderDone() {
163 DCHECK(task_runner_->BelongsToCurrentThread()); 163 DCHECK(task_runner_->BelongsToCurrentThread());
164 { 164 {
165 base::AutoLock auto_lock(lock_); 165 base::AutoLock auto_lock(lock_);
166 if (state_ == kStopped) 166 if (state_ == kStopped)
167 return; 167 return;
168 168
169 DCHECK_EQ(state_, kFlushed); 169 DCHECK_EQ(state_, kFlushed);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 algorithm_.reset(); 208 algorithm_.reset();
209 time_cb_.Reset(); 209 time_cb_.Reset();
210 flush_cb_.Reset(); 210 flush_cb_.Reset();
211 } 211 }
212 212
213 if (sink_) { 213 if (sink_) {
214 sink_->Stop(); 214 sink_->Stop();
215 sink_ = NULL; 215 sink_ = NULL;
216 } 216 }
217 217
218 audio_buffer_stream_.Stop(callback); 218 audio_buffer_stream_.reset();
219 task_runner_->PostTask(FROM_HERE, callback);
219 } 220 }
220 221
221 void AudioRendererImpl::StartPlayingFrom(base::TimeDelta timestamp) { 222 void AudioRendererImpl::StartPlayingFrom(base::TimeDelta timestamp) {
222 DVLOG(1) << __FUNCTION__ << "(" << timestamp.InMicroseconds() << ")"; 223 DVLOG(1) << __FUNCTION__ << "(" << timestamp.InMicroseconds() << ")";
223 DCHECK(task_runner_->BelongsToCurrentThread()); 224 DCHECK(task_runner_->BelongsToCurrentThread());
224 225
225 base::AutoLock auto_lock(lock_); 226 base::AutoLock auto_lock(lock_);
226 DCHECK(!sink_playing_); 227 DCHECK(!sink_playing_);
227 DCHECK_EQ(state_, kFlushed); 228 DCHECK_EQ(state_, kFlushed);
228 DCHECK_EQ(buffering_state_, BUFFERING_HAVE_NOTHING); 229 DCHECK_EQ(buffering_state_, BUFFERING_HAVE_NOTHING);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 ChannelLayoutToChannelCount( 290 ChannelLayoutToChannelCount(
290 stream->audio_decoder_config().channel_layout()), 291 stream->audio_decoder_config().channel_layout()),
291 hw_params.input_channels(), 292 hw_params.input_channels(),
292 hw_params.sample_rate(), 293 hw_params.sample_rate(),
293 hw_params.bits_per_sample(), 294 hw_params.bits_per_sample(),
294 hardware_config_->GetHighLatencyBufferSize()); 295 hardware_config_->GetHighLatencyBufferSize());
295 } 296 }
296 297
297 audio_clock_.reset(new AudioClock(audio_parameters_.sample_rate())); 298 audio_clock_.reset(new AudioClock(audio_parameters_.sample_rate()));
298 299
299 audio_buffer_stream_.Initialize( 300 audio_buffer_stream_->Initialize(
300 stream, 301 stream,
301 false, 302 false,
302 statistics_cb, 303 statistics_cb,
303 base::Bind(&AudioRendererImpl::OnAudioBufferStreamInitialized, 304 base::Bind(&AudioRendererImpl::OnAudioBufferStreamInitialized,
304 weak_factory_.GetWeakPtr())); 305 weak_factory_.GetWeakPtr()));
305 } 306 }
306 307
307 void AudioRendererImpl::OnAudioBufferStreamInitialized(bool success) { 308 void AudioRendererImpl::OnAudioBufferStreamInitialized(bool success) {
308 DCHECK(task_runner_->BelongsToCurrentThread()); 309 DCHECK(task_runner_->BelongsToCurrentThread());
309 310
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 } 480 }
480 481
481 void AudioRendererImpl::AttemptRead_Locked() { 482 void AudioRendererImpl::AttemptRead_Locked() {
482 DCHECK(task_runner_->BelongsToCurrentThread()); 483 DCHECK(task_runner_->BelongsToCurrentThread());
483 lock_.AssertAcquired(); 484 lock_.AssertAcquired();
484 485
485 if (!CanRead_Locked()) 486 if (!CanRead_Locked())
486 return; 487 return;
487 488
488 pending_read_ = true; 489 pending_read_ = true;
489 audio_buffer_stream_.Read(base::Bind(&AudioRendererImpl::DecodedAudioReady, 490 audio_buffer_stream_->Read(base::Bind(&AudioRendererImpl::DecodedAudioReady,
490 weak_factory_.GetWeakPtr())); 491 weak_factory_.GetWeakPtr()));
491 } 492 }
492 493
493 bool AudioRendererImpl::CanRead_Locked() { 494 bool AudioRendererImpl::CanRead_Locked() {
494 lock_.AssertAcquired(); 495 lock_.AssertAcquired();
495 496
496 switch (state_) { 497 switch (state_) {
497 case kUninitialized: 498 case kUninitialized:
498 case kInitializing: 499 case kInitializing:
499 case kFlushing: 500 case kFlushing:
500 case kFlushed: 501 case kFlushed:
(...skipping 199 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
« no previous file with comments | « media/filters/audio_renderer_impl.h ('k') | media/filters/decoder_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698