From patchwork Mon Jan 9 07:12:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 39929 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp2884031pzb; Sun, 8 Jan 2023 23:12:41 -0800 (PST) X-Google-Smtp-Source: AMrXdXuL+7pLh51dNH6VNATd8CdlmxWR+ag0qXgZFAR76Ig3QG20lxhhaCNNP4/7J2MaJ5WAX2QI X-Received: by 2002:aa7:cf94:0:b0:47b:16f5:61dc with SMTP id z20-20020aa7cf94000000b0047b16f561dcmr55828315edx.37.1673248361457; Sun, 08 Jan 2023 23:12:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673248361; cv=none; d=google.com; s=arc-20160816; b=QavxN9HFzrL54KkN4KJwz69yvfAsPxleM7pID5H2ZZAOg7rwLVtDH8eGmLUm1lTRaO 4KY//p5Om5k63/uj+n4rHVwrlCbqh9rJXkNblypejtXULcnnVegWsJle5nNRYGQ+1Qo7 191BVriAZSIyJ2eNRR3xeBCQWTxb0wpe1xAK1nDL5BlwLb8hGe7IOPug4xAaLyqSD7a+ 93lJLqxldNIu3/iIYASRuEaDvh1Px43fLXJU6YIQUZWO7zbN+cA1OETvXlFHNbUk3uvT 61QRNaCK1nUv1s5hgebZaeng2U+QBGalirLTfIskzS6vLLz5QXFIpvl1sQ/b2i4VjwGH 96/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=F48UHfdrnUpfE4K/p84x7DMwF9sTMPdCgDkXI4gDt9w=; b=cKxwq5uevdhQVxvdHOBLeEFLhuNkMPdEBdz5X2Ww8QadVjTc0sp4xhpH5OXm0shqb7 Al5dNXa9EufSdaOtipHBDpNQnh+IeLHup/1rMJqzua81EBoqKw7ELWG29MaQ9LaZJDuo pRV5F6DhMXzwPglChf17syDEfJsE5LyD9iS/wF6RKt4pqLT+CPERwfyBEKHkSJH1iFbC h9DvB9s9e9QY4FHjn1MU7YMhXyqg9y+qWru0xJr8N8y5fCsGGP5tGdLjKyEK9C+l99XC IeDRGxRS7tkRDlH9+kXRJygO3El1rjhQ7hQgz/IJRu5I3HuiALr9IqHcT2Jm3nagAQKs O5xw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=kM5J8tEb; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i19-20020a056402055300b0048c7fb50a40si8540894edx.321.2023.01.08.23.12.40; Sun, 08 Jan 2023 23:12:41 -0800 (PST) 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=@intel.com header.s=Intel header.b=kM5J8tEb; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 96D8368BAAE; Mon, 9 Jan 2023 09:12:36 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 91F6968B613 for ; Mon, 9 Jan 2023 09:12:29 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673248354; x=1704784354; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=uiTia80vi+cRnnH8zWxV/kcNPhf978PRaZTgadTPWy0=; b=kM5J8tEbClflX+rQA6egYsxu/R+Woubd42tB5umGMD20vkVGGf23OHxp VVTZgb3sAKMNmVrPmzoP+8UQDWXum7xw/oNInRsgxrt9rHG4SIahUBtsS 1lLs0Pd/6VaitCypGNplBF0hQ0qwTRAsqzc6xCzjVF+iwzUjEbdSGsaqq 5q/YSlee9VduHBBBeisDGhQev44dD2oJbAz8izySA7MFwsvtU0QNXf7/J m0vASPh02o2hyerEBvFX7biWM5Uqp/4JM9k9A8zyijSOY7T5TelJxrLFl Oh3uakblSUgcJYpu1xfczVoMUdwSeO5XYOk9hbo5vye+VZ/ohSiNiRE1Y A==; X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="385110838" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="385110838" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:26 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="745262785" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="745262785" Received: from xhh-tgl64.sh.intel.com ([10.238.2.19]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:25 -0800 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Mon, 9 Jan 2023 15:12:03 +0800 Message-Id: <20230109071210.1829699-1-haihao.xiang@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/8] lavfi/vf_vpp_qsv: add "a", "dar" and "sar" variables X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Haihao Xiang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: VCLB+KvG0F/1 From: Haihao Xiang Also fix the naming style in enum var_name. This is in preparation for reusing the code for other QSV filters. Signed-off-by: Haihao Xiang --- libavfilter/vf_vpp_qsv.c | 49 ++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/libavfilter/vf_vpp_qsv.c b/libavfilter/vf_vpp_qsv.c index 317ae06c12..8d4227f841 100644 --- a/libavfilter/vf_vpp_qsv.c +++ b/libavfilter/vf_vpp_qsv.c @@ -150,18 +150,22 @@ static const char *const var_names[] = { "ch", "cx", "cy", + "a", "dar", + "sar", NULL }; enum var_name { - VAR_iW, VAR_IN_W, - VAR_iH, VAR_IN_H, - VAR_oW, VAR_OUT_W, VAR_W, - VAR_oH, VAR_OUT_H, VAR_H, - CW, - CH, - CX, - CY, + VAR_IW, VAR_IN_W, + VAR_IH, VAR_IN_H, + VAR_OW, VAR_OUT_W, VAR_W, + VAR_OH, VAR_OUT_H, VAR_H, + VAR_CW, + VAR_CH, + VAR_CX, + VAR_CY, + VAR_A, VAR_DAR, + VAR_SAR, VAR_VARS_NB }; @@ -193,39 +197,44 @@ static int eval_expr(AVFilterContext *ctx) PASS_EXPR(cx_expr, vpp->cx); PASS_EXPR(cy_expr, vpp->cy); - var_values[VAR_iW] = + var_values[VAR_IW] = var_values[VAR_IN_W] = ctx->inputs[0]->w; - var_values[VAR_iH] = + var_values[VAR_IH] = var_values[VAR_IN_H] = ctx->inputs[0]->h; + var_values[VAR_A] = (double)var_values[VAR_IN_W] / var_values[VAR_IN_H]; + var_values[VAR_SAR] = ctx->inputs[0]->sample_aspect_ratio.num ? + (double)ctx->inputs[0]->sample_aspect_ratio.num / ctx->inputs[0]->sample_aspect_ratio.den : 1; + var_values[VAR_DAR] = var_values[VAR_A] * var_values[VAR_SAR]; + /* crop params */ - CALC_EXPR(cw_expr, var_values[CW], vpp->crop_w); - CALC_EXPR(ch_expr, var_values[CH], vpp->crop_h); + CALC_EXPR(cw_expr, var_values[VAR_CW], vpp->crop_w); + CALC_EXPR(ch_expr, var_values[VAR_CH], vpp->crop_h); /* calc again in case cw is relative to ch */ - CALC_EXPR(cw_expr, var_values[CW], vpp->crop_w); + CALC_EXPR(cw_expr, var_values[VAR_CW], vpp->crop_w); CALC_EXPR(w_expr, - var_values[VAR_OUT_W] = var_values[VAR_oW] = var_values[VAR_W], + var_values[VAR_OUT_W] = var_values[VAR_OW] = var_values[VAR_W], vpp->out_width); CALC_EXPR(h_expr, - var_values[VAR_OUT_H] = var_values[VAR_oH] = var_values[VAR_H], + var_values[VAR_OUT_H] = var_values[VAR_OH] = var_values[VAR_H], vpp->out_height); /* calc again in case ow is relative to oh */ CALC_EXPR(w_expr, - var_values[VAR_OUT_W] = var_values[VAR_oW] = var_values[VAR_W], + var_values[VAR_OUT_W] = var_values[VAR_OW] = var_values[VAR_W], vpp->out_width); - CALC_EXPR(cx_expr, var_values[CX], vpp->crop_x); - CALC_EXPR(cy_expr, var_values[CY], vpp->crop_y); + CALC_EXPR(cx_expr, var_values[VAR_CX], vpp->crop_x); + CALC_EXPR(cy_expr, var_values[VAR_CY], vpp->crop_y); /* calc again in case cx is relative to cy */ - CALC_EXPR(cx_expr, var_values[CX], vpp->crop_x); + CALC_EXPR(cx_expr, var_values[VAR_CX], vpp->crop_x); - if ((vpp->crop_w != var_values[VAR_iW]) || (vpp->crop_h != var_values[VAR_iH])) + if ((vpp->crop_w != var_values[VAR_IW]) || (vpp->crop_h != var_values[VAR_IH])) vpp->use_crop = 1; release: From patchwork Mon Jan 9 07:12:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 39930 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp2884108pzb; Sun, 8 Jan 2023 23:12:52 -0800 (PST) X-Google-Smtp-Source: AMrXdXsT+DfVseB1ZcuKg4B3UugnSGjVyLdJV35DQmLpegW6yf0HknQoUwHavfkWo3VqVFGr+7M/ X-Received: by 2002:a17:906:2349:b0:7c1:844d:7447 with SMTP id m9-20020a170906234900b007c1844d7447mr54255770eja.35.1673248372336; Sun, 08 Jan 2023 23:12:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673248372; cv=none; d=google.com; s=arc-20160816; b=EA71CisMObc+gH2U9MF6Hz0a23Voq7vqwNI7odQre3bV63Qee7Rd/IZ7Y8ke7et3Rz B4mznBp11iC/xqFyYWVi9T68JZtJ8jU1/EP/MhMpCHqHev5XB0EwXdUb2U7A2sPAeAZe r3uMh8VCkboSk7Nh+7rUVWto8G39alm6PxD37icNx4bSZGj537wllap3ajjQmZZYwGp0 0JMMG/LrRiNMiXvAcSl/UUaW2EMrMtq9Vb60CzerI3zNNHhXm1ygPTGXu8iBkbwCjR/t EfuVuj50SFlZafm3mikYVeSxvofiMggw+FxnRPFnS3CZQZFW5/ysflOa+VbWPAClTqlm YfbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=au7UXobJy9oApSsNU4McS1IqBABCE1GCyDVskvA5VdU=; b=RdM0HUYf/agmsMhtrxBJrxBQotqaHFNB5MrsHMGjhVq4asRL9UzELTTcrUHogYFIrz KoeABEl8Hcrhn0xsWCzbkt8keKUAuZV+QTlhP1Zb2N5XAOuk/JXdqhR2x782AKneX6JX Va13s2ojwWon7Zl9ZaSBqB/aDbTp22D9k3str4Em3tcQbMZwfRaQ4mF4q19P1KSaemfL Ku58dtLId+SIUlM+N7G7wXB/9rWcVRTSk59jpzuqjHXij9NsjPTxxVrlTxl8bev/gPFQ xuOqS+o14fk0uqPXPAzEUipTAgmkxhkxd6Pl7JeSrs1pSMVeb6prpTm7aGh3Iho+5Y1G T0/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=gXY1qaIf; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id qk31-20020a1709077f9f00b007c60482a110si10342470ejc.625.2023.01.08.23.12.52; Sun, 08 Jan 2023 23:12:52 -0800 (PST) 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=@intel.com header.s=Intel header.b=gXY1qaIf; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C56FA68BBB6; Mon, 9 Jan 2023 09:12:38 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C655C68BAE8 for ; Mon, 9 Jan 2023 09:12:31 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673248357; x=1704784357; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=V+PHgO2pX1LjAytA1jVdbnBbeTwpRI6rSUEbNKVbWNo=; b=gXY1qaIfyl8UyPbv3yDy4ffZ6a8+AmGRRrUllEuVbFx7HuFcipB1S+jD 3z7RVVqB6AWPBU81kcF0m1rhqxciAjO81fBkUoNEHqeVpMGfg4mhcNA+9 X+r35/YCHsgcBS7DY5mel1oYoBNR8eILzbisayl3q3r/9PPNK797IRFtj hMQ+pco8YqelSpnw+lMQIN7H+IKSti3BjFDq2OJdDmjH5/EPVCan9+TRD f8efGk/6ITUU8E2ng1R5EfMnddzgUMkxy0alTjTfcgZ+OoWhWbMvTP/09 OeLQ9YCV0Eayj4Hk2fezsn1Ur41NGZv0rbSzzmDAfmWXmguQKglJHBBWi Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="385110840" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="385110840" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:27 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="745262790" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="745262790" Received: from xhh-tgl64.sh.intel.com ([10.238.2.19]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:26 -0800 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Mon, 9 Jan 2023 15:12:04 +0800 Message-Id: <20230109071210.1829699-2-haihao.xiang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109071210.1829699-1-haihao.xiang@intel.com> References: <20230109071210.1829699-1-haihao.xiang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/8] lavfi/vf_vpp_qsv: handle NULL pointer when evaluating an expression X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Haihao Xiang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 6AoJLqGIB+Gz From: Haihao Xiang This patch provides default value if the expression is NULL. This is in preparation for reusing the code for other QSV filters. Signed-off-by: Haihao Xiang --- libavfilter/vf_vpp_qsv.c | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/libavfilter/vf_vpp_qsv.c b/libavfilter/vf_vpp_qsv.c index 8d4227f841..3a0a395732 100644 --- a/libavfilter/vf_vpp_qsv.c +++ b/libavfilter/vf_vpp_qsv.c @@ -172,14 +172,19 @@ enum var_name { static int eval_expr(AVFilterContext *ctx) { #define PASS_EXPR(e, s) {\ - ret = av_expr_parse(&e, s, var_names, NULL, NULL, NULL, NULL, 0, ctx); \ - if (ret < 0) {\ - av_log(ctx, AV_LOG_ERROR, "Error when passing '%s'.\n", s);\ - goto release;\ + if (s) {\ + ret = av_expr_parse(&e, s, var_names, NULL, NULL, NULL, NULL, 0, ctx); \ + if (ret < 0) { \ + av_log(ctx, AV_LOG_ERROR, "Error when passing '%s'.\n", s); \ + goto release; \ + } \ }\ } -#define CALC_EXPR(e, v, i) {\ - i = v = av_expr_eval(e, var_values, NULL); \ +#define CALC_EXPR(e, v, i, d) {\ + if (e)\ + i = v = av_expr_eval(e, var_values, NULL); \ + else\ + i = v = d;\ } VPPContext *vpp = ctx->priv; double var_values[VAR_VARS_NB] = { NAN }; @@ -209,30 +214,29 @@ static int eval_expr(AVFilterContext *ctx) var_values[VAR_DAR] = var_values[VAR_A] * var_values[VAR_SAR]; /* crop params */ - CALC_EXPR(cw_expr, var_values[VAR_CW], vpp->crop_w); - CALC_EXPR(ch_expr, var_values[VAR_CH], vpp->crop_h); + CALC_EXPR(cw_expr, var_values[VAR_CW], vpp->crop_w, var_values[VAR_IW]); + CALC_EXPR(ch_expr, var_values[VAR_CH], vpp->crop_h, var_values[VAR_IH]); /* calc again in case cw is relative to ch */ - CALC_EXPR(cw_expr, var_values[VAR_CW], vpp->crop_w); + CALC_EXPR(cw_expr, var_values[VAR_CW], vpp->crop_w, var_values[VAR_IW]); CALC_EXPR(w_expr, var_values[VAR_OUT_W] = var_values[VAR_OW] = var_values[VAR_W], - vpp->out_width); + vpp->out_width, var_values[VAR_CW]); CALC_EXPR(h_expr, var_values[VAR_OUT_H] = var_values[VAR_OH] = var_values[VAR_H], - vpp->out_height); + vpp->out_height, var_values[VAR_CH]); /* calc again in case ow is relative to oh */ CALC_EXPR(w_expr, var_values[VAR_OUT_W] = var_values[VAR_OW] = var_values[VAR_W], - vpp->out_width); + vpp->out_width, var_values[VAR_CW]); - - CALC_EXPR(cx_expr, var_values[VAR_CX], vpp->crop_x); - CALC_EXPR(cy_expr, var_values[VAR_CY], vpp->crop_y); + CALC_EXPR(cx_expr, var_values[VAR_CX], vpp->crop_x, (var_values[VAR_IW] - var_values[VAR_OW]) / 2); + CALC_EXPR(cy_expr, var_values[VAR_CY], vpp->crop_y, (var_values[VAR_IH] - var_values[VAR_OH]) / 2); /* calc again in case cx is relative to cy */ - CALC_EXPR(cx_expr, var_values[VAR_CX], vpp->crop_x); + CALC_EXPR(cx_expr, var_values[VAR_CX], vpp->crop_x, (var_values[VAR_IW] - var_values[VAR_OW]) / 2); if ((vpp->crop_w != var_values[VAR_IW]) || (vpp->crop_h != var_values[VAR_IH])) vpp->use_crop = 1; From patchwork Mon Jan 9 07:12:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 39931 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp2884161pzb; Sun, 8 Jan 2023 23:13:01 -0800 (PST) X-Google-Smtp-Source: AMrXdXuO8n+HvHfy541SMTYO2BbS314MgFI7B2MnRdUzpdUwwJwHgXrO8mZx4pVci+XNACf+dvuy X-Received: by 2002:a17:907:a705:b0:7bd:ece7:ae66 with SMTP id vw5-20020a170907a70500b007bdece7ae66mr59823054ejc.34.1673248380925; Sun, 08 Jan 2023 23:13:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673248380; cv=none; d=google.com; s=arc-20160816; b=C7RvTITRE1b5xWS6n/dqSTtmh0P8JsT1A6dDoOR5i5GT0uiwq4zfgD/YCQGZJk8rGV JZGV/OO9EY+eFg5wfA//hMDPrvE5dA2CaXSpKNZqJYNFm2HsqQTcw1K/JANg5ucyfHhd 8tAPNV1nYwpBC+qJOyaFiX+GI5tWS0atRvMfx1ARxnDeXL2CCLwKOQKftmbj34Au7nJp p4gYxFuP5thNaj5AUWGFicd3RlAKoeG48dXDSHddyKzHHMAY06rQcQhRIHn2YcR7CPfs FGmu4UF0rdkIoWwt9VqVOAxj7ZroHt6nYilgcuFPsGoZYEGs7bc+qf/5wCRMOYj19I3Z /uEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=Pj3qcov0qmMZwZTQ7Z8fTg6KqPIdHyxQy7xx7tNQEJU=; b=baPqkQis4ViwAzekRtrFzuS4tvw42lNkbZXMUPqCXq0II5O6MoMRADOp1hOqx9KixC vpaF4szPdOQ59kaf29gmmzXwRjQlm05u+zjH2tlWxMmiZw6neceM/1wZi2o2bS0uomnx 4c1oUfKEr5uEJrd41dT0IzLMo0DOj3Pd2USoW2PX2JBqJDfZ6FwGPZ9qa0tPtbVKDN9e S27n1rUeQ+BbFrodXK+IP61ocEm9bXDJctTq+7/02QqOPX2Uy3GH0L12wqJCPBE6qFvb vM5wKEWWMv1fOfXflo1/YuIwTg57rRdQE0rbyB5pgcaxHR8v7b7HDaFkmUPsQRsFKh/I DnVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=mzJmqHks; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ht17-20020a170907609100b007adfe2889efsi8573106ejc.607.2023.01.08.23.13.00; Sun, 08 Jan 2023 23:13:00 -0800 (PST) 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=@intel.com header.s=Intel header.b=mzJmqHks; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DDF1B68BA83; Mon, 9 Jan 2023 09:12:40 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3B5BC68B9F1 for ; Mon, 9 Jan 2023 09:12:33 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673248358; x=1704784358; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=15uv8NhLMm3Kx8Ynpn5SDjMlcnzFt1yo/MxRtvP6yyM=; b=mzJmqHkslOxSg/hGGd506vukjSWhpzYJOGnfEqwAUahKb9kXx+mzhG3d wx61xKnzUMI17F1JtaVHZjlUGdqU3MEIOOGCuTw3PGo0mtm2R7O/8RV68 d5pZGaFsGli35Aw6s/5Uu8IN24wusBJxm7att3HqOEI6w3Ze4PoRxKiTT SWv51Qt9/av1trPP3DIhDUOqTR/VrRtIi59cBK5qmLIB+t4mhHmgPeqGS JdKwzbkcwQgEmV+Ss6bm95g+RaF05DsjHeGE6h6IQivBk6NlhKgg80QQn 8HlcZUCaT/ftk9VB8IjY9xhCg8QvOaACWmOMMHDGidK36hwrrvhlpDtMV g==; X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="385110841" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="385110841" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:28 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="745262796" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="745262796" Received: from xhh-tgl64.sh.intel.com ([10.238.2.19]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:27 -0800 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Mon, 9 Jan 2023 15:12:05 +0800 Message-Id: <20230109071210.1829699-3-haihao.xiang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109071210.1829699-1-haihao.xiang@intel.com> References: <20230109071210.1829699-1-haihao.xiang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/8] lavfi/vf_vpp_qsv: allow special values for the output video dimensions X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Haihao Xiang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: DwCFr3Z0BU31 From: Haihao Xiang Special values are: 0 = original width/height -1 = keep original aspect This is in preparation for reusing the code for other QSV filters. Signed-off-by: Haihao Xiang --- libavfilter/vf_vpp_qsv.c | 47 ++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/libavfilter/vf_vpp_qsv.c b/libavfilter/vf_vpp_qsv.c index 3a0a395732..cf11cd7fdc 100644 --- a/libavfilter/vf_vpp_qsv.c +++ b/libavfilter/vf_vpp_qsv.c @@ -59,6 +59,11 @@ typedef struct VPPContext{ mfxExtVPPMirroring mirroring_conf; mfxExtVPPScaling scale_conf; + /** + * New dimensions. Special values are: + * 0 = original width/height + * -1 = keep original aspect + */ int out_width; int out_height; /** @@ -127,10 +132,10 @@ static const AVOption options[] = { { "cx", "set the x crop area expression", OFFSET(cx), AV_OPT_TYPE_STRING, { .str = "(in_w-out_w)/2" }, 0, 0, FLAGS }, { "cy", "set the y crop area expression", OFFSET(cy), AV_OPT_TYPE_STRING, { .str = "(in_h-out_h)/2" }, 0, 0, FLAGS }, - { "w", "Output video width", OFFSET(ow), AV_OPT_TYPE_STRING, { .str="cw" }, 0, 255, .flags = FLAGS }, - { "width", "Output video width", OFFSET(ow), AV_OPT_TYPE_STRING, { .str="cw" }, 0, 255, .flags = FLAGS }, - { "h", "Output video height", OFFSET(oh), AV_OPT_TYPE_STRING, { .str="w*ch/cw" }, 0, 255, .flags = FLAGS }, - { "height", "Output video height", OFFSET(oh), AV_OPT_TYPE_STRING, { .str="w*ch/cw" }, 0, 255, .flags = FLAGS }, + { "w", "Output video width(0=input video width, -1=keep input video aspect)", OFFSET(ow), AV_OPT_TYPE_STRING, { .str="cw" }, 0, 255, .flags = FLAGS }, + { "width", "Output video width(0=input video width, -1=keep input video aspect)", OFFSET(ow), AV_OPT_TYPE_STRING, { .str="cw" }, 0, 255, .flags = FLAGS }, + { "h", "Output video height(0=input video height, -1=keep input video aspect)", OFFSET(oh), AV_OPT_TYPE_STRING, { .str="w*ch/cw" }, 0, 255, .flags = FLAGS }, + { "height", "Output video height(0=input video height, -1=keep input video aspect)", OFFSET(oh), AV_OPT_TYPE_STRING, { .str="w*ch/cw" }, 0, 255, .flags = FLAGS }, { "format", "Output pixel format", OFFSET(output_format_str), AV_OPT_TYPE_STRING, { .str = "same" }, .flags = FLAGS }, { "async_depth", "Internal parallelization depth, the higher the value the higher the latency.", OFFSET(async_depth), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, .flags = FLAGS }, { "scale_mode", "scale & format conversion mode: 0=auto, 1=low power, 2=high quality", OFFSET(scale_mode), AV_OPT_TYPE_INT, { .i64 = MFX_SCALING_MODE_DEFAULT }, MFX_SCALING_MODE_DEFAULT, MFX_SCALING_MODE_QUALITY, .flags = FLAGS, "scale mode" }, @@ -276,6 +281,7 @@ static int config_input(AVFilterLink *inlink) AVFilterContext *ctx = inlink->dst; VPPContext *vpp = ctx->priv; int ret; + int64_t ow, oh; if (vpp->framerate.den == 0 || vpp->framerate.num == 0) vpp->framerate = inlink->frame_rate; @@ -289,11 +295,38 @@ static int config_input(AVFilterLink *inlink) return ret; } - if (vpp->out_height == 0 || vpp->out_width == 0) { - vpp->out_width = inlink->w; - vpp->out_height = inlink->h; + ow = vpp->out_width; + oh = vpp->out_height; + + /* sanity check params */ + if (ow < -1 || oh < -1) { + av_log(ctx, AV_LOG_ERROR, "Size values less than -1 are not acceptable.\n"); + return AVERROR(EINVAL); } + if (ow == -1 && oh == -1) + vpp->out_width = vpp->out_height = 0; + + if (!(ow = vpp->out_width)) + ow = inlink->w; + + if (!(oh = vpp->out_height)) + oh = inlink->h; + + if (ow == -1) + ow = av_rescale(oh, inlink->w, inlink->h); + + if (oh == -1) + oh = av_rescale(ow, inlink->h, inlink->w); + + if (ow > INT_MAX || oh > INT_MAX || + (oh * inlink->w) > INT_MAX || + (ow * inlink->h) > INT_MAX) + av_log(ctx, AV_LOG_ERROR, "Rescaled value for width or height is too big.\n"); + + vpp->out_width = ow; + vpp->out_height = oh; + if (vpp->use_crop) { vpp->crop_x = FFMAX(vpp->crop_x, 0); vpp->crop_y = FFMAX(vpp->crop_y, 0); From patchwork Mon Jan 9 07:12:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 39932 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp2884243pzb; Sun, 8 Jan 2023 23:13:11 -0800 (PST) X-Google-Smtp-Source: AMrXdXut/pAiHkx396cD/w2I6+ABWgSGQ2QwVVYXtOVaZI33BtQydtidp/20N2cMzDleCwHnXach X-Received: by 2002:a17:907:6d13:b0:7c0:db53:c599 with SMTP id sa19-20020a1709076d1300b007c0db53c599mr63269775ejc.22.1673248391200; Sun, 08 Jan 2023 23:13:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673248391; cv=none; d=google.com; s=arc-20160816; b=p++zJYUlMWx0BUbu6UyQGH/V3NDcRtPhNUlz0t3jnhwQmua+ubeVeEH5yKQPpf2//N Y3MhE4evwwtNX4LrFlQc8WDizZHyNs7tVVlvZTALELRTpn+06z+W0evvhQ2n1D8mkjod y2Kb+F91ZN5k7lUld0W2oXj613jOHclHoEuJ0yMqYgdP0NdjCmt4u0snEN4W8qMC0Z47 NnpaXHpKhUmTMEZu8MqcXAFHlLgMjIvldFDPmcZ4w2BzZYE5mnUmqdPIO5Z8cTUSsNBq rJn0fAlKM3pTqEEWAGWJmdNfa6lrm70rC//5RXNnTfy4y1Y/91dcbs4vgsuhPPW+JCcY VuIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=ypBbY7cis09mJMUyBsne5mnXXp6hHp6RGumVrZbI/0A=; b=CiLiipdi3QnajX6sUxvvprN0DlQMwHWSoPCcmCK5EGiHu5VR+0bk1YfATssFy6nG9E TprA6TX/6uZ/AxPUHFA4nkkzRXDLYV2P21D2ZPcVrncaKatyQS9my9tMizs6opJBcNio N4ezDV2mWilnDAxTQzbgN5e+wY/2/dL2otoCyYcSvJp9+5auBCiXE6zCglvCVM7bx7bN qg5S6D0v1FwihTCpIAY+M9VUUebcb9dK2RtR+nRt+CcRziTn06q30LoLlaQIV8CnljO8 1ATwi6sz2lTGokRzneqdhADhI7GBgnOJCsM7KpnnjFAhXYvB4G2Qcz3F8OZQS5ou2Bx7 +fnA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=A99verBJ; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id wz7-20020a170906fe4700b00829cbd5f6f2si7183653ejb.498.2023.01.08.23.13.09; Sun, 08 Jan 2023 23:13:11 -0800 (PST) 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=@intel.com header.s=Intel header.b=A99verBJ; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0BAEC68BC2A; Mon, 9 Jan 2023 09:12:43 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 804B568BBA3 for ; Mon, 9 Jan 2023 09:12:35 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673248360; x=1704784360; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vDjfcHGK7PRH3s+oPg5+sd9llDzE9Y6OGGraCdIE4tw=; b=A99verBJacbndonfSY5PjxD8QXRsYnKGBeNYwdGPAZ7NUdCCp5PUKFbe 314g8EZZMbI/SaGDNfUd9yvTd9LaId+JL4zikphGVBv1c54yTotHVXOIL rW0w6AAN+fpsoBLCGZ+koQQLHTV5ALlRGQbmODQg6vP8bexso4cZtW5Ss vfkP4LU9Uz4jEZHqi+tuUm2TKnNIU5DwaqY9QS6CWwSn1LEdwmQQI6X4H QUs48Hdy6+dg+OCHP9IaD4xhytsuTDR5oXew96aB10KbMVMesJUKk98/R OtS2ZXP2Tu89hcGryEmUIXz7h5id1X8o7mZNDCB+NzWU+9DArc1rC4pzm g==; X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="385110843" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="385110843" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:29 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="745262802" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="745262802" Received: from xhh-tgl64.sh.intel.com ([10.238.2.19]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:28 -0800 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Mon, 9 Jan 2023 15:12:06 +0800 Message-Id: <20230109071210.1829699-4-haihao.xiang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109071210.1829699-1-haihao.xiang@intel.com> References: <20230109071210.1829699-1-haihao.xiang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/8] lavfi/vf_vpp_qsv: add vpp_preinit callback X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Haihao Xiang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: W+EkD52dqo5W From: Haihao Xiang Set the expected default value for options in this callback, hence we have the right values even if these options are not included in the option arrray. This is in preparation for reusing the code for other QSV filters. Signed-off-by: Haihao Xiang --- libavfilter/vf_vpp_qsv.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libavfilter/vf_vpp_qsv.c b/libavfilter/vf_vpp_qsv.c index cf11cd7fdc..2a7b06fa33 100644 --- a/libavfilter/vf_vpp_qsv.c +++ b/libavfilter/vf_vpp_qsv.c @@ -259,6 +259,19 @@ release: return ret; } +static av_cold int vpp_preinit(AVFilterContext *ctx) +{ + VPPContext *vpp = ctx->priv; + /* For AV_OPT_TYPE_STRING options, NULL is handled in other way so + * we needn't set default value here + */ + vpp->saturation = 1.0; + vpp->contrast = 1.0; + vpp->transpose = -1; + + return 0; +} + static av_cold int vpp_init(AVFilterContext *ctx) { VPPContext *vpp = ctx->priv; @@ -683,6 +696,7 @@ const AVFilter ff_vf_vpp_qsv = { .name = "vpp_qsv", .description = NULL_IF_CONFIG_SMALL("Quick Sync Video VPP."), .priv_size = sizeof(VPPContext), + .preinit = vpp_preinit, .init = vpp_init, .uninit = vpp_uninit, FILTER_INPUTS(vpp_inputs), From patchwork Mon Jan 9 07:12:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 39933 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp2884279pzb; Sun, 8 Jan 2023 23:13:19 -0800 (PST) X-Google-Smtp-Source: AMrXdXuil3pVBUme6aNXiPjwCo6bF/KVgs4mVLz+OytpOb4bqnVJSQBl116oVs0ajeiANywyXxA5 X-Received: by 2002:a05:6402:299b:b0:480:cbe7:9ee2 with SMTP id eq27-20020a056402299b00b00480cbe79ee2mr53442925edb.22.1673248398933; Sun, 08 Jan 2023 23:13:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673248398; cv=none; d=google.com; s=arc-20160816; b=e56PzSWnqIBIEsVCFxaKyo+qVJR1vpneQOH/H/0RytPNN9Hg2tyEacFUFEiLipN0h7 /O6DLDd3b2xbuNg9j43vknlen4C3EDRlNsPIyH3HJsRch0D7v7X+RaBnpkCPNiiWnVeE AMsB/zm1S3c5dEsjTt5axmpnwVQVNFgzJlvs5+q06TA5ai+Md+SkAqtGSuCHhJ7atavK pt8XHgBkNamxSyB6USMUkDRC5IF7ZBiFPR/FeME/sAcujo/RGwUaZ6dtV8OEDNAwcUdj kEA0U2HADtMjaQMFx67xIZVsIpcjDblxVetOM6uiNjsVsMWGpIrYshJveH4QP3KmgXzc bF0A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=chBYlCR/Ig9/hShHMX0QZCMo1lBoDfCaDsykPK87mjA=; b=sSGKJMgvprIyjzNS8pUk7LiUx0TNHjhp+qLi8Bceyur7byhrVET1H0qRimBvta8fpr BTVxDWCOD2/GvciG419WaJyW+4aTMIO3RXc//Ra034E3Eu04Ot+GAvsqkYa6I2+TFHVw f07gn+L7ZVhCywa6wolouwrO4YiMZIQFWw+cSdF75roJK0pmFJChmw+V/RmwnIwuynby AQDewxrMIW5MoYotE6/psMFt2DFHE+JHdPQfPUq4ZgOGjDHujjLY3XAmDEHHvWiKFVPD mnEdtnU3LsIxQ1qKXCWC4v00pcQPV64QgnR7A4JB0mq+GHNhSS5EQLvzwSYqHoB1IPOZ zQkg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=V+V4jmzZ; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id h15-20020a0564020e0f00b0049822232df5si5830722edh.526.2023.01.08.23.13.18; Sun, 08 Jan 2023 23:13:18 -0800 (PST) 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=@intel.com header.s=Intel header.b=V+V4jmzZ; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 21D2568BC18; Mon, 9 Jan 2023 09:12:45 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B3CB368BBDA for ; Mon, 9 Jan 2023 09:12:37 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673248362; x=1704784362; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=kldueCzl+BJtLZU2OzbXb2x42uyD+oOplEFsVI5hVpc=; b=V+V4jmzZwHGiOAh4EcDOAZuBq01oh9RUf1zCvk2UlhVrqiiBTEGSTvuJ bMllvcxhUi9dXyn0KvolpZTOp679x4PdemcNgSQkTtNMLx0I0OthK15ig SzDPbhSYHAmn9lGlMfu+VnLB04S8U6th4yVtCdxhR7Jd+zZNMEDZDlguW Mh/DGQUrRrtt4JIzBcetez0FaSIfPsfSPPK5rWrioJTcu3wFz4h9mx/Bs qa0eKNNu35AInCTrYF/Cy9MuQVSsnpf4BRk6Y33dnhoiq0l4N/ULKFIjz vhkwhaXGC2PAE92TbekBeCqaKh5LHnCo1Z2yTbd2S1nykmDXozdlOXaAt w==; X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="385110844" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="385110844" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:31 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="745262807" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="745262807" Received: from xhh-tgl64.sh.intel.com ([10.238.2.19]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:30 -0800 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Mon, 9 Jan 2023 15:12:07 +0800 Message-Id: <20230109071210.1829699-5-haihao.xiang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109071210.1829699-1-haihao.xiang@intel.com> References: <20230109071210.1829699-1-haihao.xiang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/8] lavfi/vf_vpp_qsv: add has_passthrough flag in VPPContext X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Haihao Xiang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: WtKYEo2Sp1ga From: Haihao Xiang QSV filters may set this flag in preinit callback to turn on / off pass through mode This is in preparation for reusing the code for other QSV filters. E.g. scale_qsv filter doesn't support pass through mode. Signed-off-by: Haihao Xiang --- libavfilter/vf_vpp_qsv.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libavfilter/vf_vpp_qsv.c b/libavfilter/vf_vpp_qsv.c index 2a7b06fa33..b04307b644 100644 --- a/libavfilter/vf_vpp_qsv.c +++ b/libavfilter/vf_vpp_qsv.c @@ -102,6 +102,7 @@ typedef struct VPPContext{ int async_depth; int eof; + int has_passthrough; /* apply pass through mode if possible */ } VPPContext; static const AVOption options[] = { @@ -269,6 +270,8 @@ static av_cold int vpp_preinit(AVFilterContext *ctx) vpp->contrast = 1.0; vpp->transpose = -1; + vpp->has_passthrough = 1; + return 0; } @@ -552,7 +555,8 @@ static int config_output(AVFilterLink *outlink) if (vpp->use_frc || vpp->use_crop || vpp->deinterlace || vpp->denoise || vpp->detail || vpp->procamp || vpp->rotate || vpp->hflip || - inlink->w != outlink->w || inlink->h != outlink->h || in_format != vpp->out_format) + inlink->w != outlink->w || inlink->h != outlink->h || in_format != vpp->out_format || + !vpp->has_passthrough) return ff_qsvvpp_create(ctx, &vpp->qsv, ¶m); else { av_log(ctx, AV_LOG_VERBOSE, "qsv vpp pass through mode.\n"); From patchwork Mon Jan 9 07:12:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 39935 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp2884395pzb; Sun, 8 Jan 2023 23:13:37 -0800 (PST) X-Google-Smtp-Source: AMrXdXvhPqt/g7L7abK2UZV6AItLs9VHcwMKeSHn4xF2s9F1DdS3Abhea+8SK9Uov4Wqp+6D+D3f X-Received: by 2002:a17:907:209c:b0:7c1:41bb:70ac with SMTP id pv28-20020a170907209c00b007c141bb70acmr54760853ejb.64.1673248417299; Sun, 08 Jan 2023 23:13:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673248417; cv=none; d=google.com; s=arc-20160816; b=bllpfuNW8Iu98/iLePYk5twaoo6gKnGYt6Hc5fg8AKkbfYlTuH4y/msBnjWUe38l9V oiAeQyx/PRuBjzAFvFtiS+rXC/iPDU3nQzTyBBTI6P7TMlMLWSFuk1/U0XeBiv2D7aga kPO+zQ2kdivbWQK50ScouvUg+Hb7iwuBv5svP0zN1gpO8oEER2zHDgsU6cfc2w3daQPi hE2M19AOE/L4aLDAMqSuHOWY+J4Mr4NeQ/Yg1akbzFN1Ue7PwLP+IwJJY8Gr4+yg2CO0 zMqxZSVuy3owbKgQDRwSV3kIg8QONTsbpalrrzZgi4f4iMuXi3Z5z/doLooIZgVA4rRD yajQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=KhOPuSq1a1/A6s7aiJeLGPot6alQgyx5s7MbzgsMMGI=; b=KF5OeEqomyoZCn+estXgUpXinRevd5hOK0NEj9IOPwyy/spDnqMY2WkrD80od2tPfe w7tfm9rp53qdIHEHmexBlawgTs6ZM4DiQ81XZl1h5GxpMZPsFhNBkQs1yECs6IuIZH6n WRa2+u3E/LIb/ml5kyHbfJyrY3EQwOp+ZHeNDFKeGGTT5gjTd3ivIJbr3pX5Hjirw6+b Og5TLlVzVoXsw55+VBk1hWGDtOfpallcPFE4xcUSWJnVvWYkdSKaQhClnYwSh4t1sVvg eNOMA8ynOBqC/W489fAep9B1jCgQTh0dE/kybQF/8/5bHdsjD74Nw4gLcZq6xDLb00Yc 5PSQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=Qi7kWDZZ; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id g10-20020a1709067c4a00b0080de94d6270si6633767ejp.304.2023.01.08.23.13.36; Sun, 08 Jan 2023 23:13:37 -0800 (PST) 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=@intel.com header.s=Intel header.b=Qi7kWDZZ; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5E93E68BC7B; Mon, 9 Jan 2023 09:12:47 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 910AB68BC09 for ; Mon, 9 Jan 2023 09:12:39 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673248364; x=1704784364; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=FCRfYoOjuI5VzBbqA0XFjj0s84toWj0U9lxkq00QPOk=; b=Qi7kWDZZ57eQvxsQ1x6G5f8uTo8PYPlnEb/RG13iJTrH2lsAEAIetLbV I/CucaPZKRVUAwk+dGzmvtiflwOjg1q75CYKyIKcPSpmUqnZ1KLTaNxeh 0lAPh943P4ZrOzgyvyDLtkc2vep5jj2Z6Oy2FJbW/MYU053V+unk7kHr2 J3nTYgo6N12dcFdtCHhppKxK7hUPZqsKIsfLb2dL3DzBXC7XKm2/EYHfZ L5QYDWolSRR7DpVs0S6XqMmKsz1ah4naYO1bPgddr3wugcuQLeWiGDsZy NA0CDOwaONPoZgYlUD03BAskairbAmizKPJdwDNZeefdWpv91Iql+hxiB Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="385110847" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="385110847" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:32 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="745262815" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="745262815" Received: from xhh-tgl64.sh.intel.com ([10.238.2.19]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:31 -0800 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Mon, 9 Jan 2023 15:12:08 +0800 Message-Id: <20230109071210.1829699-6-haihao.xiang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109071210.1829699-1-haihao.xiang@intel.com> References: <20230109071210.1829699-1-haihao.xiang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/8] lavfi/vf_vpp_qsv: check output format string against NULL pointer X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Haihao Xiang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: QFaMyvtEaiTK From: Haihao Xiang This is in preparation for reusing the code for other QSV filters. E.g. deinterlacing_qsv may have an option array without format option Signed-off-by: Haihao Xiang --- libavfilter/vf_vpp_qsv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavfilter/vf_vpp_qsv.c b/libavfilter/vf_vpp_qsv.c index b04307b644..4aad856a2e 100644 --- a/libavfilter/vf_vpp_qsv.c +++ b/libavfilter/vf_vpp_qsv.c @@ -279,7 +279,7 @@ static av_cold int vpp_init(AVFilterContext *ctx) { VPPContext *vpp = ctx->priv; - if (!strcmp(vpp->output_format_str, "same")) { + if (!vpp->output_format_str || !strcmp(vpp->output_format_str, "same")) { vpp->out_format = AV_PIX_FMT_NONE; } else { vpp->out_format = av_get_pix_fmt(vpp->output_format_str); From patchwork Mon Jan 9 07:12:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 39936 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp2884456pzb; Sun, 8 Jan 2023 23:13:45 -0800 (PST) X-Google-Smtp-Source: AMrXdXvMNdsfUQklZfdQzq6U7nFh6VQt/vcTpvIDNQfbeqJLN3Fno1opgaiRwUGCrBbzADbOCP2t X-Received: by 2002:a05:6402:538f:b0:45c:835c:1ebb with SMTP id ew15-20020a056402538f00b0045c835c1ebbmr64583930edb.9.1673248425622; Sun, 08 Jan 2023 23:13:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673248425; cv=none; d=google.com; s=arc-20160816; b=pXpcoExJDYFzbu12TuIEnMwbgqThGF6MQ8+GnWF+Pmo9yXDktafkcgMhaGGA5HjXFH pTLdNN4S10WK+6w99mUOxyUIah1lp8JqS9balLI71ueoJU1vOZDk+L3051JU73wk6Iju AQAOV+9HoI2EIrxceQU6YMusyEt+mLQwVCOpTaWoi0DZ8oBeNTHg2H+/VhrA/JXlulTZ UhhHtFqcocgWE+0nln2l4Yr27qowSaXFHp9QJu0TThXagLzkelUCD48LS2tGOfNvrGB8 qG76Yf2BfKKaucEIT9UZGaKNmS0mlLd5wyT/quZVNz17VKUZdfQd/vcKEVL1eeaY8RAE sHCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=w7loHg0YmNlQpl7OOLnd5LV1/GEi8kla0diAUMr7S7o=; b=psEIXd7qcyHz01kc7RAhbYq7Ue9B2E2PgnCva7TQSh8HBIs66aqcMMiCNWNsZu0mSz WeIhavk7LIZW8VOKlZgKTXdKjLC23QOB5VhGInabplyr758ioCLbeRX/uK5bzzcIVEI8 4Yll2EdJszqNj6nYW59LKEkvq9H0jPRl5MpE9Y2TKT4c79mlEcDz2Ac+Ju/rgjsOywq/ 1NJ5dRfQ+vSwstJWq/A9oIZm1wa/HhlsJwdwwc0bv2FWraQqK8dqkud0VreHcotWRMva y/HRmX173OWRtcBffAeL3/ofzub+lTVMCVPWPDqxDeSBTlkptCaBX0Mgut6jiEKf6T/4 2SLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=Xua73faF; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i9-20020a0564020f0900b0048371af9a90si8835751eda.397.2023.01.08.23.13.45; Sun, 08 Jan 2023 23:13:45 -0800 (PST) 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=@intel.com header.s=Intel header.b=Xua73faF; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6111C68BC8F; Mon, 9 Jan 2023 09:12:48 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6D50868BC3F for ; Mon, 9 Jan 2023 09:12:41 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673248366; x=1704784366; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=wfurTrTjYBY9jeZ1HGW7NFS8+eX2YXAN1R5hB5+jOeI=; b=Xua73faFCWUXBXjH3DI/d3GVQtJlFpUQWfpO++hKIHh6tUqq8jFAHNrO fvu8yi2DlTikXnUt12oAfJMTaVjXwCS6PU7MPy1NXZlmOUx6gOnDAGN6E BAqXyO/IUpaGhGiW6BWBf8ExDms86xBYJsOOY4x0FE/bH1Mbuer8yK7bR D/BrQQIWIq5ZevW50xFHXO8fyZFmuy3PQPdSRv0Ly6/v7dCoCRDjvrRjF GD8fw/EoeradJ9g4PMYbZjmM/LldkT9A+DH7QfAnD4Pm3vV2wdcDE1rhD BRucFJi9yq3kX5bKCv+F3UoSg0A3yTMBYc4t9anfUa04sAlR9/0q0UT51 g==; X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="385110852" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="385110852" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:33 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="745262822" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="745262822" Received: from xhh-tgl64.sh.intel.com ([10.238.2.19]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:32 -0800 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Mon, 9 Jan 2023 15:12:09 +0800 Message-Id: <20230109071210.1829699-7-haihao.xiang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109071210.1829699-1-haihao.xiang@intel.com> References: <20230109071210.1829699-1-haihao.xiang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 7/8] lavfi/qsvvpp: set output frame durations X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Haihao Xiang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: BH218FWKVSCw From: Haihao Xiang Signed-off-by: Haihao Xiang --- libavfilter/qsvvpp.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libavfilter/qsvvpp.c b/libavfilter/qsvvpp.c index 064b105a17..f074bf9978 100644 --- a/libavfilter/qsvvpp.c +++ b/libavfilter/qsvvpp.c @@ -503,6 +503,11 @@ static QSVFrame *query_frame(QSVVPPContext *s, AVFilterLink *outlink) return NULL; } + if (outlink->frame_rate.num && outlink->frame_rate.den) + out_frame->frame->duration = av_rescale_q(1, av_inv_q(outlink->frame_rate), outlink->time_base); + else + out_frame->frame->duration = 0; + out_frame->frame->width = outlink->w; out_frame->frame->height = outlink->h; out_frame->surface.Info = s->vpp_param.vpp.Out; From patchwork Mon Jan 9 07:12:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 39934 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bc95:b0:ad:ade2:bfd2 with SMTP id fx21csp2884332pzb; Sun, 8 Jan 2023 23:13:28 -0800 (PST) X-Google-Smtp-Source: AMrXdXuSA9gam9vhmTK54/4cUsugWdiFgL13M5gvpFaSbcepxIJLVuSYVq+WYch80/us6yWN4Ou1 X-Received: by 2002:aa7:c74e:0:b0:48c:cb73:7be2 with SMTP id c14-20020aa7c74e000000b0048ccb737be2mr23230918eds.37.1673248408006; Sun, 08 Jan 2023 23:13:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673248407; cv=none; d=google.com; s=arc-20160816; b=b3pH7DHtgP+qFV9ZTjtPhGeoFdAq8P8SHoezzwAZpFtEHNASuILRRM2uMOKZWyUK8V IEzqIh+rWDVBhbQKTx724ztJtX9SrqsJOqqL1GRIQeqT1MGsKQAAwLBqV7rVpTJbnShN OjoTsi6p+Gy7w1VW8Lt0FSEF9KHHCOSeWzdCyJylhLphw+/NnDSPrNLzoyewjlGQtcPC Y/DPfDQIMg7a7HQ/f7t+hwQIGnuK/3O80bA10aB/4sDxWUEhMM5NxE4LhpczIdb1UjHt I/5b6yf9IVueFm+PjYOUYA/NJvWtyS9fm5MqFxCOsULQn+EXHxXo8TBNzNiA6hHPv6Bp SktQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=nhNhG3Qoilpd2L4uE80kJW6LRfSjIbMIY1tiDjYkSGY=; b=w5ULhOMxN1GoBUFIIlFZJ/eZlbOmViGO7pXLt9Vd0uxP3ntwkjrxk2WKj/iIkiRJTm 6kucYGgZryuOnSHoMcA/Qjjpz8HfsEseVv/O4aBk3xUu5a/OsWBe54ExEluQK7eiwA/F U0qzWhUfp7RXB/SReYGo+toiyj1oVdyfLDehxgth76vmSK4E5GVQvCoDYZwHRhJzP2B7 tUmftGvRw87e4LHI914N1LZRPEm6eJi6UcJeBL1GxkPlJ4slvSqiz4nhkzio4IiEae7X R1uYmLH+A2E+LjhOHyrEg8z/oYTR/hBTpKmdHe3dXTgcaeBaICQ2qQeoPDN0arVU1+L7 0+Ew== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b="M3gzCIy/"; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id j8-20020aa7c0c8000000b0048ee88aa4d6si7357947edp.109.2023.01.08.23.13.27; Sun, 08 Jan 2023 23:13:27 -0800 (PST) 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=@intel.com header.s=Intel header.b="M3gzCIy/"; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 35DF268BC61; Mon, 9 Jan 2023 09:12:46 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B31E868BC09 for ; Mon, 9 Jan 2023 09:12:43 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673248363; x=1704784363; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=wRTobVY5zJ0Zwhu4U9T4Ce/bA1J3rfWn5rEXOLArmqY=; b=M3gzCIy/8gnZzg/Ry6FIyu/xdl1InmhuVDyVagNoo0Pu51OtEqmMaEWP MvEEH/usveNcrAhznSk7K09P+p0lO91WvHjJVSEQB7Zl1N7dV680aFrVv nQd/65XpmcQUBIkHbMjsrIbo/T5c1oQbjH+5oEg9seZA40lDtcN0oG5bK UlvbZCZIlF6ox10b6kRlG3hnhy4LEA0rkpik7RjojkrLpaVGj2ckuKNZn fGLSc+Ic/MvwdSy+AFmT6L4JOaNaGwmfnAWvza9zfG9CcJCwy5Iy3NcI6 Rapy0OIJ7ZekfK/7dSIa3bKPKaqWzeq8rHA3ZWRTmTNQSJHxHCkGSObI+ Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="385110854" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="385110854" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:34 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="745262827" X-IronPort-AV: E=Sophos;i="5.96,311,1665471600"; d="scan'208";a="745262827" Received: from xhh-tgl64.sh.intel.com ([10.238.2.19]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 23:12:33 -0800 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Mon, 9 Jan 2023 15:12:10 +0800 Message-Id: <20230109071210.1829699-8-haihao.xiang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109071210.1829699-1-haihao.xiang@intel.com> References: <20230109071210.1829699-1-haihao.xiang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 8/8] lavfi/qsv: use QSVVPPContext as base context in vf_vpp_qsv/vf_overlay_qsv X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Haihao Xiang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 9Zk/QQ7JSJG5 From: Haihao Xiang The same members between QSVVPPContext and VPPContext are removed from VPPContext, and async_depth is moved from QSVVPPParam to QSVVPPContext so that all QSV filters using QSVVPPContext may support async depth. In addition, we may use QSVVPPContext as base context in other QSV filters in the future so that we may re-use functions defined in qsvvpp.c for other QSV filters. This commit shouldn't change the functionality of vpp_qsv / overlay_qsv. Signed-off-by: Haihao Xiang --- libavfilter/qsvvpp.c | 25 ++++++++----------------- libavfilter/qsvvpp.h | 8 ++++---- libavfilter/vf_overlay_qsv.c | 11 +++++------ libavfilter/vf_vpp_qsv.c | 35 ++++++++++++++--------------------- 4 files changed, 31 insertions(+), 48 deletions(-) diff --git a/libavfilter/qsvvpp.c b/libavfilter/qsvvpp.c index f074bf9978..7e64944f2c 100644 --- a/libavfilter/qsvvpp.c +++ b/libavfilter/qsvvpp.c @@ -687,15 +687,11 @@ static int init_vpp_session(AVFilterContext *avctx, QSVVPPContext *s) return 0; } -int ff_qsvvpp_create(AVFilterContext *avctx, QSVVPPContext **vpp, QSVVPPParam *param) +int ff_qsvvpp_init(AVFilterContext *avctx, QSVVPPParam *param) { int i; int ret; - QSVVPPContext *s; - - s = av_mallocz(sizeof(*s)); - if (!s) - return AVERROR(ENOMEM); + QSVVPPContext *s = avctx->priv; s->filter_frame = param->filter_frame; if (!s->filter_frame) @@ -767,14 +763,13 @@ int ff_qsvvpp_create(AVFilterContext *avctx, QSVVPPContext **vpp, QSVVPPParam *p s->got_frame = 0; /** keep fifo size at least 1. Even when async_depth is 0, fifo is used. */ - s->async_fifo = av_fifo_alloc2(param->async_depth + 1, sizeof(QSVAsyncFrame), 0); - s->async_depth = param->async_depth; + s->async_fifo = av_fifo_alloc2(s->async_depth + 1, sizeof(QSVAsyncFrame), 0); if (!s->async_fifo) { ret = AVERROR(ENOMEM); goto failed; } - s->vpp_param.AsyncDepth = param->async_depth; + s->vpp_param.AsyncDepth = s->async_depth; if (IS_SYSTEM_MEMORY(s->in_mem_mode)) s->vpp_param.IOPattern |= MFX_IOPATTERN_IN_SYSTEM_MEMORY; @@ -805,25 +800,22 @@ int ff_qsvvpp_create(AVFilterContext *avctx, QSVVPPContext **vpp, QSVVPPParam *p } else if (ret > 0) ff_qsvvpp_print_warning(avctx, ret, "Warning When creating qsvvpp"); - *vpp = s; return 0; failed: - ff_qsvvpp_free(&s); + ff_qsvvpp_close(avctx); return ret; } -int ff_qsvvpp_free(QSVVPPContext **vpp) +int ff_qsvvpp_close(AVFilterContext *avctx) { - QSVVPPContext *s = *vpp; - - if (!s) - return 0; + QSVVPPContext *s = avctx->priv; if (s->session) { MFXVideoVPP_Close(s->session); MFXClose(s->session); + s->session = NULL; } /* release all the resources */ @@ -836,7 +828,6 @@ int ff_qsvvpp_free(QSVVPPContext **vpp) #endif av_freep(&s->frame_infos); av_fifo_freep2(&s->async_fifo); - av_freep(vpp); return 0; } diff --git a/libavfilter/qsvvpp.h b/libavfilter/qsvvpp.h index 6f7c9bfc15..3b32193744 100644 --- a/libavfilter/qsvvpp.h +++ b/libavfilter/qsvvpp.h @@ -53,6 +53,8 @@ typedef struct QSVFrame { } QSVFrame; typedef struct QSVVPPContext { + const AVClass *class; + mfxSession session; int (*filter_frame) (AVFilterLink *outlink, AVFrame *frame); /**< callback */ enum AVPixelFormat out_sw_format; /**< Real output format */ @@ -102,15 +104,13 @@ typedef struct QSVVPPParam { /* Crop information for each input, if needed */ int num_crop; QSVVPPCrop *crop; - - int async_depth; } QSVVPPParam; /* create and initialize the QSV session */ -int ff_qsvvpp_create(AVFilterContext *avctx, QSVVPPContext **vpp, QSVVPPParam *param); +int ff_qsvvpp_init(AVFilterContext *avctx, QSVVPPParam *param); /* release the resources (eg.surfaces) */ -int ff_qsvvpp_free(QSVVPPContext **vpp); +int ff_qsvvpp_close(AVFilterContext *avctx); /* vpp filter frame and call the cb if needed */ int ff_qsvvpp_filter_frame(QSVVPPContext *vpp, AVFilterLink *inlink, AVFrame *frame); diff --git a/libavfilter/vf_overlay_qsv.c b/libavfilter/vf_overlay_qsv.c index 1a2c1b1e96..5bec7dd414 100644 --- a/libavfilter/vf_overlay_qsv.c +++ b/libavfilter/vf_overlay_qsv.c @@ -57,10 +57,9 @@ enum var_name { }; typedef struct QSVOverlayContext { - const AVClass *class; + QSVVPPContext qsv; FFFrameSync fs; - QSVVPPContext *qsv; QSVVPPParam qsv_param; mfxExtVPPComposite comp_conf; double var_values[VAR_VARS_NB]; @@ -230,14 +229,14 @@ static int config_overlay_input(AVFilterLink *inlink) static int process_frame(FFFrameSync *fs) { AVFilterContext *ctx = fs->parent; - QSVOverlayContext *s = fs->opaque; + QSVVPPContext *qsv = fs->opaque; AVFrame *frame = NULL; int ret = 0, i; for (i = 0; i < ctx->nb_inputs; i++) { ret = ff_framesync_get_frame(fs, i, &frame, 0); if (ret == 0) - ret = ff_qsvvpp_filter_frame(s->qsv, ctx->inputs[i], frame); + ret = ff_qsvvpp_filter_frame(qsv, ctx->inputs[i], frame); if (ret < 0 && ret != AVERROR(EAGAIN)) break; } @@ -301,7 +300,7 @@ static int config_output(AVFilterLink *outlink) if (ret < 0) return ret; - return ff_qsvvpp_create(ctx, &vpp->qsv, &vpp->qsv_param); + return ff_qsvvpp_init(ctx, &vpp->qsv_param); } /* @@ -350,7 +349,7 @@ static av_cold void overlay_qsv_uninit(AVFilterContext *ctx) { QSVOverlayContext *vpp = ctx->priv; - ff_qsvvpp_free(&vpp->qsv); + ff_qsvvpp_close(ctx); ff_framesync_uninit(&vpp->fs); av_freep(&vpp->comp_conf.InputStream); av_freep(&vpp->qsv_param.ext_buf); diff --git a/libavfilter/vf_vpp_qsv.c b/libavfilter/vf_vpp_qsv.c index 4aad856a2e..4a1af7146a 100644 --- a/libavfilter/vf_vpp_qsv.c +++ b/libavfilter/vf_vpp_qsv.c @@ -45,9 +45,7 @@ #define ENH_FILTERS_COUNT (8) typedef struct VPPContext{ - const AVClass *class; - - QSVVPPContext *qsv; + QSVVPPContext qsv; /* Video Enhancement Algorithms */ mfxExtVPPDeinterlacing deinterlace_conf; @@ -100,8 +98,6 @@ typedef struct VPPContext{ char *ow, *oh; char *output_format_str; - int async_depth; - int eof; int has_passthrough; /* apply pass through mode if possible */ } VPPContext; @@ -138,7 +134,7 @@ static const AVOption options[] = { { "h", "Output video height(0=input video height, -1=keep input video aspect)", OFFSET(oh), AV_OPT_TYPE_STRING, { .str="w*ch/cw" }, 0, 255, .flags = FLAGS }, { "height", "Output video height(0=input video height, -1=keep input video aspect)", OFFSET(oh), AV_OPT_TYPE_STRING, { .str="w*ch/cw" }, 0, 255, .flags = FLAGS }, { "format", "Output pixel format", OFFSET(output_format_str), AV_OPT_TYPE_STRING, { .str = "same" }, .flags = FLAGS }, - { "async_depth", "Internal parallelization depth, the higher the value the higher the latency.", OFFSET(async_depth), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, .flags = FLAGS }, + { "async_depth", "Internal parallelization depth, the higher the value the higher the latency.", OFFSET(qsv.async_depth), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, .flags = FLAGS }, { "scale_mode", "scale & format conversion mode: 0=auto, 1=low power, 2=high quality", OFFSET(scale_mode), AV_OPT_TYPE_INT, { .i64 = MFX_SCALING_MODE_DEFAULT }, MFX_SCALING_MODE_DEFAULT, MFX_SCALING_MODE_QUALITY, .flags = FLAGS, "scale mode" }, { "auto", "auto mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_DEFAULT}, INT_MIN, INT_MAX, FLAGS, "scale mode"}, { "low_power", "low power mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_LOWPOWER}, INT_MIN, INT_MAX, FLAGS, "scale mode"}, @@ -401,7 +397,6 @@ static int config_output(AVFilterLink *outlink) param.filter_frame = NULL; param.num_ext_buf = 0; param.ext_buf = ext_buf; - param.async_depth = vpp->async_depth; if (get_mfx_version(ctx, &mfx_version) != MFX_ERR_NONE) { av_log(ctx, AV_LOG_ERROR, "Failed to query mfx version.\n"); @@ -557,8 +552,9 @@ static int config_output(AVFilterLink *outlink) vpp->detail || vpp->procamp || vpp->rotate || vpp->hflip || inlink->w != outlink->w || inlink->h != outlink->h || in_format != vpp->out_format || !vpp->has_passthrough) - return ff_qsvvpp_create(ctx, &vpp->qsv, ¶m); + return ff_qsvvpp_init(ctx, ¶m); else { + /* No MFX session is created in this case */ av_log(ctx, AV_LOG_VERBOSE, "qsv vpp pass through mode.\n"); if (inlink->hw_frames_ctx) outlink->hw_frames_ctx = av_buffer_ref(inlink->hw_frames_ctx); @@ -571,29 +567,27 @@ static int activate(AVFilterContext *ctx) { AVFilterLink *inlink = ctx->inputs[0]; AVFilterLink *outlink = ctx->outputs[0]; - VPPContext *s =ctx->priv; - QSVVPPContext *qsv = s->qsv; + QSVVPPContext *qsv = ctx->priv; AVFrame *in = NULL; int ret, status = 0; int64_t pts = AV_NOPTS_VALUE; FF_FILTER_FORWARD_STATUS_BACK(outlink, inlink); - if (!s->eof) { + if (!qsv->eof) { ret = ff_inlink_consume_frame(inlink, &in); if (ret < 0) return ret; if (ff_inlink_acknowledge_status(inlink, &status, &pts)) { if (status == AVERROR_EOF) { - s->eof = 1; + qsv->eof = 1; } } } - if (qsv) { - if (in || s->eof) { - qsv->eof = s->eof; + if (qsv->session) { + if (in || qsv->eof) { ret = ff_qsvvpp_filter_frame(qsv, inlink, in); av_frame_free(&in); if (ret == AVERROR(EAGAIN)) @@ -601,7 +595,7 @@ static int activate(AVFilterContext *ctx) else if (ret < 0) return ret; - if (s->eof) + if (qsv->eof) goto eof; if (qsv->got_frame) { @@ -610,6 +604,7 @@ static int activate(AVFilterContext *ctx) } } } else { + /* No MFX session is created in pass-through mode */ if (in) { if (in->pts != AV_NOPTS_VALUE) in->pts = av_rescale_q(in->pts, inlink->time_base, outlink->time_base); @@ -618,7 +613,7 @@ static int activate(AVFilterContext *ctx) if (ret < 0) return ret; - if (s->eof) + if (qsv->eof) goto eof; return 0; @@ -626,7 +621,7 @@ static int activate(AVFilterContext *ctx) } not_ready: - if (s->eof) + if (qsv->eof) goto eof; FF_FILTER_FORWARD_WANTED(outlink, inlink); @@ -667,9 +662,7 @@ static int query_formats(AVFilterContext *ctx) static av_cold void vpp_uninit(AVFilterContext *ctx) { - VPPContext *vpp = ctx->priv; - - ff_qsvvpp_free(&vpp->qsv); + ff_qsvvpp_close(ctx); } static const AVClass vpp_class = {