[FFmpeg-cvslog] avdevice/lavfi: unref the frame on failure
Limin Wang
git at videolan.org
Mon Sep 21 04:41:56 EEST 2020
ffmpeg | branch: master | Limin Wang <lance.lmwang at gmail.com> | Thu Sep 17 21:54:28 2020 +0800| [a554adaab83f91685edd89f91d7373c1dc60709c] | committer: Limin Wang
avdevice/lavfi: unref the frame on failure
Reviewed-by: Nicolas George <george at nsup.org>
Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a554adaab83f91685edd89f91d7373c1dc60709c
---
libavdevice/lavfi.c | 19 ++++++++++++-------
1 file 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)
More information about the ffmpeg-cvslog
mailing list