From patchwork Thu Dec 6 10:39:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Zhao X-Patchwork-Id: 11300 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id C10B744C71A for ; Thu, 6 Dec 2018 12:40:16 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6EBE568A7A5; Thu, 6 Dec 2018 12:40:08 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 389FA68A738 for ; Thu, 6 Dec 2018 12:40:01 +0200 (EET) Received: by mail-pf1-f193.google.com with SMTP id b7so11568376pfi.8 for ; Thu, 06 Dec 2018 02:40:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=lxhRKi+D8oXmCZks43wwS3qucU4ZaSXCB3xO+sCB9QE=; b=ECbzz5ZGhfnvMcog8oK/vS7NcqlO/RwaIF0nUN8kv2NNWT87yM1ZPI1eIRCWJexVRW ny3uysL4vcF//SOKNRbCkMBdhOvhm1jCCfkTGipX0mSXokWmJ23Noi0xMhecKKMT3tkR U6FRC3PbIzfWDjeUvdLQxCkGEkGvee5i3i4/cFuh5uLIO/IAAe/H/OdGYXg8MpDS4N06 D9fbHlPqSwVEqGsNB3ajqCKmZm/ra0Ij4PaNNv99q3s+ngqI+eUAS1CF5PW10x/2K8qg TjnYnqd8e8zrEbVbeNmsv3aO+kEN6cLYe/GG3YZK66xr3kgNRn+S/q4XqEOia4jahXx1 3hmA== 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:in-reply-to :references; bh=lxhRKi+D8oXmCZks43wwS3qucU4ZaSXCB3xO+sCB9QE=; b=b1x+FuS2l6NBKBScxuH7vqHMCB5qcimTZwY2Miw35R04uglDSzu27hc+SleKzZxqP3 FKIBhJWAt8w7EKBYqO6JKTj6yvnAmDuLttHG5PyEwdAk+nd8zh9B4NWuf16HYrJh+Q1i A/NxtbgJC/LOON34FvPqqGJqxkFe1/aTaTcEptW//Wt6I9S+FIlipkkmgWIvRdOMU1/H bvKPhx7IoGUP5tLS+Lr1kGzi/Gpc9liJg33EuqzXGzST74GMRM5WrgjxsJjbOYK329yS 9eFerKPZ77Kf0cg6DbPyRbtVpJZ1pdB1U9ZwHCjQLQnBNMV0imgv8kBYmpAmtVeImTEF KOhQ== X-Gm-Message-State: AA+aEWaXIzNVfd+td64YKCHyLd5p4IjFXT3FTNCXADNX+OMXl0hWAsXw GKfkv99jqNo8EJb828uroHe1u6t6 X-Google-Smtp-Source: AFSGD/VYn7YBDNp8DuKyy91eHX/+HieT4G46aHJicN2TcA7RlZ1YmLJcgkUk4bBKxIlF4Gcw/NXyiA== X-Received: by 2002:a63:d547:: with SMTP id v7mr22167598pgi.339.1544092808626; Thu, 06 Dec 2018 02:40:08 -0800 (PST) Received: from localhost.localdomain ([47.90.47.25]) by smtp.gmail.com with ESMTPSA id b26sm68086815pfe.91.2018.12.06.02.40.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Dec 2018 02:40:07 -0800 (PST) From: Jun Zhao To: ffmpeg-devel@ffmpeg.org Date: Thu, 6 Dec 2018 18:39:57 +0800 Message-Id: <1544092798-4125-2-git-send-email-mypopydev@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1544092798-4125-1-git-send-email-mypopydev@gmail.com> References: <1544092798-4125-1-git-send-email-mypopydev@gmail.com> Subject: [FFmpeg-devel] [PATCH V1 1/2] 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 change scaling algorithm for performance/quality trade off. Signed-off-by: Jun Zhao --- libavfilter/vf_scale_vaapi.c | 33 ++++++++++++++++++++++++++++++--- 1 files changed, 30 insertions(+), 3 deletions(-) diff --git a/libavfilter/vf_scale_vaapi.c b/libavfilter/vf_scale_vaapi.c index d6529d5..ad222e6 100644 --- a/libavfilter/vf_scale_vaapi.c +++ b/libavfilter/vf_scale_vaapi.c @@ -35,10 +35,26 @@ 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); +#undef D + default: + return "Invalid"; + } +} + + static int scale_vaapi_config_output(AVFilterLink *outlink) { AVFilterLink *inlink = outlink->src->inputs[0]; @@ -70,6 +86,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 +136,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 +148,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 +192,15 @@ 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", "Use the default (depend on the driver) scaling algorithm", + 0, AV_OPT_TYPE_CONST, { .i64 = VA_FILTER_SCALING_DEFAULT }, 0, 0, FLAGS, "mode" }, + { "fast", "Use fast scaling algorithm", + 0, AV_OPT_TYPE_CONST, { .i64 = VA_FILTER_SCALING_FAST }, 0, 0, FLAGS, "mode" }, + { "hq", "Use high quality scaling algorithm", + 0, AV_OPT_TYPE_CONST, { .i64 = VA_FILTER_SCALING_HQ }, 0, 0, FLAGS, "mode" }, { NULL }, };