diff options
author | Limin Wang <lance.lmwang@gmail.com> | 2020-09-17 21:54:28 +0800 |
---|---|---|
committer | Limin Wang <lance.lmwang@gmail.com> | 2020-09-21 09:30:54 +0800 |
commit | a554adaab83f91685edd89f91d7373c1dc60709c (patch) | |
tree | d29565ca4dd1d4c5399009cfeb3a739715056b03 /libavdevice | |
parent | 7786d795c294bd56aeaec5d913bf41dc5e7725c8 (diff) | |
download | ffmpeg-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.c | 19 |
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) |