| Index: media/filters/decrypting_video_decoder.cc
|
| diff --git a/media/filters/decrypting_video_decoder.cc b/media/filters/decrypting_video_decoder.cc
|
| index fdc960eefa1429778f980553c1a6adc08620c5d5..05ed3c4a0d61f3ab789be75c6d493c33d1c6b981 100644
|
| --- a/media/filters/decrypting_video_decoder.cc
|
| +++ b/media/filters/decrypting_video_decoder.cc
|
| @@ -32,7 +32,8 @@ DecryptingVideoDecoder::DecryptingVideoDecoder(
|
|
|
| void DecryptingVideoDecoder::Initialize(const VideoDecoderConfig& config,
|
| bool live_mode,
|
| - const PipelineStatusCB& status_cb) {
|
| + const PipelineStatusCB& status_cb,
|
| + const OutputCB& output_cb) {
|
| DVLOG(2) << "Initialize()";
|
| DCHECK(task_runner_->BelongsToCurrentThread());
|
| DCHECK(state_ == kUninitialized ||
|
| @@ -44,6 +45,7 @@ void DecryptingVideoDecoder::Initialize(const VideoDecoderConfig& config,
|
| DCHECK(config.is_encrypted());
|
|
|
| init_cb_ = BindToCurrentLoop(status_cb);
|
| + output_cb_ = BindToCurrentLoop(output_cb);
|
| weak_this_ = weak_factory_.GetWeakPtr();
|
| config_ = config;
|
|
|
| @@ -74,13 +76,14 @@ void DecryptingVideoDecoder::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());
|
| + output_cb_.Run(VideoFrame::CreateEOSFrame());
|
| + base::ResetAndReturn(&decode_cb_).Run(kOk);
|
| return;
|
| }
|
|
|
| @@ -116,7 +119,7 @@ void DecryptingVideoDecoder::Reset(const base::Closure& closure) {
|
| if (state_ == kWaitingForKey) {
|
| DCHECK(!decode_cb_.is_null());
|
| pending_buffer_to_decode_ = NULL;
|
| - base::ResetAndReturn(&decode_cb_).Run(kAborted, NULL);
|
| + base::ResetAndReturn(&decode_cb_).Run(kAborted);
|
| }
|
|
|
| DCHECK(decode_cb_.is_null());
|
| @@ -145,7 +148,7 @@ void DecryptingVideoDecoder::Stop() {
|
| if (!init_cb_.is_null())
|
| base::ResetAndReturn(&init_cb_).Run(DECODER_ERROR_NOT_SUPPORTED);
|
| if (!decode_cb_.is_null())
|
| - base::ResetAndReturn(&decode_cb_).Run(kAborted, NULL);
|
| + base::ResetAndReturn(&decode_cb_).Run(kAborted);
|
| if (!reset_cb_.is_null())
|
| base::ResetAndReturn(&reset_cb_).Run();
|
|
|
| @@ -241,7 +244,7 @@ void DecryptingVideoDecoder::DeliverFrame(
|
| pending_buffer_to_decode_ = NULL;
|
|
|
| if (!reset_cb_.is_null()) {
|
| - base::ResetAndReturn(&decode_cb_).Run(kAborted, NULL);
|
| + base::ResetAndReturn(&decode_cb_).Run(kAborted);
|
| DoReset();
|
| return;
|
| }
|
| @@ -251,7 +254,7 @@ void DecryptingVideoDecoder::DeliverFrame(
|
| if (status == Decryptor::kError) {
|
| DVLOG(2) << "DeliverFrame() - kError";
|
| state_ = kError;
|
| - base::ResetAndReturn(&decode_cb_).Run(kDecodeError, NULL);
|
| + base::ResetAndReturn(&decode_cb_).Run(kDecodeError);
|
| return;
|
| }
|
|
|
| @@ -275,13 +278,11 @@ void DecryptingVideoDecoder::DeliverFrame(
|
| DVLOG(2) << "DeliverFrame() - kNeedMoreData";
|
| if (scoped_pending_buffer_to_decode->end_of_stream()) {
|
| state_ = kDecodeFinished;
|
| - base::ResetAndReturn(&decode_cb_).Run(
|
| - kOk, media::VideoFrame::CreateEOSFrame());
|
| - return;
|
| + output_cb_.Run(media::VideoFrame::CreateEOSFrame());
|
| + } else {
|
| + state_ = kIdle;
|
| }
|
| -
|
| - state_ = kIdle;
|
| - base::ResetAndReturn(&decode_cb_).Run(kNotEnoughData, NULL);
|
| + base::ResetAndReturn(&decode_cb_).Run(kOk);
|
| return;
|
| }
|
|
|
| @@ -289,7 +290,8 @@ void DecryptingVideoDecoder::DeliverFrame(
|
| // No frame returned with kSuccess should be end-of-stream frame.
|
| DCHECK(!frame->end_of_stream());
|
| state_ = kIdle;
|
| - base::ResetAndReturn(&decode_cb_).Run(kOk, frame);
|
| + output_cb_.Run(frame);
|
| + base::ResetAndReturn(&decode_cb_).Run(kOk);
|
| }
|
|
|
| void DecryptingVideoDecoder::OnKeyAdded() {
|
|
|