X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fvf_alphamerge.c;h=8a1ca22da59ec809ead4de5ad8be6a1b016906dc;hb=bc22cd244e4c04fb304cfc4fcccb650abbd29ef2;hp=5f0da35eba9d894f91618184a0b256e84e58dc5b;hpb=27673f1bea1a390785b8c421213bcc53aca969e4;p=ffmpeg diff --git a/libavfilter/vf_alphamerge.c b/libavfilter/vf_alphamerge.c index 5f0da35eba9..8a1ca22da59 100644 --- a/libavfilter/vf_alphamerge.c +++ b/libavfilter/vf_alphamerge.c @@ -36,7 +36,6 @@ enum { Y, U, V, A }; typedef struct { - int frame_requested; int is_packed_rgb; uint8_t rgba_map[4]; struct FFBufQueue queue_main; @@ -58,11 +57,16 @@ static int query_formats(AVFilterContext *ctx) AV_PIX_FMT_NONE }; static const enum AVPixelFormat alpha_fmts[] = { AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE }; - AVFilterFormats *main_formats = ff_make_format_list(main_fmts); - AVFilterFormats *alpha_formats = ff_make_format_list(alpha_fmts); - ff_formats_ref(main_formats, &ctx->inputs[0]->out_formats); - ff_formats_ref(alpha_formats, &ctx->inputs[1]->out_formats); - ff_formats_ref(main_formats, &ctx->outputs[0]->in_formats); + AVFilterFormats *main_formats, *alpha_formats; + int ret; + + if (!(main_formats = ff_make_format_list(main_fmts)) || + !(alpha_formats = ff_make_format_list(alpha_fmts))) + return AVERROR(ENOMEM); + if ((ret = ff_formats_ref(main_formats , &ctx->inputs[0]->out_formats)) < 0 || + (ret = ff_formats_ref(alpha_formats, &ctx->inputs[1]->out_formats)) < 0 || + (ret = ff_formats_ref(main_formats , &ctx->outputs[0]->in_formats)) < 0) + return ret; return 0; } @@ -146,7 +150,6 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf) main_buf = ff_bufqueue_get(&merge->queue_main); alpha_buf = ff_bufqueue_get(&merge->queue_alpha); - merge->frame_requested = 0; draw_frame(ctx, main_buf, alpha_buf); ret = ff_filter_frame(ctx->outputs[0], main_buf); av_frame_free(&alpha_buf); @@ -160,13 +163,10 @@ static int request_frame(AVFilterLink *outlink) AlphaMergeContext *merge = ctx->priv; int in, ret; - merge->frame_requested = 1; - while (merge->frame_requested) { - in = ff_bufqueue_peek(&merge->queue_main, 0) ? 1 : 0; - ret = ff_request_frame(ctx->inputs[in]); - if (ret < 0) - return ret; - } + in = ff_bufqueue_peek(&merge->queue_main, 0) ? 1 : 0; + ret = ff_request_frame(ctx->inputs[in]); + if (ret < 0) + return ret; return 0; }