You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
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:
@@ -432,7 +432,7 @@ static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt)
|
|||||||
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
|
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
|
||||||
size = av_image_get_buffer_size(frame->format, frame->width, frame->height, 1);
|
size = av_image_get_buffer_size(frame->format, frame->width, frame->height, 1);
|
||||||
if ((ret = av_new_packet(pkt, size)) < 0)
|
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,
|
av_image_copy_to_buffer(pkt->data, size, (const uint8_t **)frame->data, frame->linesize,
|
||||||
frame->format, frame->width, frame->height, 1);
|
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) *
|
size = frame->nb_samples * av_get_bytes_per_sample(frame->format) *
|
||||||
frame->channels;
|
frame->channels;
|
||||||
if ((ret = av_new_packet(pkt, size)) < 0)
|
if ((ret = av_new_packet(pkt, size)) < 0)
|
||||||
return ret;
|
goto fail;;
|
||||||
memcpy(pkt->data, frame->data[0], size);
|
memcpy(pkt->data, frame->data[0], size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -449,18 +449,19 @@ static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt)
|
|||||||
int size;
|
int size;
|
||||||
uint8_t *metadata = av_packet_pack_dictionary(frame_metadata, &size);
|
uint8_t *metadata = av_packet_pack_dictionary(frame_metadata, &size);
|
||||||
|
|
||||||
if (!metadata)
|
if (!metadata) {
|
||||||
return AVERROR(ENOMEM);
|
ret = AVERROR(ENOMEM);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
if ((ret = av_packet_add_side_data(pkt, AV_PKT_DATA_STRINGS_METADATA,
|
if ((ret = av_packet_add_side_data(pkt, AV_PKT_DATA_STRINGS_METADATA,
|
||||||
metadata, size)) < 0) {
|
metadata, size)) < 0) {
|
||||||
av_freep(&metadata);
|
av_freep(&metadata);
|
||||||
return ret;
|
goto fail;;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ret = create_subcc_packet(avctx, frame, min_pts_sink_idx)) < 0) {
|
if ((ret = create_subcc_packet(avctx, frame, min_pts_sink_idx)) < 0) {
|
||||||
av_frame_unref(frame);
|
goto fail;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pkt->stream_index = stream_idx;
|
pkt->stream_index = stream_idx;
|
||||||
@@ -468,6 +469,10 @@ static int lavfi_read_packet(AVFormatContext *avctx, AVPacket *pkt)
|
|||||||
pkt->pos = frame->pkt_pos;
|
pkt->pos = frame->pkt_pos;
|
||||||
av_frame_unref(frame);
|
av_frame_unref(frame);
|
||||||
return size;
|
return size;
|
||||||
|
fail:
|
||||||
|
av_frame_unref(frame);
|
||||||
|
return ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define OFFSET(x) offsetof(LavfiContext, x)
|
#define OFFSET(x) offsetof(LavfiContext, x)
|
||||||
|
Reference in New Issue
Block a user