X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fmedia%2Ffilters%2Faudio_renderer_impl.cc;h=a102b6e132920943dbb7901cc16130068b358dae;hb=ff3e2503a20db9193d323c1d19c38c68004dec4a;hp=f08ef83b418a5fb97808f973c9428ee899243817;hpb=7338fba38ba696536d1cc9d389afd716a6ab2fe6;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/media/filters/audio_renderer_impl.cc b/src/media/filters/audio_renderer_impl.cc index f08ef83..a102b6e 100644 --- a/src/media/filters/audio_renderer_impl.cc +++ b/src/media/filters/audio_renderer_impl.cc @@ -216,6 +216,19 @@ void AudioRendererImpl::Stop(const base::Closure& callback) { 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; @@ -285,8 +298,9 @@ void AudioRendererImpl::OnDecoderSelected( DCHECK(task_runner_->BelongsToCurrentThread()); scoped_ptr deleter(decoder_selector_.Pass()); + decoder_ = decoder.Pass(); - if (!decoder) { + if (!decoder_ || !stop_cb_.is_null()) { { base::AutoLock auto_lock(lock_); ChangeState_Locked(kUninitialized); @@ -302,7 +316,6 @@ void AudioRendererImpl::OnDecoderSelected( } base::AutoLock auto_lock(lock_); - decoder_ = decoder.Pass(); decrypting_demuxer_stream_ = decrypting_demuxer_stream.Pass(); int sample_rate = decoder_->samples_per_second();