| Index: media/filters/ffmpeg_video_decoder.cc
|
| diff --git a/media/filters/ffmpeg_video_decoder.cc b/media/filters/ffmpeg_video_decoder.cc
|
| index 6f6c49506d54ebe41f26fd474d913bdbd67c202a..d7bbf82d28bebec52aee5d782be414e627f61bf7 100644
|
| --- a/media/filters/ffmpeg_video_decoder.cc
|
| +++ b/media/filters/ffmpeg_video_decoder.cc
|
| @@ -217,8 +217,7 @@ void FFmpegVideoDecoder::ReadFromDemuxerStream() {
|
| DCHECK_NE(state_, kDecodeFinished);
|
| DCHECK(!read_cb_.is_null());
|
|
|
| - demuxer_stream_->Read(base::Bind(
|
| - &FFmpegVideoDecoder::BufferReady, this));
|
| + demuxer_stream_->Read(base::Bind(&FFmpegVideoDecoder::BufferReady, this));
|
| }
|
|
|
| void FFmpegVideoDecoder::BufferReady(
|
| @@ -233,6 +232,21 @@ void FFmpegVideoDecoder::BufferReady(
|
|
|
| DCHECK(!read_cb_.is_null());
|
|
|
| + if (status == DemuxerStream::kConfigChanged) {
|
| + if (!ConfigureDecoder()) {
|
| + base::ResetAndReturn(&read_cb_).Run(kDecodeError, NULL);
|
| + state_ = kDecodeFinished;
|
| + if (!reset_cb_.is_null())
|
| + base::ResetAndReturn(&reset_cb_).Run();
|
| + return;
|
| + }
|
| +
|
| + if (reset_cb_.is_null()) {
|
| + ReadFromDemuxerStream();
|
| + return;
|
| + }
|
| + }
|
| +
|
| if (!reset_cb_.is_null()) {
|
| base::ResetAndReturn(&read_cb_).Run(kOk, NULL);
|
| DoReset();
|
| @@ -244,16 +258,6 @@ void FFmpegVideoDecoder::BufferReady(
|
| return;
|
| }
|
|
|
| - if (status == DemuxerStream::kConfigChanged) {
|
| - if (!ConfigureDecoder()) {
|
| - base::ResetAndReturn(&read_cb_).Run(kDecodeError, NULL);
|
| - return;
|
| - }
|
| -
|
| - ReadFromDemuxerStream();
|
| - return;
|
| - }
|
| -
|
| DCHECK_EQ(status, DemuxerStream::kOk);
|
| DecodeBuffer(buffer);
|
| }
|
|
|