Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / media / filters / audio_renderer_impl.cc
index f08ef83..a102b6e 100644 (file)
@@ -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<AudioDecoderSelector> 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();