summaryrefslogtreecommitdiff
path: root/libavdevice
diff options
context:
space:
mode:
authorLimin Wang <lance.lmwang@gmail.com>2020-09-17 21:54:28 +0800
committerLimin Wang <lance.lmwang@gmail.com>2020-09-21 09:30:54 +0800
commita554adaab83f91685edd89f91d7373c1dc60709c (patch)
treed29565ca4dd1d4c5399009cfeb3a739715056b03 /libavdevice
parent7786d795c294bd56aeaec5d913bf41dc5e7725c8 (diff)
downloadffmpeg-a554adaab83f91685edd89f91d7373c1dc60709c.tar.gz
avdevice/lavfi: unref the frame on failure
Reviewed-by: Nicolas George <george@nsup.org> Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
Diffstat (limited to 'libavdevice')
-rw-r--r--libavdevice/lavfi.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/libavdevice/lavfi.c b/libavdevice/lavfi.c
index 268dc0d2a2..a4b510ff97 100644
--- a/libavdevice/lavfi.c
+++ b/libavdevice/lavfi.c
@@ -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)