lavfi: Always propagate hw_frames_ctx through links
[ffmpeg.git] / libavfilter / vf_scale_vaapi.c
index 704456dd390b76429863c87b1e8bbcb705078a7c..50be68eee07374a78bba1eed8850c3ab9e019fe6 100644 (file)
@@ -31,6 +31,7 @@
 #include "avfilter.h"
 #include "formats.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct ScaleVAAPIContext {
     const AVClass *class;
@@ -274,19 +275,13 @@ static int scale_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame)
     av_log(ctx, AV_LOG_DEBUG, "Using surface %#x for scale input.\n",
            input_surface);
 
-    output_frame = av_frame_alloc();
+    output_frame = ff_get_video_buffer(outlink, ctx->output_width,
+                                       ctx->output_height);
     if (!output_frame) {
-        av_log(ctx, AV_LOG_ERROR, "Failed to allocate output frame.");
         err = AVERROR(ENOMEM);
         goto fail;
     }
 
-    err = av_hwframe_get_buffer(ctx->output_frames_ref, output_frame, 0);
-    if (err < 0) {
-        av_log(ctx, AV_LOG_ERROR, "Failed to get surface for "
-               "output: %d\n.", err);
-    }
-
     output_surface = (VASurfaceID)(uintptr_t)output_frame->data[3];
     av_log(ctx, AV_LOG_DEBUG, "Using surface %#x for scale output.\n",
            output_surface);
@@ -468,4 +463,5 @@ AVFilter ff_vf_scale_vaapi = {
     .inputs        = scale_vaapi_inputs,
     .outputs       = scale_vaapi_outputs,
     .priv_class    = &scale_vaapi_class,
+    .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE,
 };