Index: media/filters/opus_audio_decoder.cc |
diff --git a/media/filters/opus_audio_decoder.cc b/media/filters/opus_audio_decoder.cc |
index e427c0abacae566b9941bdc6632d0892d573f70f..0296ea5756d7793edbc3e21a78b6aaee0ba9e3c2 100644 |
--- a/media/filters/opus_audio_decoder.cc |
+++ b/media/filters/opus_audio_decoder.cc |
@@ -327,12 +327,19 @@ void OpusAudioDecoder::Reset(const base::Closure& closure) { |
reset_cb.Run(); |
} |
-OpusAudioDecoder::~OpusAudioDecoder() { |
- // TODO(scherkus): should we require Stop() to be called? this might end up |
- // getting called on a random thread due to refcounting. |
+void OpusAudioDecoder::Stop(const base::Closure& closure) { |
+ DCHECK(task_runner_->BelongsToCurrentThread()); |
+ base::Closure stop_cb = BindToCurrentLoop(closure); |
+ |
+ opus_multistream_decoder_ctl(opus_decoder_, OPUS_RESET_STATE); |
+ ResetTimestampState(); |
CloseDecoder(); |
+ |
+ stop_cb.Run(); |
xhwang
2014/01/08 01:33:37
ditto about Stop() during pending demuxer read.
rileya (GONE FROM CHROMIUM)
2014/01/08 21:05:50
Added a TODO.
|
} |
+OpusAudioDecoder::~OpusAudioDecoder() {} |
+ |
void OpusAudioDecoder::ReadFromDemuxerStream() { |
DCHECK(!read_cb_.is_null()); |
demuxer_stream_->Read(base::Bind(&OpusAudioDecoder::BufferReady, weak_this_)); |