avdevice/lavfi: unref the frame on failure

Reviewed-by: Nicolas George <george@nsup.org>
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
This commit is contained in:
Limin Wang 2020-09-17 21:54:28 +08:00
parent 7786d795c2
commit a554adaab8

View File

@ -432,7 +432,7 @@ static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt)
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
size = av_image_get_buffer_size(frame->format, frame->width, frame->height, 1);
if ((ret = av_new_packet(pkt, size)) < 0)
return ret;
goto fail;
av_image_copy_to_buffer(pkt->data, size, (const uint8_t **)frame->data, frame->linesize,
frame->format, frame->width, frame->height, 1);
@ -440,7 +440,7 @@ static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt)
size = frame->nb_samples * av_get_bytes_per_sample(frame->format) *
frame->channels;
if ((ret = av_new_packet(pkt, size)) < 0)
return ret;
goto fail;;
memcpy(pkt->data, frame->data[0], size);
}
@ -449,18 +449,19 @@ static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt)
int size;
uint8_t *metadata = av_packet_pack_dictionary(frame_metadata, &size);
if (!metadata)
return AVERROR(ENOMEM);
if (!metadata) {
ret = AVERROR(ENOMEM);
goto fail;
}
if ((ret = av_packet_add_side_data(pkt, AV_PKT_DATA_STRINGS_METADATA,
metadata, size)) < 0) {
av_freep(&metadata);
return ret;
goto fail;;
}
}
if ((ret = create_subcc_packet(avctx, frame, min_pts_sink_idx)) < 0) {
av_frame_unref(frame);
return ret;
goto fail;
}
pkt->stream_index = stream_idx;
@ -468,6 +469,10 @@ static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt)
pkt->pos = frame->pkt_pos;
av_frame_unref(frame);
return size;
fail:
av_frame_unref(frame);
return ret;
}
#define OFFSET(x) offsetof(LavfiContext, x)