Skip to content
Snippets Groups Projects
Commit 2cef68da authored by Stefano Pigozzi's avatar Stefano Pigozzi Committed by Vittorio Giovara
Browse files

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: default avatarStefano Pigozzi <stefano.pigozzi@gmail.com>
parent 0352ff10
No related branches found
No related tags found
No related merge requests found
...@@ -345,24 +345,25 @@ static int vda_h264_end_frame(AVCodecContext *avctx) ...@@ -345,24 +345,25 @@ static int vda_h264_end_frame(AVCodecContext *avctx)
CFRelease(coded_frame); CFRelease(coded_frame);
if (!vda->frame)
return AVERROR_UNKNOWN;
if (status != kVDADecoderNoErr) { if (status != kVDADecoderNoErr) {
av_log(avctx, AV_LOG_ERROR, "Failed to decode frame (%d)\n", status); av_log(avctx, AV_LOG_ERROR, "Failed to decode frame (%d)\n", status);
return AVERROR_UNKNOWN; 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, frame->buf[0] = av_buffer_create((uint8_t*)vda->frame,
sizeof(vda->frame), sizeof(vda->frame),
release_buffer, NULL, release_buffer, NULL,
AV_BUFFER_FLAG_READONLY); AV_BUFFER_FLAG_READONLY);
if (!frame->buf) if (!frame->buf)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
frame->data[3] = (uint8_t*)vda->frame; frame->data[3] = (uint8_t*)vda->frame;
vda->frame = NULL; vda->frame = NULL;
}
return 0; return 0;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment