From patchwork Fri Jul 9 03:32:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 28871 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5d:965a:0:0:0:0:0 with SMTP id d26csp270369ios; Thu, 8 Jul 2021 20:35:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzj5Bv/gPNYlsR0EqAkt2iMZbvJ8pdHxuzhuldBzo+ZlhEAoxTlfjlgzYNvNkBmfqfk8Ocz X-Received: by 2002:a17:906:71c1:: with SMTP id i1mr28868346ejk.549.1625801731129; Thu, 08 Jul 2021 20:35:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625801731; cv=none; d=google.com; s=arc-20160816; b=UgzhJCrebTCE+aiZaPLu16CZLy9oszaNB3nNAu8gE72Vrs+yGpNjb27KJjVDREOn02 qmFWDwJj1KAJxxFOnNNrnXymC8hLe5UJD3A7usWCEGAMFueqUusCqz+danAY4J2KzwuB djC3692bGyqyDwaUqiqkUQuThHJ5awnUzAQBLO7n4Jxpblx0s3j7J2MDFYMLuJncYIdL bFed+qf+yCoE4rQ4gaNJkAc7s2xNN8ULj7AT9HSyYbLrgkmccKctCATbRR6h9I7ofT12 NFm5p7sWmaS+jCiH1/MtOauDusLK/hBCEWhJaby3kd9Vb7803z54snWR61J1FkCkuL5m pUTg== 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:delivered-to; bh=PGowjithCpcdaytua5V5fYRixp4NYWCvgDLyZmU2b28=; b=BeBc5igqWSay77EOvnF/eqCh9VxuaYsP0GMR4ISb4t8ybPqCiMZhQsYiKZsCrxDE54 xQqTc9T4U6Ux9ZeSQupCMz3T6jmhpDnK27eQwsd8sKAViBBRqF4CtlKJzSpo5752ggdL tJW2dV/AI082nmoc9Zh16oCyvO8IACJj2VE95Qj99ebyRUtdOS+ig4PzinCdUI8MI70B HhiQkwQs8Gbw5Ugu3FC4B5dnDzMFJF0/JW/T4tgsxwNweetxGt++7ClFqkObaOuWNdS2 pboL7mpzPIno9hXEQCqs/LXVAxQXmi2nga9iCz7bG7UFqPSYQG/OlUPaNjPGY8dcqCbu aXnA== ARC-Authentication-Results: i=1; mx.google.com; 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=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id j22si5363002edq.161.2021.07.08.20.35.08; Thu, 08 Jul 2021 20:35: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; 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=NONE dis=NONE) header.from=intel.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CDD8A68A451; Fri, 9 Jul 2021 06:35:03 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0AAD0689DB3 for ; Fri, 9 Jul 2021 06:34:56 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10039"; a="196814895" X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="196814895" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2021 20:34:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="461973651" Received: from f.sh.intel.com ([10.239.159.147]) by fmsmga008.fm.intel.com with ESMTP; 08 Jul 2021 20:34:49 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Fri, 9 Jul 2021 11:32:21 +0800 Message-Id: <20210709033229.19125-1-fei.w.wang@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH v4 1/9] cbs_av1: fix incorrect data type 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: Fei Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: qiwXKanZI8bz Since order_hint_bits_minus_1 range is 0~7, cur_frame_hint can be most 128. And similar return value for cbs_av1_get_relative_dist. So if plus them and use int8_t for the result may lose its precision. Signed-off-by: Fei Wang --- libavcodec/cbs_av1_syntax_template.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c index 6fe6e9a4f3..d98d3d42de 100644 --- a/libavcodec/cbs_av1_syntax_template.c +++ b/libavcodec/cbs_av1_syntax_template.c @@ -355,7 +355,7 @@ static int FUNC(set_frame_refs)(CodedBitstreamContext *ctx, RWContext *rw, AV1_REF_FRAME_ALTREF2, AV1_REF_FRAME_ALTREF }; int8_t ref_frame_idx[AV1_REFS_PER_FRAME], used_frame[AV1_NUM_REF_FRAMES]; - int8_t shifted_order_hints[AV1_NUM_REF_FRAMES]; + int16_t shifted_order_hints[AV1_NUM_REF_FRAMES]; int cur_frame_hint, latest_order_hint, earliest_order_hint, ref; int i, j; From patchwork Fri Jul 9 03:32:22 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 28870 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5d:965a:0:0:0:0:0 with SMTP id d26csp270373ios; Thu, 8 Jul 2021 20:35:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyS+2IfJudBNOGrDUsFOSKK75SNBXg3xRaFLcDsHVmnBtnw7i62DkWGnJ9RjlZCu0amnMwy X-Received: by 2002:aa7:c907:: with SMTP id b7mr7270201edt.148.1625801731492; Thu, 08 Jul 2021 20:35:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625801731; cv=none; d=google.com; s=arc-20160816; b=XbxIpuVuuONZR3TIxGOR+rYG93EC+MulIHPdtGEoZ2ljsHD+asuX8jMMYco+GHLqVT np9N/M1VSDFf29d5kdNUpV0lMv+vr2NegEOeLxKW6kEiI3OVL7ALWdFgy7uVmGlTmJ+e W6EL+RWm6idwMLr8LlxJC23kVa3vDQqDKn+2ADN3RuEtQE/7CIWYFYX8i6SzZkf/Dquy Ilvl72drs+jQDT7lTyygzI6SZjQRbKmALvpLJKH4fZ1S4P81ySHuMArGPO07zAKjh1z1 5wpa2Pu/wZZ+8M/sOKVy4bsE66Jt3wiu1/Cq9d0t/DAzehbLbnViMFx6OKyD9oa2z6r7 je5g== 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:references:in-reply-to:message-id:date :to:from:delivered-to; bh=TWn4LBRR0nxaKZOgkWrjhFrMRil6ja+rR9pC4RN5xBA=; b=aTfFfzSYSjiJX6WIwgllant8G8zWYrMtfdiSumbs5YMypG+6miTmD+ysnFEoZrAUbO SwMW4CVVF+gHcrZH1UkqNKxbLrK4Horu5M2Bi+lhohtn6iCp2TY3GvIAqtvJueiD4uP/ qdF/h8bc4D03yEMjlKufnOYa8JCG5SC4cXTlALOxoEDOmRJiHyLP3SC2lYexSXcz0xLp LjN9iwI3dWEk+XxNC0D5Kr/ngBhXFnzyU0JbC48CdhgjCgaOuDcf7tQ4rF2kiQrVZKBk MVP3UEE+EAWBsh4sryJ7Uws0XB0EX8dnj+tCmfteZMPKZ0naNIJPFg1aw45VPUOTzzxP B7Tg== ARC-Authentication-Results: i=1; mx.google.com; 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=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id m18si5195622ejb.612.2021.07.08.20.35.19; Thu, 08 Jul 2021 20:35: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; 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=NONE dis=NONE) header.from=intel.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 15B9968A4BE; Fri, 9 Jul 2021 06:35:06 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EF43C689DB3 for ; Fri, 9 Jul 2021 06:34:57 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10039"; a="196814897" X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="196814897" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2021 20:34:52 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="461973657" Received: from f.sh.intel.com ([10.239.159.147]) by fmsmga008.fm.intel.com with ESMTP; 08 Jul 2021 20:34:51 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Fri, 9 Jul 2021 11:32:22 +0800 Message-Id: <20210709033229.19125-2-fei.w.wang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210709033229.19125-1-fei.w.wang@intel.com> References: <20210709033229.19125-1-fei.w.wang@intel.com> Subject: [FFmpeg-devel] [PATCH v4 2/9] avcodec/av1: extend some definitions in spec section 3 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: Fei Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 5UmhbtLFTLhh Signed-off-by: Fei Wang --- libavcodec/av1.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libavcodec/av1.h b/libavcodec/av1.h index 0f99ae4829..951a18ecb2 100644 --- a/libavcodec/av1.h +++ b/libavcodec/av1.h @@ -114,6 +114,13 @@ enum { AV1_WARP_MODEL_TRANSLATION = 1, AV1_WARP_MODEL_ROTZOOM = 2, AV1_WARP_MODEL_AFFINE = 3, + AV1_WARP_PARAM_REDUCE_BITS = 6, + + AV1_DIV_LUT_BITS = 8, + AV1_DIV_LUT_PREC_BITS = 14, + AV1_DIV_LUT_NUM = 257, + + AV1_MAX_LOOP_FILTER = 63, }; From patchwork Fri Jul 9 03:32:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 28876 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5d:965a:0:0:0:0:0 with SMTP id d26csp270416ios; Thu, 8 Jul 2021 20:35:35 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxh12uYjlLnzCL9h/l3bwHeaZHLPsA0ozabQP1Xf7kjUHyPj9JQDJZShP7P9yKm/uN8Q/Ev X-Received: by 2002:a17:906:8584:: with SMTP id v4mr34592035ejx.301.1625801734994; Thu, 08 Jul 2021 20:35:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625801734; cv=none; d=google.com; s=arc-20160816; b=wnRXTZp2pOahIQUrI6AP1cBSNVSD/8SYmNvYAEcAgvos6ekoaIKPNxo0fn1U47+TUI AHDAyI115w3L0uGPEH966zEktdGCHjw64DkV2T9X+36NbrRN24yOGfx+KP9c+X75UEW3 W6CKR+istkuLNl3TYLi/v6np/FjfDhbwaT0cov5xPTx5AML/XZi1Ide4ZiMutu3USiPO Z/r+BmyGxYpKMPx20qmr+TTIMZOaX0zYuwLn32zfZd2oX/IYexNCtmevGjGT7po//XWZ HzH2KgHFQvcEC0S1Qwco6pJpVSGP5UaOa4qGrouFF/lK6fQ6sD6qPRShGcy28mJkMV5S 6HTw== 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:references:in-reply-to:message-id:date :to:from:delivered-to; bh=v4OvrmsgpolDFvMVU5v8hqTohNS8nXvwc8u77KDWV5k=; b=MHKbCfSXesL6FU5f01Tm0TgTaI1rJKzsaaPHyMPNMisVawLqvwz7g6oYYOCuqJFRtc ymS5lGyM0/ILAEIWp7kFp2/NXwaaEFmpm3nSh8aKYRvgE2I4mFJ39d6Ufi8YbD1hjdZ2 kiMAK6mRd2BEIxFlLHfd+Nw54fttrl4oCgs3jn2EmO7YPORp19VeT3iYQiUPmALGMMFJ qla2hOrSSVu8A16CGPRd94tlCmEiRZY4ltRuWXkhXytXtXsce3dbyURM7ZwRzRLTJ0VL aVFRIzMmN0eqD8ZEhUv2v7PLO9rUAZMm9orbwbQUb8M5UzDn823fSg6Yic/aKqMdqaWx +1ig== ARC-Authentication-Results: i=1; mx.google.com; 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=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id hd33si5679985ejc.706.2021.07.08.20.35.30; Thu, 08 Jul 2021 20:35:34 -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; 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=NONE dis=NONE) header.from=intel.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 25FED68A50C; Fri, 9 Jul 2021 06:35:07 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2D4BF68A369 for ; Fri, 9 Jul 2021 06:34:58 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10039"; a="196814900" X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="196814900" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2021 20:34:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="461973662" Received: from f.sh.intel.com ([10.239.159.147]) by fmsmga008.fm.intel.com with ESMTP; 08 Jul 2021 20:34:52 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Fri, 9 Jul 2021 11:32:23 +0800 Message-Id: <20210709033229.19125-3-fei.w.wang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210709033229.19125-1-fei.w.wang@intel.com> References: <20210709033229.19125-1-fei.w.wang@intel.com> Subject: [FFmpeg-devel] [PATCH v4 3/9] avcodec/av1dec: support setup shear process 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: Fei Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Ms1a9jR4GMu+ Defined in spec 7.11.3.6/7.11.3.7. Signed-off-by: Fei Wang --- update: 1. fix possible overflow issue. libavcodec/av1dec.c | 98 +++++++++++++++++++++++++++++++++++++++++++++ libavcodec/av1dec.h | 1 + 2 files changed, 99 insertions(+) diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c index 1dda0f9160..d808a9d4c6 100644 --- a/libavcodec/av1dec.c +++ b/libavcodec/av1dec.c @@ -28,6 +28,34 @@ #include "internal.h" #include "profiles.h" +/**< same with Div_Lut defined in spec 7.11.3.7 */ +static const uint16_t div_lut[AV1_DIV_LUT_NUM] = { + 16384, 16320, 16257, 16194, 16132, 16070, 16009, 15948, 15888, 15828, 15768, + 15709, 15650, 15592, 15534, 15477, 15420, 15364, 15308, 15252, 15197, 15142, + 15087, 15033, 14980, 14926, 14873, 14821, 14769, 14717, 14665, 14614, 14564, + 14513, 14463, 14413, 14364, 14315, 14266, 14218, 14170, 14122, 14075, 14028, + 13981, 13935, 13888, 13843, 13797, 13752, 13707, 13662, 13618, 13574, 13530, + 13487, 13443, 13400, 13358, 13315, 13273, 13231, 13190, 13148, 13107, 13066, + 13026, 12985, 12945, 12906, 12866, 12827, 12788, 12749, 12710, 12672, 12633, + 12596, 12558, 12520, 12483, 12446, 12409, 12373, 12336, 12300, 12264, 12228, + 12193, 12157, 12122, 12087, 12053, 12018, 11984, 11950, 11916, 11882, 11848, + 11815, 11782, 11749, 11716, 11683, 11651, 11619, 11586, 11555, 11523, 11491, + 11460, 11429, 11398, 11367, 11336, 11305, 11275, 11245, 11215, 11185, 11155, + 11125, 11096, 11067, 11038, 11009, 10980, 10951, 10923, 10894, 10866, 10838, + 10810, 10782, 10755, 10727, 10700, 10673, 10645, 10618, 10592, 10565, 10538, + 10512, 10486, 10460, 10434, 10408, 10382, 10356, 10331, 10305, 10280, 10255, + 10230, 10205, 10180, 10156, 10131, 10107, 10082, 10058, 10034, 10010, 9986, + 9963, 9939, 9916, 9892, 9869, 9846, 9823, 9800, 9777, 9754, 9732, + 9709, 9687, 9664, 9642, 9620, 9598, 9576, 9554, 9533, 9511, 9489, + 9468, 9447, 9425, 9404, 9383, 9362, 9341, 9321, 9300, 9279, 9259, + 9239, 9218, 9198, 9178, 9158, 9138, 9118, 9098, 9079, 9059, 9039, + 9020, 9001, 8981, 8962, 8943, 8924, 8905, 8886, 8867, 8849, 8830, + 8812, 8793, 8775, 8756, 8738, 8720, 8702, 8684, 8666, 8648, 8630, + 8613, 8595, 8577, 8560, 8542, 8525, 8508, 8490, 8473, 8456, 8439, + 8422, 8405, 8389, 8372, 8355, 8339, 8322, 8306, 8289, 8273, 8257, + 8240, 8224, 8208, 8192 +}; + static uint32_t inverse_recenter(int r, uint32_t v) { if (v > 2 * r) @@ -97,6 +125,70 @@ static void read_global_param(AV1DecContext *s, int type, int ref, int idx) -mx, mx + 1, r) << prec_diff) + round; } +static uint64_t round_two(uint64_t x, uint16_t n) +{ + if (n == 0) + return x; + return ((x + ((uint64_t)1 << (n - 1))) >> n); +} + +static int64_t round_two_signed(int64_t x, uint16_t n) +{ + return ((x<0) ? -((int64_t)round_two(-x, n)) : (int64_t)round_two(x, n)); +} + +/** + * Resolve divisor process. + * see spec 7.11.3.7 + */ +static int16_t resolve_divisor(uint32_t d, uint16_t *shift) +{ + int32_t e, f; + + *shift = av_log2(d); + e = d - (1 << (*shift)); + if (*shift > AV1_DIV_LUT_BITS) + f = round_two(e, *shift - AV1_DIV_LUT_BITS); + else + f = e << (AV1_DIV_LUT_BITS - (*shift)); + + *shift += AV1_DIV_LUT_PREC_BITS; + + return div_lut[f]; +} + +/** + * check if global motion params is valid. + * see spec 7.11.3.6 + */ +static uint8_t get_shear_params_valid(AV1DecContext *s, int idx) +{ + int16_t alpha, beta, gamma, delta, divf, divs; + int64_t v, w; + int32_t *param = &s->cur_frame.gm_params[idx][0]; + if (param[2] < 0) + return 0; + + alpha = av_clip_int16(param[2] - (1 << AV1_WARPEDMODEL_PREC_BITS)); + beta = av_clip_int16(param[3]); + divf = resolve_divisor(abs(param[2]), &divs); + v = (int64_t)param[4] * (1 << AV1_WARPEDMODEL_PREC_BITS); + w = (int64_t)param[3] * param[4]; + gamma = av_clip_int16((int)round_two_signed((v * divf), divs)); + delta = av_clip_int16(param[5] - (int)round_two_signed((w * divf), divs) - (1 << AV1_WARPEDMODEL_PREC_BITS)); + + alpha = round_two_signed(alpha, AV1_WARP_PARAM_REDUCE_BITS) << AV1_WARP_PARAM_REDUCE_BITS; + beta = round_two_signed(beta, AV1_WARP_PARAM_REDUCE_BITS) << AV1_WARP_PARAM_REDUCE_BITS; + gamma = round_two_signed(gamma, AV1_WARP_PARAM_REDUCE_BITS) << AV1_WARP_PARAM_REDUCE_BITS; + delta = round_two_signed(delta, AV1_WARP_PARAM_REDUCE_BITS) << AV1_WARP_PARAM_REDUCE_BITS; + + if ((4 * abs(alpha) + 7 * abs(beta)) >= (1 << AV1_WARPEDMODEL_PREC_BITS) || + (4 * abs(gamma) + 4 * abs(delta)) >= (1 << AV1_WARPEDMODEL_PREC_BITS)) + return 0; + + return 1; +} + /** * update gm type/params, since cbs already implemented part of this funcation, * so we don't need to full implement spec. @@ -144,6 +236,9 @@ static void global_motion_params(AV1DecContext *s) read_global_param(s, type, ref, 0); read_global_param(s, type, ref, 1); } + if (type <= AV1_WARP_MODEL_AFFINE) { + s->cur_frame.gm_invalid[ref] = !get_shear_params_valid(s, ref); + } } } @@ -509,6 +604,9 @@ static int av1_frame_ref(AVCodecContext *avctx, AV1Frame *dst, const AV1Frame *s dst->spatial_id = src->spatial_id; dst->temporal_id = src->temporal_id; + memcpy(dst->gm_invalid, + src->gm_invalid, + AV1_NUM_REF_FRAMES * sizeof(uint8_t)); memcpy(dst->gm_type, src->gm_type, AV1_NUM_REF_FRAMES * sizeof(uint8_t)); diff --git a/libavcodec/av1dec.h b/libavcodec/av1dec.h index 248a68750f..4e140588b9 100644 --- a/libavcodec/av1dec.h +++ b/libavcodec/av1dec.h @@ -42,6 +42,7 @@ typedef struct AV1Frame { int temporal_id; int spatial_id; + uint8_t gm_invalid[AV1_NUM_REF_FRAMES]; uint8_t gm_type[AV1_NUM_REF_FRAMES]; int32_t gm_params[AV1_NUM_REF_FRAMES][6]; From patchwork Fri Jul 9 03:32:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 28873 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5d:965a:0:0:0:0:0 with SMTP id d26csp270487ios; Thu, 8 Jul 2021 20:35:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxkRdLm0kTSU83e5SCKBsq+X8ICMt6epUV77mZCpqWSaAYrpMWXkHdD8+nO8Pef4kQEpza6 X-Received: by 2002:a17:907:2da4:: with SMTP id gt36mr30759282ejc.455.1625801741855; Thu, 08 Jul 2021 20:35:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625801741; cv=none; d=google.com; s=arc-20160816; b=guulc8tEc3hfL9UXFyfNWrfG9ArOqASLnjsQs+KEJxJxksKmwE6Nf7LC8YTTxknjJO XS9utFaQAt3xCZRR7FdSL3wDy2yW5BjiG7mfRtFjM+FfJ2enXO525jfIA6iS/fXHIL0T nn+3t/e6LGUyA/rzoLoWnKzSylpXl8BznG/+C69U18Sf4vptSDXiCL5Ii2bksfuiHB9S CRUdBFWWRsWuiPdQzmYKZbGioHpoAL9VKNQiXO0REUBs5cdPRYcKJF/FgpLEyNFQ3cSL LTwdZj0V8O94cW5nI4SHGA847zN0cBfRujACnjvXyKupmjZZuf5DqeVnNhWP2KabgQKH lqCg== 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:references:in-reply-to:message-id:date :to:from:delivered-to; bh=bkVozSZ7hVmtNxG61PIGhx2/oS+J/tYDetO40/PSLeE=; b=IBYgML0be8KrsrXc/v2WrOgEpE3C923SWfOeMrgoKRVpK4aEvB+k1SeTj7ICNnFCHm DM4GQvYLwc4Yvn5wnRRitWbMOx1vHVagrzZEJdrblCxVFR2aCn4+IW+R+DjsWKbJktHW xkwLKHPRKGSwT5HTLmFH5NvkIwZ/+Y6V59fXzFAJRYvvEiTrqGp0L132vTvNQ3c+dem+ ktiN/ZQLKd7fGmLj+jULe0HbeH/30hdGdRtp8UVOpj6V1US0V6ndM4viSSZkge8ik47T 8lYRuQbk+brlQZhhm0SsPoWdVZ+TyKhoAxpWq9D55z0OYG0PkPYL9B7ghsoJ/fOEHepZ /ETA== ARC-Authentication-Results: i=1; mx.google.com; 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=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id t21si5799973edd.485.2021.07.08.20.35.41; Thu, 08 Jul 2021 20:35:41 -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; 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=NONE dis=NONE) header.from=intel.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3598568A56A; Fri, 9 Jul 2021 06:35:10 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 25F9868A477 for ; Fri, 9 Jul 2021 06:35:02 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10039"; a="196814903" X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="196814903" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2021 20:34:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="461973667" Received: from f.sh.intel.com ([10.239.159.147]) by fmsmga008.fm.intel.com with ESMTP; 08 Jul 2021 20:34:53 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Fri, 9 Jul 2021 11:32:24 +0800 Message-Id: <20210709033229.19125-4-fei.w.wang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210709033229.19125-1-fei.w.wang@intel.com> References: <20210709033229.19125-1-fei.w.wang@intel.com> Subject: [FFmpeg-devel] [PATCH v4 4/9] avcodec/av1_vaapi: add gm params valid check 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: Fei Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: R5xVuojHHqXX Signed-off-by: Fei Wang --- libavcodec/vaapi_av1.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libavcodec/vaapi_av1.c b/libavcodec/vaapi_av1.c index 16b7e35747..f577447be4 100644 --- a/libavcodec/vaapi_av1.c +++ b/libavcodec/vaapi_av1.c @@ -213,7 +213,8 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, frame_header->height_in_sbs_minus_1[i]; } for (int i = AV1_REF_FRAME_LAST; i <= AV1_REF_FRAME_ALTREF; i++) { - pic_param.wm[i - 1].wmtype = s->cur_frame.gm_type[i]; + pic_param.wm[i - 1].invalid = s->cur_frame.gm_invalid[i]; + pic_param.wm[i - 1].wmtype = s->cur_frame.gm_type[i]; for (int j = 0; j < 6; j++) pic_param.wm[i - 1].wmmat[j] = s->cur_frame.gm_params[i][j]; } From patchwork Fri Jul 9 03:32:25 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 28877 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5d:965a:0:0:0:0:0 with SMTP id d26csp270601ios; Thu, 8 Jul 2021 20:35:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwF2IiclHQ9iIAYQXR7vmXV2ymXFxLqWdzYhSUaDweoMwf8jwsUt4UH7e4Cj+huTX0V/+e4 X-Received: by 2002:aa7:db94:: with SMTP id u20mr43028886edt.381.1625801752044; Thu, 08 Jul 2021 20:35:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625801752; cv=none; d=google.com; s=arc-20160816; b=k7f1nNj0U+aYanOf2ors2+xGbF8PwUeNrYkF1LDs0ZTJBWtkhX5C4mR+lihoXeuAun VmSIPyVXpA/LnLqr1lhE7uMJOek9eYQreEkwUAbO3SbXuH3A5G7/wSyfYsdLjcFUAg3Y RHvlsX1D8WQ3P9qwX/f4p/yHRod3ZTfRAXo+iqboC6ype7qoI+q6Mc7IL+mv2fznrZ3f xfqh0T/cjIluNZDRkVFt2lQL01k46Cj/M7TL76ny2CxThWqI2dQKZku0Z4O/bdHyIBf0 sWossH3gCZLRni6JsgHNcAxf56ZkzQtJTannEBHncgDapLhFdNfEAO5SxkGfFxA8TGxj W3dA== 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:references:in-reply-to:message-id:date :to:from:delivered-to; bh=aLwA2lVUAxkbfiLCFhcrExLJpOWJyOga98Ng6z43CjU=; b=iBC/hDPbyItgAAE/583hgfHCnPGV1rZzF7XsI1JpK2TUdx8UoK1xR5QsSw2HbT559Y 2zGHq195CCzgoIDh7GEm4yCeKdrbXRKAXiPTG8032B0Ltm8I9BcrvroYHcZBJBblnVWq i91qMzaAKz7N6qFZMp4WuflgG1Z+6Po99gEQ7zMMOo6NdqXQ00FcdLnhlQsJLkVVqlRO dq8sQvAGOFSaKJcikGcP5/YuhXWDn3tZU8zHxnLTejfqaShpvMawL6WFwZZSg4SfNkVp SNT16TwEGVvPUbrkVzMN8cYx1jljv4igSdWFyTe1uDTzmwY6hkTF/vrZ/rUXgb+PFbQR 6S0g== ARC-Authentication-Results: i=1; mx.google.com; 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=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id mp36si5499628ejc.478.2021.07.08.20.35.51; Thu, 08 Jul 2021 20:35:52 -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; 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=NONE dis=NONE) header.from=intel.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5367E68A571; Fri, 9 Jul 2021 06:35:12 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AA9BC68A4D1 for ; Fri, 9 Jul 2021 06:35:04 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10039"; a="196814906" X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="196814906" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2021 20:34:55 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="461973671" Received: from f.sh.intel.com ([10.239.159.147]) by fmsmga008.fm.intel.com with ESMTP; 08 Jul 2021 20:34:54 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Fri, 9 Jul 2021 11:32:25 +0800 Message-Id: <20210709033229.19125-5-fei.w.wang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210709033229.19125-1-fei.w.wang@intel.com> References: <20210709033229.19125-1-fei.w.wang@intel.com> Subject: [FFmpeg-devel] [PATCH v4 5/9] avcodec/vaapi: increase av1 decode pool size 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: Fei Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: +DbFeC0Z6yCv For film grain clip, vaapi_av1 decoder will cache additional 8 surfaces that will be used to store frames which apply film grain. So increase the pool size by plus 8 to avoid leak of surface. Signed-off-by: Fei Wang --- libavcodec/vaapi_decode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/vaapi_decode.c b/libavcodec/vaapi_decode.c index 958ddf49da..665af370ed 100644 --- a/libavcodec/vaapi_decode.c +++ b/libavcodec/vaapi_decode.c @@ -577,10 +577,10 @@ static int vaapi_decode_make_config(AVCodecContext *avctx, switch (avctx->codec_id) { case AV_CODEC_ID_H264: case AV_CODEC_ID_HEVC: + case AV_CODEC_ID_AV1: frames->initial_pool_size += 16; break; case AV_CODEC_ID_VP9: - case AV_CODEC_ID_AV1: frames->initial_pool_size += 8; break; case AV_CODEC_ID_VP8: From patchwork Fri Jul 9 03:32:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 28874 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5d:965a:0:0:0:0:0 with SMTP id d26csp270696ios; Thu, 8 Jul 2021 20:36:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyWhsNdYO2PZetcT9fIVlxJ9MLusc83LbIJf35OUQ1+O1vja/91i3mMn8t95bdouuxwrqWz X-Received: by 2002:a05:6402:3514:: with SMTP id b20mr23873950edd.187.1625801760858; Thu, 08 Jul 2021 20:36:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625801760; cv=none; d=google.com; s=arc-20160816; b=oE5Z7kt+8FI/3zAo0lIwco3x3G0qNl3lxOPwKXUHlxEctPy5RybAKQ20EPqae+lmtN p4zi0YhU4Y2bY0WnPQTzo2cZSDtXfUSgqU5rQeJWapOq3/3FK1SiVsVYP9uCTQ/yY9Ei ccNOsRrBCsYQKNgd5orwexpFtqdvnYdciNsuimu+RFyhOgPr+XJfF0ahHQrPH///cVUm unufPci/qwYuMrDKLRQfO+m0kmm56yrIJaZ6AITqRHeqs65SbXfQgbDSFV+MD4Go5Yxp owJklBnTpO3oSK1LcrGGIoDyDmgL1G2oNaqhRdwD2hBybpuwQKsrNV28lgqpFhH+6qAq 2f+w== 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:references:in-reply-to:message-id:date :to:from:delivered-to; bh=Ab4gcMvZ8kTUKZfAWKIR/Fx1d0LjB1G6Zi/aYD+jwIU=; b=JUCzOBVGvjiUbWkclnwG6vdJ2ZW2IZSYR2TKERyk2CnpYF73twncFmvRVyy3WTsaAW CSsUId+BWEsxd2MzXtNg7o+lN0VvQUOlrOlmN/IHEO9+DZ4YGO6IrSuLWxldgr5NdVlQ gbX2oN758zRFyh2Lqdzgc3R2CSr+C97EK1RnADP5jtyJacIEBuzBEe0asVZlFrY3mfl/ 9Vcb2LItOEC2YcfIQLRTBTXapNyNEONeJuyEQ5zf109uTzSsXA0oIdb7MUKG5sBlVXU7 n4CvBvexKyWIeyaiTk4Z2gqNCbARspUus7elchTbJLBj5rGdW/yHknyW7TRz7kt+Zm7R L4+g== ARC-Authentication-Results: i=1; mx.google.com; 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=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4si4510170ejr.300.2021.07.08.20.36.00; Thu, 08 Jul 2021 20:36:00 -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; 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=NONE dis=NONE) header.from=intel.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7844968A5D0; Fri, 9 Jul 2021 06:35:13 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 187D268A569 for ; Fri, 9 Jul 2021 06:35:04 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10039"; a="196814909" X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="196814909" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2021 20:34:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="461973677" Received: from f.sh.intel.com ([10.239.159.147]) by fmsmga008.fm.intel.com with ESMTP; 08 Jul 2021 20:34:55 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Fri, 9 Jul 2021 11:32:26 +0800 Message-Id: <20210709033229.19125-6-fei.w.wang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210709033229.19125-1-fei.w.wang@intel.com> References: <20210709033229.19125-1-fei.w.wang@intel.com> Subject: [FFmpeg-devel] [PATCH v4 6/9] avcodec/av1dec: add display frame for film grain usage 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: Fei Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Un+KzGnoZVQE Make it flexible if decode frame(without apply film grain) and display frame(applied film grain) both needed when decode film grain clips. Signed-off-by: Fei Wang --- libavcodec/av1dec.c | 43 ++++++++++++++++++++++++++++++++++++++++++- libavcodec/av1dec.h | 3 +++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c index d808a9d4c6..6bba2cb7a2 100644 --- a/libavcodec/av1dec.c +++ b/libavcodec/av1dec.c @@ -570,6 +570,8 @@ static int get_pixel_format(AVCodecContext *avctx) static void av1_frame_unref(AVCodecContext *avctx, AV1Frame *f) { ff_thread_release_buffer(avctx, &f->tf); + if (f->tf_display.f->buf[0]) + ff_thread_release_buffer(avctx, &f->tf_display); av_buffer_unref(&f->hwaccel_priv_buf); f->hwaccel_picture_private = NULL; av_buffer_unref(&f->header_ref); @@ -589,6 +591,12 @@ static int av1_frame_ref(AVCodecContext *avctx, AV1Frame *dst, const AV1Frame *s if (ret < 0) return ret; + if (src->tf_display.f->buf[0]) { + ret = ff_thread_ref_frame(&dst->tf_display, &src->tf_display); + if (ret < 0) + return ret; + } + dst->header_ref = av_buffer_ref(src->header_ref); if (!dst->header_ref) goto fail; @@ -635,9 +643,11 @@ static av_cold int av1_decode_free(AVCodecContext *avctx) for (int i = 0; i < FF_ARRAY_ELEMS(s->ref); i++) { av1_frame_unref(avctx, &s->ref[i]); av_frame_free(&s->ref[i].tf.f); + av_frame_free(&s->ref[i].tf_display.f); } av1_frame_unref(avctx, &s->cur_frame); av_frame_free(&s->cur_frame.tf.f); + av_frame_free(&s->cur_frame.tf_display.f); av_buffer_unref(&s->seq_ref); av_buffer_unref(&s->header_ref); @@ -739,6 +749,13 @@ static av_cold int av1_decode_init(AVCodecContext *avctx) "Failed to allocate reference frame buffer %d.\n", i); return AVERROR(ENOMEM); } + + s->ref[i].tf_display.f = av_frame_alloc(); + if (!s->ref[i].tf_display.f) { + av_log(avctx, AV_LOG_ERROR, + "Failed to allocate display frame buffer %d.\n", i); + return AVERROR(ENOMEM); + } } s->cur_frame.tf.f = av_frame_alloc(); @@ -748,6 +765,13 @@ static av_cold int av1_decode_init(AVCodecContext *avctx) return AVERROR(ENOMEM); } + s->cur_frame.tf_display.f = av_frame_alloc(); + if (!s->cur_frame.tf_display.f) { + av_log(avctx, AV_LOG_ERROR, + "Failed to allocate current display frame buffer.\n"); + return AVERROR(ENOMEM); + } + ret = ff_cbs_init(&s->cbc, AV_CODEC_ID_AV1, avctx); if (ret < 0) return ret; @@ -820,6 +844,16 @@ static int av1_frame_alloc(AVCodecContext *avctx, AV1Frame *f) break; } + if (header->film_grain.apply_grain && + (avctx->pix_fmt == AV_PIX_FMT_VAAPI) && + !(avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN)) { + if ((ret = ff_thread_get_buffer(avctx, &f->tf_display, AV_GET_BUFFER_FLAG_REF)) < 0) + goto fail; + + f->tf_display.f->key_frame = frame->key_frame; + f->tf_display.f->pict_type = frame->pict_type; + } + if (avctx->hwaccel) { const AVHWAccel *hwaccel = avctx->hwaccel; if (hwaccel->frame_priv_data_size) { @@ -903,9 +937,16 @@ static int set_output_frame(AVCodecContext *avctx, AVFrame *frame, const AVPacket *pkt, int *got_frame) { AV1DecContext *s = avctx->priv_data; - const AVFrame *srcframe = s->cur_frame.tf.f; + const AVFrame *srcframe; int ret; + /* Use tf_display as output when it is available. */ + if (s->cur_frame.tf_display.f->buf[0]) { + srcframe = s->cur_frame.tf_display.f; + } else { + srcframe= s->cur_frame.tf.f; + } + // TODO: all layers if (s->operating_point_idc && av_log2(s->operating_point_idc >> 8) > s->cur_frame.spatial_id) diff --git a/libavcodec/av1dec.h b/libavcodec/av1dec.h index 4e140588b9..5af3dfc867 100644 --- a/libavcodec/av1dec.h +++ b/libavcodec/av1dec.h @@ -33,6 +33,9 @@ typedef struct AV1Frame { ThreadFrame tf; + /** current tf_display is only used for VA-API to apply film grain */ + ThreadFrame tf_display; + AVBufferRef *hwaccel_priv_buf; void *hwaccel_picture_private; From patchwork Fri Jul 9 03:32:27 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 28872 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5d:965a:0:0:0:0:0 with SMTP id d26csp270964ios; Thu, 8 Jul 2021 20:36:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyEgiGCO7r5MbTGNw/dMF3QO4PSpJj4Hvd7PTKUs66OjNDlmG7Sswu0vrUNQq81hri4rxbm X-Received: by 2002:a05:6402:154:: with SMTP id s20mr43239576edu.103.1625801791176; Thu, 08 Jul 2021 20:36:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625801791; cv=none; d=google.com; s=arc-20160816; b=nn2Gp5Gyy3+3pwb5c3/Vdc6HVXqx4lkw0QssvvPiUo+ZFzumMQbsJRqNAfJ/4+Wxsq ayiPbSERRzHBgM/PtVau4FngLO9A2HorVOY2Mu56EY8hlktNwLonJoifwJJC7Eja3jyW hipj79cdtaJ5OYTaqef1P/yyknu7qY7p/MMTQp8GIMZGsswqp8/Q/8kMGvoTWgTetLHc T+vOE6H9rlGxWbZWKMnGoAvd0/Nh2CnjwTZcsUV/5+ws3hAV2hy7Kv8wZ7b0btuqmxfR dumcUpXmtwTX6E2OoIvxJLsW5U7msXL6/6NmDEmRUIBfOyomnZQj1x8XV+aMcPyCnnvR jYrg== 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:references:in-reply-to:message-id:date :to:from:delivered-to; bh=/gOZcqdnHPr6pRClQYZNb+oJzRVEW5jAeyl3cgjmKaM=; b=Dci9w2FrqPFF28qnvC7etfgA9oH+5oeNzpRfJBhk8KkVXVcq4wjD9itmR34ivDeRMv y/XDLGAnm1MkOJTA5GXFCQf34jT6jW8Ol4SV4O2cSaf7hlTc3Yzq8AVRtjD+NNyObTHp uHOu/OAMZIJd8GASZDtDOMXMds8yQyZeE2NX/mWc22QQQIXrj0E5QKLP8fuV9ExmXMzQ XfEzS0otzDu15WMyvHiJTP8EogAhnHhSrlmLeQNx0eKN6wzB9uFVCxQejrUXhCIi6QBq wf2YywozlrDhzmcQA2H5Q6eDznVjcMrLJzHfuUEhcqTKw9kLfc+A8S6Wmv6Ed2rHOGHA BYRA== ARC-Authentication-Results: i=1; mx.google.com; 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=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f18si4968136ejx.521.2021.07.08.20.36.30; Thu, 08 Jul 2021 20:36: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; 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=NONE dis=NONE) header.from=intel.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1EA4D68A6E0; Fri, 9 Jul 2021 06:35:16 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1176C68A558 for ; Fri, 9 Jul 2021 06:35:08 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10039"; a="196814911" X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="196814911" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2021 20:34:58 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="461973680" Received: from f.sh.intel.com ([10.239.159.147]) by fmsmga008.fm.intel.com with ESMTP; 08 Jul 2021 20:34:57 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Fri, 9 Jul 2021 11:32:27 +0800 Message-Id: <20210709033229.19125-7-fei.w.wang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210709033229.19125-1-fei.w.wang@intel.com> References: <20210709033229.19125-1-fei.w.wang@intel.com> Subject: [FFmpeg-devel] [PATCH v4 7/9] avcodec/av1_vaapi: set display surface when apply film grain 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: Fei Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: dFrE9CAotyyh Signed-off-by: Fei Wang --- libavcodec/vaapi_av1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/vaapi_av1.c b/libavcodec/vaapi_av1.c index f577447be4..81b13bb1aa 100644 --- a/libavcodec/vaapi_av1.c +++ b/libavcodec/vaapi_av1.c @@ -76,7 +76,7 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, .order_hint_bits_minus_1 = seq->order_hint_bits_minus_1, .bit_depth_idx = bit_depth_idx, .current_frame = pic->output_surface, - .current_display_picture = pic->output_surface, + .current_display_picture = apply_grain ? ff_vaapi_get_surface_id(s->cur_frame.tf_display.f) : pic->output_surface, .frame_width_minus1 = frame_header->frame_width_minus_1, .frame_height_minus1 = frame_header->frame_height_minus_1, .primary_ref_frame = frame_header->primary_ref_frame, From patchwork Fri Jul 9 03:32:28 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 28875 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5d:965a:0:0:0:0:0 with SMTP id d26csp270803ios; Thu, 8 Jul 2021 20:36:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwPrOWCFG2wnuT66L2jVIVH1yiLsxqNx/OJ4biuxkpY/qeBw0QPDtG7WY/6c+9jm+KuqqLH X-Received: by 2002:a17:907:c0f:: with SMTP id ga15mr33840352ejc.228.1625801771081; Thu, 08 Jul 2021 20:36:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625801771; cv=none; d=google.com; s=arc-20160816; b=L/R1V1hTZvPdmnQu/T2DPtWOBmQidbgZS/HV31xonjvEdW+xrqQ23/kmt+w3r9054e WSB6PgpZqqaQWSHnS8xnfvwv4qjVfeCIaolyATvf2/8eDVE9ugv5DLEAIa6rEwjPonQL yPoOCce/KVpEruCT9gvtegYsMQtJ7bGlebaCudyebfWCFmTEEmkAAEkj8i/sfC8TGVKa vkEqLtR42a43Mf5hYHguVV8QKigdKMGz2DU+pkCryS8si/AMfO8U7Mt76Lr/yjYQaylp tz+bff+I2VY/D+GyLFlNThDynHYSY508xOcXic+CpeyUWPmjj8ODLXICX+HwrI7c94wD jDNw== 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:references:in-reply-to:message-id:date :to:from:delivered-to; bh=YfVIkzUvXvNk9CIV/t0Htd4miK+F2WonzgeTn6YZSUY=; b=JRzv74/CLP1I0j8DGUnP4oPODfcp2p8LlhJyd8YG9AdBW8DQwq44W74+5qurTv1COx DSBayDxWTBXcG+JCljBF4Oo/ZSXwaAgECoBw5cBUkbO3JJbnSHvigU8Rg6lWxVseDmeb smk7Uka0mfEv3ePh76BdJojXS9Kv5pNMcKFe8wsSrAJrLS1tCwKj8MbvolZ9xD98y7+y 3lkLDhz/eK/r9aC36nrQkRHy4sB3CTzlM4EJZkmMS7+FjaVu2TtL8E6kbMY94nrNsoDt +MS2fr4CoPB6U44LjKjEZeD/ExfA0wW3hWC3xn3gtWuNAt3KmzsEU3g2dYxBWHuHVEqg PTjg== ARC-Authentication-Results: i=1; mx.google.com; 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=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ox14si3011117ejb.694.2021.07.08.20.36.10; Thu, 08 Jul 2021 20:36:11 -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; 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=NONE dis=NONE) header.from=intel.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6CEB368A62A; Fri, 9 Jul 2021 06:35:14 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A17B468A571 for ; Fri, 9 Jul 2021 06:35:10 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10039"; a="196814916" X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="196814916" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2021 20:34:59 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="461973684" Received: from f.sh.intel.com ([10.239.159.147]) by fmsmga008.fm.intel.com with ESMTP; 08 Jul 2021 20:34:58 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Fri, 9 Jul 2021 11:32:28 +0800 Message-Id: <20210709033229.19125-8-fei.w.wang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210709033229.19125-1-fei.w.wang@intel.com> References: <20210709033229.19125-1-fei.w.wang@intel.com> Subject: [FFmpeg-devel] [PATCH v4 8/9] avcodec/av1_vaapi: enable segmentation features 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: Fei Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: qtZ/h1YqtQZM Signed-off-by: Fei Wang --- libavcodec/vaapi_av1.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libavcodec/vaapi_av1.c b/libavcodec/vaapi_av1.c index 81b13bb1aa..6aaabed2c1 100644 --- a/libavcodec/vaapi_av1.c +++ b/libavcodec/vaapi_av1.c @@ -63,6 +63,9 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, int err = 0; int apply_grain = !(avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN) && film_grain->apply_grain; uint8_t remap_lr_type[4] = {AV1_RESTORE_NONE, AV1_RESTORE_SWITCHABLE, AV1_RESTORE_WIENER, AV1_RESTORE_SGRPROJ}; + uint8_t segmentation_feature_signed[AV1_SEG_LVL_MAX] = {1, 1, 1, 1, 1, 0, 0, 0}; + uint8_t segmentation_feature_max[AV1_SEG_LVL_MAX] = {255, AV1_MAX_LOOP_FILTER, + AV1_MAX_LOOP_FILTER, AV1_MAX_LOOP_FILTER, AV1_MAX_LOOP_FILTER, 7 , 0 , 0 }; pic->output_surface = vaapi_av1_surface_id(&s->cur_frame); @@ -218,6 +221,17 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, for (int j = 0; j < 6; j++) pic_param.wm[i - 1].wmmat[j] = s->cur_frame.gm_params[i][j]; } + for (int i = 0; i < AV1_MAX_SEGMENTS; i++) { + for (int j = 0; j < AV1_SEG_LVL_MAX; j++) { + pic_param.seg_info.feature_mask[i] |= (frame_header->feature_enabled[i][j] << j); + if (segmentation_feature_signed[j]) + pic_param.seg_info.feature_data[i][j] = av_clip(frame_header->feature_value[i][j], + -segmentation_feature_max[j], segmentation_feature_max[j]); + else + pic_param.seg_info.feature_data[i][j] = av_clip(frame_header->feature_value[i][j], + 0, segmentation_feature_max[j]); + } + } if (apply_grain) { for (int i = 0; i < film_grain->num_y_points; i++) { pic_param.film_grain_info.point_y_value[i] = From patchwork Fri Jul 9 03:32:29 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 28878 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5d:965a:0:0:0:0:0 with SMTP id d26csp270882ios; Thu, 8 Jul 2021 20:36:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyABZ0KuPSQ411jXVWCywgwD0sh9zczu5o1TmQ0xg9GvQVD+5fl35Zyp5kG9FIDbe/qBO+s X-Received: by 2002:a05:6402:30af:: with SMTP id df15mr13909771edb.19.1625801781115; Thu, 08 Jul 2021 20:36:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625801781; cv=none; d=google.com; s=arc-20160816; b=VK1UXFOQVp03qgnLFUjR+ACfYSCvLqqBIb8Ni4dWgrIkhcbJ8SNybUSkfOmmZ9eHwN dW9kZkWa8jynlrIB4XWVBAF6kBQikUShupL95DBcizoj/7EMy9cD221hMcNXmvip6+QZ 9uFXO2wuf18gXDi1Fl1BX+JkGM4CEfeIBzFaNVhusrowaCc3ws0DWjvMEdgbvf5GGpNV tg/Kw0M7BftKOPjV050SKIaYgvcWWqiUuha8h4CI5Chaxvp2HELV2X2lSVI6vbCZ3gDQ SJxYNNFfXz9gUhz8rt5RSv8xB+oLmIOwAhzHggk/S2YGWGghbHGOmMxvvCno2YUWpvEy Vhsw== 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:references:in-reply-to:message-id:date :to:from:delivered-to; bh=OpfGIDCK5557UGMLGOBCZvRcpcuvXtlfavyw47RbHJw=; b=lpP2BEajHM6xx23ONmBakJm/E+iq1uxPSv5Bhx/5b6VJcuvYha6XWvxFf/uyzToCM8 EL222BUYyKYRNnenHDOmO8ruDPoj0+K/MtlgUeZwA6o6MIu9LJj4B69NFOAVBZxwotnQ Z5/Jn6xAflnHoHBCQihRtLobwDSfmO8RER82Os1u2P/NtzVd7nr9hH7Aqt2hhxr8s9Sx p/+hw7U7K/xlzEG03JLjFN+OU5Gr9VLC8H/+5A2zWk6HG5paByT2C8UmL3zUeiXhzJQo OaYsuQcTt1iK8v3t03RxX1GuKsK7uv63OncIMnmuu9uaWpfBLdooe9J1iJu2ZLn3hVLa g6WQ== ARC-Authentication-Results: i=1; mx.google.com; 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=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i13si5779776edc.466.2021.07.08.20.36.20; Thu, 08 Jul 2021 20:36:21 -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; 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=NONE dis=NONE) header.from=intel.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4272A68A6A3; Fri, 9 Jul 2021 06:35:15 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1A30468A556 for ; Fri, 9 Jul 2021 06:35:10 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10039"; a="196814920" X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="196814920" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2021 20:35:00 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,225,1620716400"; d="scan'208";a="461973687" Received: from f.sh.intel.com ([10.239.159.147]) by fmsmga008.fm.intel.com with ESMTP; 08 Jul 2021 20:34:59 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Fri, 9 Jul 2021 11:32:29 +0800 Message-Id: <20210709033229.19125-9-fei.w.wang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210709033229.19125-1-fei.w.wang@intel.com> References: <20210709033229.19125-1-fei.w.wang@intel.com> Subject: [FFmpeg-devel] [PATCH v4 9/9] avcodec/av1_vaapi: improve decode quality 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: Fei Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: wmiub5slWZG5 - quantizer delta and matrix level specific. - support loop filter delta. - support use superres. Signed-off-by: Fei Wang --- libavcodec/vaapi_av1.c | 67 ++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 26 deletions(-) diff --git a/libavcodec/vaapi_av1.c b/libavcodec/vaapi_av1.c index 6aaabed2c1..2d0f0a76ad 100644 --- a/libavcodec/vaapi_av1.c +++ b/libavcodec/vaapi_av1.c @@ -75,26 +75,35 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, memset(&pic_param, 0, sizeof(VADecPictureParameterBufferAV1)); pic_param = (VADecPictureParameterBufferAV1) { - .profile = seq->seq_profile, - .order_hint_bits_minus_1 = seq->order_hint_bits_minus_1, - .bit_depth_idx = bit_depth_idx, - .current_frame = pic->output_surface, - .current_display_picture = apply_grain ? ff_vaapi_get_surface_id(s->cur_frame.tf_display.f) : pic->output_surface, - .frame_width_minus1 = frame_header->frame_width_minus_1, - .frame_height_minus1 = frame_header->frame_height_minus_1, - .primary_ref_frame = frame_header->primary_ref_frame, - .order_hint = frame_header->order_hint, - .tile_cols = frame_header->tile_cols, - .tile_rows = frame_header->tile_rows, - .context_update_tile_id = frame_header->context_update_tile_id, - .interp_filter = frame_header->interpolation_filter, - .filter_level[0] = frame_header->loop_filter_level[0], - .filter_level[1] = frame_header->loop_filter_level[1], - .filter_level_u = frame_header->loop_filter_level[2], - .filter_level_v = frame_header->loop_filter_level[3], - .base_qindex = frame_header->base_q_idx, - .cdef_damping_minus_3 = frame_header->cdef_damping_minus_3, - .cdef_bits = frame_header->cdef_bits, + .profile = seq->seq_profile, + .order_hint_bits_minus_1 = seq->order_hint_bits_minus_1, + .bit_depth_idx = bit_depth_idx, + .matrix_coefficients = seq->color_config.matrix_coefficients, + .current_frame = pic->output_surface, + .current_display_picture = apply_grain ? ff_vaapi_get_surface_id(s->cur_frame.tf_display.f) : pic->output_surface, + .frame_width_minus1 = frame_header->frame_width_minus_1, + .frame_height_minus1 = frame_header->frame_height_minus_1, + .primary_ref_frame = frame_header->primary_ref_frame, + .order_hint = frame_header->order_hint, + .tile_cols = frame_header->tile_cols, + .tile_rows = frame_header->tile_rows, + .context_update_tile_id = frame_header->context_update_tile_id, + .superres_scale_denominator = frame_header->use_superres ? + frame_header->coded_denom + AV1_SUPERRES_DENOM_MIN : + AV1_SUPERRES_NUM, + .interp_filter = frame_header->interpolation_filter, + .filter_level[0] = frame_header->loop_filter_level[0], + .filter_level[1] = frame_header->loop_filter_level[1], + .filter_level_u = frame_header->loop_filter_level[2], + .filter_level_v = frame_header->loop_filter_level[3], + .base_qindex = frame_header->base_q_idx, + .y_dc_delta_q = frame_header->delta_q_y_dc, + .u_dc_delta_q = frame_header->delta_q_u_dc, + .u_ac_delta_q = frame_header->delta_q_u_ac, + .v_dc_delta_q = frame_header->delta_q_v_dc, + .v_ac_delta_q = frame_header->delta_q_v_ac, + .cdef_damping_minus_3 = frame_header->cdef_damping_minus_3, + .cdef_bits = frame_header->cdef_bits, .seq_info_fields.fields = { .still_picture = seq->still_picture, .use_128x128_superblock = seq->use_128x128_superblock, @@ -165,12 +174,15 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, .mode_ref_delta_update = frame_header->loop_filter_delta_update, }, .mode_control_fields.bits = { - .delta_q_present_flag = frame_header->delta_q_present, - .log2_delta_q_res = frame_header->delta_q_res, - .tx_mode = frame_header->tx_mode, - .reference_select = frame_header->reference_select, - .reduced_tx_set_used = frame_header->reduced_tx_set, - .skip_mode_present = frame_header->skip_mode_present, + .delta_q_present_flag = frame_header->delta_q_present, + .log2_delta_q_res = frame_header->delta_q_res, + .delta_lf_present_flag = frame_header->delta_lf_present, + .log2_delta_lf_res = frame_header->delta_lf_res, + .delta_lf_multi = frame_header->delta_lf_multi, + .tx_mode = frame_header->tx_mode, + .reference_select = frame_header->reference_select, + .reduced_tx_set_used = frame_header->reduced_tx_set, + .skip_mode_present = frame_header->skip_mode_present, }, .loop_restoration_fields.bits = { .yframe_restoration_type = remap_lr_type[frame_header->lr_type[0]], @@ -181,6 +193,9 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, }, .qmatrix_fields.bits = { .using_qmatrix = frame_header->using_qmatrix, + .qm_y = frame_header->qm_y, + .qm_u = frame_header->qm_u, + .qm_v = frame_header->qm_v, } };