Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Thompson <sw@jkqxz.net>2019-03-31 17:39:35 +0300
committerMark Thompson <sw@jkqxz.net>2019-06-02 19:30:41 +0300
commit6ed34a437925c5263f6c4ac7d0a9a46955055abe (patch)
tree6f4186dbe757ec69914233920370e1d3fcda50c6 /libavfilter/vf_scale_vaapi.c
parent963c4f85fe547ef51fafb66d7eceb3f5637d3843 (diff)
lavfi/vaapi: Factorise out common code for parameter buffer setup
Also enables cropping on all VAAPI filters, inherited from the existing support in scale_vaapi.
Diffstat (limited to 'libavfilter/vf_scale_vaapi.c')
-rw-r--r--libavfilter/vf_scale_vaapi.c38
1 files changed, 6 insertions, 32 deletions
diff --git a/libavfilter/vf_scale_vaapi.c b/libavfilter/vf_scale_vaapi.c
index 3699363140..369daa787b 100644
--- a/libavfilter/vf_scale_vaapi.c
+++ b/libavfilter/vf_scale_vaapi.c
@@ -89,9 +89,7 @@ static int scale_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame)
VAAPIVPPContext *vpp_ctx = avctx->priv;
ScaleVAAPIContext *ctx = avctx->priv;
AVFrame *output_frame = NULL;
- VASurfaceID input_surface, output_surface;
VAProcPipelineParameterBuffer params;
- VARectangle input_region;
int err;
av_log(avctx, AV_LOG_DEBUG, "Filter input: %s, %ux%u (%"PRId64").\n",
@@ -101,10 +99,6 @@ static int scale_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame)
if (vpp_ctx->va_context == VA_INVALID_ID)
return AVERROR(EINVAL);
- input_surface = (VASurfaceID)(uintptr_t)input_frame->data[3];
- av_log(avctx, AV_LOG_DEBUG, "Using surface %#x for scale input.\n",
- input_surface);
-
output_frame = ff_get_video_buffer(outlink, vpp_ctx->output_width,
vpp_ctx->output_height);
if (!output_frame) {
@@ -112,34 +106,14 @@ static int scale_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame)
goto fail;
}
- output_surface = (VASurfaceID)(uintptr_t)output_frame->data[3];
- av_log(avctx, AV_LOG_DEBUG, "Using surface %#x for scale output.\n",
- output_surface);
-
- memset(&params, 0, sizeof(params));
-
- input_region = (VARectangle) {
- .x = input_frame->crop_left,
- .y = input_frame->crop_top,
- .width = input_frame->width -
- (input_frame->crop_left + input_frame->crop_right),
- .height = input_frame->height -
- (input_frame->crop_top + input_frame->crop_bottom),
- };
-
- params.surface = input_surface;
- params.surface_region = &input_region;
- params.surface_color_standard =
- ff_vaapi_vpp_colour_standard(input_frame->colorspace);
-
- params.output_region = 0;
- params.output_background_color = VAAPI_VPP_BACKGROUND_BLACK;
- params.output_color_standard = params.surface_color_standard;
+ err = ff_vaapi_vpp_init_params(avctx, &params,
+ input_frame, output_frame);
+ if (err < 0)
+ goto fail;
- params.pipeline_flags = 0;
- params.filter_flags = ctx->mode;
+ params.filter_flags |= ctx->mode;
- err = ff_vaapi_vpp_render_picture(avctx, &params, output_surface);
+ err = ff_vaapi_vpp_render_picture(avctx, &params, output_frame);
if (err < 0)
goto fail;