Chromium Code Reviews| 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, |