Index: media/filters/decrypting_audio_decoder.cc |
diff --git a/media/filters/decrypting_audio_decoder.cc b/media/filters/decrypting_audio_decoder.cc |
index 8a898147e5a2d9fc531db8e5690e6365ce9b4ee4..bd4975302b47d35c3bdb9486691c7b21f01ecdfd 100644 |
--- a/media/filters/decrypting_audio_decoder.cc |
+++ b/media/filters/decrypting_audio_decoder.cc |
@@ -297,11 +297,9 @@ void DecryptingAudioDecoder::DeliverFrame( |
if (scoped_pending_buffer_to_decode->end_of_stream()) { |
state_ = kDecodeFinished; |
output_cb_.Run(AudioBuffer::CreateEOSBuffer()); |
- base::ResetAndReturn(&decode_cb_).Run(kOk); |
- return; |
+ } else { |
+ state_ = kIdle; |
} |
- |
- state_ = kIdle; |
base::ResetAndReturn(&decode_cb_).Run(kOk); |
return; |
} |
@@ -310,6 +308,14 @@ void DecryptingAudioDecoder::DeliverFrame( |
DCHECK(!frames.empty()); |
ProcessDecodedFrames(frames); |
+ if (scoped_pending_buffer_to_decode->end_of_stream()) { |
+ // Set |pending_buffer_to_decode_| back as we need to keep flushing the |
+ // decryptor until kNeedMoreData is returned. |
+ pending_buffer_to_decode_ = scoped_pending_buffer_to_decode; |
+ DecodePendingBuffer(); |
+ return; |
+ } |
+ |
state_ = kIdle; |
base::ResetAndReturn(&decode_cb_).Run(kOk); |
} |