| Index: media/filters/ffmpeg_video_decoder.cc
|
| diff --git a/media/filters/ffmpeg_video_decoder.cc b/media/filters/ffmpeg_video_decoder.cc
|
| index d75782f94922b0aba3d46b0f8b94c44edac4be3f..db70580f66c29ad96275c21975cfa78295da2f25 100644
|
| --- a/media/filters/ffmpeg_video_decoder.cc
|
| +++ b/media/filters/ffmpeg_video_decoder.cc
|
| @@ -251,25 +251,21 @@ void FFmpegVideoDecoder::ReadFromDemuxerStream() {
|
| DCHECK_NE(state_, kDecodeFinished);
|
| DCHECK(!read_cb_.is_null());
|
|
|
| - demuxer_stream_->Read(base::Bind(&FFmpegVideoDecoder::DecryptOrDecodeBuffer,
|
| - this));
|
| -}
|
| -
|
| -void FFmpegVideoDecoder::DecryptOrDecodeBuffer(
|
| - DemuxerStream::Status status,
|
| - const scoped_refptr<DecoderBuffer>& buffer) {
|
| - DCHECK_EQ(status != DemuxerStream::kOk, !buffer) << status;
|
| - // TODO(scherkus): fix FFmpegDemuxerStream::Read() to not execute our read
|
| - // callback on the same execution stack so we can get rid of forced task post.
|
| - message_loop_->PostTask(FROM_HERE, base::Bind(
|
| - &FFmpegVideoDecoder::DoDecryptOrDecodeBuffer, this, status, buffer));
|
| + demuxer_stream_->Read(base::Bind(
|
| + &FFmpegVideoDecoder::DoDecryptOrDecodeBuffer, this));
|
| }
|
|
|
| void FFmpegVideoDecoder::DoDecryptOrDecodeBuffer(
|
| DemuxerStream::Status status,
|
| const scoped_refptr<DecoderBuffer>& buffer) {
|
| - DCHECK(message_loop_->BelongsToCurrentThread());
|
| + if (!message_loop_->BelongsToCurrentThread()) {
|
| + message_loop_->PostTask(FROM_HERE, base::Bind(
|
| + &FFmpegVideoDecoder::DoDecryptOrDecodeBuffer, this, status, buffer));
|
| + return;
|
| + }
|
| +
|
| DCHECK_NE(state_, kDecodeFinished);
|
| + DCHECK_EQ(status != DemuxerStream::kOk, !buffer) << status;
|
|
|
| if (state_ == kUninitialized)
|
| return;
|
|
|