diff options
Diffstat (limited to 'libavfilter/buffersrc.c')
-rw-r--r-- | libavfilter/buffersrc.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c index 0828b153d8..2aa7d7d118 100644 --- a/libavfilter/buffersrc.c +++ b/libavfilter/buffersrc.c @@ -323,9 +323,10 @@ static int request_frame(AVFilterLink *link) switch (link->type) { case AVMEDIA_TYPE_VIDEO: - ff_start_frame(link, avfilter_ref_buffer(buf, ~0)); - ff_draw_slice(link, 0, link->h, 1); - ff_end_frame(link); + if ((ret = ff_start_frame(link, avfilter_ref_buffer(buf, ~0))) < 0 || + (ret = ff_draw_slice(link, 0, link->h, 1)) < 0 || + (ret = ff_end_frame(link)) < 0) + goto fail; break; case AVMEDIA_TYPE_AUDIO: ret = ff_filter_samples(link, avfilter_ref_buffer(buf, ~0)); @@ -334,6 +335,7 @@ static int request_frame(AVFilterLink *link) return AVERROR(EINVAL); } +fail: avfilter_unref_buffer(buf); return ret; |