]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/vf_alphamerge.c
avfilter/vf_zscale: fix typo
[ffmpeg] / libavfilter / vf_alphamerge.c
index 5f0da35eba9d894f91618184a0b256e84e58dc5b..8a1ca22da59ec809ead4de5ad8be6a1b016906dc 100644 (file)
@@ -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;
 }