mirror of https://git.ffmpeg.org/ffmpeg.git
avfilter: fix leaks on error in ff_filter_frame
This commit is contained in:
parent
5655732c77
commit
abb5e37f64
|
@ -729,7 +729,8 @@ int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
|
||||||
{
|
{
|
||||||
int (*filter_frame)(AVFilterLink *, AVFrame *);
|
int (*filter_frame)(AVFilterLink *, AVFrame *);
|
||||||
AVFilterPad *dst = link->dstpad;
|
AVFilterPad *dst = link->dstpad;
|
||||||
AVFrame *out;
|
AVFrame *out = NULL;
|
||||||
|
int ret;
|
||||||
|
|
||||||
FF_DPRINTF_START(NULL, filter_frame);
|
FF_DPRINTF_START(NULL, filter_frame);
|
||||||
ff_dlog_link(NULL, link, 1);
|
ff_dlog_link(NULL, link, 1);
|
||||||
|
@ -748,13 +749,18 @@ int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
|
||||||
case AVMEDIA_TYPE_AUDIO:
|
case AVMEDIA_TYPE_AUDIO:
|
||||||
out = ff_get_audio_buffer(link, frame->nb_samples);
|
out = ff_get_audio_buffer(link, frame->nb_samples);
|
||||||
break;
|
break;
|
||||||
default: return AVERROR(EINVAL);
|
default:
|
||||||
|
ret = AVERROR(EINVAL);
|
||||||
|
goto fail;
|
||||||
}
|
}
|
||||||
if (!out) {
|
if (!out) {
|
||||||
av_frame_free(&frame);
|
ret = AVERROR(ENOMEM);
|
||||||
return AVERROR(ENOMEM);
|
goto fail;
|
||||||
}
|
}
|
||||||
av_frame_copy_props(out, frame);
|
|
||||||
|
ret = av_frame_copy_props(out, frame);
|
||||||
|
if (ret < 0)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
switch (link->type) {
|
switch (link->type) {
|
||||||
case AVMEDIA_TYPE_VIDEO:
|
case AVMEDIA_TYPE_VIDEO:
|
||||||
|
@ -767,7 +773,9 @@ int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
|
||||||
av_get_channel_layout_nb_channels(frame->channel_layout),
|
av_get_channel_layout_nb_channels(frame->channel_layout),
|
||||||
frame->format);
|
frame->format);
|
||||||
break;
|
break;
|
||||||
default: return AVERROR(EINVAL);
|
default:
|
||||||
|
ret = AVERROR(EINVAL);
|
||||||
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
av_frame_free(&frame);
|
av_frame_free(&frame);
|
||||||
|
@ -775,6 +783,11 @@ int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
|
||||||
out = frame;
|
out = frame;
|
||||||
|
|
||||||
return filter_frame(link, out);
|
return filter_frame(link, out);
|
||||||
|
|
||||||
|
fail:
|
||||||
|
av_frame_free(&out);
|
||||||
|
av_frame_free(&frame);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
const AVClass *avfilter_get_class(void)
|
const AVClass *avfilter_get_class(void)
|
||||||
|
|
Loading…
Reference in New Issue