From patchwork Sat Jun 22 06:23:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50069 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp940148vqz; Fri, 21 Jun 2024 23:42:46 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXyZysPc6Lcm23nEtv+Gef2SKf73voz0YpKRBZkBS6u8iD5OP+zWUxWwosbN4lbxHz887aNmD+dN06XAMsl9viT8KXvx14rr+SHaw== X-Google-Smtp-Source: AGHT+IHwlw4JOfUk5WKnq5lBoLOGjGkTwSRTu9SEyQEN9rR6AyKtrd2IeQRqMJCWx1rnO8ezceP7 X-Received: by 2002:a17:907:a60b:b0:a6f:51d0:d226 with SMTP id a640c23a62f3a-a716519a273mr15287166b.66.1719038565943; Fri, 21 Jun 2024 23:42:45 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a6fcf54d8a2si164729066b.480.2024.06.21.23.42.45; Fri, 21 Jun 2024 23:42:45 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=uBKGJs+e; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 22E5368D7D7; Sat, 22 Jun 2024 09:24:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01olkn2062.outbound.protection.outlook.com [40.92.52.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BA49368D7C4 for ; Sat, 22 Jun 2024 09:24:27 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bssgAFVnl/1XHPR3ky16PeL7tIDKpXFEk4JmDUJJM3z8fzVRaNx8Q6nY5WjwaKteK0hxn+m9gpoQbS61WC2URQE9yE8ICrTLU0do44aIGiZH8Vu2sY9ba/XzqHopdTfXLkVZlhEdswlBRQ2b7fuBZ0CS09DApDtKTI12rrr7IplyHrryHNesYWj96lKgmXFya0tr3bVikxCar21yEz9rpgGLnolZ6fDz5J6Vf+vwE4v7Xth+5pocdsMOd25CN9vQL0Eog3TI6oiT814XxSttYY6pQ7T4rDOEskKa+IbRZwWJYgvVcw8eGZC4MUJCG+MGP/OF3evFteTWSQOMmywBCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=dn6oedUDOHBozAlv7QMGnetotLIkrn9AK4F2qZQtAbg=; b=AbXIcr0eERmBJhZIqKAetOuzk9Gnf76l/ak/tK6WUUjAfGUSB9R9MRNUkI5DtAG2v4m2BIFHSHkPwkn67yhljiq3yAclDS0bpRkEA7c8WkOvM60AVOx6ClHi+yXNb0rVIOMQcPjjEpCKMDq0tQAMB6phw/1CCoTSCw04JxA69FJERJ3d0EN4KmWZqATKQiHCpaCc75L3/J7GVQ4xFLCujPVesoiFZMBWNMjgzBBucWE+YUOGz+BjD+rDvnJ6ONnYc68LMHhCjhUvQJ0nWQGESd2cTElAM8DiWebKARv1jwkPqpalOi5B7WnlnE/aO31TsoZ+MB5bKJX2cI/BnVfOqg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dn6oedUDOHBozAlv7QMGnetotLIkrn9AK4F2qZQtAbg=; b=uBKGJs+eyfv9ox6aNB6g6EgKU9p0gTO0ntLG8/+JqKl9B49YQYP0ky9p9mJv1lPwjODgjDmKOKx0jSM6+BRB3iYfBT6s//aed6vPmGYcPqMro/UqbVxdnG3XRU3LzBTkzQj9AOqp6YjMUHafbtw4w+kK0sUPk75b8+OVSzBMiXeEA6GBfyOcwQtQZ0TSsK/DLpX+K6tWgFWif7En/bLu9kV+OVQz6sh1podqiuwNKFyGAv4spvkxfCMC8czCtfzMczGuhC4sgsAIy2XfshijJDCVvjdsVNFS4V5WyKg/vjmifguCLzmSAbS8DGMhTNjkiK9euqiAAJ2tr5M6ppMNjQ== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by TYZPR06MB6045.apcprd06.prod.outlook.com (2603:1096:400:33c::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7698.19; Sat, 22 Jun 2024 06:24:18 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::81f7:9125:583a:1cca]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::81f7:9125:583a:1cca%3]) with mapi id 15.20.7698.017; Sat, 22 Jun 2024 06:24:18 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:23:50 +0800 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240622062405.285359-1-nuomi2021@gmail.com> References: <20240622062405.285359-1-nuomi2021@gmail.com> X-TMN: [Aft9K55eDjjOH527TOVTxf4Q4igg87W6] X-ClientProxiedBy: TY2PR04CA0023.apcprd04.prod.outlook.com (2603:1096:404:f6::35) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20240622062405.285359-3-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|TYZPR06MB6045:EE_ X-MS-Office365-Filtering-Correlation-Id: 255a6d8e-6696-46e6-ec15-08dc9283f145 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: B8jXYZ/55RMCGq0mdrsy9VyV00gyIEwQdGXm7D0yNKzx9cTWbaKtElCNcKFtizjjrYIhc68MNBP2bprtuezr4CGXa/88f3IcCNA/uCb4kRkETy9Q+Njp63BPYmtHV61EoVXnhVonvaJAVdH0x/hT7tMlpUYsXmeqJkE1TCLqQSD9Md4fGf3fctOIw/yC115z3Ct6RoWr1g29xJMfCCGNV333lcss01KZd+Lq9h3N6Sxr50kEWWnS+TuBvWFA/6Imcj/ZLR4O7bPcl6UUx9O+PlByhbRQrpwi0Hg+eFyM6lg+/XGiVC6wPePtxYzTDvJ1x5Qdwy5FXbTNcp051031jtN+gF6AIE4la11n44knr/8JS8H/wlk0JPpp22VoP+ZMIULZXJ8i7OFTRYaK6XVEcA5xHkgCA1IgQo3D3YinrTosVOxvvzbepGjvEfrlKm3bPP4AdjQ9BMlQ9snKi+kZvTiokNymtaQt5e5F0C5c7+hEaK4ptCzastrGZ/0ETDay7x6BS4HOq8pxUcna5+SYIRsPXikj4r1LD6ieZYL6bexF7UCBguPQ2kk0X+XLHWnEgMmLlHBN7LxkJcpsmbGqWFPLF9xlN4sFzbUU9D8sN2DnzLCSLtf07LD4ku6clGFo X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: SuxGemY/AupT5GM/xqo58whfdzXpHTpFA2I2dkPvtesdy+PjdIeEUGrm/i6muM6NBwu0w7UAFYEI1ii1ZDoUSDglijdYhHATvk9U025Xqi6YPnOd45OFdACVQW+V9JvB3vQAzKklUokhlgfvYP+6XS6M+Oe/R1Gla+EBcvaSKDHqIuSM7aAvAWygnNTBmJljhML0CBc8PD3CEmxaP2GpRNeM8lPLRJPqkXT+0ZQGGp39lHul4KP7UAoKLqxCgvLBwTpDmGoJvk+KEvMI/43pXPcu8Qt/84vDX7/OW0Q4XDI+T114ie44vlFfc/gkcyvLoYcDxfhvkQZO3Bva40Gu8QbqjoA1D3eE3rU9UrMmKmSVWyEW5EWxAhxdp/3qqbPWPbpagzaxw5rF40yS+jXTz9o8xyj7y1MVrZoz6ECzGZDyZANZxMRy8B4rWC+ljnQnbklg/g6hAMLeAOK6ox/jxtv0nf+4jWYh/7NDRU8kzfH1+EPtMdkgurrHj0PI07LmmFhb+K+fW/HkpnkG/2EEaYpGD0WkaXR95EDEp32QSR9JDVb4BVDbLlGOpVmib7KuSjo0GUqhOTQjsVPjl7zcZ/jcLZ+ER4EW7LoZ/qjRtNQASDodh/ehMpPHNOh/Azh6gkMRRbUqZMTE+egw545bJ2k23nhyPXGQCo0JjeNUerpe2Vg/GbYDJCpwKjNMdtAMiCHqHfjw1nxpzoNLAqW6kq0oSHbalgrmk1jVtCz+VRDiFrAA8M9l5a+sf85mED0iA0Emp4WWPH+aJzL/bnP2hu3SoZK7xFwOnjmhucAmudk9A563BMgo3dKZbPO7EkOxbxi1r98tbQDmgzv3O+LXXHkvDP5gGUfXKLeWd31lVPHe6r0Jl1MQDpBshLiwgN6WzgMMFwEwIpH+Zc9Ro8a/ee2NZHYqErroE56/Dtf8ExVVZ+0tF8qVlphrrj6tZrOFq42dPx6DwdHZq2h2N8BDe2+RdC1LU48ZTGqLDnTZNHrtxJXDbTDajuywipBrtI4VbFRm77U6trGFSyYLBsfyeEXrAuxLPANXg36WmAihjcGr08xl6lMYZrQnHDCBeWlcpmPHw2uRpZTh2S9SU+Lni2koeLlA0rZRZhcFfd37OJc0PXX8bhTdI9raOcRGY58tBUaVwz7c75tJQCMFcMLno1pMNp+YqbBwMHnXNuwjNKZiHIxRBU8VcFsRo/MZvsA9tHYy0NBSpbvwpssf/qA1OKPbARw8v7q5FP53pzp9/y9O3gb5k8qU+gNrjN5LTvkwA9MSx7LDyw68+vlPq9G4sw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 255a6d8e-6696-46e6-ec15-08dc9283f145 X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2024 06:24:16.7664 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYZPR06MB6045 Subject: [FFmpeg-devel] [PATCH 03/18] avcodec/vvcdec: refact, unify vvc_deblock_bs_chroma_{horizontal, vertical} 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: Nuo Mi Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: V7cM07FsIR0m --- libavcodec/vvc/filter.c | 62 +++++++++++++---------------------------- 1 file changed, 19 insertions(+), 43 deletions(-) diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index 996e58dc3e..06e1717b13 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -586,56 +586,33 @@ static void vvc_deblock_bs_luma(const VVCLocalContext *lc, } } -static void vvc_deblock_bs_luma_vertical(const VVCLocalContext *lc, - const int x0, const int y0, const int width, const int height, const int rs) -{ - vvc_deblock_bs_luma(lc, x0, y0, width, height, rs, 1); -} - -static void vvc_deblock_bs_luma_horizontal(const VVCLocalContext *lc, - const int x0, const int y0, const int width, const int height, const int rs) -{ - vvc_deblock_bs_luma(lc, x0, y0, width, height, rs, 0); -} - -static void vvc_deblock_bs_chroma_vertical(const VVCLocalContext *lc, - const int x0, const int y0, const int width, const int height, const int rs) +static void vvc_deblock_bs_chroma(const VVCLocalContext *lc, + const int x0, const int y0, const int width, const int height, const int rs, const int vertical) { const VVCFrameContext *fc = lc->fc; - const int boundary_left = deblock_is_boundary(lc, - x0 > 0 && !(x0 & ((CHROMA_GRID << fc->ps.sps->hshift[CHROMA]) - 1)), x0, rs, 1); - - if (boundary_left) { - for (int i = 0; i < height; i += 2) { - for (int c_idx = CB; c_idx <= CR; c_idx++) { - const int bs = deblock_bs(lc, x0 - 1, y0 + i, x0, y0 + i, NULL, c_idx, 0, 0); + const int shift = (vertical ? fc->ps.sps->hshift : fc->ps.sps->vshift)[CHROMA]; + const int mask = (CHROMA_GRID << shift) - 1; + const int pos = vertical ? x0 : y0; - TAB_BS(fc->tab.vertical_bs[c_idx], x0, (y0 + i)) = bs; - } - } - } -} + if (deblock_is_boundary(lc, pos > 0 && !(pos & mask), pos, rs, vertical)) { + const int size = vertical ? height : width; -static void vvc_deblock_bs_chroma_horizontal(const VVCLocalContext *lc, - const int x0, const int y0, const int width, const int height, const int rs) -{ - const VVCFrameContext *fc = lc->fc; - const int boundary_upper = deblock_is_boundary(lc, - y0 > 0 && !(y0 & ((CHROMA_GRID << fc->ps.sps->vshift[CHROMA]) - 1)), y0, rs, 0); + for (int c_idx = CB; c_idx <= CR; c_idx++) { + uint8_t *tab_bs = (vertical ? fc->tab.vertical_bs : fc->tab.horizontal_bs)[c_idx]; - if (boundary_upper) { - for (int i = 0; i < width; i += 2) { - for (int c_idx = CB; c_idx <= CR; c_idx++) { - const int bs = deblock_bs(lc, x0 + i, y0 - 1, x0 + i, y0, NULL, c_idx, 0, 0); + for (int i = 0; i < size; i += 2) { + const int x = x0 + i * !vertical; + const int y = y0 + i * vertical; + const int bs = deblock_bs(lc, x - vertical, y - !vertical, x, y, NULL, c_idx, 0, 0); - TAB_BS(fc->tab.horizontal_bs[c_idx], x0 + i, y0) = bs; + TAB_BS(tab_bs, x, y) = bs; } } } } typedef void (*deblock_bs_fn)(const VVCLocalContext *lc, const int x0, const int y0, - const int width, const int height, const int rs); + const int width, const int height, const int rs, const int vertical); static void vvc_deblock_bs(const VVCLocalContext *lc, const int x0, const int y0, const int rs, const int vertical) { @@ -645,9 +622,8 @@ static void vvc_deblock_bs(const VVCLocalContext *lc, const int x0, const int y0 const int ctb_size = sps->ctb_size_y; const int x_end = FFMIN(x0 + ctb_size, pps->width) >> MIN_TU_LOG2; const int y_end = FFMIN(y0 + ctb_size, pps->height) >> MIN_TU_LOG2; - deblock_bs_fn deblock_bs[2][2] = { - { vvc_deblock_bs_luma_horizontal, vvc_deblock_bs_chroma_horizontal }, - { vvc_deblock_bs_luma_vertical, vvc_deblock_bs_chroma_vertical } + deblock_bs_fn deblock_bs[] = { + vvc_deblock_bs_luma, vvc_deblock_bs_chroma }; for (int is_chroma = 0; is_chroma <= 1; is_chroma++) { @@ -657,8 +633,8 @@ static void vvc_deblock_bs(const VVCLocalContext *lc, const int x0, const int y0 for (int x = x0 >> MIN_TU_LOG2; x < x_end; x++) { const int off = y * fc->ps.pps->min_tu_width + x; if ((fc->tab.tb_pos_x0[is_chroma][off] >> MIN_TU_LOG2) == x && (fc->tab.tb_pos_y0[is_chroma][off] >> MIN_TU_LOG2) == y) { - deblock_bs[vertical][is_chroma](lc, x << MIN_TU_LOG2, y << MIN_TU_LOG2, - fc->tab.tb_width[is_chroma][off] << hs, fc->tab.tb_height[is_chroma][off] << vs, rs); + deblock_bs[is_chroma](lc, x << MIN_TU_LOG2, y << MIN_TU_LOG2, + fc->tab.tb_width[is_chroma][off] << hs, fc->tab.tb_height[is_chroma][off] << vs, rs, vertical); } } }