From patchwork Tue Oct 12 08:23:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 31071 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2084:0:0:0:0 with SMTP id a4csp4527980ioa; Tue, 12 Oct 2021 01:26:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxHr6nlcK+5bdH8bkJSz5RJQdKgTOJUi/8ncsj3x59sHgaYpect3mEWJ2niBt5jWyxNjdTP X-Received: by 2002:a05:6402:21eb:: with SMTP id ce11mr47684085edb.153.1634027186456; Tue, 12 Oct 2021 01:26:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634027186; cv=none; d=google.com; s=arc-20160816; b=zNQuLOeKavl2LK2MV7ThyD6pkeJDBw3yCFaTVtlGt5Nm6SFwIYpmIB3pKbtwYKxq7H o/nlBAMLmhO6/Y9759kxPGzm62Bqp+ptVxK30nX8OZltkw1D8BBiu3Q5O05gPuMLAHqS wcrDVKNEoyR7ROlxCb7eKXDitbpk30yjs/QzdJ2NFOsjR24czxrHXO7TcGAgJTmPXaOv ZHk+SVY+vIBNKPVp/Y4Am9HSlL/xkHfg2rDFYp+58cMbkYmHre7MngF3cdwzSyaZ9cAl PLXTw2q1E88CHkxvo5RMOwaPF3VsDyMVu5AqvWNgVl3poyLM12+Gml5pPYZmu5Xt1YDj NZFw== 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 :delivered-to; bh=GANFaPuoWkrEZ89hLO5rMbx2TidXe0x91r4aDVp8PGs=; b=IEmNRnxGRQJobWCMoKhvRRJe0daPPbaYfEdPklVQnUhwg3QiQoxWpU0lGOGPFXxQ03 niB08kmMu5Tmdr5gEprEsOBLGmIc3kv4KU+5TC9mTm0oRhUXTAvt3I3H6aSmHH0YBezz GOBaAFoKeIRZHPBC3+jI2VHewYKMv33K4oM35WHKgauOfUHMo7pV51/OZW4tvKUDukwb DGPdfPC9BpVLmhxHU3s/fHBXF2e/JrGd9w+0thKxv9wCo7Ox/ByAhX3r1xMvq7kn63on KTb6mMujdnx08p/NyErryjQP7X84IxcUdpa2cYxPabO44Zru81hxENcVu32jFQE+wlL1 PCxA== 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 v23si14341213ejo.762.2021.10.12.01.26.25; Tue, 12 Oct 2021 01:26:26 -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 4A40868A8EE; Tue, 12 Oct 2021 11:26:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 02FAB689C54 for ; Tue, 12 Oct 2021 11:26:13 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10134"; a="225852077" X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="225852077" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Oct 2021 01:26:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="524139840" Received: from t.sh.intel.com ([10.239.159.147]) by orsmga001.jf.intel.com with ESMTP; 12 Oct 2021 01:26:09 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Tue, 12 Oct 2021 16:23:56 +0800 Message-Id: <20211012082404.31639-1-fei.w.wang@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: EXhlsFf5kUF/ 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 --- update: 1. move additional film grain frame from av1dec.c to vaapi_av1.c 2. patch 3~5 can fix clip: https://drive.google.com/file/d/1Qdx_18_BFcFf_5_XXSZOVohLpaAb-yIw/view?usp=sharing 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 Tue Oct 12 08:23:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 31072 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2084:0:0:0:0 with SMTP id a4csp4528135ioa; Tue, 12 Oct 2021 01:26:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz63bGUw4twjYqWi4ARD9pzMGhHveitP4A5kRgFp6kWArN10Iyw2xW3nz+FdGTKkB4DWSyh X-Received: by 2002:a05:6402:5207:: with SMTP id s7mr42997632edd.260.1634027203047; Tue, 12 Oct 2021 01:26:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634027203; cv=none; d=google.com; s=arc-20160816; b=E/jItZA4vhn1hb6PGBSWQRkV16+q5uiozWfc8d6xN/Ru8FoF2BeWF+43DiJlA+tTIu Lo1wVvprLcWun9mwyNzx4R0qaqn4zRLU3wiXo4NHnBmXGLYJwi4io6wg3Z+b1BH2A/qQ q4wkfoUlNuCpUFy6X1MF3vcVENeGrjxvWqrb55JLzNTMi/zGIFgazRpUDdmxV+KNXW01 MQpxA1tZiaatwG4FPrfy5SALDqmxFmtp1+1o2jFbaapXccIPv40pbKV4HvH01B7CzR0o EV17I/MsjPNrDnExLQE4TjxLikmCmWBIW+GBr7HoN75zlRNl/W8F3bfjL9gBITJZlH3b vTGw== 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:delivered-to; bh=dJR6pZVnKOVd4U4QSeHflQxW8a8wIE3P+F2ndhMEBwA=; b=R6UCQTnwW19Yr2RVoVS2uKBxxf5TwVkJeo3/d+mIOpmcoigogeyelKBilMo6IkGQd9 vwPGftHS83YNJgLZby03k81iB45PzqkGUtKh0oVKL8PdX0b2Hd6o4lFO5nOSNj0HfvMQ WRw5UGbeNZKGVqtYaYNAdnWjrA7D6nRBzZVJbZ6r5BE0VkZWBeSndBKvZnfLSjsPOadY 8wH/Z8zcNR066y871nPT82LSPTmnvA7tmt+XQkYdCJs8Yq2Hd23leUlJjU8nUvwtOXU+ 4HbCWsKE2O70k1lCOj5UQzvaYnjjEwZuwfpaw93qPttEg1bEdUh62sgGgKeFVrGTIPC7 HAdA== 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 s3si14129958ejs.720.2021.10.12.01.26.42; Tue, 12 Oct 2021 01:26:43 -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 48F9768A8F1; Tue, 12 Oct 2021 11:26:23 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C5E34689C54 for ; Tue, 12 Oct 2021 11:26:15 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10134"; a="225852082" X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="225852082" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Oct 2021 01:26:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="524139849" Received: from t.sh.intel.com ([10.239.159.147]) by orsmga001.jf.intel.com with ESMTP; 12 Oct 2021 01:26:11 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Tue, 12 Oct 2021 16:23:57 +0800 Message-Id: <20211012082404.31639-2-fei.w.wang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211012082404.31639-1-fei.w.wang@intel.com> References: <20211012082404.31639-1-fei.w.wang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 2LBoeBF+GA3z 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 Tue Oct 12 08:23:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 31073 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2084:0:0:0:0 with SMTP id a4csp4528254ioa; Tue, 12 Oct 2021 01:26:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyglime8Jr4GPv7qAtUGdODiI1gpRFAAt3Rhaab2IaPfXfG6aVWQVonat1ca4fjaEXMEslx X-Received: by 2002:a17:907:75e1:: with SMTP id jz1mr32144042ejc.439.1634027215609; Tue, 12 Oct 2021 01:26:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634027215; cv=none; d=google.com; s=arc-20160816; b=Io/JKZsrmDyoT2jRAH8vFdRoYl496mLMKpkYCmnuCQLH5B4pazgI8rVCaS6s1sTKQQ Y5ICX/TNEC/n2Nfmz+fQ4IFgu3E9FUcWwoEVXlG74ouGKF9nVOOz3vtpu/DwiHzcYagg mXCy/8HPdzh0UDxBehdBuznBOkYs27WpvzNl/GzHiNKMewcqIwJ+QaYpNyVX00uSVL6F Y7gTnWpEBesP7W3SWNM4svbJS6jTvBAHIVdx3wg+fceCEM5D7DPA+AiXIg1MnQnP87O2 IOU91HWS8LEQBnCYL0pPbS3CPn2+jr+iE8eA/9rPrAqNUwXmszNpbfj45oRzVM0oXQRR JYYg== 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:delivered-to; bh=EgBVZLM3GbfQL2p284LZneNvdtCbljqfWcqh17fbxnc=; b=qtLSGlsv4RDbRxRSaWOvaMWvpn4pA10W1OvcQE3g47e6iU2nShaIkaXDUeS9gzU8+f 2TTqMBniKt/OD1XEThXNkdh9RJVxER/uKZd8JdagZS08DXefPlSX20iHILH3tWSlPwjq yGNr82FTrPE4ElB9SRIGW+CEICRUVAT3XZcPf3nqqR7lRbyPYu4S1xvkk7n9/ETlxHcJ sIOhOmwIV3dhnOLPoQ/7om69eGXRDFAR3eih0rDrJRJpUgoPRQjhVkj6vZZZwMNlvi7g D77WqX9WIboWomPXN9EVw1N276HzU1pDrniXa5PL0EWkBJqnyo8Kgv2XX/TiuaFWxxdS Fp0w== 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 y4si14181692ejk.622.2021.10.12.01.26.55; Tue, 12 Oct 2021 01:26:55 -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 CF121689F1C; Tue, 12 Oct 2021 11:26:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 021BE68A8F1 for ; Tue, 12 Oct 2021 11:26:16 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10134"; a="225852089" X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="225852089" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Oct 2021 01:26:13 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="524139856" Received: from t.sh.intel.com ([10.239.159.147]) by orsmga001.jf.intel.com with ESMTP; 12 Oct 2021 01:26:12 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Tue, 12 Oct 2021 16:23:58 +0800 Message-Id: <20211012082404.31639-3-fei.w.wang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211012082404.31639-1-fei.w.wang@intel.com> References: <20211012082404.31639-1-fei.w.wang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: YSkPmpSndRzN Defined in spec 7.11.3.6/7.11.3.7. Signed-off-by: Fei Wang --- libavcodec/av1dec.c | 98 +++++++++++++++++++++++++++++++++++++++++++++ libavcodec/av1dec.h | 1 + 2 files changed, 99 insertions(+) diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c index a69808f7b6..db110c50c7 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 Tue Oct 12 08:23:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 31079 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2084:0:0:0:0 with SMTP id a4csp4528385ioa; Tue, 12 Oct 2021 01:27:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwPYEuaHDIvxPakbfJF+lrrukVSmbiJqtWaOmr1o+ak9Bf7WdmvGP2zH13H8enn2H9WCLlB X-Received: by 2002:a17:906:6844:: with SMTP id a4mr30737586ejs.65.1634027227596; Tue, 12 Oct 2021 01:27:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634027227; cv=none; d=google.com; s=arc-20160816; b=jlbMnJ3W8/mZXQCPGKeDjQG49t32uidnqg9aeQel9510SIdevuZGoU3r+us4Iow2VD +MfAy2h4ZUlAejZsyyqf3E3uuLq+VKbHzS1a8b0CRMO2m4AC2qFUnjuVBrpWh6BcC+Kx dWHu7XxofD7sh+br9xZjBqerDYhAOdTl0N9fBYLdz3gjFBAnvjGJ3wA07TQxnTzCF/Wg yykMKooIWaVV67jupqRMEWW2BN6J8vrkCXxgZzccLDH4Q2lUYt1DEtK14qldx+t4Tlwa BaT5REmETyR0GxRrcI7huf+/KGqhx5YkuVbnQbpkiCwZSouUYzM11rjAC2CL5dLLfQ3x xuJw== 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:delivered-to; bh=uRyKjsMlLRXhM1NDk/8TXwdErj9x3GvZgeRhL9zDHvs=; b=ktf9zY8DpEMJ3WJPAFNtC5rswLGowk2AQZun3euqhsZNq1ffqC27ZJM47IQHj/br32 j9ns1E1PnLSvmR1I+Qnijopmp9iSpN5QhgD6JCcG4ASOW5Eq7p6ZwJX56abTQcvklUPU KGD+usbviINrIw1uvrtMjn3dheuD/exHXLpAYzFmpUaoi900pgfQ3lYgOaIUQWvss5F+ 62ale2PO7LihdShOzM8xbHYX/gZobSEs4Kt/7Zs5pScD2KfPcaXVRHykvXC+Is2maxZX /Ygx2X3pzkH4zLB8rzO0d8hWrtFtEW6m1lPXQ8dV59DjvYbA51D1AkpK3MxeZ6MagE8S J/Zg== 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 f14si13235603ejj.667.2021.10.12.01.27.07; Tue, 12 Oct 2021 01:27:07 -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 D918368A919; Tue, 12 Oct 2021 11:26:27 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DB7D768A8F3 for ; Tue, 12 Oct 2021 11:26:19 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10134"; a="225852097" X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="225852097" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Oct 2021 01:26:14 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="524139862" Received: from t.sh.intel.com ([10.239.159.147]) by orsmga001.jf.intel.com with ESMTP; 12 Oct 2021 01:26:13 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Tue, 12 Oct 2021 16:23:59 +0800 Message-Id: <20211012082404.31639-4-fei.w.wang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211012082404.31639-1-fei.w.wang@intel.com> References: <20211012082404.31639-1-fei.w.wang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: pS7p0RD2HT5j 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 Tue Oct 12 08:24:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 31075 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2084:0:0:0:0 with SMTP id a4csp4528487ioa; Tue, 12 Oct 2021 01:27:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz8QyPI+ieCkYdQWXLaqttvu/GVY6OHdeM7H5nJs27dRfxg6Wae7uu8mHPkXUnehBDoBewK X-Received: by 2002:a05:6402:5189:: with SMTP id q9mr23346879edd.94.1634027239560; Tue, 12 Oct 2021 01:27:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634027239; cv=none; d=google.com; s=arc-20160816; b=v6ipnYKUqTS/TwZAxMS8hqQw0+BKMH30zHVEvSbcjACtG15MioXXMYWZ/tV2EFpIOP NrmUvaGsdYupd2qUmeiWwVIzLY83//DMNpeNU6EioQa/qQIHOXI2Qu5/V4w+j4ANjTh1 uAoTVwrc3CVorVajh7mHT5b+8ecb8i8ZtViqJp3vydiW71S+Huc+s/kB+StpwZ9qx8PM JH/yYxIegHzrDm0cvN8B52xmm6J/uajdNGWUGbQ2XZ6u2BMXS1SNIXO8AeK+u+kKhh7l Aht0nvBv9nLhGNSim1/KrzQTCyAMH6iv18Dhmmqp/jcPFjLn5oVRgnpFmmO61zWlTqwf 9KAA== 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:delivered-to; bh=JfRZhKzEZbdVRvvJ8Le9YAmSS/LKp+nKLKAm/WaUrzA=; b=jzKT1xJZfv8tJn9h96nZXu71aDu5ctxV0yJ2XUVSVwWA28bgcCXwV1EIr3Go3byfh6 gVzEiluJ1+A9FxIHwBCdTTPJGXBkDLNYnd/yjmsJ9I69nRXilFVJUH+hToDAa7QDUqH+ Mj1S2FOtxWNEosCIR+lknHTvNl4UKbsnGRogM3t96cxN3ESuLyeBCZhtiIFdYIntv8W4 95TK6IMgGyuio61BCGOCHSZVBTBRuOmxuXf6vvLJByJ+wZORY/c/UIf0sqsqRCtb5i2g DpIqkukkD1bEzGLMQ9s9+1CypgRYW+tBDE6Jo+Zu/EHKi7/pOXz+T9EQeL9w6HBeYXq+ NHpQ== 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 hq3si28640496ejc.142.2021.10.12.01.27.19; Tue, 12 Oct 2021 01:27:19 -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 CDB3A68A938; Tue, 12 Oct 2021 11:26:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B3183680C00 for ; Tue, 12 Oct 2021 11:26:21 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10134"; a="225852108" X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="225852108" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Oct 2021 01:26:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="524139866" Received: from t.sh.intel.com ([10.239.159.147]) by orsmga001.jf.intel.com with ESMTP; 12 Oct 2021 01:26:14 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Tue, 12 Oct 2021 16:24:00 +0800 Message-Id: <20211012082404.31639-5-fei.w.wang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211012082404.31639-1-fei.w.wang@intel.com> References: <20211012082404.31639-1-fei.w.wang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5 5/9] avcodec/dxva2_av1: fix global motion params 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: Tong Wu Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: PwUElCAaxz// From: Tong Wu Defined in spec 5.9.24/5.9.25. Since function void global_motion_params(AV1DecContext *s) already updates gm type/params, the wminvalid parameter only need to get the value from cur_frame.gm_invalid. Signed-off-by: Tong Wu --- libavcodec/dxva2_av1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/dxva2_av1.c b/libavcodec/dxva2_av1.c index c30b57799c..8a912bf6c1 100644 --- a/libavcodec/dxva2_av1.c +++ b/libavcodec/dxva2_av1.c @@ -139,7 +139,7 @@ static int fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext *c pp->frame_refs[i].Index = ref_frame->buf[0] ? ref_idx : 0xFF; /* Global Motion */ - pp->frame_refs[i].wminvalid = (h->cur_frame.gm_type[AV1_REF_FRAME_LAST + i] == AV1_WARP_MODEL_IDENTITY); + pp->frame_refs[i].wminvalid = h->cur_frame.gm_invalid[AV1_REF_FRAME_LAST + i]; pp->frame_refs[i].wmtype = h->cur_frame.gm_type[AV1_REF_FRAME_LAST + i]; for (j = 0; j < 6; ++j) { pp->frame_refs[i].wmmat[j] = h->cur_frame.gm_params[AV1_REF_FRAME_LAST + i][j]; From patchwork Tue Oct 12 08:24:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 31077 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2084:0:0:0:0 with SMTP id a4csp4528706ioa; Tue, 12 Oct 2021 01:27:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzMOf2o8ZKKCY/nd3R3vr8Pfy1BCWKRHfZssvHy9PZpiCtz2AD3xcGWfTdty6NNCiwob9sA X-Received: by 2002:a17:906:2a0d:: with SMTP id j13mr29968769eje.545.1634027263333; Tue, 12 Oct 2021 01:27:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634027263; cv=none; d=google.com; s=arc-20160816; b=tTIwbPznxZ9ZLU5+zXaJkqwIqEyw7w1k1RHyqczTd3r6utA/kEQa+Ebs3lFIoLakos /POhai57hJb1ksyk1Csi98lozuHG2uNmyvdRvCbqe9u/fnvU5PQ5DwLRxL8m3FEu3HUv qVgKpJkzGclwz4t+ZN5HUiw6RWAIsn7tftLhfx/1T5yy8Nc830lNsI1qRd/97BirYIxT 9qKikHb5SsC99dS/1T8EdR2NjBP0AzZ4H6q7cfN1RqnEeP0aLKE/ObVTpKHAq2jADaXr nUkIeOOWvqtVohvTcSM7XRQL7UFzP5OtNgDjZRGkhUPlRfdh7hoRE+2OVAoqin7LfSam BbVQ== 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:delivered-to; bh=fzjv/Hb54ptlIT3S5fIsZPIhczJrr2YD2aWhUPoodMk=; b=w2YEJgdxZJ1Oem1uDxYi4w+3VmRaITIW8XJG/hRsvur21AnfgYnrWaw54XykDq4I7q wPkUnSbA6mtr5tSEEGHHW8A+LcU6r4YurPovclaDW6rVvCZPhL8jGM8pHBepuO3ZhKee tRzalZNeOsSdVfqza56aNk2EPuennyn9EniDC24KQqc3kRnSlGXjNHRFhtVIaSyXsL15 CDpELa/QyxvQsu8+ijI3v5ly7aj3jaMZsV0041tz4i9dPMd8vPeca8R7FCFIvbvMAAoB 219nPSiTKzxHS1+Y6CYFe4BNbjfa+zOWgLelMKYw/TMUfS5ME6KLmkDQecSBDt2K4oV3 NCwg== 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 yr17si14624148ejb.202.2021.10.12.01.27.43; Tue, 12 Oct 2021 01:27:43 -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 11C4468A946; Tue, 12 Oct 2021 11:26:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E71B768A920 for ; Tue, 12 Oct 2021 11:26:22 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10134"; a="225852112" X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="225852112" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Oct 2021 01:26:16 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="524139873" Received: from t.sh.intel.com ([10.239.159.147]) by orsmga001.jf.intel.com with ESMTP; 12 Oct 2021 01:26:15 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Tue, 12 Oct 2021 16:24:01 +0800 Message-Id: <20211012082404.31639-6-fei.w.wang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211012082404.31639-1-fei.w.wang@intel.com> References: <20211012082404.31639-1-fei.w.wang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5 6/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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: IoL2TpI0656x 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 Tue Oct 12 08:24:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 31076 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2084:0:0:0:0 with SMTP id a4csp4528951ioa; Tue, 12 Oct 2021 01:28:08 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzmA96AOUzFq2sFM6b5WDzV1/tcFUUYuFfJaPISA7vdssEBZIXhNnDZNkb0xe+2XdMLYBto X-Received: by 2002:a17:906:b311:: with SMTP id n17mr29424562ejz.571.1634027288125; Tue, 12 Oct 2021 01:28:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634027288; cv=none; d=google.com; s=arc-20160816; b=B4l29eQXdyEMDy9MgJAcA+wh10omgdzyWaNStec3qYxXgtYJsm1fYp/ALw8IaIDBuD ZoST/20it9/b4uIOYstHwDl8iQFzANGjlWHSwp7IISojs4Xihdyi/44L5ej4yKN479T5 wbEdConoHYz8HDAuVxA4dK1OcyPZxyccUggNMwvczrssz6FxwcynzkUnJ6CKw+5Tpyvr /tG4nWa5k6RteQ2YyMJQA6Hh7pjPTyCPQ8ANYD2MxVRL5h8SZqMOi4LrWxDoQxkT0xhI XJ2pFUfriNoKwOxnf32eCrKbHkiVkTih/0HBNxAnNQdvzek5511+UnCJrsS0IMA+8qiH UFyA== 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:delivered-to; bh=OWw/WI5ZK1hc9Q4YKsNimV3B6QAvW3mTL3z72oR2Zvo=; b=cF82od32GZl5o5UlHCvMENIoHyo0tX5RvKgMgWGNBSICKakhT1RLw7Hpalc138xQ+p jL9J/i7ot1Gg+OdkcuFfOqNF2FB4Jk//J4mzgLq4SOljjI5IIZBT7hE5fY4rwctczrBq HwCdednC/yaQpyignjVgsNZFXThx3b8yNN4zq7Ek/t70ns7ZZP70U3qVowjEVI/mQaHQ b3Z+Z2HTZJ/o3Nq0FnjNezYIxETgyTB/TJa1BGLOcLt1RZltKV38gGLi1JLw4BVJvxDu 3Xk6+XBDim/zhmfxeLBs7iPwODVvTKiJkczxEmSJ9NC/RmwQ/l+cPvP8dpSrn1O6uhj8 IvcA== 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 b15si16534892edm.218.2021.10.12.01.28.06; Tue, 12 Oct 2021 01:28:08 -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 1815368A97E; Tue, 12 Oct 2021 11:26:36 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1796268A946 for ; Tue, 12 Oct 2021 11:26:25 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10134"; a="225852116" X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="225852116" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Oct 2021 01:26:17 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="524139879" Received: from t.sh.intel.com ([10.239.159.147]) by orsmga001.jf.intel.com with ESMTP; 12 Oct 2021 01:26:16 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Tue, 12 Oct 2021 16:24:02 +0800 Message-Id: <20211012082404.31639-7-fei.w.wang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211012082404.31639-1-fei.w.wang@intel.com> References: <20211012082404.31639-1-fei.w.wang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5 7/9] avcodec/av1_vaapi: setting 2 output surface for 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: p0DSNj6cKS4u VAAPI needs 2 output surface for film grain frame. One used for reference and the other used for applying film grain and pushing to downstream. Signed-off-by: Fei Wang --- libavcodec/vaapi_av1.c | 115 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 108 insertions(+), 7 deletions(-) diff --git a/libavcodec/vaapi_av1.c b/libavcodec/vaapi_av1.c index f577447be4..26476c7738 100644 --- a/libavcodec/vaapi_av1.c +++ b/libavcodec/vaapi_av1.c @@ -21,8 +21,28 @@ #include "libavutil/pixdesc.h" #include "hwconfig.h" #include "vaapi_decode.h" +#include "internal.h" #include "av1dec.h" +typedef struct VAAPIAV1FrameRef { + ThreadFrame frame; + int valid; +} VAAPIAV1FrameRef; + +typedef struct VAAPIAV1DecContext { + VAAPIDecodeContext base; + + /** + * For film grain case, VAAPI generate 2 output for each frame, + * current_frame will not apply film grain, and will be used for + * references for next frames. Maintain the reference list without + * applying film grain here. And current_display_picture will be + * used to apply film grain and push to downstream. + */ + VAAPIAV1FrameRef ref_tab[AV1_NUM_REF_FRAMES]; + ThreadFrame tmp_frame; +} VAAPIAV1DecContext; + static VASurfaceID vaapi_av1_surface_id(AV1Frame *vf) { if (vf) @@ -49,6 +69,48 @@ static int8_t vaapi_av1_get_bit_depth_idx(AVCodecContext *avctx) return bit_depth == 8 ? 0 : bit_depth == 10 ? 1 : 2; } +static int vaapi_av1_decode_init(AVCodecContext *avctx) +{ + VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data; + + ctx->tmp_frame.f = av_frame_alloc(); + if (!ctx->tmp_frame.f) { + av_log(avctx, AV_LOG_ERROR, + "Failed to allocate frame.\n"); + return AVERROR(ENOMEM); + } + + for (int i = 0; i < FF_ARRAY_ELEMS(ctx->ref_tab); i++) { + ctx->ref_tab[i].frame.f = av_frame_alloc(); + if (!ctx->ref_tab[i].frame.f) { + av_log(avctx, AV_LOG_ERROR, + "Failed to allocate reference table frame %d.\n", i); + return AVERROR(ENOMEM); + } + ctx->ref_tab[i].valid = 0; + } + + return ff_vaapi_decode_init(avctx); +} + +static int vaapi_av1_decode_uninit(AVCodecContext *avctx) +{ + VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data; + + if (ctx->tmp_frame.f->buf[0]) + ff_thread_release_buffer(avctx, &ctx->tmp_frame); + av_frame_free(&ctx->tmp_frame.f); + + for (int i = 0; i < FF_ARRAY_ELEMS(ctx->ref_tab); i++) { + if (ctx->ref_tab[i].frame.f->buf[0]) + ff_thread_release_buffer(avctx, &ctx->ref_tab[i].frame); + av_frame_free(&ctx->ref_tab[i].frame.f); + } + + return ff_vaapi_decode_uninit(avctx); +} + + static int vaapi_av1_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size) @@ -58,18 +120,28 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, const AV1RawFrameHeader *frame_header = s->raw_frame_header; const AV1RawFilmGrainParams *film_grain = &s->cur_frame.film_grain; VAAPIDecodePicture *pic = s->cur_frame.hwaccel_picture_private; + VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data; VADecPictureParameterBufferAV1 pic_param; int8_t bit_depth_idx; 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}; - pic->output_surface = vaapi_av1_surface_id(&s->cur_frame); - bit_depth_idx = vaapi_av1_get_bit_depth_idx(avctx); if (bit_depth_idx < 0) goto fail; + if (apply_grain) { + if (ctx->tmp_frame.f->buf[0]) + ff_thread_release_buffer(avctx, &ctx->tmp_frame); + err = ff_thread_get_buffer(avctx, &ctx->tmp_frame, AV_GET_BUFFER_FLAG_REF); + if (err < 0) + goto fail; + pic->output_surface = ff_vaapi_get_surface_id(ctx->tmp_frame.f); + } else { + pic->output_surface = vaapi_av1_surface_id(&s->cur_frame); + } + memset(&pic_param, 0, sizeof(VADecPictureParameterBufferAV1)); pic_param = (VADecPictureParameterBufferAV1) { .profile = seq->seq_profile, @@ -77,6 +149,7 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, .bit_depth_idx = bit_depth_idx, .current_frame = pic->output_surface, .current_display_picture = pic->output_surface, + .current_display_picture = vaapi_av1_surface_id(&s->cur_frame), .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, @@ -185,7 +258,9 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, if (pic_param.pic_info_fields.bits.frame_type == AV1_FRAME_KEY) pic_param.ref_frame_map[i] = VA_INVALID_ID; else - pic_param.ref_frame_map[i] = vaapi_av1_surface_id(&s->ref[i]); + pic_param.ref_frame_map[i] = ctx->ref_tab[i].valid ? + ff_vaapi_get_surface_id(ctx->ref_tab[i].frame.f) : + vaapi_av1_surface_id(&s->ref[i]); } for (int i = 0; i < AV1_REFS_PER_FRAME; i++) { pic_param.ref_frame_idx[i] = frame_header->ref_frame_idx[i]; @@ -264,8 +339,34 @@ fail: static int vaapi_av1_end_frame(AVCodecContext *avctx) { const AV1DecContext *s = avctx->priv_data; + const AV1RawFrameHeader *header = s->raw_frame_header; + const AV1RawFilmGrainParams *film_grain = &s->cur_frame.film_grain; VAAPIDecodePicture *pic = s->cur_frame.hwaccel_picture_private; - return ff_vaapi_decode_issue(avctx, pic); + VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data; + + int apply_grain = !(avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN) && film_grain->apply_grain; + int ret; + ret = ff_vaapi_decode_issue(avctx, pic); + if (ret < 0) + return ret; + + for (int i = 0; i < AV1_NUM_REF_FRAMES; i++) { + if (header->refresh_frame_flags & (1 << i)) { + if (ctx->ref_tab[i].frame.f->buf[0]) + ff_thread_release_buffer(avctx, &ctx->ref_tab[i].frame); + + if (apply_grain) { + ret = ff_thread_ref_frame(&ctx->ref_tab[i].frame, &ctx->tmp_frame); + if (ret < 0) + return ret; + ctx->ref_tab[i].valid = 1; + } else { + ctx->ref_tab[i].valid = 0; + } + } + } + + return 0; } static int vaapi_av1_decode_slice(AVCodecContext *avctx, @@ -312,9 +413,9 @@ const AVHWAccel ff_av1_vaapi_hwaccel = { .end_frame = vaapi_av1_end_frame, .decode_slice = vaapi_av1_decode_slice, .frame_priv_data_size = sizeof(VAAPIDecodePicture), - .init = ff_vaapi_decode_init, - .uninit = ff_vaapi_decode_uninit, + .init = vaapi_av1_decode_init, + .uninit = vaapi_av1_decode_uninit, .frame_params = ff_vaapi_common_frame_params, - .priv_data_size = sizeof(VAAPIDecodeContext), + .priv_data_size = sizeof(VAAPIAV1DecContext), .caps_internal = HWACCEL_CAP_ASYNC_SAFE, }; From patchwork Tue Oct 12 08:24:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 31074 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2084:0:0:0:0 with SMTP id a4csp4528597ioa; Tue, 12 Oct 2021 01:27:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwpGzZuSAidTxTU0wezH3rkf3Uozm+6u2FSDu4HcD/7iX18PAfi4HGM8L8u4Q5mNcELroYH X-Received: by 2002:a50:be82:: with SMTP id b2mr47841548edk.56.1634027251646; Tue, 12 Oct 2021 01:27:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634027251; cv=none; d=google.com; s=arc-20160816; b=WmTJYgYPxAD3QmGVamhVYFx9l0aUuuS479SzNfhtBX16XQ37/MgaD3eCQoIwBRu986 RuGFGmsSfWX15erqX2CJPoF4/vT18R72Tq+CNKY7pUXjYsQ8gswpoqZpWdjQEWTIAdmN TkvgLdLMaZWEeW5b/M5MBIVbp/qjPhCXhSjV9nub5oO8i71tn7Uo19M9hqz8NnPrhPQH 0q2PGyQ9/NWWMS1IUk+6C0kHDeAC2wIOVtAIgXUHQY0OmPrME9jOD2eQ0h9kQbjdNEVg 68aN5T5yf2KI9aHi1pmerbynqyKWGbEl5JDQQjcIj0WDStS/QxxzUz74zJ2Q/22+07jk 09HQ== 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:delivered-to; bh=pLZ0NLflyXGAlQe3FnpJy82At4eHZ9zik0loTeAJ7IE=; b=nC93ZYwfb5k/MNX0bDFxDd/pVAu7G7yGQG9b8HqnNITQkWK/X0ey251++sEFFnL88f ziVVzFqPjp62sMEAwaDePWcJXGxtLt6k+anlQa+QRpRHgPX6c+fKFDcSxFMHren6tj7r d3Pks5WZ6H9pUlEhw2QHL/n67XONZJfynS8DwMGxGpFeYfwJqW475iluj/0/AJ6eB6vF tz2eKVdyZOebjUbke+S79HvCU4lKDr3ykA20teHkQ94teVjhCtBbjTnTqzJIv3sNA70k QeRPRYDKCFU6T+/BG5bgR2YGIInpB+GrIVZoEwjSXEKGdtGUlgP9V+MKRiz7Dv5MBZf3 Iy6Q== 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 x12si6380742edr.120.2021.10.12.01.27.31; Tue, 12 Oct 2021 01:27: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 B558768A943; Tue, 12 Oct 2021 11:26:32 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B80CF68A906 for ; Tue, 12 Oct 2021 11:26:27 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10134"; a="225852123" X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="225852123" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Oct 2021 01:26:18 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="524139886" Received: from t.sh.intel.com ([10.239.159.147]) by orsmga001.jf.intel.com with ESMTP; 12 Oct 2021 01:26:17 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Tue, 12 Oct 2021 16:24:03 +0800 Message-Id: <20211012082404.31639-8-fei.w.wang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211012082404.31639-1-fei.w.wang@intel.com> References: <20211012082404.31639-1-fei.w.wang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: J5V23kNshLtd 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 26476c7738..c57d1b898a 100644 --- a/libavcodec/vaapi_av1.c +++ b/libavcodec/vaapi_av1.c @@ -126,6 +126,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 }; bit_depth_idx = vaapi_av1_get_bit_depth_idx(avctx); if (bit_depth_idx < 0) @@ -293,6 +296,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 Tue Oct 12 08:24:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fei Wang X-Patchwork-Id: 31078 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2084:0:0:0:0 with SMTP id a4csp4528826ioa; Tue, 12 Oct 2021 01:27:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwnU52de54aoHe+AKsXbwVJo8d4My9IqVOfAS2HtisiwF5L4hnJK93rVvZteh8cjoWtAt31 X-Received: by 2002:a05:6402:280b:: with SMTP id h11mr48059941ede.78.1634027275007; Tue, 12 Oct 2021 01:27:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634027275; cv=none; d=google.com; s=arc-20160816; b=zq3C3PyHPKoAVhPVOVT0wGbIDsVaKAnu/qgZWLVKeKbvmvfsPAlWvQex7kTWxd1DYl jikf4AVVe/XiuO23hBqPMYPx8lPat5XqkLEXAZ99Whfe9ZpeD/OrBcNpOrmWiWQwdYlD Ovs6tqQVF2cyQUsENOue/O8SidVIANwtHq0BbTsB5EGUIOJtFSguUEkBurj6viKcM0bE t5URGc0CYBBNygfKznYR332uFTTmfXa4jJ5NJqnvxWFRQu2lGWpirqHhZWPYZSuASjvo 1l2cv5WSqcAhgkI5pIBTGD5wYd4NZxBQGZfW1KAz0Jv1X3IwKTpMXVqzw+zxwSNAnU6s bozg== 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:delivered-to; bh=LWTPmTYhyt5qamg4tEW4UFKXj4vJJJgX80q75/Ey5jw=; b=Twhy5jbCjiGu7Sle8q9yQl30bm0exNTwa1RV5ONoThq2efUQ+V5FV5iPPSqFvg5JuD 4qYpPsNt3gPrycK21NJCvQ/n6CV2KiU5jrTN64J6q8uie/kMicfaUiHnIqU3bkUqN6Qb vQymeqKjOHDTsTSOk3Uq9ii6f2lc4Fs73JCMMEGtgvoxMH95SW8M+ZBvUKoW5sfpRAoz IXzeIuSA/Ukg1fyMC/M3hvWQpO9FRNMebPBupEKH2sDjlCwllVzrjeL9EYBj347+pffb zA5YyiLmc5FCNKeBUHWrSHhMvsIPgzTGfM9HkswsuxmBy9bkY0Kxwheoi97x70kA99N/ NMmA== 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 g29si14665510edj.322.2021.10.12.01.27.54; Tue, 12 Oct 2021 01:27:54 -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 18B2168A958; Tue, 12 Oct 2021 11:26:35 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A921B68A936 for ; Tue, 12 Oct 2021 11:26:28 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10134"; a="225852128" X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="225852128" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Oct 2021 01:26:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,367,1624345200"; d="scan'208";a="524139891" Received: from t.sh.intel.com ([10.239.159.147]) by orsmga001.jf.intel.com with ESMTP; 12 Oct 2021 01:26:18 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Tue, 12 Oct 2021 16:24:04 +0800 Message-Id: <20211012082404.31639-9-fei.w.wang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211012082404.31639-1-fei.w.wang@intel.com> References: <20211012082404.31639-1-fei.w.wang@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: UlIDaPUXlNQN - quantizer delta and matrix level specific. - support loop filter delta. - support use superres. Signed-off-by: Fei Wang --- libavcodec/vaapi_av1.c | 68 +++++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 27 deletions(-) diff --git a/libavcodec/vaapi_av1.c b/libavcodec/vaapi_av1.c index c57d1b898a..5985493b8d 100644 --- a/libavcodec/vaapi_av1.c +++ b/libavcodec/vaapi_av1.c @@ -147,27 +147,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 = pic->output_surface, - .current_display_picture = vaapi_av1_surface_id(&s->cur_frame), - .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 = vaapi_av1_surface_id(&s->cur_frame), + .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, @@ -238,12 +246,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]], @@ -254,6 +265,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, } };