Index: media/filters/ffmpeg_video_decoder.cc |
diff --git a/media/filters/ffmpeg_video_decoder.cc b/media/filters/ffmpeg_video_decoder.cc |
index 93dfbfb93881e340b5a4a6d155521f6a826dffb3..e61affb05926a0d6274fa1fc0425381abb3870d2 100644 |
--- a/media/filters/ffmpeg_video_decoder.cc |
+++ b/media/filters/ffmpeg_video_decoder.cc |
@@ -5,11 +5,11 @@ |
#include "media/filters/ffmpeg_video_decoder.h" |
#include "base/bind.h" |
+#include "base/callback_helpers.h" |
#include "base/command_line.h" |
#include "base/message_loop.h" |
#include "base/string_number_conversions.h" |
#include "media/base/demuxer_stream.h" |
-#include "media/base/filter_host.h" |
#include "media/base/limits.h" |
#include "media/base/media_switches.h" |
#include "media/base/pipeline.h" |
@@ -212,7 +212,7 @@ void FFmpegVideoDecoder::DoRead(const ReadCB& read_cb) { |
// Return empty frames if decoding has finished. |
if (state_ == kDecodeFinished) { |
- read_cb.Run(VideoFrame::CreateEmptyFrame()); |
+ read_cb.Run(kOk, VideoFrame::CreateEmptyFrame()); |
return; |
} |
@@ -288,8 +288,7 @@ void FFmpegVideoDecoder::DoDecodeBuffer(const scoped_refptr<Buffer>& buffer) { |
unencrypted_buffer = decryptor_.Decrypt(buffer); |
if (!unencrypted_buffer || !unencrypted_buffer->GetDataSize()) { |
state_ = kDecodeFinished; |
- DeliverFrame(VideoFrame::CreateEmptyFrame()); |
- host()->SetError(PIPELINE_ERROR_DECRYPT); |
+ base::ResetAndReturn(&read_cb_).Run(kDecryptError, NULL); |
return; |
} |
} |
@@ -297,8 +296,7 @@ void FFmpegVideoDecoder::DoDecodeBuffer(const scoped_refptr<Buffer>& buffer) { |
scoped_refptr<VideoFrame> video_frame; |
if (!Decode(unencrypted_buffer, &video_frame)) { |
state_ = kDecodeFinished; |
- DeliverFrame(VideoFrame::CreateEmptyFrame()); |
- host()->SetError(PIPELINE_ERROR_DECODE); |
+ base::ResetAndReturn(&read_cb_).Run(kDecodeError, NULL); |
return; |
} |
@@ -423,9 +421,7 @@ bool FFmpegVideoDecoder::Decode( |
void FFmpegVideoDecoder::DeliverFrame( |
const scoped_refptr<VideoFrame>& video_frame) { |
// Reset the callback before running to protect against reentrancy. |
- ReadCB read_cb = read_cb_; |
- read_cb_.Reset(); |
- read_cb.Run(video_frame); |
+ base::ResetAndReturn(&read_cb_).Run(kOk, video_frame); |
} |
void FFmpegVideoDecoder::ReleaseFFmpegResources() { |