sink_ = NULL;
}
+ if (decrypting_demuxer_stream_) {
+ decrypting_demuxer_stream_->Stop(
+ base::Bind(&AudioRendererImpl::StopDecoder, weak_this_));
+ return;
+ }
+
+ StopDecoder();
+}
+
+void AudioRendererImpl::StopDecoder() {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(!stop_cb_.is_null());
+
if (decoder_) {
decoder_->Stop(base::ResetAndReturn(&stop_cb_));
return;
DCHECK(task_runner_->BelongsToCurrentThread());
scoped_ptr<AudioDecoderSelector> deleter(decoder_selector_.Pass());
+ decoder_ = decoder.Pass();
- if (!decoder) {
+ if (!decoder_ || !stop_cb_.is_null()) {
{
base::AutoLock auto_lock(lock_);
ChangeState_Locked(kUninitialized);
}
base::AutoLock auto_lock(lock_);
- decoder_ = decoder.Pass();
decrypting_demuxer_stream_ = decrypting_demuxer_stream.Pass();
int sample_rate = decoder_->samples_per_second();