Chromium Code Reviews| 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_)); |