Module: libav Branch: master Commit: 2cef68da69a17ed09c313ba3c3850ec1cc0a80e0
Author: Stefano Pigozzi <[email protected]> Committer: Vittorio Giovara <[email protected]> Date: Mon Dec 29 21:28:50 2014 +0100 vda: error out if decoded CVPixelBuffer is empty On some video samples, VDA silently fails to decode frames and returns kVDADecoderNoErr. Error out in these cases to avoid producing AVFrames with empty planes. Signed-off-by: Stefano Pigozzi <[email protected]> --- libavcodec/vda_h264.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/libavcodec/vda_h264.c b/libavcodec/vda_h264.c index c7f6a74..acefde6 100644 --- a/libavcodec/vda_h264.c +++ b/libavcodec/vda_h264.c @@ -345,24 +345,25 @@ static int vda_h264_end_frame(AVCodecContext *avctx) CFRelease(coded_frame); + if (!vda->frame) + return AVERROR_UNKNOWN; + if (status != kVDADecoderNoErr) { av_log(avctx, AV_LOG_ERROR, "Failed to decode frame (%d)\n", status); return AVERROR_UNKNOWN; } - if (vda->frame) { - av_buffer_unref(&frame->buf[0]); + av_buffer_unref(&frame->buf[0]); - frame->buf[0] = av_buffer_create((uint8_t*)vda->frame, - sizeof(vda->frame), - release_buffer, NULL, - AV_BUFFER_FLAG_READONLY); - if (!frame->buf) - return AVERROR(ENOMEM); + frame->buf[0] = av_buffer_create((uint8_t*)vda->frame, + sizeof(vda->frame), + release_buffer, NULL, + AV_BUFFER_FLAG_READONLY); + if (!frame->buf) + return AVERROR(ENOMEM); - frame->data[3] = (uint8_t*)vda->frame; - vda->frame = NULL; - } + frame->data[3] = (uint8_t*)vda->frame; + vda->frame = NULL; return 0; } _______________________________________________ libav-commits mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-commits
