From ce326c11308c380f30e580cb05e6e210b6344fc7 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Wed, 14 Mar 2012 07:55:27 +0100 Subject: [PATCH] avconv: check for get_filtered_frame() failure. --- avconv.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/avconv.c b/avconv.c index 76f73db43b..044a3017aa 100644 --- a/avconv.c +++ b/avconv.c @@ -2015,8 +2015,8 @@ static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int decoded_frame->pts, decoded_frame->sample_aspect_ratio); if (!ist->filtered_frame && !(ist->filtered_frame = avcodec_alloc_frame())) { - av_free(buffer_to_free); - return AVERROR(ENOMEM); + ret = AVERROR(ENOMEM); + goto fail; } else avcodec_get_frame_defaults(ist->filtered_frame); filtered_frame = ist->filtered_frame; @@ -2024,7 +2024,10 @@ static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int frame_available = avfilter_poll_frame(ost->output_video_filter->inputs[0]); while (frame_available) { AVRational ist_pts_tb; - get_filtered_video_frame(ost->output_video_filter, filtered_frame, &ost->picref, &ist_pts_tb); + if ((ret = get_filtered_video_frame(ost->output_video_filter, + filtered_frame, &ost->picref, + &ist_pts_tb)) < 0) + goto fail; if (ost->picref) filtered_frame->pts = av_rescale_q(ost->picref->pts, ist_pts_tb, AV_TIME_BASE_Q); if (ost->picref->video && !ost->frame_aspect_ratio) @@ -2045,6 +2048,7 @@ static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int #endif } +fail: av_free(buffer_to_free); return ret; }