Index: media/filters/vpx_video_decoder.cc |
diff --git a/media/filters/vpx_video_decoder.cc b/media/filters/vpx_video_decoder.cc |
index 894f8712c70fbf8c27efdd20f3c82d898ab86910..b33b36335cdf9729617fc87c6425e8c9553b3732 100644 |
--- a/media/filters/vpx_video_decoder.cc |
+++ b/media/filters/vpx_video_decoder.cc |
@@ -215,7 +215,8 @@ VpxVideoDecoder::~VpxVideoDecoder() { |
void VpxVideoDecoder::Initialize(const VideoDecoderConfig& config, |
bool low_delay, |
- const PipelineStatusCB& status_cb) { |
+ const PipelineStatusCB& status_cb, |
+ const OutputCB& output_cb) { |
DCHECK(task_runner_->BelongsToCurrentThread()); |
DCHECK(config.IsValidConfig()); |
DCHECK(!config.is_encrypted()); |
@@ -229,6 +230,7 @@ void VpxVideoDecoder::Initialize(const VideoDecoderConfig& config, |
// Success! |
config_ = config; |
state_ = kNormal; |
+ output_cb_ = output_cb; |
status_cb.Run(PIPELINE_OK); |
} |
@@ -314,13 +316,13 @@ void VpxVideoDecoder::Decode(const scoped_refptr<DecoderBuffer>& buffer, |
decode_cb_ = BindToCurrentLoop(decode_cb); |
if (state_ == kError) { |
- base::ResetAndReturn(&decode_cb_).Run(kDecodeError, NULL); |
+ base::ResetAndReturn(&decode_cb_).Run(kDecodeError); |
return; |
} |
// Return empty frames if decoding has finished. |
if (state_ == kDecodeFinished) { |
- base::ResetAndReturn(&decode_cb_).Run(kOk, VideoFrame::CreateEOSFrame()); |
+ base::ResetAndReturn(&decode_cb_).Run(kOk); |
return; |
} |
@@ -352,24 +354,24 @@ void VpxVideoDecoder::DecodeBuffer(const scoped_refptr<DecoderBuffer>& buffer) { |
// Transition to kDecodeFinished on the first end of stream buffer. |
if (state_ == kNormal && buffer->end_of_stream()) { |
state_ = kDecodeFinished; |
- base::ResetAndReturn(&decode_cb_).Run(kOk, VideoFrame::CreateEOSFrame()); |
+ output_cb_.Run(VideoFrame::CreateEOSFrame()); |
+ base::ResetAndReturn(&decode_cb_).Run(kOk); |
xhwang
2014/05/29 22:15:14
fix indent
Sergey Ulanov
2014/06/03 00:08:11
Done.
|
return; |
} |
scoped_refptr<VideoFrame> video_frame; |
if (!VpxDecode(buffer, &video_frame)) { |
state_ = kError; |
- base::ResetAndReturn(&decode_cb_).Run(kDecodeError, NULL); |
+ base::ResetAndReturn(&decode_cb_).Run(kDecodeError); |
return; |
} |
// If we didn't get a frame we need more data. |
xhwang
2014/05/29 22:15:14
This comment is obsolete.
Sergey Ulanov
2014/06/03 00:08:11
Done.
|
- if (!video_frame.get()) { |
- base::ResetAndReturn(&decode_cb_).Run(kNotEnoughData, NULL); |
- return; |
+ if (video_frame) { |
+ output_cb_.Run(video_frame); |
} |
xhwang
2014/05/29 22:15:14
nit: {} is optional in this case..
Sergey Ulanov
2014/06/03 00:08:11
Done.
|
- base::ResetAndReturn(&decode_cb_).Run(kOk, video_frame); |
+ base::ResetAndReturn(&decode_cb_).Run(kOk); |
xhwang
2014/05/29 22:15:14
nit: Move this up to l.368? Personally I feel it a
Sergey Ulanov
2014/06/03 00:08:11
Done.
|
} |
bool VpxVideoDecoder::VpxDecode(const scoped_refptr<DecoderBuffer>& buffer, |