From patchwork Wed Sep 12 12:35:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Zhao X-Patchwork-Id: 10304 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:12c4:0:0:0:0:0 with SMTP id 65-v6csp4794236jap; Wed, 12 Sep 2018 05:41:31 -0700 (PDT) X-Google-Smtp-Source: ANB0VdaVN8jHTouO3Llf9TuThAzl2HIwm0g4eDU24tCa2jBxWQKdJjfli+NnBRsenbkpKUAGsUOD X-Received: by 2002:a1c:7015:: with SMTP id l21-v6mr1480698wmc.81.1536756091777; Wed, 12 Sep 2018 05:41:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536756091; cv=none; d=google.com; s=arc-20160816; b=alp2JeNQ3FQmWu5UGRjZWssfIQ5/ZOt623fQV+Xkn4qLHXxfRnegGNYeeNAzQN38nr TQyD3mUGsUP8M8i56xSlXAn4ctVuR8x/P8gUM7zKewKfLOlDNQPJL0sW8qZYVGQmu+Ox o57BIW+D9jN0mrNmaM+r/aYlT1PUU/wM41UZIYGS6DkhYpeCk4seJOd9nSBzQwjfqwQC lfxEjkni8q4OCDH9ZlxXpQHwZzx40cp4ykA9K/4fawl3jiwhJejrVdYFehce0tv769y2 A+soiJlE0qItBGSlTfUf9K3Z3e5vrR+zbqCk/TPZviVVHXTz1rb118989Vg87DSZKwFt Ansg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to; bh=6R6Y1CUkpaXxP/o4NTaXzpz96rltTOE6n2FD/YyYgKM=; b=qu15hQxppEyAblyOaQVEaolk8y1TLPk8beOETNC3BCuvsiuBqHVr7/5HFmTvqQe7Y7 HPA39beXMETxE36h59W6UiVkUcNjkkSJpOuPJDwoHollIWMww6ebvlEyS48wMBZWrJ1h NjcljBCxHuHFpEn4wmYVZsyRGOn588ADxucVY03Xvtaq6vQLgRSJr+Ch2vmY6KaQZKl9 lOsF7b1LCp4j2VseYbhDmixQiK+a/pCehnq3aChybWI8FIIRqa5YqMHm0d58XAuFUMUs VZZ1X8a/2ZzMGoZYFj5OWUs5zofHI2CiN3t2CgyrILO+yYHY7h623e0gy+9a5s64Zl1k kLkA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b="VqJGdIY/"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id r23-v6si967911wmh.39.2018.09.12.05.41.29; Wed, 12 Sep 2018 05:41:31 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b="VqJGdIY/"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9A76868A54C; Wed, 12 Sep 2018 15:41:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 69FB5689FED for ; Wed, 12 Sep 2018 15:41:10 +0300 (EEST) Received: by mail-pf1-f196.google.com with SMTP id s13-v6so958279pfi.7 for ; Wed, 12 Sep 2018 05:41:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=CdNChmCzeXXznzQCB4nBr9K5IAYaYDKMSz7qsixdfhE=; b=VqJGdIY/iBoE0IjXW7RdfBNau3n0hYL1IAdlWDJEiAeZ3DMtB/emQH2yNdnOGCF0yw nel0rAS4D3yaD4QaFmzwv5rW7mziVwRPyuV9B5psZ1amMRtydMGVJGBF2KJdK60GhTEz PwK2u7tvP/1yvijPt5vm9n505I5KkOqaWaefozGdacsCTP1kS4mCdVnWM5S8Ek8eoyxT aWLiWfBdKC88n/ohYGJ9fkszaaRMfQ6fkem4sJyZ5WfOQ9tifqS09Zraco1LsZjQKDkF 6Bj86xqOrS/X/zhZpvy1S9cdY6FEPy3YeTbpH/qS0baTxTDhyGRNgat9aXU6Th1R1Wq8 oLQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=CdNChmCzeXXznzQCB4nBr9K5IAYaYDKMSz7qsixdfhE=; b=sa78LjiMKqgotHcVVmuJ/aVEuUql3MqigaC+f94l8W2uyCvUcDLUzftin26augd7i8 Ubj4BgdKfsD3Gu10+EwcHpUd5W7i5EI6V4hMC7T1Nu0MRJI/35xUjWkIOSuVJaIv5thN 4FjduP8vY/2VARtfe0DqWyAa1d3zCA7Wq5J9FFlrUt8cDlQmKuVmBysB1JVLovcX8s1e WeJsSnPUu3W3GK7xUDuGKujnjW9B8aW/WJVp1vK/KQZ+olxlJbtSIGna3D/Uf07qah/8 YfyXbEV3U5FcLblmZwyx2nCX9Znd0zaO0YH8sVdRyDFo4+2bA6jOwUaGL+NKo7DuaJl0 hC4g== X-Gm-Message-State: APzg51BKEUfqjbjNrG4rNmYPvYW/er+g4KDJY02XbF65TcaKD5Sb+DJs NQoxgFGWyxK2IsiuvrRq1KzHrbG/ X-Received: by 2002:a63:1516:: with SMTP id v22-v6mr2081723pgl.150.1536755731300; Wed, 12 Sep 2018 05:35:31 -0700 (PDT) Received: from localhost.localdomain ([47.90.47.25]) by smtp.gmail.com with ESMTPSA id t15-v6sm3075303pfa.158.2018.09.12.05.35.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Sep 2018 05:35:30 -0700 (PDT) From: Jun Zhao To: ffmpeg-devel@ffmpeg.org Date: Wed, 12 Sep 2018 20:35:24 +0800 Message-Id: <1536755724-31263-1-git-send-email-mypopydev@gmail.com> X-Mailer: git-send-email 1.7.1 Subject: [FFmpeg-devel] [PATCH] lavfi/vf_scale_vaapi: add scaling mode setting support. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Jun Zhao MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" before this change, scale_vaapi hard coding the scaling mode, add a new option "mode" to setting the scaling mode, it can be use to tunning the VPP pipeline for performance. Signed-off-by: Jun Zhao --- libavfilter/vf_scale_vaapi.c | 36 +++++++++++++++++++++++++++++++++--- 1 files changed, 33 insertions(+), 3 deletions(-) diff --git a/libavfilter/vf_scale_vaapi.c b/libavfilter/vf_scale_vaapi.c index d6529d5..b1c8afa 100644 --- a/libavfilter/vf_scale_vaapi.c +++ b/libavfilter/vf_scale_vaapi.c @@ -35,10 +35,27 @@ typedef struct ScaleVAAPIContext { char *output_format_string; + int mode; + char *w_expr; // width expression string char *h_expr; // height expression string } ScaleVAAPIContext; +static const char *scale_vaapi_mode_name(int mode) +{ + switch (mode) { +#define D(name) case VA_FILTER_SCALING_ ## name: return #name + D(DEFAULT); + D(FAST); + D(HQ); + D(NL_ANAMORPHIC); +#undef D + default: + return "Invalid"; + } +} + + static int scale_vaapi_config_output(AVFilterLink *outlink) { AVFilterLink *inlink = outlink->src->inputs[0]; @@ -70,6 +87,7 @@ static int scale_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame) AVFilterContext *avctx = inlink->dst; AVFilterLink *outlink = avctx->outputs[0]; VAAPIVPPContext *vpp_ctx = avctx->priv; + ScaleVAAPIContext *ctx = avctx->priv; AVFrame *output_frame = NULL; VASurfaceID input_surface, output_surface; VAProcPipelineParameterBuffer params; @@ -119,7 +137,7 @@ static int scale_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame) params.output_color_standard = params.surface_color_standard; params.pipeline_flags = 0; - params.filter_flags = VA_FILTER_SCALING_HQ; + params.filter_flags = ctx->mode; err = ff_vaapi_vpp_render_picture(avctx, ¶ms, output_surface); if (err < 0) @@ -131,9 +149,10 @@ static int scale_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame) av_frame_free(&input_frame); - av_log(avctx, AV_LOG_DEBUG, "Filter output: %s, %ux%u (%"PRId64").\n", + av_log(avctx, AV_LOG_DEBUG, "Filter output: %s, %ux%u (%"PRId64"), mode: %s.\n", av_get_pix_fmt_name(output_frame->format), - output_frame->width, output_frame->height, output_frame->pts); + output_frame->width, output_frame->height, output_frame->pts, + scale_vaapi_mode_name(ctx->mode)); return ff_filter_frame(outlink, output_frame); @@ -174,6 +193,17 @@ static const AVOption scale_vaapi_options[] = { OFFSET(h_expr), AV_OPT_TYPE_STRING, {.str = "ih"}, .flags = FLAGS }, { "format", "Output video format (software format of hardware frames)", OFFSET(output_format_string), AV_OPT_TYPE_STRING, .flags = FLAGS }, + { "mode", "Scaling mode", + OFFSET(mode), AV_OPT_TYPE_INT, { .i64 = VA_FILTER_SCALING_HQ }, + 0, VA_FILTER_SCALING_NL_ANAMORPHIC, FLAGS, "mode" }, + { "default", "", + 0, AV_OPT_TYPE_CONST, { .i64 = VA_FILTER_SCALING_DEFAULT }, 0, 0, FLAGS, "mode" }, + { "fast", "", + 0, AV_OPT_TYPE_CONST, { .i64 = VA_FILTER_SCALING_FAST }, 0, 0, FLAGS, "mode" }, + { "hq", "", + 0, AV_OPT_TYPE_CONST, { .i64 = VA_FILTER_SCALING_HQ }, 0, 0, FLAGS, "mode" }, + { "nl_anamorphic", "", + 0, AV_OPT_TYPE_CONST, { .i64 = VA_FILTER_SCALING_NL_ANAMORPHIC }, 0, 0, FLAGS, "mode" }, { NULL }, };