From patchwork Sat Jun 22 06:23:48 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50057 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp935457vqz; Fri, 21 Jun 2024 23:24:34 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXTNBs8ubUa0MhzDtVWKlrcC7bhdiUY399+hfDIKjbIMDEIYSCHN5levaJ+9kAXNjndmZg6KmGp/JEpUj7GA9LNLdakRXckNHmI/w== X-Google-Smtp-Source: AGHT+IHJK1bRtdRycN7Q4EFt/GO3fiji8UnJximfs5MyqNJe8Vyfbv07XaREYqxIPrxlEp829kPT X-Received: by 2002:a2e:8004:0:b0:2ec:5518:9550 with SMTP id 38308e7fff4ca-2ec551896b8mr6477311fa.10.1719037474337; Fri, 21 Jun 2024 23:24:34 -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 38308e7fff4ca-2ec4d60179bsi8190031fa.37.2024.06.21.23.24.33; Fri, 21 Jun 2024 23:24: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; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=gWQljkOk; 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 15EE868D3F8; Sat, 22 Jun 2024 09:24:30 +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 1139768D3F8 for ; Sat, 22 Jun 2024 09:24:22 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ayiuGQRotfvuWkVtlQkEGtpbOKOByp+LdRYsH16wxnw4DJYxynXmBWnrXdiBawzJvhTn7m4TGdhfwYCsqOK3iwyAkSRV4Dpo9MMFlvxXkW6Qv4rCrTkYDP5j3apr2esumbHVDAclvHjkG8U7zfSZbTVfG54rGVf7k0XSWuVunUlY++VkiiIPO9mmXRjUaatQJYn8KMoVuHt0b3UQF4UrKjdCZ9tpnwaleg6CVaE0HPwk9+c5ZW1kZ+mQVuRgM/dysVPVfhT7mNYYLB9wS+bOT+RaAJPl50EpVeY8re4L4Ni+bk6z5z6Hv+Cr5VY0Jq78NjbVB0kkqwiKggNKIglKxA== 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=sV7FRSaTV21KavUyMSbGX7TK8HY2jV7jiT9Ce7zsIuA=; b=HTl6U5p4PI6s0A/viQa1P3R1N2Ldr0UW/hJZTYPlmDBeqxMBLrrGAVR6WIW/oDVrn0WguRUQQiyLKg8T+3YIhzokfoywQwZhPgPSYdY+kNa4/TYCmkWJP1lX/eaGJXjg934VeiR5CL62ivVcrtwDYtOoG3c0j3ugM2I4c5d98fxF2nE8gSoEBgKiParM5ZC3+h2uGIKnfTJcbScVDV9ftpXKG0Q7bf15lhRTBExmm25pqWnsTfejuqnH4j7lj+flSqNd5Ip2uNpgv0S3x5u2AQdMwDk8rS/RZDnHFpgfGN44AsojGCc0dZJYL95NUcgYNSmtfTLdYZOsIZZEgv99gg== 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=sV7FRSaTV21KavUyMSbGX7TK8HY2jV7jiT9Ce7zsIuA=; b=gWQljkOk9GFlhhHOB7yE6D5G+1jf5uuB+LqllB2Eivi8XKG7Sh2oegRwPAeq3oJyUsTxvqsxQ6QyOlGC9rf2VPqNpIkOrCpbwZ1QW2O+PKSgrs18WJh+ejRiP80Lctg+5FjHxW5WUxko1uEXixOsrqTK0vFe2opt00KLvQH+TQZbtOB2FUr2hKr0rs16nJNYGIycF3LsgJibSno/p92vKbf6UoLULDYycQGkJU+O41o0tqb9pZbs4sO8Y4fuW9K3tG+3LaJUo9ujcNt/YSrD5d8pV2TDLKabg+ou50LJfJx2JD4x98Z8IIYpnF3ivIvLxw5t45wU2q5B3cxaLb+jFA== 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:17 +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:17 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:23:48 +0800 Message-ID: X-Mailer: git-send-email 2.34.1 X-TMN: [eR5/67ZnLtcVvRYzcL8EsMYkNfnfC3h2] 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-1-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: ffe4e51f-ca10-425f-2379-08dc9283f074 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: 9NlXe8A0Y+aYV9KoHC4sKCTYFuXWvYhoDmq2jsevFcVwntiQbGpf0z6km4DOuqerlLcbixL0oO3D5m6LCW/R/f0yMEypVhEWRulR79AhyesjRxz0vzpcvLtlsGguG9FYNMuz5ChHExrxVEOaPBj4bt97fguYIqh8doAtBnsKJZN6zmFLgqrbnEnqXHHujKdIgXHfLIOUceB9dIMiAicaoqcSW5a5n4JTNl6yyX45dPBRgMcYfjMgP5+IrWBca1KRV+iGgCj8rlsB4YlWiV7efmhNWsgy1ToOL7S1Uy3T7IIc2cyhmI1jyt1Oe0njCcbObFk7kQgVYgkuEGAnHYdYL2Tg2cfpPiaQbYBCwLrPFMAUgK8tK5gOHJ/OMH/4TZ/omV50iALBT6kwEUGsaBF2Pb5s+lJBdptfAMWnHcaz+qZh5frnT2tw649ypQNFQJ+Qgdo6IscE3gRyHbenCGP53EtvomQELe6VL0Ix01nbG2Q5cRy3Z9SV83Ng3C6a+kuj0q0CKXNMxgiylCb86mNVAVAqKioEWTpCQKSyVjTQXpDpXOdT0Bx4HiDmYLEqBZVwjW8kqotPvCtUcw1/dASXPLqTAz0z86AAulbdQZx433eqrGBdbg7wWa9d4a1/GaDQ X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?iucDm4aBdyxTlCKFva2XsoGQKjm3?= =?utf-8?q?UBySa56bjCBBFFOkvgOOS6uIWIjD24xj1plX3xc7wsNYUIdI/urM9FYpfCwPRgiFx?= =?utf-8?q?vE7gPkJzQk8wesEwI028ktHBC6ayRXZNPdMsOFXO4PvNfvKzL3JpMRHeIMJGHWTPJ?= =?utf-8?q?rdM5YDn+qsMczdXeUkcZv1w78UHA/pibPxOApkvhzqPMzJsLTey3qwRXOn1f+Psf3?= =?utf-8?q?sDQ9w5LcBiwZm1jq7qti8vFneUN21dvs/ihzhraWyzrEiPtXVCYfb1MaclKD8mgxO?= =?utf-8?q?17Z8jam4AZ83yjLb2u1g95MmQj3IQurPdB2TH5SzyOl9vy3cYc2pKtEJ+d0J4c9jz?= =?utf-8?q?Uu4+YyLzIlWXCtkC52r/4Pj9y/Itv3uE7bVz5Rf0Gg3Z2w6AaQs01zBbNVkulz3uO?= =?utf-8?q?doD697SRu20tYlCzaASx5yxxNeOCHuR+T8jO32zw6ju6KSLN9DgUCgehP2gcFxw3w?= =?utf-8?q?fsiSsbWhQ9yBQu528C+i0hmeUp7Gz6J9NDyNq/i/gyhkZxQB3vIH6+qYbCr6FDbbe?= =?utf-8?q?Q4fOuM7zuY8fmvYXJ1GxVAwNEPX965Rv/Oy3HA/MOpbQCMtbTonZkmFl6N8wHQJIo?= =?utf-8?q?WluSilio9BivQtsyyoAINYbgwqVmRn+wO/W0i1u1w7YyexnblyzAjV7kWye0PGaq0?= =?utf-8?q?c3kPX9bTHe/tllEfo9al417WfwXYsW3CyxvSV12YJ1iGSZjQSjZY2LT6yWNGpjBxx?= =?utf-8?q?zvFfZfPqJntPta6pt5u89LKsn/ZIQCdRMvhoJBx9HbJGzqGWu6WM2Puo1XF1xG/MU?= =?utf-8?q?aEN73r58LV5fGPIkO3dDuOwj6Cy4QijCuv/K9Mz4ZAwm407JcHOXVJo7PH1ecHivw?= =?utf-8?q?vTeHxBGtULnKNPPPw5reHqjeYwTVGib0yW6l7nSK7VZWZV5SFH4Rw5jCHw4T+0Ybo?= =?utf-8?q?fDK5AR9rG6eWOI9vHv9WV7PB7ANEmlU6lENBWAKA3NlFj5KCy8nS7gG9pCUk6rNXj?= =?utf-8?q?pQUKXuzPJW6Ch553j6w9OOIEIbm2hESd/pqbZgB4jWhNsOSS3SJHp+H1LMMWhRxbY?= =?utf-8?q?i1M0x/rGbtD8GXw4t5jUrqYKrIQch0VC7nWDu8okJWd1zxCTVW/wMzqBjA5Dv3AZq?= =?utf-8?q?21xS2Q6Q2d9/vqFgggIq1dLC93g777Ne7/lNLSnEE38VFd6S6Dg18IZ59NyNPmP1+?= =?utf-8?q?THNHQWOHBOvsa+AVBNIkeaAo/K2LONh3V4AiMHXc3b2X7lO4dSdHQea5ZLw+lJbHg?= =?utf-8?q?0/kRLNreY5E9HQvqM/bm372Bf/hDKwNnyKOPxJQ=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ffe4e51f-ca10-425f-2379-08dc9283f074 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:15.4726 (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 01/18] avcodec/vvcdec: refact, unify vvc_deblock_subblock_bs_{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: lqdFRBc1vkqx --- libavcodec/vvc/filter.c | 93 ++++++++++++++--------------------------- 1 file changed, 32 insertions(+), 61 deletions(-) diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index 7844d34eac..d4c09b69f3 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -406,30 +406,43 @@ static void derive_max_filter_length_luma(const VVCFrameContext *fc, const int q *max_len_p = FFMIN(5, *max_len_p); } -static void vvc_deblock_subblock_bs_vertical(const VVCLocalContext *lc, - const int cb_x, const int cb_y, const int x0, const int y0, const int width, const int height) +static void vvc_deblock_subblock_bs(const VVCLocalContext *lc, + const int cb, int x0, int y0, int width, int height, const int vertical) { const VVCFrameContext *fc = lc->fc; const MvField *tab_mvf = fc->tab.mvf; const RefPicList *rpl = lc->sc->rpl; - const int min_pu_width = fc->ps.pps->min_pu_width; + int stridea = fc->ps.pps->min_pu_width; + int strideb = 1; + uint8_t *tab_bs = vertical ? fc->tab.vertical_bs[LUMA] : fc->tab.horizontal_bs[LUMA]; + uint8_t *tab_max_len_p = vertical ? fc->tab.vertical_p : fc->tab.horizontal_p; + uint8_t *tab_max_len_q = vertical ? fc->tab.vertical_q : fc->tab.horizontal_q; const int log2_min_pu_size = MIN_PU_LOG2; + if (!vertical) { + FFSWAP(int, x0, y0); + FFSWAP(int, width, height); + FFSWAP(int, stridea, strideb); + } + // bs for TU internal vertical PU boundaries - for (int j = 0; j < height; j += 4) { - const int y_pu = (y0 + j) >> log2_min_pu_size; - - for (int i = 8 - ((x0 - cb_x) % 8); i < width; i += 8) { - const int xp_pu = (x0 + i - 1) >> log2_min_pu_size; - const int xq_pu = (x0 + i) >> log2_min_pu_size; - const MvField *left = &tab_mvf[y_pu * min_pu_width + xp_pu]; - const MvField *curr = &tab_mvf[y_pu * min_pu_width + xq_pu]; - const int x = x0 + i; - const int y = y0 + j; - const int bs = boundary_strength(lc, curr, left, rpl); + for (int i = 8 - ((x0 - cb) % 8); i < width; i += 8) { + const int xp_pu = (x0 + i - 1) >> log2_min_pu_size; + const int xq_pu = (x0 + i) >> log2_min_pu_size; + + for (int j = 0; j < height; j += 4) { + const int y_pu = (y0 + j) >> log2_min_pu_size; + const MvField *mvf_p = &tab_mvf[y_pu * stridea + xp_pu * strideb]; + const MvField *mvf_q = &tab_mvf[y_pu * stridea + xq_pu * strideb]; + const int bs = boundary_strength(lc, mvf_q, mvf_p, rpl); + int x = x0 + i; + int y = y0 + j; uint8_t max_len_p = 0, max_len_q = 0; - TAB_BS(fc->tab.vertical_bs[LUMA], x, y) = bs; + if (!vertical) + FFSWAP(int, x, y); + + TAB_BS(tab_bs, x, y) = bs; if (i == 4 || i == width - 4) max_len_p = max_len_q = 1; @@ -438,48 +451,8 @@ static void vvc_deblock_subblock_bs_vertical(const VVCLocalContext *lc, else max_len_p = max_len_q = 3; - TAB_MAX_LEN(fc->tab.vertical_p, x, y) = max_len_p; - TAB_MAX_LEN(fc->tab.vertical_q, x, y) = max_len_q; - } - } -} - -static void vvc_deblock_subblock_bs_horizontal(const VVCLocalContext *lc, - const int cb_x, const int cb_y, const int x0, const int y0, const int width, const int height) -{ - const VVCFrameContext *fc = lc->fc; - const MvField* tab_mvf = fc->tab.mvf; - const RefPicList* rpl = lc->sc->rpl; - const int min_pu_width = fc->ps.pps->min_pu_width; - const int log2_min_pu_size = MIN_PU_LOG2; - - // bs for TU internal horizontal PU boundaries - for (int j = 8 - ((y0 - cb_y) % 8); j < height; j += 8) { - int yp_pu = (y0 + j - 1) >> log2_min_pu_size; - int yq_pu = (y0 + j) >> log2_min_pu_size; - - for (int i = 0; i < width; i += 4) { - const int x_pu = (x0 + i) >> log2_min_pu_size; - const MvField *top = &tab_mvf[yp_pu * min_pu_width + x_pu]; - const MvField *curr = &tab_mvf[yq_pu * min_pu_width + x_pu]; - const int x = x0 + i; - const int y = y0 + j; - const int bs = boundary_strength(lc, curr, top, rpl); - uint8_t max_len_p = 0, max_len_q = 0; - - TAB_BS(fc->tab.horizontal_bs[LUMA], x, y) = bs; - - //fixme: - //edgeTbFlags[ x − sbW ][ y ] is equal to 1 - //edgeTbFlags[ x + sbW ][ y ] is equal to 1 - if (j == 4 || j == height - 4) - max_len_p = max_len_q = 1; - else if (j == 8 || j == height - 8) - max_len_p = max_len_q = 2; - else - max_len_p = max_len_q = 3; - TAB_MAX_LEN(fc->tab.horizontal_p, x, y) = max_len_p; - TAB_MAX_LEN(fc->tab.horizontal_q, x, y) = max_len_q; + TAB_MAX_LEN(tab_max_len_p, x, y) = max_len_p; + TAB_MAX_LEN(tab_max_len_q, x, y) = max_len_q; } } } @@ -581,7 +554,6 @@ static void vvc_deblock_bs_luma_vertical(const VVCLocalContext *lc, const int off_q = (y0 >> min_cb_log2) * min_cb_width + (x0 >> min_cb_log2); const int cb_x = fc->tab.cb_pos_x[LUMA][off_q]; - const int cb_y = fc->tab.cb_pos_y[LUMA][off_q]; const int cb_width = fc->tab.cb_width[LUMA][off_q]; const int off_x = cb_x - x0; @@ -610,7 +582,7 @@ static void vvc_deblock_bs_luma_vertical(const VVCLocalContext *lc, if (!is_intra) { if (fc->tab.msf[off_q] || fc->tab.iaf[off_q]) - vvc_deblock_subblock_bs_vertical(lc, cb_x, cb_y, x0, y0, width, height); + vvc_deblock_subblock_bs(lc, cb_x, x0, y0, width, height, 1); } } @@ -629,7 +601,6 @@ static void vvc_deblock_bs_luma_horizontal(const VVCLocalContext *lc, int has_horizontal_sb = 0; const int off_q = (y0 >> min_cb_log2) * min_cb_width + (x0 >> min_cb_log2); - const int cb_x = fc->tab.cb_pos_x[LUMA][off_q]; const int cb_y = fc->tab.cb_pos_y[LUMA][off_q]; const int cb_height = fc->tab.cb_height[LUMA][off_q]; const int off_y = y0 - cb_y; @@ -659,7 +630,7 @@ static void vvc_deblock_bs_luma_horizontal(const VVCLocalContext *lc, if (!is_intra) { if (fc->tab.msf[off_q] || fc->tab.iaf[off_q]) - vvc_deblock_subblock_bs_horizontal(lc, cb_x, cb_y, x0, y0, width, height); + vvc_deblock_subblock_bs(lc, cb_y, x0, y0, width, height, 0); } } From patchwork Sat Jun 22 06:23:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50073 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp945546vqz; Sat, 22 Jun 2024 00:02:47 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWnbxeLLflasuVHEkHil+GVK+g8gPg2txg1yvrdWe3w/JZCqVsX3BxyYsqfbc4/aM12mrBVVTBfIdZEDMhOhpTrXJMIUldrJHzt6A== X-Google-Smtp-Source: AGHT+IHcDi2MYnJRug6uAhIra4bMAXI7yaHsCv7ACOWpSVA+pmN4oirrxMdHTbQua3ev7PHy5pCm X-Received: by 2002:a17:907:8e8d:b0:a6f:49bc:e857 with SMTP id a640c23a62f3a-a6fab60bb88mr707725466b.6.1719039767334; Sat, 22 Jun 2024 00:02:47 -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-a6fcf5653aesi161931866b.679.2024.06.22.00.02.46; Sat, 22 Jun 2024 00:02:47 -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=nnDmnbq0; 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 20B7068D804; Sat, 22 Jun 2024 09:24:35 +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-psaapc01olkn2076.outbound.protection.outlook.com [40.92.52.76]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0D5E968D7CA for ; Sat, 22 Jun 2024 09:24:28 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Sgphh6ajSRefAFe18UDQApSP56EBhvf6j4cDeOSAac/DdYRAx64DRZ7/zYs9vD6aOZhlPE3tlDZaz168VnqMscix+HCOlvvxPkTl0/ROvWyfaBLUkjZQJcVC9PkSf2fX5Ck8EKFqS7peg1XRcQRpR9P+YCHYOENwYxfMgesv2kZqwBzFxIn8p//z6kyUDUK7WpyKSZdNhncq7QpfzwbHrrj6FQD3gzprBwL6iQAlT/aDurdgeYvwJn6jct7mPqbLIsbyDo3+8CiHGXrX4/qnlBwd3tFpGFF1Bdw8PMkyeHhm3eEaTCIeQUo0/aoRwoQKBEdOjx4BHNwa2oGJlMLkRA== 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=4qVX+4c6tBYmmQe6y7oWC0Lg6sYXupA1g5S16NnGbNA=; b=QzgbTulPdTpxwBSnDNkZXhrBf47irvCKnTvhu4D/R0OP2XNM5SRfrarulCXgd9Bj2NoC5Y3dWswAxX7Rm24BJi1LiwUOcJ4YEXcjc/ZUs4glTfTBXHOz0cF9OImQdwJrZZlGFIc2F1Fr1Ecx68Bw0KW72PBBQLSiadbV+S9UIO4mz6aLxBM6RdjlYrqAzyld+sNs3yBku5Rm1XbyYX61VNJZrgBujuO+s/NuUoakOFyPxFV37yWil+SEzEDpYhDfZ7nKXEdLy9O+bFYi1qX4j7rukvgGNqph70zW0QJsDc5V++R6iUzHSlrGm6gLh1jQic2Cw791IVO+NJWOidoZmA== 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=4qVX+4c6tBYmmQe6y7oWC0Lg6sYXupA1g5S16NnGbNA=; b=nnDmnbq0uCslvgR6XXelH81nLEVnv31zNpyZIbW8F02rxGhaELasBASaVNMcYz+9nwVXfoxWxuHnbkQ3M91+OPccyXcakuFwjBbf91D8J4DPLYIgvwcVvPQ8WolvROyvnZOhieCWLil8JoduYVKHzXPRA26dY4ny0f4VQwyDfL4Osk6ccHp1V04wNQiMG3UNvn1kSjMRjJTuG/xFfNt/S595oUNWF42yMliFiz4stHpTb7+WSrkVFXM/mopFmpI2sF6WlK+rim/ktCokmVO1w5j2yevFBdd3/IUm5lV5B1SMDj5DFfrgB+QnRyW6Yyue/efWHzKJkSt50dvendT7Fw== 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:17 +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:17 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:23:49 +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: [6sH4iqhiYk5xqanaEiMR3wzitWuXvKu9] 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-2-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: fbe3fcc1-4866-49ca-ba77-08dc9283f0e3 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: F/n6E/czFLcdkgztA4b4qnk+cIEl+7GnXvUT1HE+2N+IQFS31P35AFknLWFT6gp31p6I/BLpv0sAsC1O1Zb/T4ecB3pRxtqk5KNrNEZa1Fj1/X9U03wPjVL8VjN9v8M/ewF2QNsRycYo3/bcqyI5X1qmUQBjiOzE3PnKomRGkpnvZYZ+6VRsQh1wFTCoAmzAthYKmTZBXaQcj7PD6ETdAeNqgbvIIU8NPza6jxKpx7RwoS2yosZFnNJ/+sqilkDrUQS63gtw4eTRzexDuTmFNXNlhRXC7/7AJS8HXKuQSOUmpyWPYQorTcZ5ULTALqTO85Udm3A1sxKSv4ACsocLER5fFSlrGUt79oevE1ZwTSFRZTSNI6uEu5P1PE0SP05lD4AVmM5FvdhTScfd0ZYfcTKns0NmI+6vj6QZc0RGaR54IAoGYpqaDSgTQs8fBVUQ2ykZtXKlkGj0++m88yljw8+FEr3E8i1IdZn1l13msUAsjlWo3jBo2nTkPZk43WsQDk0fm2U8xGIKbJGJpEkWSiGa5H4y1wcxhHBRm2Yc8ZoewiWL0oms/ng0LIulKoooJqGVUXmYTCBaXLSMwJH6Z89nrubRqaTHIE0RmSv++sE= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ity2A7Qql8gvfF8dJ/1UHEPGxJfnf4WPfrdns50dzu0RcYeoQlv0LidxRQO42MBF+2NNBJiW1qfLkMHBOoePWqClalfPoE7BVagxzHu6CY4BmwGyGJHCCDDG0GLV+veYG3cWX/DyVeIAcGl1PssthR8+r2iqP1Ve73ItTQKwGZhk6CMggyrtcidHeTSf+vCCDcb+w32i481FhzBz1Hb2ZW5h09NWeGXcwpjUA+t2//9+jvCY66gZKEUQkdKLdvyasbrTO+Ae9Nrnns0qJNmLqm/X71rgFBI2GCSxcSuRMaLFcYYUEVrq6yKVHLv1lRwni3V2f3cxo7xzMFabk/eOJEFeeuXALNb/n5oM2k65TrXuAJegbaWjXkpvI5ZGLIjYzjAlfDsa0mUoBndFYOrNUjnHh59TQ+YkEkSvVe0e6274PGW17mHVSexB9ACrDbPyNVNKkDr/Xc/mifnIaZYQY+fzsvQGds2S06SpsiIN0gyGYH4mFdGOsphj5um577IWNz2XB4NPYrqY7uCjPEEN1Ofd0Awn54FDGtYGGd/vDVE1avMV6/pccOnTJoWYaY6JJI/3SaxJCX1TYgG4XbzRbe14nNY6YCmz7ARYKWQf+DiqQwrDYUws/wl641WnwRTPk9esTEdUGl4pw3svAUxg3EsGdHhXcVqgQB9GC40UCW9zv8DSKFxkTCgkM6bOO1lKeNqs5JvhBZLEeDv7Z8gVTJWDa4yJt6hiPb3aK9XUMragiREdB5T74XcX62/Ng52nHBq/iKO3aEnjNWpBfSbjLe7ivaakToXZZeZdy5GNFq/u1nbVsmduOwRCYdBBFiCE1QjT4AGsNA5wMHp/y6Wg5yi0k9XkomyWEnDQFuDsgsFZMFITN6CFiw9kiWHIGt6hMn4UKIzHdkRjycICBzoQvbI6ZUuNWucX7rlmyibqzVHIqIlRuuq7H/xIvRd5D8eTTT3S06ZRGRcUjTqRPxKQZCfIU0UofsiU8Se1pHjh8Da2KgbgTNmgpihpU2QYXT91O1EbBft2/754y7UeYgEYFLXFULskeKNgj0qTPfEjMY34PLZpVp6qRoC4FkR66V4VxemKwOoIG5NPeZdlTGMwnbhuJlvgExmgk2totbAxoxmO0ZmFzw7b7LGeGPWweEk9ra1Y50nB94HsSkMwXgwwLy6FAWRMhdFT5LhABSWU/p1OHe7wVBnARZrxKQ1vTeJFb4chR33YmOCSTQniG6wUjV0gXWMUQkrnTR72Uu8AIE1NC2DsB/v2miyJQJfHFfUvl+w2cYUvfAbxCVBUoXQOTA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fbe3fcc1-4866-49ca-ba77-08dc9283f0e3 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.1348 (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 02/18] avcodec/vvcdec: refact, unify vvc_deblock_bs_luma_{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: ZHO4eYVapSSy --- libavcodec/vvc/filter.c | 108 ++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 72 deletions(-) diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index d4c09b69f3..996e58dc3e 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -538,100 +538,64 @@ static int deblock_is_boundary(const VVCLocalContext *lc, const int boundary, return boundary; } -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) +static void vvc_deblock_bs_luma(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 MvField *tab_mvf = fc->tab.mvf; + const int mask = LUMA_GRID - 1; const int log2_min_pu_size = MIN_PU_LOG2; const int min_pu_width = fc->ps.pps->min_pu_width; const int min_cb_log2 = fc->ps.sps->min_cb_log2_size_y; const int min_cb_width = fc->ps.pps->min_cb_width; - const int is_intra = tab_mvf[(y0 >> log2_min_pu_size) * min_pu_width + - (x0 >> log2_min_pu_size)].pred_flag == PF_INTRA; - int boundary_left; - int has_vertical_sb = 0; - + const int pos = vertical ? x0 : y0; const int off_q = (y0 >> min_cb_log2) * min_cb_width + (x0 >> min_cb_log2); - const int cb_x = fc->tab.cb_pos_x[LUMA][off_q]; - const int cb_width = fc->tab.cb_width[LUMA][off_q]; - const int off_x = cb_x - x0; - - if (!is_intra) { - if (fc->tab.msf[off_q] || fc->tab.iaf[off_q]) - has_vertical_sb = cb_width > 8; - } - - // bs for vertical TU boundaries - boundary_left = deblock_is_boundary(lc, x0 > 0 && !(x0 & 3), x0, rs, 1); - - if (boundary_left) { - const RefPicList *rpl_left = - (lc->boundary_flags & BOUNDARY_LEFT_SLICE) ? ff_vvc_get_ref_list(fc, fc->ref, x0 - 1, y0) : lc->sc->rpl; - for (int i = 0; i < height; i += 4) { + const int cb = (vertical ? fc->tab.cb_pos_x : fc->tab.cb_pos_y )[LUMA][off_q]; + const int is_intra = tab_mvf[(y0 >> log2_min_pu_size) * min_pu_width + + (x0 >> log2_min_pu_size)].pred_flag == PF_INTRA; + + if (deblock_is_boundary(lc, pos > 0 && !(pos & mask), pos, rs, vertical)) { + const int size = vertical ? height : width; + const int off = cb - pos; + const int cb_size = (vertical ? fc->tab.cb_width : fc->tab.cb_height)[LUMA][off_q]; + const int has_sb = !is_intra && (fc->tab.msf[off_q] || fc->tab.iaf[off_q]) && cb_size > 8; + const int flag = vertical ? BOUNDARY_LEFT_SLICE : BOUNDARY_UPPER_SLICE; + const RefPicList *rpl_p = + (lc->boundary_flags & flag) ? ff_vvc_get_ref_list(fc, fc->ref, x0 - vertical, y0 - !vertical) : lc->sc->rpl; + uint8_t *tab_bs = vertical ? fc->tab.vertical_bs[LUMA] : fc->tab.horizontal_bs[LUMA]; + uint8_t *tab_max_len_p = vertical ? fc->tab.vertical_p : fc->tab.horizontal_p; + uint8_t *tab_max_len_q = vertical ? fc->tab.vertical_q : fc->tab.horizontal_q; + + for (int i = 0; i < size; i += 4) { + const int x = x0 + i * !vertical; + const int y = y0 + i * vertical; uint8_t max_len_p, max_len_q; - const int bs = deblock_bs(lc, x0 - 1, y0 + i, x0, y0 + i, rpl_left, 0, off_x, has_vertical_sb); + const int bs = deblock_bs(lc, x - vertical, y - !vertical, x, y, rpl_p, LUMA, off, has_sb); - TAB_BS(fc->tab.vertical_bs[LUMA], x0, (y0 + i)) = bs; + TAB_BS(tab_bs, x, y) = bs; - derive_max_filter_length_luma(fc, x0, y0 + i, is_intra, has_vertical_sb, 1, &max_len_p, &max_len_q); - TAB_MAX_LEN(fc->tab.vertical_p, x0, y0 + i) = max_len_p; - TAB_MAX_LEN(fc->tab.vertical_q, x0, y0 + i) = max_len_q; + derive_max_filter_length_luma(fc, x, y, is_intra, has_sb, vertical, &max_len_p, &max_len_q); + TAB_MAX_LEN(tab_max_len_p, x, y) = max_len_p; + TAB_MAX_LEN(tab_max_len_q, x, y) = max_len_q; } } if (!is_intra) { if (fc->tab.msf[off_q] || fc->tab.iaf[off_q]) - vvc_deblock_subblock_bs(lc, cb_x, x0, y0, width, height, 1); + vvc_deblock_subblock_bs(lc, cb, x0, y0, width, height, vertical); } } -static void vvc_deblock_bs_luma_horizontal(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) { - const VVCFrameContext *fc = lc->fc; - const MvField *tab_mvf = fc->tab.mvf; - const int log2_min_pu_size = MIN_PU_LOG2; - const int min_pu_width = fc->ps.pps->min_pu_width; - const int min_cb_log2 = fc->ps.sps->min_cb_log2_size_y; - const int min_cb_width = fc->ps.pps->min_cb_width; - const int is_intra = tab_mvf[(y0 >> log2_min_pu_size) * min_pu_width + - (x0 >> log2_min_pu_size)].pred_flag == PF_INTRA; - int boundary_upper; - int has_horizontal_sb = 0; - - const int off_q = (y0 >> min_cb_log2) * min_cb_width + (x0 >> min_cb_log2); - const int cb_y = fc->tab.cb_pos_y[LUMA][off_q]; - const int cb_height = fc->tab.cb_height[LUMA][off_q]; - const int off_y = y0 - cb_y; - - if (!is_intra) { - if (fc->tab.msf[off_q] || fc->tab.iaf[off_q]) - has_horizontal_sb = cb_height > 8; - } - - boundary_upper = deblock_is_boundary(lc, y0 > 0 && !(y0 & 3), y0, rs, 0); - - if (boundary_upper) { - const RefPicList *rpl_top = - (lc->boundary_flags & BOUNDARY_UPPER_SLICE) ? ff_vvc_get_ref_list(fc, fc->ref, x0, y0 - 1) : lc->sc->rpl; - - for (int i = 0; i < width; i += 4) { - uint8_t max_len_p, max_len_q; - const int bs = deblock_bs(lc, x0 + i, y0 - 1, x0 + i, y0, rpl_top, 0, off_y, has_horizontal_sb); - - TAB_BS(fc->tab.horizontal_bs[LUMA], x0 + i, y0) = bs; - - derive_max_filter_length_luma(fc, x0 + i, y0, is_intra, has_horizontal_sb, 0, &max_len_p, &max_len_q); - TAB_MAX_LEN(fc->tab.horizontal_p, x0 + i, y0) = max_len_p; - TAB_MAX_LEN(fc->tab.horizontal_q, x0 + i, y0) = max_len_q; - } - } + vvc_deblock_bs_luma(lc, x0, y0, width, height, rs, 1); +} - if (!is_intra) { - if (fc->tab.msf[off_q] || fc->tab.iaf[off_q]) - vvc_deblock_subblock_bs(lc, cb_y, x0, y0, width, height, 0); - } +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, 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); } } } From patchwork Sat Jun 22 06:23:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50070 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp940159vqz; Fri, 21 Jun 2024 23:42:48 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCU5Bi/fwQbhhy4cFsSku8KBfTH89Qc9Nr4p6CRQ1iLvOvgoQATI0APELHMJ2GxbSoNPqcP29v/IGURROreu0gQd62gZuBqUdBWWRA== X-Google-Smtp-Source: AGHT+IGHHk7evBmEcrha8tSMpudr6js/PYNCoDyvuqjElV8fYExy8EFQg7t1PwxAK+ud1+haYqqC X-Received: by 2002:a05:6512:b98:b0:52b:bee0:54b0 with SMTP id 2adb3069b0e04-52ccaa91d73mr7554788e87.54.1719038568470; Fri, 21 Jun 2024 23:42:48 -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 2adb3069b0e04-52cd63bc71dsi886397e87.152.2024.06.21.23.42.48; Fri, 21 Jun 2024 23:42:48 -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=M24MxhyQ; 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 9A26168D866; Sat, 22 Jun 2024 09:24:39 +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-psaapc01olkn2027.outbound.protection.outlook.com [40.92.52.27]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BFE8B68D7C4 for ; Sat, 22 Jun 2024 09:24:32 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IKlhtFD17UbpLU6ucFho89mBblVJmhiQ7NBLnLirFdWAYEBsNgASVeqRwPn4B/aTGcGzDKpY0be0IqLfHNDrKYz1JWGerXEgcLKEiJj4xINQ/lDNNaqS8u+0Ez2FRn1Di1Kk1w8+yaLHg4zu61IOnSfGbfwF7kPX7z2UpzphkSa5PSuuFHt36NxJWhj8Mnpse+RhY0SadhnU14Gn0rwp7unHm3V+bV2zpH5aHT1R1xk66o5Q0xhvrYoQmTjEXux3pcXibMe5qYhwodq47K0zjZl6eHdoO/tw1uIA9kMmEibzix7Ro0lH0rZWvGwsAzOWWoIvGUGpjCUAgQMFDoMTyQ== 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=rSM35eoKbtaumohcYGR6BBuVFC++N/XXhzUD4rEmBUU=; b=BdUr4dAUZH2S81RLupNtvkOm5CfcN/RhtFwe+rzEAsc7W+ONvoejz+65l9iW8zS6aeI+l9WPDMWtFnZ+d+LQFPxc+GGLNuQ0vgzFyBLDApTzfHRBxmFZISEBpZupYI9CfzDnIh9ZhmYjzr/2mbOKjLJLQo/9yRd0OS1d0LR7Vrdr34eO0qDZDl7wn4oPad7LpYbLal/t+dp4571PbFAFOXAlkMnjxgUqpDABN6s6T1+oFwu1vw/f92NmxzrPAsuk3owVdTG7j02NwETSNOkUbkvxNylM9NFBFDYDS7jL4td1+ZvwtGLEDDmOmFUiF+hBm9sq3GEXkO3Ihl77hKmXsA== 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=rSM35eoKbtaumohcYGR6BBuVFC++N/XXhzUD4rEmBUU=; b=M24MxhyQ4gqLyXiaBajadz4R6zpcY2Kg1cJYTfqxX8IrCHAL2BQjuKkO+7bJbIQ/dX4o4F+/ae3N63P/1qnzngdurKZoMoFz1GeTU6jWOhXM9A0ol8478aOGWePgpgxF+QZqvlWa7A7iVhoS3Z1Dhwqyw7WDjGs1BzsI7ZSh1kVeXoPkKoB5A7j5rQhJRsDIwOa+iwSSjc+UH7+OQHszteOslBKiKyDNJ6sRTb/I7L1vR1q2d7M8RK7D8Y0giSF0Uqnb61BIazVtG3+MlqZbG6inNTJJFPZoPe+BQSmHbWxaw6hcLNzmUUnwJGqe5Q2kqLSMYB5M9PG+EMq6h2j81A== 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:51 +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: [ufqBIYrrcHs/DwI5VuRkrR4CjDR3OMEz] 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-4-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: 855918cf-4222-47cf-ee1b-08dc9283f1a6 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: +s57kq5p2YWixlMC3tz/tb8KBsUeJrGSCK39oj/OVr8VdyYrMh0FEk6tpPk6R96FNOBTT1vayBR04gzEfGB8obNZm3kovcohTpykpmr+OjvZgfnry5jc2V6mPhfJ9UomjFf/CnOcr6bWNohATeeo9J7/G/7rDdT5aZjidl36rcKgkRgTqzei5FWYLz7C4QsoGvkPIBvWLD8jByyM9kmGriq4wPP/acvfGhJe7HMMqn7H0KQv0kt5MzfnsS+lUfYHzLeVD0vVejE4Vvq8iH1Nm+C1S64D9P2IQXT8DB/gaWkdFPt0RHzHUf3eUOK6AldytQQdKPTl/uMh9OFm9BXhNkPI0EJbEUdbTH6znfXWWBn9T5XVMXnk0HPx49/ho73eWtmV51NG2G2jvaQBVjgXg/86rOzqtY6dsTxRPqNnq12tbdPVOZzIyATZNkgkZjcVz8IIgsvpzCSO0w1qlMs33rxRsxa3xcx8zS9c9vctAWGOn1qB9AM6DV2LH8CqlCVeiw/nRoM+dee1LV5FAyF5L/YiG7RwvhEaAf3/8+ILUenCPcpLdIBm/0JHhwr+kxkiKkh90yXkO76+/JPnoEyn2NsmvxH6m2O8i9TernfwF0Sei36epzckMRniXhLkv5jl X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: a1x7xzi/ZXpU6IkKdjc6doeeYGUNnKQe4qA1c2LVSewaUC2SFMpi9Ed0b7DlHdruhphdTG+CcNY/yanTyiCr84T/LXMHnbgykqP2MuPBbSzgjz10kfYOZ3BJVJqNarrH+d9sbUQw7eOHHR7UPpZba7/BXe8lIzzr6vxhLoMZT3LP94a/4LhLVho8pDHmxGbUf3HKGZdjLd6Neo7oPsjrXBi6x+HNFVuJl1cQh0vrdlkFCzu8q/qfRRps4vABIrJmIRTt2/Hd3btxqW6VpUDeOLSmRISBY3o2GL8bn3r2amlJneWNIJTgsQhfpSHJa0URNRPRJ8vhodEkWh7rnXBIwVVT4J0xUQCF6ZLUN0LZrzxyAfyy6jhi4F/lvB73mfZkdsX4XkhfqgQjIi3daFvceebeNy2QUTSO+cOc/23avAs4fkrHBmAV1T3B5DNytPsDzIRMSUCRrR30r1IJNWHj/8uWQDcE1DmzcDh+V9go/3AFFzqeJ7/aNIgjIb3kL34mDmWfDM469skja0LciBJoom+wiRr2wm0tgoHiLzov5kosGFpsjLcdTqouC++Wz5AFYDD3E3CIbLTbi8gxmkfZnONXubjaDnh43s1ZCsrvgkh2QWTChNF6ZS7L8BStZyPvp17q/QktIbwszkJe5ztEokzmMEOvcv97HU4Fy38KJGVwSbGT3Q/ARpKiswG8HEcpk4HlYf1+3D9+xCRm3B27Ih0OSLSd7+uozjaWpMdos8tMkbW2gSS3cE6pyHrx7V7nBQUPLHuhfIbbi9vWbL4Y+XjY7zt0waA6hR4vm1WfrvqBbiorLjJmkPjklokkOQsKWpqZ2FszjQvbxFGQhmkrwor4EyhNiPENpvTr59jLh8yY1k6ongtbYjJYpWHXqNN0fKebAq/rGrZ5DN1qgTf3TKwTFcIS6A6nZAZqwg0c3UUVT1WOMp3cylZMW/EW9Q8Dl0FKRCahhMmEvjGz9vBGJPBYwSzehV2RdtGG0eMQfhpvqgrBAbUp1C1WXmHofBiuQUF+OTUUBGkXXbf/VCM9unFkQuANu5AovP1QeyeYu9A+9Vr2y9aKkRZohnA6tz4tU/i6VwA6SU01G+v5RuXUJZ6p83Qn0NxAGnmR6W+tNeYih5T2Ecb3TuU4hwDPVl4u42JuYpZWYf+Kq6BM30jalezF59tvXOdMMZUmjk0wgq1AAhpU/5src/KMGpR99JTHpqocF4JLSZwHjbAwke87KKgivWXq3Y0pMEjj8Ykyg2q7zZHqPjomwos7F220pbbuW3dOGvXMS9Fotu60rW/DFA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 855918cf-4222-47cf-ee1b-08dc9283f1a6 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:17.4136 (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 04/18] avcodec/vvcdec: refact, unify {horizontal, vertical}_bs, {horizontal, vertical}_p, {horizontal, vertical}_q 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: 0rXdP4vJYKBh --- libavcodec/vvc/dec.c | 14 +++++++------- libavcodec/vvc/dec.h | 9 +++------ libavcodec/vvc/filter.c | 32 +++++++++++--------------------- 3 files changed, 21 insertions(+), 34 deletions(-) diff --git a/libavcodec/vvc/dec.c b/libavcodec/vvc/dec.c index f5603306f3..356ed58e37 100644 --- a/libavcodec/vvc/dec.c +++ b/libavcodec/vvc/dec.c @@ -191,14 +191,14 @@ static void bs_tl_init(TabList *l, VVCFrameContext *fc) tl_init(l, 1, changed); - for (int i = 0; i < VVC_MAX_SAMPLE_ARRAYS; i++) { - TL_ADD(horizontal_bs[i], bs_count); - TL_ADD(vertical_bs[i], bs_count); + for (int i = 0; i < 2; i++) { + for (int j = 0; j < VVC_MAX_SAMPLE_ARRAYS; j++) { + TL_ADD(bs[i][j], bs_count); + TL_ADD(bs[i][j], bs_count); + } + TL_ADD(max_len_p[i], bs_count); + TL_ADD(max_len_q[i], bs_count); } - TL_ADD(horizontal_q, bs_count); - TL_ADD(horizontal_p, bs_count); - TL_ADD(vertical_p, bs_count); - TL_ADD(vertical_q, bs_count); } static void pixel_buffer_nz_tl_init(TabList *l, VVCFrameContext *fc) diff --git a/libavcodec/vvc/dec.h b/libavcodec/vvc/dec.h index 1e0b76f283..a8492f1398 100644 --- a/libavcodec/vvc/dec.h +++ b/libavcodec/vvc/dec.h @@ -178,12 +178,9 @@ typedef struct VVCFrameContext { uint8_t *tb_height[2]; uint8_t *pcmf[2]; - uint8_t *horizontal_bs[VVC_MAX_SAMPLE_ARRAYS]; - uint8_t *vertical_bs[VVC_MAX_SAMPLE_ARRAYS]; - uint8_t *horizontal_p; ///< horizontal maxFilterLengthPs for luma - uint8_t *horizontal_q; ///< horizontal maxFilterLengthQs for luma - uint8_t *vertical_p; ///< vertical maxFilterLengthPs for luma - uint8_t *vertical_q; ///< vertical maxFilterLengthQs for luma + uint8_t *bs[2][VVC_MAX_SAMPLE_ARRAYS]; ///< horizontal, vertical boundary filtering strength + uint8_t *max_len_p[2]; ///< horizontal, vertical maxFilterLengthPs for luma + uint8_t *max_len_q[2]; ///< horizontal, vertical maxFilterLengthQs for luma uint8_t *sao_pixel_buffer_h[VVC_MAX_SAMPLE_ARRAYS]; uint8_t *sao_pixel_buffer_v[VVC_MAX_SAMPLE_ARRAYS]; diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index 06e1717b13..7ae36b2344 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -414,9 +414,6 @@ static void vvc_deblock_subblock_bs(const VVCLocalContext *lc, const RefPicList *rpl = lc->sc->rpl; int stridea = fc->ps.pps->min_pu_width; int strideb = 1; - uint8_t *tab_bs = vertical ? fc->tab.vertical_bs[LUMA] : fc->tab.horizontal_bs[LUMA]; - uint8_t *tab_max_len_p = vertical ? fc->tab.vertical_p : fc->tab.horizontal_p; - uint8_t *tab_max_len_q = vertical ? fc->tab.vertical_q : fc->tab.horizontal_q; const int log2_min_pu_size = MIN_PU_LOG2; if (!vertical) { @@ -442,7 +439,7 @@ static void vvc_deblock_subblock_bs(const VVCLocalContext *lc, if (!vertical) FFSWAP(int, x, y); - TAB_BS(tab_bs, x, y) = bs; + TAB_BS(fc->tab.bs[vertical][LUMA], x, y) = bs; if (i == 4 || i == width - 4) max_len_p = max_len_q = 1; @@ -451,8 +448,8 @@ static void vvc_deblock_subblock_bs(const VVCLocalContext *lc, else max_len_p = max_len_q = 3; - TAB_MAX_LEN(tab_max_len_p, x, y) = max_len_p; - TAB_MAX_LEN(tab_max_len_q, x, y) = max_len_q; + TAB_MAX_LEN(fc->tab.max_len_p[vertical], x, y) = max_len_p; + TAB_MAX_LEN(fc->tab.max_len_q[vertical], x, y) = max_len_q; } } } @@ -562,9 +559,6 @@ static void vvc_deblock_bs_luma(const VVCLocalContext *lc, const int flag = vertical ? BOUNDARY_LEFT_SLICE : BOUNDARY_UPPER_SLICE; const RefPicList *rpl_p = (lc->boundary_flags & flag) ? ff_vvc_get_ref_list(fc, fc->ref, x0 - vertical, y0 - !vertical) : lc->sc->rpl; - uint8_t *tab_bs = vertical ? fc->tab.vertical_bs[LUMA] : fc->tab.horizontal_bs[LUMA]; - uint8_t *tab_max_len_p = vertical ? fc->tab.vertical_p : fc->tab.horizontal_p; - uint8_t *tab_max_len_q = vertical ? fc->tab.vertical_q : fc->tab.horizontal_q; for (int i = 0; i < size; i += 4) { const int x = x0 + i * !vertical; @@ -572,11 +566,11 @@ static void vvc_deblock_bs_luma(const VVCLocalContext *lc, uint8_t max_len_p, max_len_q; const int bs = deblock_bs(lc, x - vertical, y - !vertical, x, y, rpl_p, LUMA, off, has_sb); - TAB_BS(tab_bs, x, y) = bs; + TAB_BS(fc->tab.bs[vertical][LUMA], x, y) = bs; derive_max_filter_length_luma(fc, x, y, is_intra, has_sb, vertical, &max_len_p, &max_len_q); - TAB_MAX_LEN(tab_max_len_p, x, y) = max_len_p; - TAB_MAX_LEN(tab_max_len_q, x, y) = max_len_q; + TAB_MAX_LEN(fc->tab.max_len_p[vertical], x, y) = max_len_p; + TAB_MAX_LEN(fc->tab.max_len_q[vertical], x, y) = max_len_q; } } @@ -598,14 +592,12 @@ static void vvc_deblock_bs_chroma(const VVCLocalContext *lc, const int size = vertical ? height : width; 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]; - 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(tab_bs, x, y) = bs; + TAB_BS(fc->tab.bs[vertical][c_idx], x, y) = bs; } } } @@ -645,10 +637,8 @@ static void vvc_deblock_bs(const VVCLocalContext *lc, const int x0, const int y0 static void max_filter_length_luma(const VVCFrameContext *fc, const int qx, const int qy, const int vertical, uint8_t *max_len_p, uint8_t *max_len_q) { - const uint8_t *tab_len_p = vertical ? fc->tab.vertical_p : fc->tab.horizontal_p; - const uint8_t *tab_len_q = vertical ? fc->tab.vertical_q : fc->tab.horizontal_q; - *max_len_p = TAB_MAX_LEN(tab_len_p, qx, qy); - *max_len_q = TAB_MAX_LEN(tab_len_q, qx, qy); + *max_len_p = TAB_MAX_LEN(fc->tab.max_len_p[vertical], qx, qy); + *max_len_q = TAB_MAX_LEN(fc->tab.max_len_q[vertical], qx, qy); } //part of 8.8.3.3 Derivation process of transform block boundary @@ -758,7 +748,7 @@ void ff_vvc_deblock_vertical(const VVCLocalContext *lc, const int x0, const int for (int i = 0; i < DEBLOCK_STEP >> (2 - vs); i++) { const int dy = i << 2; - bs[i] = (y + dy < y_end) ? TAB_BS(fc->tab.vertical_bs[c_idx], x, y + dy) : 0; + bs[i] = (y + dy < y_end) ? TAB_BS(fc->tab.bs[1][c_idx], x, y + dy) : 0; if (bs[i]) { src = &fc->frame->data[c_idx][((y + dy) >> vs) * fc->frame->linesize[c_idx] + ((x >> hs) << fc->ps.sps->pixel_shift)]; qp = get_qp(fc, src, x, y + dy, c_idx, 1); @@ -831,7 +821,7 @@ void ff_vvc_deblock_horizontal(const VVCLocalContext *lc, const int x0, const in for (int i = 0; i < DEBLOCK_STEP >> (2 - hs); i++) { const int dx = i << 2; - bs[i] = (x + dx < x_end) ? TAB_BS(fc->tab.horizontal_bs[c_idx], x + dx, y) : 0; + bs[i] = (x + dx < x_end) ? TAB_BS(fc->tab.bs[0][c_idx], x + dx, y) : 0; if (bs[i]) { src = &fc->frame->data[c_idx][(y >> vs) * fc->frame->linesize[c_idx] + (((x + dx)>> hs) << fc->ps.sps->pixel_shift)]; qp = get_qp(fc, src, x + dx, y, c_idx, 0); From patchwork Sat Jun 22 06:23:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50072 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp940183vqz; Fri, 21 Jun 2024 23:42:53 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUsYMRw/4I2d7tDpMXvDCJc155n6iaTOjqrePV3W3RRrZV33/vixpuUGmAZDmCBqPAX23FpsAw9ExC603ermLIltI60NyapDajG4g== X-Google-Smtp-Source: AGHT+IHgrwMJi9Sq2jWmbIQp30IkNTQy/bQ9U1B4DH3Vb2YeRZtfGtlet6AgNQ3qAaR5X0Ag/wZR X-Received: by 2002:a2e:99cb:0:b0:2ec:4408:56ac with SMTP id 38308e7fff4ca-2ec56c96be3mr1128261fa.17.1719038573439; Fri, 21 Jun 2024 23:42:53 -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 38308e7fff4ca-2ec57042abasi1179161fa.552.2024.06.21.23.42.53; Fri, 21 Jun 2024 23:42:53 -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=OpErVKvU; 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 AA20268D87B; Sat, 22 Jun 2024 09:24:40 +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 55C3C68D7E5 for ; Sat, 22 Jun 2024 09:24:33 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g5vlaFrA6Z4G4WyfBAROXgjlsx7PSZPzsgQKfjjqkbLqYf/UuGc1FUs6nhs7BIhThwMGctAIvqe3L1iqJl6UdB6R+8FkOANaEOfQGI7Y7dkStq/HFoLv11oXaeAUM5EZvsrlsQb0gqcpHKKIkIhBhWIolN91gaa7zJEmFRJfYhmhUiDQ/7Ymp/Zb6Bez5H/CuE8vflMa+0hcRfiXMlZ/g3LSXvw/cUw/ibmNlnehpKohoTNMEWXreDIrdwbZTLE03wk+plmSru/cEJBjSbshOgE6s2RyfqtYERInzSXgnuoaJQcfGeopl90IoqbgCgQ+/MmviG5HrYC1wwXtnW3BNw== 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=HT4MZVu6DNrSx9aLY0OItZXst31wBZJTik790X6q8nc=; b=BNIpr9HLDv2YHfIdgcT7Gwrf6Wy43wrAGjxePNUlYtEYv4tHhZbyv/J8M98F+GBJ51Qw0YPnwhnPpGmgyy5WMJnYiOVbpr7P5DKpCXeQcgr4s4DkcAB8Yrd96jFOeyKw5E6f6WlS6V0qJVplsEN+U6mluyZHZHzWMfGvaqYn+PzlMbQvNyCnqyU+JZHF9Z3mZvWmQAdmme1r7iEZAeGygSCy8vuEgbP1S/3oyLb1PPRFwcWp/0/iW+7SYB/KHfA9MnX9HWU8wY/Meo1FSwc76C67rgvXmx6jStDjKWxZcE3U/CZ3az4aCiOh2897Wuf7r+7Qd5awVOK3rAV72uJLjA== 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=HT4MZVu6DNrSx9aLY0OItZXst31wBZJTik790X6q8nc=; b=OpErVKvU83IRqPQj1a7JWpgbx/t29fcLvDzsCUh5aIi5vMrTe1TOPoLLsok/anVTwT+Vq7fhV22kbQ3AmbPg/71N08tuQ4q7KoACPcldI9qdKOjCrbHg566QxAF0S82ckjcbVAgKB96jipPHjnkwyKtB2OCR6KDa5fOLbLteglQq0NNqo+ODdoss7L8OcCy/GRh8zWug6RenDvy0Ca/hvyUjLWSPrG16LVRMF6f0rWWM37OPH3oVl3GGTfHKKK+niK5Y9mFSxy6wwqB3qrtcWf04YY15fOXxnuUIDGLGXbVsTOSctfZTIQTBw+0+5Y/p9Fc2cIa5YiE8Gnytk2pNSA== 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:52 +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: [TTY/nGNFnvQhWkzZRnlmPKOXBO3J3MXM] 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-5-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: a4816221-8791-4ab8-c68e-08dc9283f209 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: KOG0nyeFV1hyOpYZdgqzYMKvHhJn5wglvHKUboOa7zmBC5jt5NBHEo8VH+SVAH4kaAHPNH+m8Yi13rBcJPqdH98mZTWrGrvdgBjTCoDRlWmuYOLgF9V/4LX3FSm6ZeDcYFebZp9O3W5CqP02Fx4lsxKu7HL4FkHDZ5PO45JKvR4lNnHZ+tLQsVLzOHrxphGUhBSJ4WKOE2Ma6jWXdXJZCtyWLbSe1PJboa+Cl/CVmfDNYhOMtAG4r1MuiaSmLgT8f2H/Y6IhKaO4GL/PGtUryHMqf5rlsJgZ51QFSzCMTGHwV4wbLjm7Jeo2qBkBZAGsZ7jQuYwh/Agfs5SFxJwCK6G6kWCvFO8Q4VYA1tS2V6kWvmvfKn3NlzU/z/k8pBq/+sZ4ZJfoemN0L7h5v7GryeSs0AzIS6HC+21w6URBFHQp5QOogWlQ4ynoFDUb43A17N0p2zMD8InJflc3yjpvijRKQb8WxXscofd5rt8zTQ0+Q30R4WYUUmJXWHPm77jOfbOr9fOeSs1CmjmgWj7BXGGgrhpJ1XiTZRtrg32K1N5TMi/sJ1OTdb06dr6Z7iuiTwKWtoUcdsjAar0WAdymkSaR4s85DmwHtJ3UdBY9K0qNtBySojWlcbHDNe4HDfhJ X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: GZRy1E3mSSi9njAFD5k4P00qBqcyPdJq+3ddfnUd+ktQjjLWyLhx6fi2LdJ64KicrZ+VlJWQVAxOrlDBdZlqPA8lsi6RWs+N5U3I3pRbnYMbXr9A9WMar/DTNkNQvS6axhpmx6Na8yjS5tATzactIfZrH+SoQGeNOAYvThFtdvgA1BmsXUzymKjjX/1PfL1D/oPyn2+YH1IwSoncMPWX3S45+LhhDiBuAP7V0GYewajaX0h4SFaMr51EAmLnMdN7TmMurQfCuhiPKZRUNHuUgVQJeRgPHvm4DTgJubVwjcFx5mImQGTpSlitvob1F4EgH7VVpxoueNLtcUHzpPvYDk0GBiZxbnetYx0aPe9ieO/n0jvFRaTBI9JRkx4zvzp3ACcL5Ia8tdWdURlcu+m6tq25v23eDRP7xiipSxf+7zfu6txo2uxoFU9dUuiVQ575Jv7IWXLrkRhtHclcE9DSPOdGRSXFf0KoaTcAS2D/jfcqCwXonaBAvFsrS0c7q3xOMspwW8cTCTOfYv3wP3nYiY5LicVXTRf2ohZleZGUrfgjQn3nIAqTpWRU106z+XKGG1Gl7MGYWGkZeZ9RdaRRbDwdbWOTncOYc66VGxdfNLob9rpuw7iJICMCgL3RBFEvsZ/+0vQtF/uRa4x5KrXi3RqTzTQrngudvRXHa4KMBLwvKRS8M7Pssf1+QUzUFjV2W/nYwsegLTCXA8UP1ee6Gmi7BDU7DOVSOwZkhZ5G8Nksc6MTcLSBuJnpQmWr36M56u/u6Hrd5sEnsXbkCMe1b+VaH78LvFeIdIDHCXAB1qv/BU4Yk2obW3W2JQH0FW+QGAUnMI9cyhby21v0BfJUOWZ1xp5iRRawPmDNyIq7ZeCVwH+U2hkPLCe2nUbwNN8iQYng7mMQHmziN0/mbryBEqQ2DSerrECTmb2oJA9TIBm+YPZDH8VcBHeycnftcMKH1tQRDymsbWWf4jG6ASw6hmp2XZQgmSYrI5wJvIaDS7CUSW4eyYZP/lV18K5kCwTp9cwTxTAR+p3g7HvOMZAcZLUXNCl4uTC1qCNjxvXfl1xfuYJUYeNOg/OXfjl671uJJ/MAyQEon1hZpUTbWBstyCAPP6WJ/f9Vs31yqM1oGHJzrj9dH44Sc/B4VylYfTvrsbEP/f49JlkSRsCDuSRCLr85vLDDQaEtdOeZ2UCP/0DPGIsYH0V9gsgJ4l/i7JUAsQPKGd09NaRaeI/8EtOOkVzwVFfWBoVfmX2KxQTlT0I5Xa17oQ9hEdiz/8sazBDf54gfVVeOn6jLEcpPSptlcg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a4816221-8791-4ab8-c68e-08dc9283f209 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:18.1052 (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 05/18] avcodec/vvcdec: misc, use POS to simplify filter code 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: mAL8FN2Y1BXW --- libavcodec/vvc/filter.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index 7ae36b2344..82a58a7ea8 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -34,6 +34,10 @@ #define DEFAULT_INTRA_TC_OFFSET 2 +#define POS(c_idx, x, y) \ + &fc->frame->data[c_idx][((y) >> fc->ps.sps->vshift[c_idx]) * fc->frame->linesize[c_idx] + \ + (((x) >> fc->ps.sps->hshift[c_idx]) << fc->ps.sps->pixel_shift)] + //Table 43 Derivation of threshold variables beta' and tc' from input Q static const uint16_t tctable[66] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -135,7 +139,7 @@ static void sao_copy_ctb_to_hv(VVCLocalContext *lc, const int rx, const int ry, const int ctb_size_v = ctb_size_y >> fc->ps.sps->vshift[c_idx]; const int width = FFMIN(ctb_size_h, (fc->ps.pps->width >> fc->ps.sps->hshift[c_idx]) - x); const int height = FFMIN(ctb_size_v, (fc->ps.pps->height >> fc->ps.sps->vshift[c_idx]) - y); - const uint8_t *src = &fc->frame->data[c_idx][y * src_stride + (x << fc->ps.sps->pixel_shift)]; + const uint8_t *src = POS(c_idx, x0, y0); copy_ctb_to_hv(fc, src, src_stride, x, y, width, height, c_idx, rx, ry, top); } } @@ -225,7 +229,7 @@ void ff_vvc_sao_filter(VVCLocalContext *lc, int x, int y) int width = FFMIN(ctb_size_h, (fc->ps.pps->width >> fc->ps.sps->hshift[c_idx]) - x0); int height = FFMIN(ctb_size_v, (fc->ps.pps->height >> fc->ps.sps->vshift[c_idx]) - y0); int tab = sao_tab[(FFALIGN(width, 8) >> 3) - 1]; - uint8_t *src = &fc->frame->data[c_idx][y0 * src_stride + (x0 << fc->ps.sps->pixel_shift)]; + uint8_t *src = POS(c_idx, x, y); ptrdiff_t dst_stride; uint8_t *dst; @@ -750,7 +754,7 @@ void ff_vvc_deblock_vertical(const VVCLocalContext *lc, const int x0, const int const int dy = i << 2; bs[i] = (y + dy < y_end) ? TAB_BS(fc->tab.bs[1][c_idx], x, y + dy) : 0; if (bs[i]) { - src = &fc->frame->data[c_idx][((y + dy) >> vs) * fc->frame->linesize[c_idx] + ((x >> hs) << fc->ps.sps->pixel_shift)]; + src = POS(c_idx, x, y + dy); qp = get_qp(fc, src, x, y + dy, c_idx, 1); beta[i] = betatable[av_clip(qp + beta_offset, 0, MAX_QP)]; @@ -762,7 +766,7 @@ void ff_vvc_deblock_vertical(const VVCLocalContext *lc, const int x0, const int } if (!all_zero_bs) { - src = &fc->frame->data[c_idx][(y >> vs) * fc->frame->linesize[c_idx] + ((x >> hs) << fc->ps.sps->pixel_shift)]; + src = POS(c_idx, x, y); if (!c_idx) { fc->vvcdsp.lf.filter_luma[1](src, fc->frame->linesize[c_idx], beta, tc, no_p, no_q, max_len_p, max_len_q, 0); @@ -823,7 +827,7 @@ void ff_vvc_deblock_horizontal(const VVCLocalContext *lc, const int x0, const in bs[i] = (x + dx < x_end) ? TAB_BS(fc->tab.bs[0][c_idx], x + dx, y) : 0; if (bs[i]) { - src = &fc->frame->data[c_idx][(y >> vs) * fc->frame->linesize[c_idx] + (((x + dx)>> hs) << fc->ps.sps->pixel_shift)]; + src = POS(c_idx, x + dx, y); qp = get_qp(fc, src, x + dx, y, c_idx, 0); beta[i] = betatable[av_clip(qp + beta_offset, 0, MAX_QP)]; @@ -834,7 +838,7 @@ void ff_vvc_deblock_horizontal(const VVCLocalContext *lc, const int x0, const in tc[i] = bs[i] ? TC_CALC(qp, bs[i]) : 0; } if (!all_zero_bs) { - src = &fc->frame->data[c_idx][(y >> vs) * fc->frame->linesize[c_idx] + ((x >> hs) << fc->ps.sps->pixel_shift)]; + src = POS(c_idx, x, y); if (!c_idx) { fc->vvcdsp.lf.filter_luma[0](src, fc->frame->linesize[c_idx], beta, tc, no_p, no_q, max_len_p, max_len_q, horizontal_ctu_edge); @@ -1079,7 +1083,6 @@ void ff_vvc_alf_copy_ctu_to_hv(VVCLocalContext* lc, const int x0, const int y0) const int rx = x0 >> fc->ps.sps->ctb_log2_size_y; const int ry = y0 >> fc->ps.sps->ctb_log2_size_y; const int ctb_size_y = fc->ps.sps->ctb_size_y; - const int ps = fc->ps.sps->pixel_shift; const int c_end = fc->ps.sps->r->sps_chroma_format_idc ? VVC_MAX_SAMPLE_ARRAYS : 1; for (int c_idx = 0; c_idx < c_end; c_idx++) { @@ -1091,7 +1094,7 @@ void ff_vvc_alf_copy_ctu_to_hv(VVCLocalContext* lc, const int x0, const int y0) const int height = FFMIN(fc->ps.pps->height - y0, ctb_size_y) >> vs; const int src_stride = fc->frame->linesize[c_idx]; - uint8_t* src = &fc->frame->data[c_idx][y * src_stride + (x << ps)]; + uint8_t *src = POS(c_idx, x0, y0); alf_copy_ctb_to_hv(fc, src, src_stride, x, y, width, height, rx, ry, c_idx); } @@ -1146,7 +1149,7 @@ void ff_vvc_alf_filter(VVCLocalContext *lc, const int x0, const int y0) const int width = FFMIN(pic_width - x, ctb_size_h); const int height = FFMIN(pic_height - y, ctb_size_v); const int src_stride = fc->frame->linesize[c_idx]; - uint8_t *src = &fc->frame->data[c_idx][y * src_stride + (x << ps)]; + uint8_t *src = POS(c_idx, x0, y0); uint8_t *padded; if (alf->ctb_flag[c_idx] || (!c_idx && (alf->ctb_cc_idc[0] || alf->ctb_cc_idc[1]))) { @@ -1181,7 +1184,7 @@ void ff_vvc_lmcs_filter(const VVCLocalContext *lc, const int x, const int y) const int ctb_size = fc->ps.sps->ctb_size_y; const int width = FFMIN(fc->ps.pps->width - x, ctb_size); const int height = FFMIN(fc->ps.pps->height - y, ctb_size); - uint8_t *data = fc->frame->data[LUMA] + y * fc->frame->linesize[LUMA] + (x << fc->ps.sps->pixel_shift); + uint8_t *data = POS(LUMA, x, y); if (sc->sh.r->sh_lmcs_used_flag) fc->vvcdsp.lmcs.filter(data, fc->frame->linesize[LUMA], width, height, &fc->ps.lmcs.inv_lut); } From patchwork Sat Jun 22 06:23:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50059 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp935717vqz; Fri, 21 Jun 2024 23:25:43 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXN+L7X5iEtktlvD42G372vOk4yeSudS2KgUMBOwy8qvecdsQielssa6lUHlcoqLx2Q0OAJRA4s3VtuNEqSR5TneABi8R6N4NGR4g== X-Google-Smtp-Source: AGHT+IGE2N+FhAJFFS/gmig3N/PfgQLJGgJ4MxuNhKz2vDmAERIxyizEVTQEfgIiMwMeXAtNSWp1 X-Received: by 2002:a05:651c:20f:b0:2eb:f6bd:e4ec with SMTP id 38308e7fff4ca-2ec3cea1b44mr76558501fa.24.1719037543588; Fri, 21 Jun 2024 23:25:43 -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 38308e7fff4ca-2ec550b16fesi2402391fa.171.2024.06.21.23.25.43; Fri, 21 Jun 2024 23:25: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; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=FGz1u6bG; 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 45B0468D7E5; Sat, 22 Jun 2024 09:24:43 +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-psaapc01olkn2076.outbound.protection.outlook.com [40.92.52.76]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9C7FC68D833 for ; Sat, 22 Jun 2024 09:24:33 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FcQN4/fM6AJzwYhpb7IhTnUOe3UCfp0j8Pd9S0XpGnuG50QocjV6phh/C9tICYohJUszW23Seo0Fy9Hi/dEUIfX4YeXRWj3TeptntLNWc5ug63ECKpLoUXRB+kv621ebZdfv1kC8DWCCeJeNyAYLo8K9p2heMgWZ4kBpdRDkLDItKOmGoJMF7rJuDef+DuNo5m3ZlqLYgno9JN9BOMaTg3TbguxpNhj9NVOsGwIXDiNL2ZF7EIkGx/h9QyjIGIqy4KErJxF7zA2MLAbFD7JFvA/BDVEXBjP3+sHTOFQcG9co0EiiBiXODnmiBwbKlDL6Qxm8YvtCNWyiGRa6BwBFnQ== 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=iX6PGz/ImV9IWoJpfbwQDUg9s9eviEFCUqTA4T2yIaA=; b=oHeyyDsOFy5DcmjYzsWEU8AyuSzxQ0dK+WtuZSdTxxP8A5hYKWLg+8xarhCMoqjH3PaOIUnfAmqu7VXTO3BD8d611mFeK6ofdDrFELzx3M6rK0GUc5HE3utUp//P/5Q6M52rQpDnup1rloz/O88epmhXycgcjovuuPWevox9Kuoi4HcknImA/seSqtzRh1ARkW+WtJKBicpaXMgEJHnhh+dnZ83yaksxhmwE1S2RrlHNgb2GwFDpF3VYhH/Nq9El26ctJF9YO0QN+6s6Q6HFB0I4YF+2NDKe9m1mFqby6zU+XForRGTygrh7UQwfTkk52JPmpgnk1FmhsvBGXWo5Pw== 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=iX6PGz/ImV9IWoJpfbwQDUg9s9eviEFCUqTA4T2yIaA=; b=FGz1u6bGNitZPAtT11w+uhrsOdtfhBcN56CyDAoucf3vLMNVD5IMEmktdJO0D0T0llQQTwNQhM1X+g1XmdFXalLz6x1xQlA6wSImrLEixSACtMB+BAVopAf6CmSNatUu7wqa6OrOSdEr8cIKECK0Quoxj7kmOC2xtH+kYA143Ol7ZO3NHb5S6AYbruQ7cTvN4LEvg+4nHwjdpEgOkyIMLtldcFQ/MpCEstLnW1YOWINvLUNXq/PH/MjPxhj16zXXvHGDwvy9oZ5KJzNe98d3va7MGx21Sh5Ato4gdXahLnCZbYNibvbs0GGQZemtGAX7wMiDopuDJfEpkaxOllcXPw== 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:19 +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:19 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:23:53 +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: [mDuTszCjmUuvcKyIR4Y0za/CthxeRuP2] 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-6-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: c5de9fdb-91f7-4b5c-34af-08dc9283f273 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: bVuEf/N6/WckKDhZTt3tixiszv95ZnftBc8aJYJyrWas6zRY2OPe1nNeXJY34fC5zuwYixT5nIay4uf2pQYosCyFwcUjzorrqzJ9kmchQlgkqEnqZHZ4CI1y79s1jqoO6pJMCSratrvRiWP39LXRCkpfX1cIDWb6cnJ25Z+HeyXHbOeiNLS8k5mntXsYFhHh8YL8tI/DoV7i+lQx+n6MU0igcdH+vEn/4zOhgLWM1COc1qG0ceHQ5EOKxU3e02k9x495I72v7cIn94waM5iupyuhD9iBf5ITXMPjszVQqV4UpV978h0HuZKYcJfV4YTsB2nOaiTkh1tvwaqmDVg2t3/x2eDG6hjGuRhyspVn3GfECS2+MdLv8RG+mVyLVTNpHlwY7Uj6q0fwzUUSGiAloJmRuIJlKCXFNKCPfjj3GQ6l3oKhhTCe43/o0uDMaB22RPdKRagbnGvR5ghsn8lXbsuLcaTbEUaUcNZf0qU56Xcs6orLvUEakirVA9yJF/N4K7Ar1nAPp5GFHxGsWITgAA0b1IH7oh0nWgpmXVCDQQrB+gAqp0Bgg6Jr/6SqQGB3EEQMLq/DPV6C5Q3FkLkU2OnTtHOXATowg0TE8gTb5yPBpFg+LD+LyEQzqaiUFkHF X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: o5603LE36bemkEjrFeSojGhSfC85Onlv9cNYRlbXzKWBaVVLkWs5OIU3qAUYzc/d5tHb4ovy8IS/t83EvbUgoU4KhMFa9vbfhu+okWM41rhxtlHDBZo/mAqGx1zVGWkd5NTbLuQBii2TUyziKv9LHYkAFgUncmc9WliUJRufD3+Z+2Svpceqemx4NFab02BTrjkOelcZ6rJR3lLMa996fIgQKyqcMqPyDGfDhYcZmY6pC8MWclRcxIJiD43AhNvjafSTuxdPFKbzVJWcJYiXForlJuWrpsPA1LbIFTuU3ieztlLZ3S0MNpceiiJYEXsUj6WbydQeJoviP5YpBsJvFucmDI1WSgRw4Dqa/xn3SzfvBAfYeEsQqEs3ACVPAM1OzDQvXLeUj42+KkHJ+H4xUKEAQC4BNJa4uOw/SghDFNDHGOaN3rHE1CDWYg7KOaBHzYg1hpL1NT9FnbrZtQ3PCYZuZW8P6UGNgs7YI+ffM/rHd+18oMX+WuXHA0bMPqWMFLgI3X1fOoKPev7pKYHuK7nB6n3H2flMucdAQ1U0qBcHn1OMHogfARdGGVzi4nJUeq1NAlubf//dW2/ZeVEdqZFQk5Jax3i2dd/ULACago1WsBTfImxpADT89MNLArZgp9KwFBjloh3IC1tlYX10A2gxBHV4CNOHlsTnMRL4yD9nUNrp/3FXy+qLq+29gm15ScYtfTITgBQ1ArmDzoVltdzjDMKfbDmVggYqXugSMkcFeqvmVqaKjF4nlSfvQU3y8ZRrBxLdM0YRkr+2v39OIyOu8ktWbO8CyB7T2DAqyiGbmlFiT/vLQgj6JVovwIteWHttJIiujsj9dNB4yrmFX6j46ZJ35775rXhuT6xrLdCTHtj2fuy++jOpB3pSVOr0D0Nrj67+F9Zsl+UdarzAglDEgqvqcuNZB9mkzFgQRYXhb/gDUEoBi8QPlQT5AUO8J4IPTzt40G/UNwETM1B31uUoBuMmaySn88Ry14hroUCc5Y8S7lb0/ZwMoVBnLhcIGGSK2Ri0Q3NUyTE4WZ2dmx/a2rAJD9YQSj9BGF2rQN2hlDbNFRTc7egjrYuoWrbtHbQQ5NZ6gmXip4aJqWcYqOqt5gDF88JllneppPxDAzeZCLgyqTJT8NtdfLWQrAtRXe1jkiduMHQCtQqrkxMS4LXOKLUUoKljBq13xb7u9FCUn1pmd+H3B0RN3v9Jnqs9BbTuiNWcMqUkoqhrEUaRWFwildJrY4EzZoG2ywloxUWiwTFdIJF/3h7bX4MujT6W+gruDGGLbmYAM32oGelkkQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c5de9fdb-91f7-4b5c-34af-08dc9283f273 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:18.7586 (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 06/18] avcodec/vvcdec: refact, unify ff_vvc_deblock_{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: BPnhsDqZxppP --- libavcodec/vvc/filter.c | 153 ++++++++++++---------------------------- 1 file changed, 44 insertions(+), 109 deletions(-) diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index 82a58a7ea8..89b794195e 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -712,144 +712,79 @@ static int get_qp(const VVCFrameContext *fc, const uint8_t *src, const int x, co return get_qp_c(fc, x, y, c_idx, vertical); } -void ff_vvc_deblock_vertical(const VVCLocalContext *lc, const int x0, const int y0, const int rs) +static void vvc_deblock(const VVCLocalContext *lc, int x0, int y0, const int rs, const int vertical) { - VVCFrameContext *fc = lc->fc; - const VVCSPS *sps = fc->ps.sps; - const int c_end = sps->r->sps_chroma_format_idc ? VVC_MAX_SAMPLE_ARRAYS : 1; - uint8_t *src; - int x, y, qp; + VVCFrameContext *fc = lc->fc; + const VVCSPS *sps = fc->ps.sps; + const int c_end = sps->r->sps_chroma_format_idc ? VVC_MAX_SAMPLE_ARRAYS : 1; + const int ctb_size = fc->ps.sps->ctb_size_y; + const DBParams *params = fc->tab.deblock + rs; + int x_end = FFMIN(x0 + ctb_size, fc->ps.pps->width); + int y_end = FFMIN(y0 + ctb_size, fc->ps.pps->height); //not use this yet, may needed by plt. - const uint8_t no_p[4] = { 0 }; - const uint8_t no_q[4] = { 0 } ; - - const int ctb_log2_size_y = fc->ps.sps->ctb_log2_size_y; - int x_end, y_end; - const int ctb_size = 1 << ctb_log2_size_y; - const DBParams *params = fc->tab.deblock + rs; + const uint8_t no_p[4] = { 0 }; + const uint8_t no_q[4] = { 0 } ; - vvc_deblock_bs(lc, x0, y0, rs, 1); + vvc_deblock_bs(lc, x0, y0, rs, vertical); - x_end = x0 + ctb_size; - if (x_end > fc->ps.pps->width) - x_end = fc->ps.pps->width; - y_end = y0 + ctb_size; - if (y_end > fc->ps.pps->height) - y_end = fc->ps.pps->height; + if (!vertical) { + FFSWAP(int, x_end, y_end); + FFSWAP(int, x0, y0); + } for (int c_idx = 0; c_idx < c_end; c_idx++) { - const int hs = sps->hshift[c_idx]; - const int vs = sps->vshift[c_idx]; + const int hs = (vertical ? sps->hshift : sps->vshift)[c_idx]; + const int vs = (vertical ? sps->vshift : sps->hshift)[c_idx]; const int grid = c_idx ? (CHROMA_GRID << hs) : LUMA_GRID; const int tc_offset = params->tc_offset[c_idx]; const int beta_offset = params->beta_offset[c_idx]; + const int src_stride = fc->frame->linesize[c_idx]; - for (y = y0; y < y_end; y += (DEBLOCK_STEP << vs)) { - for (x = x0 ? x0 : grid; x < x_end; x += grid) { - int32_t bs[4], beta[4], tc[4], all_zero_bs = 1; + for (int y = y0; y < y_end; y += (DEBLOCK_STEP << vs)) { + for (int x = x0 ? x0 : grid; x < x_end; x += grid) { + const uint8_t horizontal_ctu_edge = !vertical && !(x % ctb_size); + int32_t bs[4], beta[4], tc[4] = { }, all_zero_bs = 1; uint8_t max_len_p[4], max_len_q[4]; for (int i = 0; i < DEBLOCK_STEP >> (2 - vs); i++) { - const int dy = i << 2; - bs[i] = (y + dy < y_end) ? TAB_BS(fc->tab.bs[1][c_idx], x, y + dy) : 0; - if (bs[i]) { - src = POS(c_idx, x, y + dy); - qp = get_qp(fc, src, x, y + dy, c_idx, 1); + int tx = x; + int ty = y + (i << 2); + const int end = ty >= y_end; - beta[i] = betatable[av_clip(qp + beta_offset, 0, MAX_QP)]; + if (!vertical) + FFSWAP(int, tx, ty); - max_filter_length(fc, x, y + dy, c_idx, 1, 0, bs[i], &max_len_p[i], &max_len_q[i]); + bs[i] = end ? 0 : TAB_BS(fc->tab.bs[vertical][c_idx], tx, ty); + if (bs[i]) { + const int qp = get_qp(fc, POS(c_idx, tx, ty), tx, ty, c_idx, vertical); + beta[i] = betatable[av_clip(qp + beta_offset, 0, MAX_QP)]; + tc[i] = TC_CALC(qp, bs[i]) ; + max_filter_length(fc, tx, ty, c_idx, vertical, horizontal_ctu_edge, bs[i], &max_len_p[i], &max_len_q[i]); all_zero_bs = 0; } - tc[i] = bs[i] ? TC_CALC(qp, bs[i]) : 0; } if (!all_zero_bs) { - src = POS(c_idx, x, y); - if (!c_idx) { - fc->vvcdsp.lf.filter_luma[1](src, fc->frame->linesize[c_idx], - beta, tc, no_p, no_q, max_len_p, max_len_q, 0); - } else { - fc->vvcdsp.lf.filter_chroma[1](src, fc->frame->linesize[c_idx], - beta, tc, no_p, no_q, max_len_p, max_len_q, vs); - } + uint8_t *src = vertical ? POS(c_idx, x, y) : POS(c_idx, y, x); + if (!c_idx) + fc->vvcdsp.lf.filter_luma[vertical](src, src_stride, beta, tc, no_p, no_q, max_len_p, max_len_q, horizontal_ctu_edge); + else + fc->vvcdsp.lf.filter_chroma[vertical](src, src_stride, beta, tc, no_p, no_q, max_len_p, max_len_q, vs); } } } } } -void ff_vvc_deblock_horizontal(const VVCLocalContext *lc, const int x0, const int y0, const int rs) +void ff_vvc_deblock_vertical(const VVCLocalContext *lc, const int x0, const int y0, const int rs) { - VVCFrameContext *fc = lc->fc; - const VVCSPS *sps = fc->ps.sps; - const int c_end = fc->ps.sps->r->sps_chroma_format_idc ? VVC_MAX_SAMPLE_ARRAYS : 1; - uint8_t* src; - int x, y, qp; - - //not use this yet, may needed by plt. - const uint8_t no_p[4] = { 0 }; - const uint8_t no_q[4] = { 0 } ; - - const int ctb_log2_size_y = fc->ps.sps->ctb_log2_size_y; - int x_end, y_end; - const int ctb_size = 1 << ctb_log2_size_y; - const DBParams *params = fc->tab.deblock + rs; - - vvc_deblock_bs(lc, x0, y0, rs, 0); - - x_end = x0 + ctb_size; - if (x_end > fc->ps.pps->width) - x_end = fc->ps.pps->width; - y_end = y0 + ctb_size; - if (y_end > fc->ps.pps->height) - y_end = fc->ps.pps->height; - - for (int c_idx = 0; c_idx < c_end; c_idx++) { - const int hs = sps->hshift[c_idx]; - const int vs = sps->vshift[c_idx]; - const int grid = c_idx ? (CHROMA_GRID << vs) : LUMA_GRID; - const int beta_offset = params->beta_offset[c_idx]; - const int tc_offset = params->tc_offset[c_idx]; - - for (y = y0; y < y_end; y += grid) { - const uint8_t horizontal_ctu_edge = !(y % fc->ps.sps->ctb_size_y); - if (!y) - continue; - - for (x = x0 ? x0: 0; x < x_end; x += (DEBLOCK_STEP << hs)) { - int32_t bs[4], beta[4], tc[4], all_zero_bs = 1; - uint8_t max_len_p[4], max_len_q[4]; - - for (int i = 0; i < DEBLOCK_STEP >> (2 - hs); i++) { - const int dx = i << 2; - - bs[i] = (x + dx < x_end) ? TAB_BS(fc->tab.bs[0][c_idx], x + dx, y) : 0; - if (bs[i]) { - src = POS(c_idx, x + dx, y); - qp = get_qp(fc, src, x + dx, y, c_idx, 0); - - beta[i] = betatable[av_clip(qp + beta_offset, 0, MAX_QP)]; + vvc_deblock(lc, x0, y0, rs, 1); +} - max_filter_length(fc, x + dx, y, c_idx, 0, horizontal_ctu_edge, bs[i], &max_len_p[i], &max_len_q[i]); - all_zero_bs = 0; - } - tc[i] = bs[i] ? TC_CALC(qp, bs[i]) : 0; - } - if (!all_zero_bs) { - src = POS(c_idx, x, y); - if (!c_idx) { - fc->vvcdsp.lf.filter_luma[0](src, fc->frame->linesize[c_idx], - beta, tc, no_p, no_q, max_len_p, max_len_q, horizontal_ctu_edge); - } else { - fc->vvcdsp.lf.filter_chroma[0](src, fc->frame->linesize[c_idx], - beta, tc, no_p, no_q, max_len_p, max_len_q, hs); - } - } - } - } - } +void ff_vvc_deblock_horizontal(const VVCLocalContext *lc, const int x0, const int y0, const int rs) +{ + vvc_deblock(lc, x0, y0, rs, 0); } static void alf_copy_border(uint8_t *dst, const uint8_t *src, From patchwork Sat Jun 22 06:23:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50058 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp935669vqz; Fri, 21 Jun 2024 23:25:34 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCV8gmhMRNgOGyhLvassHyALxJZVyqL+6t+nMyIyICoY7K6hfiw7//h4VgsNC+ilwFlEl1mWDZczOjflNXsVoCO8Wzo8MKM099USVQ== X-Google-Smtp-Source: AGHT+IHbo7nm5ZAssXwc50mbSABCPunBjSTVBAg952KsUNv/CNmdMsP3eUfU6knW9CI1GgqfQ97W X-Received: by 2002:a50:cc8e:0:b0:57c:6832:7b24 with SMTP id 4fb4d7f45d1cf-57d4396b872mr381031a12.0.1719037533725; Fri, 21 Jun 2024 23:25:33 -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 4fb4d7f45d1cf-57d30632872si1455342a12.95.2024.06.21.23.25.33; Fri, 21 Jun 2024 23:25:33 -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=B2ds3DVz; 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 5D97A68D89F; Sat, 22 Jun 2024 09:24:42 +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-psaapc01olkn2027.outbound.protection.outlook.com [40.92.52.27]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5DFF468D80F for ; Sat, 22 Jun 2024 09:24:38 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LglmVJiLWzAkJrhHaP+tftdlH0Tk9au4G3UZac8QUrnmlHa5Bovcj29/yunQCssUxPguTp2S9kGOgPH67W6exQOFT9dn+nRch9Tb1XPpmwchWzvi359GThifa46nIZFnh9suSLjgedz7BwkNArGrT2eUoMdYGsOb4aFQUFmBhEl7zumeUs4/sOTujFmhZF1p5KHFfM+tJZzmXbLCet6BxfYxcUXuUFza2fW7gzuiWvop/gyDhyhPAoqpuYzObssizZeVIKJSShI7IumKl2pTT8YUkE3s4JORbOM0p+ZN9nLj4qpsP3JW8dhv4EOf4BCUq/M+ZD7fd9PFe/f41HzySA== 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=MsmhqLsvY/uT3/mUJEGu+uCJMu7BTycUrfJziUzGtjw=; b=TZUAB7VPR6pIcC+6NdRwhqyUxRVGHfAD827QnSg5X3hRtowib2rG9fFTkg6fz4MOgbQ1ehxrsbZya/wzTpxcUiCrg8jDbnbAIwuDMQE27s7z67xH9NIRUZ5wAaCtMPBqS+6WbPdHmQFdxM9uOYbYUx4FIqp4Knt7K6mjxeLbnYBRnqlTYEO1uIP/O6/0yie7L1xIC46X2n6xqunXC69BcUwS0oQ6Zkz9NMxa4zDTx5PNIDG1H+/wzrguHvEQ5wbcpz5uaJxvDH2qQF2T2YTCJeIqkjm3AgkwqShvx4pb2yrd/1+m+4oXlXH5Ck6Hg70xAoi2bsuuQtuRaZ/pxtMKog== 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=MsmhqLsvY/uT3/mUJEGu+uCJMu7BTycUrfJziUzGtjw=; b=B2ds3DVzkWfyiIztoIPdjHvOwqsVqjhCcBNIYo4t3LF7vpMnPxxu+UqkGqqAiE1QLNT1SdsJj26Y38xsVzmtA/DLgQwPSpfEZXxhUn5TqaGDmA76x4WPGkXFwwbLaoptnhML5BXe8tT927LPCsprQu4DHj2A49aMAjdv7u5cnoSf5xHhzzfKYxB7wv++jECBydPzyuq31Sprg9DMtBbhQ99X+xLUEe434jBV6pZBpqkIsBBsoeNL/1nwQjfAwZCr/XqGvLVPBsbyWLORl6SlkHnvZPPEM74lJO3Ej1SIcbrphVzIwv/6/Ie3kPpDOMXt073l96E6cc3pBlpwjstj1A== 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:20 +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:20 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:23:54 +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: [ZcE1B6KWLpih5E7a0MGAjPbDj+JxNghh] 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-7-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: 81b508d9-b33e-4e9f-ca89-08dc9283f2d6 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: Y34yUqvoKJTc4dxFfRqBnziSp5hZc8VOtCGH71O0mMQ1mmmNHJRPSV+E62Pd0OCmPDv24z4EPyBGV35Fjmil2u1qGCBCFSBT5KaIIZ5PCxgEYYt9W1SakY7Ce9amBkiLVM5k5v31cBTZ3/9eO0H3eDxRyODYdFex2EqHgbkjlPm2dCqFsCR7mq/LQ+0YXp2H+emtiNGh9L+tVl4TJk8JMz6wVCMCtCSYw1OqyDudaQhN5gWflwBFR1WXzWemcg/rGASGEIJEi7YCF/3BE2vWhgeMTSYfg/7wZ+s3X7NSAQhQlfCscLWSekt8QL/xL4P8p+V/96RGTxWPjgq8jATkDUnQpHT1qxSZdgGjLFMIcGTTeVmLMwdLcIs3xwQZR0fh+iM57ODjBmArx56v+70zFd4uPonGHKWT/351onN239UQE7beUzK7AoBPO+yZBp1xX+9m6zy5opYeS4DU+A6uG0Srdr8WDARgK95TDtlbeVdW8puh3KRIkJ9y/W4QhXtPpVtKedSLNFbLiLymzEX0nw2cuGmB7IbYblX1h8xn7TjuzcSEwz8TQfqmVmACyHXcDy7Kuwlhdyk/qISRSOjodyyrAp1k/QSf8Z0t9LfiIQGL/SLN9w9xvnx+DiLeeqKF X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: vETHN7qcsObZKr+fKcF7BXf7jAXKAhg3tsFiOyiCM208RBY5ftig6njt3RqetaN7OvFNBPvdXFQAukVbICit3oR0PIA+mfwgQaUnOcoY94Kmr5J11zzfpvRqHqrAed2XdVHr+BKOK0aVBPEfY5F/Y7UtH46qjSpT5ivk1Rmf7HUxvXkGtbOtHFWI1rnDGJnx2/oYF1UNG0ubAYEpLIff9iOTKZZqHht0r83XxaYJHQ+92vOgtiNcNX/ntEaZ2uPaz+C0Elfa+h9FWhLjKbSV335f0p0bahSs6LN27FxcVe+88vQuRPR8RZH9L/8J8Q3qeLh+oprWgd0575v87I9pjiCSiSz4IlP6V6p3NOf5Hvpg7faw+rpAAMZEtSmOOZkG4c1Cjm2s//BuMABGa8MYklli9Fh0LDGBSqZlw4OtY0Ls9GZeDJFB9wGYaDQNYhgHnsoudIQtB+mGGDayrRFBJ0vhh8w3KfahNJV3bfjUCP4L6bPVt/5q1mjxt02hDEIAkv6xsvjhLamHC4dPVsmA08cA69sbOZZZZsZiIt6kYyQfTzo7PZ/7tkGYoQyuOax6ptR+p01dj6W7DQR+T7tt4Gv+XvPiGqc8h0ePXQBOGXNQ4sbi6zGDpCIPyvHL1wssERYVBKGpBzX/2ouVhi668OC3BSh3HZCoG/cOaz6nSK8tqSEpHEfpF5a4cbTN1bcK3sYDYgfOjFljFKLU7JdOrY+urqw6SMrTGcJm72q1ltNHkj19QKJX4eEujxmIQFC1Io8WRUEAW/bMSJMphRZw0se7qJbnRmHsKj/DIGJ7BfpCI7DyXLmPLfiPakIJRnSsV6iId7kyp/miFCzz4fPaHQwUK/TrrTn245ihuQS6OvOOTOkYifclPkWFawrgXbEMY+fq/CePw5qkmzozqxe7Es4vxPS2L9wc/YV1tJNmFitZ/M36cyk32QbgZJ9bmbqMn4pu1WdcF+V0fP5q5SwHzoBLG+RhomB3o2OHYrdWvVhzj4l/8YX6qyhrsDO80KmVIMrJBwIBT5DXQIGG8ADVsT+nGTdEe3jZ6uI3zw28ggMpOIk8NRrIEjQWVWhynSpv8RiJ1ckfcPMDb0n5f7FuZiVX/M88py2OpbSnAp4/NVwdJM17Tg4OunkSMxnmi1nwRhD8o6mWMj+XylaFDfMNZ8AVyycis01QEYJAhmdSEqq9Mg1TVHUjdnMcQUjQpYuPOL4Xw9hB/nd8yB3N5iLdtv8T16bqoAUn6mO53mSO13BJRXk3ElMEUudwHCBkUObRwPLULNoo+gpm6wfPOTkMhA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 81b508d9-b33e-4e9f-ca89-08dc9283f2d6 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:19.3996 (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 07/18] avcodec/vvcdec: refact out sao_get_edges 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: 8Hm+Aom75PV5 --- libavcodec/vvc/filter.c | 119 ++++++++++++++++++++++------------------ 1 file changed, 65 insertions(+), 54 deletions(-) diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index 89b794195e..1326d2c82e 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -155,70 +155,81 @@ void ff_vvc_sao_copy_ctb_to_hv(VVCLocalContext *lc, const int rx, const int ry, sao_copy_ctb_to_hv(lc, rx, ry, 0); } +static int sao_can_cross_slices(const VVCFrameContext *fc, const int rx, const int ry, const int dx, const int dy) +{ + const uint8_t lfase = fc->ps.pps->r->pps_loop_filter_across_slices_enabled_flag; + + return lfase || CTB(fc->tab.slice_idx, rx, ry) == CTB(fc->tab.slice_idx, rx + dx, ry + dy); +} + +static void sao_get_edges(uint8_t vert_edge[2], uint8_t horiz_edge[2], uint8_t diag_edge[4], int *restore, + const VVCLocalContext *lc, const int edges[4], const int rx, const int ry) +{ + const VVCFrameContext *fc = lc->fc; + const VVCSPS *sps = fc->ps.sps; + const H266RawSPS *rsps = sps->r; + const VVCPPS *pps = fc->ps.pps; + const int subpic_idx = lc->sc->sh.r->curr_subpic_idx; + const uint8_t lfase = fc->ps.pps->r->pps_loop_filter_across_slices_enabled_flag; + const uint8_t no_tile_filter = pps->r->num_tiles_in_pic > 1 && !pps->r->pps_loop_filter_across_tiles_enabled_flag; + const uint8_t no_subpic_filter = rsps->sps_num_subpics_minus1 && !rsps->sps_loop_filter_across_subpic_enabled_flag[subpic_idx]; + uint8_t lf_edge[] = { 0, 0, 0, 0 }; + + *restore = no_subpic_filter || no_tile_filter || !lfase; + + if (!*restore) + return; + + if (!edges[LEFT]) { + lf_edge[LEFT] = no_tile_filter && pps->ctb_to_col_bd[rx] == rx; + lf_edge[LEFT] |= no_subpic_filter && rsps->sps_subpic_ctu_top_left_x[subpic_idx] == rx; + vert_edge[0] = !sao_can_cross_slices(fc, rx, ry, -1, 0) || lf_edge[LEFT]; + } + if (!edges[RIGHT]) { + lf_edge[RIGHT] = no_tile_filter && pps->ctb_to_col_bd[rx] != pps->ctb_to_col_bd[rx + 1]; + lf_edge[RIGHT] |= no_subpic_filter && rsps->sps_subpic_ctu_top_left_x[subpic_idx] + rsps->sps_subpic_width_minus1[subpic_idx] == rx; + vert_edge[1] = !sao_can_cross_slices(fc, rx, ry, 1, 0) || lf_edge[RIGHT]; + } + if (!edges[TOP]) { + lf_edge[TOP] = no_tile_filter && pps->ctb_to_row_bd[ry] == ry; + lf_edge[TOP] |= no_subpic_filter && rsps->sps_subpic_ctu_top_left_y[subpic_idx] == ry; + horiz_edge[0] = !sao_can_cross_slices(fc, rx, ry, 0, -1) || lf_edge[TOP]; + } + if (!edges[BOTTOM]) { + lf_edge[BOTTOM] = no_tile_filter && pps->ctb_to_row_bd[ry] != pps->ctb_to_row_bd[ry + 1]; + lf_edge[BOTTOM] |= no_subpic_filter && rsps->sps_subpic_ctu_top_left_y[subpic_idx] + rsps->sps_subpic_height_minus1[subpic_idx] == ry; + horiz_edge[1] = !sao_can_cross_slices(fc, rx, ry, 0, 1) || lf_edge[BOTTOM]; + } + + if (!edges[LEFT] && !edges[TOP]) + diag_edge[0] = !sao_can_cross_slices(fc, rx, ry, -1, -1) || lf_edge[LEFT] || lf_edge[TOP]; + + if (!edges[TOP] && !edges[RIGHT]) + diag_edge[1] = !sao_can_cross_slices(fc, rx, ry, 1, -1) || lf_edge[RIGHT] || lf_edge[TOP]; + + if (!edges[RIGHT] && !edges[BOTTOM]) + diag_edge[2] = !sao_can_cross_slices(fc, rx, ry, 1, 1) || lf_edge[RIGHT] || lf_edge[BOTTOM]; + + if (!edges[LEFT] && !edges[BOTTOM]) + diag_edge[3] = !sao_can_cross_slices(fc, rx, ry, -1, 1) || lf_edge[LEFT] || lf_edge[BOTTOM]; +} + void ff_vvc_sao_filter(VVCLocalContext *lc, int x, int y) { VVCFrameContext *fc = lc->fc; const int ctb_size_y = fc->ps.sps->ctb_size_y; static const uint8_t sao_tab[16] = { 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8 }; - int c_idx; + int c_idx, restore; const int rx = x >> fc->ps.sps->ctb_log2_size_y; const int ry = y >> fc->ps.sps->ctb_log2_size_y; int edges[4] = { !rx, !ry, rx == fc->ps.pps->ctb_width - 1, ry == fc->ps.pps->ctb_height - 1 }; const SAOParams *sao = &CTB(fc->tab.sao, rx, ry); // flags indicating unfilterable edges - uint8_t vert_edge[] = { 0, 0 }; - uint8_t horiz_edge[] = { 0, 0 }; - uint8_t diag_edge[] = { 0, 0, 0, 0 }; - uint8_t tile_edge[] = { 0, 0, 0, 0 }; - uint8_t subpic_edge[] = { 0, 0, 0, 0 }; - const int subpic_idx = lc->sc->sh.r->curr_subpic_idx; - const uint8_t lfase = fc->ps.pps->r->pps_loop_filter_across_slices_enabled_flag; - const uint8_t no_tile_filter = fc->ps.pps->r->num_tiles_in_pic > 1 && - !fc->ps.pps->r->pps_loop_filter_across_tiles_enabled_flag; - const uint8_t no_subpic_filter = fc->ps.sps->r->sps_num_subpics_minus1 && - !fc->ps.sps->r->sps_loop_filter_across_subpic_enabled_flag[subpic_idx]; - const uint8_t restore = no_subpic_filter || no_tile_filter || !lfase; - - if (restore) { - if (!edges[LEFT]) { - tile_edge[LEFT] = no_tile_filter && fc->ps.pps->ctb_to_col_bd[rx] == rx; - subpic_edge[LEFT] = no_subpic_filter && fc->ps.sps->r->sps_subpic_ctu_top_left_x[subpic_idx] == rx; - vert_edge[0] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx - 1, ry)) || tile_edge[LEFT] || subpic_edge[LEFT]; - } - if (!edges[RIGHT]) { - tile_edge[RIGHT] = no_tile_filter && fc->ps.pps->ctb_to_col_bd[rx] != fc->ps.pps->ctb_to_col_bd[rx + 1]; - subpic_edge[RIGHT] = no_subpic_filter && - fc->ps.sps->r->sps_subpic_ctu_top_left_x[subpic_idx] + fc->ps.sps->r->sps_subpic_width_minus1[subpic_idx] == rx; - vert_edge[1] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx + 1, ry)) || tile_edge[RIGHT] || subpic_edge[RIGHT]; - } - if (!edges[TOP]) { - tile_edge[TOP] = no_tile_filter && fc->ps.pps->ctb_to_row_bd[ry] == ry; - subpic_edge[TOP] = no_subpic_filter && fc->ps.sps->r->sps_subpic_ctu_top_left_y[subpic_idx] == ry; - horiz_edge[0] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx, ry - 1)) || tile_edge[TOP] || subpic_edge[TOP]; - } - if (!edges[BOTTOM]) { - tile_edge[BOTTOM] = no_tile_filter && fc->ps.pps->ctb_to_row_bd[ry] != fc->ps.pps->ctb_to_row_bd[ry + 1]; - subpic_edge[BOTTOM] = no_subpic_filter && - fc->ps.sps->r->sps_subpic_ctu_top_left_y[subpic_idx] + fc->ps.sps->r->sps_subpic_height_minus1[subpic_idx] == ry; - horiz_edge[1] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx, ry + 1)) || tile_edge[BOTTOM] || subpic_edge[BOTTOM]; - } - if (!edges[LEFT] && !edges[TOP]) { - diag_edge[0] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx - 1, ry - 1)) || - tile_edge[LEFT] || tile_edge[TOP] || subpic_edge[LEFT] || subpic_edge[TOP]; - } - if (!edges[TOP] && !edges[RIGHT]) { - diag_edge[1] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx + 1, ry - 1)) || - tile_edge[RIGHT] || tile_edge[TOP] || subpic_edge[TOP] || subpic_edge[RIGHT]; - } - if (!edges[RIGHT] && !edges[BOTTOM]) { - diag_edge[2] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx + 1, ry + 1)) || - tile_edge[RIGHT] || tile_edge[BOTTOM] || subpic_edge[RIGHT] || subpic_edge[BOTTOM]; - } - if (!edges[LEFT] && !edges[BOTTOM]) { - diag_edge[3] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx - 1, ry + 1)) || - tile_edge[LEFT] || tile_edge[BOTTOM] || subpic_edge[LEFT] || subpic_edge[BOTTOM]; - } - } + uint8_t vert_edge[] = { 0, 0 }; + uint8_t horiz_edge[] = { 0, 0 }; + uint8_t diag_edge[] = { 0, 0, 0, 0 }; + + sao_get_edges(vert_edge, horiz_edge, diag_edge, &restore, lc, edges, rx, ry); for (c_idx = 0; c_idx < (fc->ps.sps->r->sps_chroma_format_idc ? 3 : 1); c_idx++) { int x0 = x >> fc->ps.sps->hshift[c_idx]; From patchwork Sat Jun 22 06:23:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50064 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp937578vqz; Fri, 21 Jun 2024 23:32:53 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCW3CLJlXGHbfh/WAyF+kzhzSq7TiqGy7VA6M7pG1WTIMZl1p43AInFdB93giCGxIHPAWh2aF73mT/qUiKGB8VkcNf0PKSyoVDOx8Q== X-Google-Smtp-Source: AGHT+IHeeo5WaFyXS57XJvzKGgnfuYJiq7mhNqWfY1UuyzO3GRy3Hw0H9dWr5Wk7+ZKsuzm5KiYC X-Received: by 2002:a50:d012:0:b0:57c:73a7:da08 with SMTP id 4fb4d7f45d1cf-57d07e6b7a3mr6505984a12.21.1719037972932; Fri, 21 Jun 2024 23:32:52 -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 4fb4d7f45d1cf-57d3063285bsi1450694a12.80.2024.06.21.23.32.52; Fri, 21 Jun 2024 23:32: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; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b="VIq673/J"; 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 3216B68D8CD; Sat, 22 Jun 2024 09:24:46 +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 17A6568D83F for ; Sat, 22 Jun 2024 09:24:38 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mglhcF8DAyGHwpvJOTudu/cS0fGa9FNedRIZXnCRQW89ZR7gJCITZcpAZzefkFLgpHBdvWZA2hr0fMyZaFZbqjt3jBJvi3X7gx1flIUhL+XZqvWnPSV32Onw9N81mPP8taDZ/mWYgY0bVaxnLDwQxj79D7LX+GJJnytbZz7mWZYCAhhCGx2LqF+StN/K1N8zoJpHCvZjquhndp6fO0PRBuoyuMMFnXlU9vELZW6/qUJy5ILhdzIiihHFj3MhEzFVazG6TsRCMdw0F8WWabpaenurxTm9R2BoJCKKfxfVluCJbAivHEG3pbnkMONmJVVEBCZxE4vSh0/bWzHM1UIRBw== 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=9HB6J1vOmLMq7TereSVlK1epcHqu0C9hWWmLgpP83hU=; b=kGdnV0wU7rRFLBEHab2sA6DNIzfgpaCExMkgzUosE1Xs5ebotAZvDAP/kjo5HC9ASc97r/CpuNtyc6awla6p7AbXVd2OXaXw28KqvNKnPSGCe7VdlzoVAKpnw8vKILFdMv0HmLcacuuggDUpyaX8VzpSiuFQIGBkjZEQzf3bQJM1WoFNjFe2xm1xDiFUsR9E6pvSBlfoZ1YlvwAYi76vE1E5RGnjbRmrpxm/StKg3F1/vjmFrpFZR8emuF1lX+vfA5YuDQKYr9xOW0z7jfeH0U1HJVaNQlrv1l/riU5HeUxSU/uteNO+RfIIRdbamfFlaVL5/65cvaWx0RCJAa0K3g== 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=9HB6J1vOmLMq7TereSVlK1epcHqu0C9hWWmLgpP83hU=; b=VIq673/J+deF2FiK9ZMJt8aYlSlsjnrzJZHEnq1PwWSHSdsaeIcidOkehSGl4IB4PD+5pll2KEajv9B8uUUNWSivWoqVJsteYv3OCX+4ZXKVyXG6pSB+IkJInUNvuk1UeLGb+N5KuW5YQuGrlgTs+9Orpj439dFt8o8yJC6IA27R2LeiKBhhRmJixLOygYWn/7aM7eCRvAyAyrYWOEOQveMQboepBQP4UUBVA9uOEqHypNC9ZGZYFQ6G2yk6JKP9JKKeDaAOH+NDl82enSJS9dL+VqN5FxSJciP2+Nj0ETWE0B9hvmxa5G9im+1nLyeCzuCwsKaXo0puIPpkdWjH9Q== 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:20 +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:20 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:23:55 +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: [109XkbbZuY2eC63pn16Ygp3ssh1XceBC] 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-8-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: 8c7708fb-b7d7-4345-548d-08dc9283f338 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: j6yrv7GCSFQusVHZaVW+f0D3WQeGj1RAf/P4+84pD/Wr9Dl2CxIaU50m72tXP6vntSLjgIYCbEWTGMKWM5/yvI1HWibRC/Wx28Qw02uDuHp4pe8rUG+qIPkwE5xD7YxLqXdPWYjRXBzjB9hFyaObjg6EVM1JZKh2I9sTMVhxBGwThj9XXKDO/1Q7EvIjc2emf257a7PExeqJr86Y3ZEEp/6UTkq8bLeObY21IDMDv9ajdw6cmKdJlE07g+ewhf5/fHQiGuYq0rkeNHPo4r9TphHhOEiGHhsm9SH712Nu7tFCYZamA2VTI8y8/xQkKIxAGVMKrGXswlxTRW0rrTFPnXK0KCBhagEmqGgzOdZWjikJ8n+gK26maYSz1QCpWgkjHFM0v4iMI9SZ3phCGsT7UCLDH0k6/faCSK7QWpyZN4oSOJ20X7me20y8faz9vXhmS3FwFR/UyYsYK1RmP6w9jEq4ze86UL/ZV97xWQLflGgxbpp8QRaFVV0hFpVIAD5Cl5JgCHvw4jrRW9MiLaBWuice2lrAOsZG53Ww3wc7sQ05wShnqFWPMB9upMiPUYx3yzHoEuuw9BmETdG1e7qSKdr3jtoYs5DD1SQWyyVB0yDFVqAV61dDwD5QXaQ1JB6H X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: YyaXwXeNBfXDnENqmOv49T7ufOuL+sJszh1UMZgU9RaLxm1RVH9v33UnvU9p/HpglHmwvLMFkoE4b9wF8m/erZLqHa/RRQDk3UNCDDoIo5jZxGhLh/82NY/zalRXc6HBBKBS8Qf15OX/MsgjmQeCzMRNWP3n5q+/aZKuypgVm9HdEzYLppJhDMxvoedAAyN7muAatLgBv+qZgcRT1xu/Qoq+viXnVT6AZfXhh+Mmi+9YHFwD5bwP9mAyd9B+ZFbW7Zpt9J9j2h6G7aU336vHBiGVZK+aWJNxGHscMY8lMDNFQTnN6qeMhW4OsWsQrdtSyT/ewp2fFYVIsefElYmYZfuWJXwmDR0BueVaCxxBAcWL2yQRPgV1180rL2nogQdafMf09mzvJZBnvxyO1pjnpDqytKbvuDcBvladmb3pbPPWRvt9FFxv26oaHaNrP+H3/gj4SbKFCJ3X6AOWq5j0OvOmmYOE8p5rMUIXIyApjD6Wt7qNiQymq0vT4KC5c20fc11Sjz6AueyWWXrfZaoZ+8EwufyVlCNJDubDesXS6Y7SuHp8m41w/76q0F5qaD97TBmAacxAg+IpCmkrbtSu33Mxy+Q/yyxAF4OfbOyvaFlGfej2NBo8H+PH9RgOrn00ddIeM5pvCtEy1zw4fBg0/MsfdcfxdAz+iJCkGKTU55F6UJ//kFRaeO1Zqt8ST01dTfBbCRB4uIHU4zATwQkvOQRMAJ9N9kKc+HZru0ccpnK1do1n/XT9IXCk4MaxsLeBI4lFd8YsSX53RGeJuwLpELjTqML1Se38P1GLxl1OTRvVulGT+WyJTZFhrBGUBy3o+pP1fgG7ct9b038RDpTKGM21kLIj2rfazQvpq5RrE5UCc71Jo3hRlEopR+jl0chvb2WEXFXtZhvSV2o9+XEVoX3JosbnBgzx8Puabriy2AsAKOqT8s4qv1LAbx5ES3saNB1S88lnUvd/XdkDHzGUO4w6MLLwpJc7ynVXUbxGhiOxzBO6t06RRJm3BddnSWML23Fsledh4esl3wUWqQ/DrJq07tnWqncCDrDIH+GURvwN34A+uXXuOVW6muJHszgv5K1/shWGFlAcOiNQo9RgGbKFp0MD3y7KHDDdN+DwwyDvIP+LtnhoLjFrjlxAfTRHpvFYw+1YsAlxCk/sG2qLOvE9agtAbhTDXFsNIR5WbiAZRgwx1N355x45ZvuazvIt42tzcbr5cbBAm9laS5QcEVVveAlyuMWVcVxZZaVuR/T1Wq8fZg51DtxE5CzCOkkGaoD1vPmCyfAOB1dCDhQ1Gw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8c7708fb-b7d7-4345-548d-08dc9283f338 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:20.0470 (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 08/18] avcodec/vvcdec: refact out sao_extends_edges 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: 9YM3+J3Fpzym --- libavcodec/vvc/filter.c | 108 +++++++++++++++++++--------------------- 1 file changed, 50 insertions(+), 58 deletions(-) diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index 1326d2c82e..534ba57205 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -214,6 +214,52 @@ static void sao_get_edges(uint8_t vert_edge[2], uint8_t horiz_edge[2], uint8_t d diag_edge[3] = !sao_can_cross_slices(fc, rx, ry, -1, 1) || lf_edge[LEFT] || lf_edge[BOTTOM]; } +static void sao_copy_hor(uint8_t *dst, const ptrdiff_t dst_stride, + const uint8_t *src, const ptrdiff_t src_stride, const int width, const int edges[4], const int ps) +{ + const int left = 1 - edges[LEFT]; + const int right = 1 - edges[RIGHT]; + int pos = 0; + + src -= left << ps; + dst -= left << ps; + + if (left) { + copy_pixel(dst, src, ps); + pos += (1 << ps); + } + memcpy(dst + pos, src + pos, width << ps); + if (right) { + pos += width << ps; + copy_pixel(dst + pos, src + pos, ps); + } +} + +static void sao_extends_edges(uint8_t *dst, const ptrdiff_t dst_stride, + const uint8_t *src, const ptrdiff_t src_stride, const int width, const int height, + const VVCFrameContext *fc, const int x, const int y, const int rx, const int ry, const int edges[4], const int c_idx) +{ + const uint8_t *sao_h = fc->tab.sao_pixel_buffer_h[c_idx]; + const uint8_t *sao_v = fc->tab.sao_pixel_buffer_v[c_idx]; + const int w = fc->ps.pps->width >> fc->ps.sps->hshift[c_idx]; + const int h = fc->ps.pps->height >> fc->ps.sps->vshift[c_idx]; + const int ps = fc->ps.sps->pixel_shift; + + if (!edges[TOP]) + sao_copy_hor(dst - dst_stride, dst_stride, sao_h + (((2 * ry - 1) * w + x) << ps), src_stride, width, edges, ps); + + if (!edges[BOTTOM]) + sao_copy_hor(dst + height * dst_stride, dst_stride, sao_h + (((2 * ry + 2) * w + x) << ps), src_stride, width, edges, ps); + + if (!edges[LEFT]) + copy_vert(dst - (1 << ps), sao_v + (((2 * rx - 1) * h + y) << ps), ps, height, dst_stride, 1 << ps); + + if (!edges[RIGHT]) + copy_vert(dst + (width << ps), sao_v + (((2 * rx + 2) * h + y) << ps), ps, height, dst_stride, 1 << ps); + + copy_ctb(dst, src, width << ps, height, dst_stride, src_stride); +} + void ff_vvc_sao_filter(VVCLocalContext *lc, int x, int y) { VVCFrameContext *fc = lc->fc; @@ -241,8 +287,6 @@ void ff_vvc_sao_filter(VVCLocalContext *lc, int x, int y) int height = FFMIN(ctb_size_v, (fc->ps.pps->height >> fc->ps.sps->vshift[c_idx]) - y0); int tab = sao_tab[(FFALIGN(width, 8) >> 3) - 1]; uint8_t *src = POS(c_idx, x, y); - ptrdiff_t dst_stride; - uint8_t *dst; switch (sao->type_idx[c_idx]) { case SAO_BAND: @@ -251,63 +295,11 @@ void ff_vvc_sao_filter(VVCLocalContext *lc, int x, int y) break; case SAO_EDGE: { - const int w = fc->ps.pps->width >> fc->ps.sps->hshift[c_idx]; - const int h = fc->ps.pps->height >> fc->ps.sps->vshift[c_idx]; - const int sh = fc->ps.sps->pixel_shift; - - dst_stride = 2*MAX_PB_SIZE + AV_INPUT_BUFFER_PADDING_SIZE; - dst = lc->sao_buffer + dst_stride + AV_INPUT_BUFFER_PADDING_SIZE; - - if (!edges[TOP]) { - const int left = 1 - edges[LEFT]; - const int right = 1 - edges[RIGHT]; - const uint8_t *src1; - uint8_t *dst1; - int pos = 0; - - dst1 = dst - dst_stride - (left << sh); - src1 = fc->tab.sao_pixel_buffer_h[c_idx] + (((2 * ry - 1) * w + x0 - left) << sh); - if (left) { - copy_pixel(dst1, src1, sh); - pos += (1 << sh); - } - memcpy(dst1 + pos, src1 + pos, width << sh); - if (right) { - pos += width << sh; - copy_pixel(dst1 + pos, src1 + pos, sh); - } - } - if (!edges[BOTTOM]) { - const int left = 1 - edges[LEFT]; - const int right = 1 - edges[RIGHT]; - const uint8_t *src1; - uint8_t *dst1; - int pos = 0; - - dst1 = dst + height * dst_stride - (left << sh); - src1 = fc->tab.sao_pixel_buffer_h[c_idx] + (((2 * ry + 2) * w + x0 - left) << sh); - if (left) { - copy_pixel(dst1, src1, sh); - pos += (1 << sh); - } - memcpy(dst1 + pos, src1 + pos, width << sh); - if (right) { - pos += width << sh; - copy_pixel(dst1 + pos, src1 + pos, sh); - } - } - if (!edges[LEFT]) { - copy_vert(dst - (1 << sh), - fc->tab.sao_pixel_buffer_v[c_idx] + (((2 * rx - 1) * h + y0) << sh), - sh, height, dst_stride, 1 << sh); - } - if (!edges[RIGHT]) { - copy_vert(dst + (width << sh), - fc->tab.sao_pixel_buffer_v[c_idx] + (((2 * rx + 2) * h + y0) << sh), - sh, height, dst_stride, 1 << sh); - } + const ptrdiff_t dst_stride = 2 * MAX_PB_SIZE + AV_INPUT_BUFFER_PADDING_SIZE; + uint8_t *dst = lc->sao_buffer + dst_stride + AV_INPUT_BUFFER_PADDING_SIZE; + + sao_extends_edges(dst, dst_stride, src, src_stride, width, height, fc, x0, y0, rx, ry, edges, c_idx); - copy_ctb(dst, src, width << sh, height, dst_stride, src_stride); fc->vvcdsp.sao.edge_filter[tab](src, dst, src_stride, sao->offset_val[c_idx], sao->eo_class[c_idx], width, height); fc->vvcdsp.sao.edge_restore[restore](src, dst, src_stride, dst_stride, From patchwork Sat Jun 22 06:23:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50071 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp940170vqz; Fri, 21 Jun 2024 23:42:51 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXgn9+eGl/JbIr/WbdNbmPXwuMcOynb7mg4LIAK+ge3q7mc8ppJl3hC1TGQ08ioYee6UyOmGkUR6KWzczvJSTYaCrJ4ocT0E0Aidg== X-Google-Smtp-Source: AGHT+IE3sgkCVB1wol1KUWKHwLlcX47wZhKV7i9Sw7BcJgUTINEGpvQ8eQIs6VJMNBiM6yfnfgWN X-Received: by 2002:a17:906:454c:b0:a6f:2448:a274 with SMTP id a640c23a62f3a-a6fab7792f7mr621034066b.59.1719038571466; Fri, 21 Jun 2024 23:42:51 -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-a6fcf49650csi153290066b.242.2024.06.21.23.42.51; Fri, 21 Jun 2024 23:42:51 -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=XG418yqq; 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 B80B368D8A6; Sat, 22 Jun 2024 09:24:44 +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-psaapc01olkn2027.outbound.protection.outlook.com [40.92.52.27]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F1DC568D80F for ; Sat, 22 Jun 2024 09:24:38 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nJc2gCn0CjiSLGtVC0FhVLQtwXadEsYrQQzEZrR8Rza6SosTjMkUTZkSwT4YC9WECtI+5qk2gL6bvbMPQPm4TPRtWLMcS/G+rxlBDLHfG+ghirD+mPvWI1dxfKANY8YQvIkycRGXJVrUwsxWgnO3JHzi8B2vHlywPGEhX+QTV1exqYZbUUjWOWiAVkbaovLBJj1uTfKb3WvF/xquxPySokcoXoErx9WgOqv46DOWsXdNHtxDBqhzxErc4kZ+4cZOp7KUbO+O293iyQw37GCFFUxfdt2lLEQQlJOuRQg36kCI6sVbLcxdxw8qk7zW29Pc2NeCpEi+l3AAjxXbd523qw== 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=1hLy95a19YpVJcp41yRUkq8qnAyM0z+iv3zmYLcwC3g=; b=FQvJnpoIW3pgn+UsCvfxc4ixqihPh7xTXr8uCVK02aLvnIHu7dhqMFh/Yg12yOjUZafEQUgGfYAlrdjOJQP2LoBdKpuw+M6CrZPmQNu351bNqKHCkTACgw7uQAC9Drq68ZC9LqJWj0Fg44yqPmYe0r/kWW5ofz7/RH3aQsq3ekPizsCbQ75f9tofUSOLiU4lh7MrSFZur1JQUyZqCaKE9RQqtYYBVGYeSELg0/sawRKeEvXNVvn2eCsEz6JcecuGmgDqigU6HAzC96Df5EPG96rGcpuhzrKMH4cLwmHjTTzbZeH1Z0kM+ql8PaXf6OQwvCgmK85DYnNfv+bziGyDFg== 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=1hLy95a19YpVJcp41yRUkq8qnAyM0z+iv3zmYLcwC3g=; b=XG418yqqNFj1iTL4V97b8yWQopeE+s0yMQ64NEs3QOeYWIorQQpOCSu82fFFmUo4/GlJI8ofdzrzWzuJukkt48VBgldAF/PWcRZYYtnzubpVk2TDpQBcaBcld5Z8khWU72OAL+ci9gAxNh1jLru90kRfI4j0Gy5v9StaPim2wem8kmGFUum/CmaXESntxMtjnUGDrxCXfFH86ohz/bqeYqSJTvGrs1+z4L9JN1H3hcl+nQJDzGMEYwCBGLsJ7pwCJJcLPIfcFXe6oGErFaYs5yBM5jw1OSk6nvmLuK2YAko8BWYnbuyVma1ioOK1/0/eMg7ejcmPRNeDq3V3POdZPA== 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:20 +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:20 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:23:56 +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: [ECnS2fw+J+7iRTV6Lylmgogd3G9RBf4+] 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-9-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: b4462c25-a7c7-4ee3-8928-08dc9283f39a X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: SapgJBhHcapBhoQ+IpZbsVbp5axfssovdCUAFbJHfVNBhDDMsb3TyhTqAEm5kTd7AgxDh77nHdIcFN+WsgVhtvdLLw08n2PYIxTQM0dwzEbcyUnq1EDmmp6On9Y50sVhQ16qOl8oU9mVgLEtJ9Q8BZwCOEhSMZHhzo6s0xS+8t38Pn+IvGun0WIOT4rUu9PZi/PNOEs1F6uhdS6VaSOVtX4m7FPspIHv3AG1rjNxHM2zlpEJE1lO4WyrpoqAZxFKg6ZRHmlfK3TMS/f0BtijAv7WwlHH6NuNblZT67TRhvVplEODnpwRCFTnaG0lNm91lk6NMOQLS2KqHt/g0+g4sFiSN4wBghYQj1F2v2Lzoh3/X1KkglE7nthVr9sGua/KIOZBvpr1u74ssKYVeprgYtteKFhH6U3ruN8CnG79WwMLsrtOxa5+ZB0SV0O7gMEBfg+OFjw5vKTG6uAZGDMKR7dLS12T+0l1bX2pX9h6XcH/ew3dnSk6IBL+zIauifaQ3Ol3kVX+Tb16dJA/QruEm6AIzBFwyPTMqvzER0nnVAv4OO5s6cSIMWsWpBLJnU7my5LfxAdDpkQ802POh4kMXQGxtf3Z/2MddgcQ9QnHq1fUsjSSy6pH5g44s9LTSl13 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 8b6oMo3OV0+Pim3gNYERFF/d6XB95FBSPOgz/gipdwPd+x3xfAzpsqfMy3tlUpPdBoic8RJfU3CsgXwWBj9G4O0t9eiV43Zscs3teQwT16ao8Jxy6YyRrCz0B98lNdFilh9rHWiWwJvLTInSUUcNt/wXyG53iOPz0ntqow6ew3uLhHptPU6G1yFVBwKpQUhYYYmYN2yjhpaDr22J/KIsfo+8wk09udQVacY0GARRa0AkKON1hJnusrPDTIyTVgWRCDLsABhbEr/YLPi+jvy9OVKFqTLHNHbeA04uOGfyyDtFUba8g32CNb1lhMcCDCgLdiyM4aIPAysrNCbX0ZbQkrWZhZhfS17/FvBR24f8FEemBSFUdihd1VWLzhqw8IqBYWRgy7asVuQr6HgI7TSoUvcNhRvXNocoZkINyrH6a31epTRv5tIs6iTo/3tt+oJL1i3FF40vIP+0Yokd5qFh38je2QSmDt2/5Nxvx5DAxCAqth/+vorKn1P/g+fpup3Kym8RHWDTEX1IJsAVUQ/njuAw61NkLMsNU6TUvkDo7I0mUGdCiFKMIlr11vvXmh5y+blnEDXztlpLZDDcQZkA9XmllqFciZhdDOR5xpt8edG70WJicuPUthwmIwxJOzceZ4WHuTQGUPbf5Ko5zdnfZArDDg9JnIj3fguaZHUQTNHyDhZTt4fQ2se+S1lrVmp8buySSZHJuqs/om+qEqqfAUco0DO0RZdoCLKsTtAZKX9ZC/tkgqovbCuOVLVq4NBoLlP9cZ4OeNb9KEsr8Oxn7ZE/oNkEgm8w4DJYQyZ2ofyyr18Rsb4et3PAMvXnGQwZnvryeqFjE6t3by5VrGfKXXa84BSmIki6Bd3ajxWW3wO7vd31aG1/gFucaTIcu0DsKdrIGrkeIBeuWouTnw+4xW4PvMdn5vm0810PC7LoG/7Miq/EcAQlrxCykCGezGRAQl1bIYlshiaLWsOM40LTf7w26r+LKvEZW0opIHQ+9y/J3y6IhV7cnC5S8pMkXIAiQ72BHNmIsYQV/PPMCQcGBvCaJHKq+7bMaTvvHAGAM64+UqJwf61mRe33Qu0qoBOMS+zmqtg8BBeBfiZ8Fy5O0wzW9z00sDohcCh5AqSFeNFtRJtgwBYmNoAiSTcCrRYNH02ookKM1UqXPIkivC0fZuQYXcac7lpeTzmDRgh6+OqA6n5MiuV/YEJQYSwwcup7wBH+ZWb9s2yknq3MXiKbvNQJgFBeKg//kpV+hH1WshvNsKoQOh5TyrEMVVcMEfSf8VGQ62M1A55Nrcm7nGVPeg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b4462c25-a7c7-4ee3-8928-08dc9283f39a 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:20.7049 (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 09/18] avcodec/vvcdec: refact, fix naming convention of x0, y0 for sao 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: AZYaIbfyl4Ic it's mismatched with the ff_vvc_sao_filter function declaration --- libavcodec/vvc/filter.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index 534ba57205..10d11ce31f 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -237,10 +237,12 @@ static void sao_copy_hor(uint8_t *dst, const ptrdiff_t dst_stride, static void sao_extends_edges(uint8_t *dst, const ptrdiff_t dst_stride, const uint8_t *src, const ptrdiff_t src_stride, const int width, const int height, - const VVCFrameContext *fc, const int x, const int y, const int rx, const int ry, const int edges[4], const int c_idx) + const VVCFrameContext *fc, const int x0, const int y0, const int rx, const int ry, const int edges[4], const int c_idx) { const uint8_t *sao_h = fc->tab.sao_pixel_buffer_h[c_idx]; const uint8_t *sao_v = fc->tab.sao_pixel_buffer_v[c_idx]; + const int x = x0 >> fc->ps.sps->hshift[c_idx]; + const int y = y0 >> fc->ps.sps->vshift[c_idx]; const int w = fc->ps.pps->width >> fc->ps.sps->hshift[c_idx]; const int h = fc->ps.pps->height >> fc->ps.sps->vshift[c_idx]; const int ps = fc->ps.sps->pixel_shift; @@ -260,14 +262,14 @@ static void sao_extends_edges(uint8_t *dst, const ptrdiff_t dst_stride, copy_ctb(dst, src, width << ps, height, dst_stride, src_stride); } -void ff_vvc_sao_filter(VVCLocalContext *lc, int x, int y) +void ff_vvc_sao_filter(VVCLocalContext *lc, int x0, int y0) { VVCFrameContext *fc = lc->fc; - const int ctb_size_y = fc->ps.sps->ctb_size_y; + const VVCSPS *sps = fc->ps.sps; static const uint8_t sao_tab[16] = { 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8 }; int c_idx, restore; - const int rx = x >> fc->ps.sps->ctb_log2_size_y; - const int ry = y >> fc->ps.sps->ctb_log2_size_y; + const int rx = x0 >> sps->ctb_log2_size_y; + const int ry = y0 >> sps->ctb_log2_size_y; int edges[4] = { !rx, !ry, rx == fc->ps.pps->ctb_width - 1, ry == fc->ps.pps->ctb_height - 1 }; const SAOParams *sao = &CTB(fc->tab.sao, rx, ry); // flags indicating unfilterable edges @@ -277,16 +279,12 @@ void ff_vvc_sao_filter(VVCLocalContext *lc, int x, int y) sao_get_edges(vert_edge, horiz_edge, diag_edge, &restore, lc, edges, rx, ry); - for (c_idx = 0; c_idx < (fc->ps.sps->r->sps_chroma_format_idc ? 3 : 1); c_idx++) { - int x0 = x >> fc->ps.sps->hshift[c_idx]; - int y0 = y >> fc->ps.sps->vshift[c_idx]; + for (c_idx = 0; c_idx < (sps->r->sps_chroma_format_idc ? 3 : 1); c_idx++) { ptrdiff_t src_stride = fc->frame->linesize[c_idx]; - int ctb_size_h = ctb_size_y >> fc->ps.sps->hshift[c_idx]; - int ctb_size_v = ctb_size_y >> fc->ps.sps->vshift[c_idx]; - int width = FFMIN(ctb_size_h, (fc->ps.pps->width >> fc->ps.sps->hshift[c_idx]) - x0); - int height = FFMIN(ctb_size_v, (fc->ps.pps->height >> fc->ps.sps->vshift[c_idx]) - y0); + const int width = FFMIN(sps->ctb_size_y, fc->ps.pps->width - x0) >> sps->hshift[c_idx]; + const int height = FFMIN(sps->ctb_size_y, fc->ps.pps->height - y0) >> sps->vshift[c_idx]; int tab = sao_tab[(FFALIGN(width, 8) >> 3) - 1]; - uint8_t *src = POS(c_idx, x, y); + uint8_t *src = POS(c_idx, x0, y0); switch (sao->type_idx[c_idx]) { case SAO_BAND: From patchwork Sat Jun 22 06:23:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50065 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp937586vqz; Fri, 21 Jun 2024 23:32:55 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUYV7XMuHWeV5I68lCNPdiF19q7IlxKn4P9epQjuSgKQFfd7VKdii7hqkIJYvqJ2C2iZVOLA75yRLbGtljzkzpzeI9+Fgp1PO2IIA== X-Google-Smtp-Source: AGHT+IHzi/0mCfM95EFDP/yGzcxyBWzwYBw2/zsPl2Mw2LI2GZAbZYMXs8sJDrcvLGShol5beIp9 X-Received: by 2002:a05:6512:281d:b0:52c:de91:590c with SMTP id 2adb3069b0e04-52cde91595dmr387187e87.24.1719037974754; Fri, 21 Jun 2024 23:32:54 -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 2adb3069b0e04-52cd643b83esi877157e87.439.2024.06.21.23.32.54; Fri, 21 Jun 2024 23:32: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; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=Lm4hF+Bh; 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 BCBB468D887; Sat, 22 Jun 2024 09:24:47 +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-psaapc01olkn2076.outbound.protection.outlook.com [40.92.52.76]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6397268D80F for ; Sat, 22 Jun 2024 09:24:39 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mwQM6LLSEYyvHBcJ3R5jJo1b6NJpEm/RjF6BpAJc3H630GjR5SLMp8uldyguUqLN+rl3d8DCkiMWLnr2/Tru3j8YPGPzeZjOBTsRRi8Z6qwSFES3AhLtBdsYu9g/xeEP/6mLAMh+gILgnZDwBshBQtZ3/zCfqmbmWvKAi0Ol15YHtj/YpgyTmEgA6ucPq3Bzf5GZgyB62NPTQdqFvDVMon+puNGUexzKBl+p2gzNGpFjvarMI+LRdZ2KtLC3qchJAKL1nYW7gMUaZeN0g7RLZ8dRMmsbQ6jaA9sFzz6jc1ersj4+jtB4MDe94yrbwIrJhs3UW156K1qNeo8VeJtiaQ== 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=McH/2sY4Tz8Q7nzLuJYB1hGd0L0riqnaxTQJjTbW8D8=; b=FOaP4yccNpPcip+hVNlhHLBIlb9rNjNAOdp410pUnfEXV8G/MINxGM6EYQYh4Q1AmxY5nrZ2TBvqm1bGoOIUrWTC713d+FB7rqYC1t48lThijweV4cYlUJUHakKaboQoIQZ9fX0EvZXSRucWnFbyy9fBYVOjNCVcYJTIU5hN7vHsPsa7kghOaPsaXTtcSBvo5tdbaWArStu0LrEM9GWoRw7aLJnPM6Urm41g5Qg7gPgJC+QvaJZUhVPsXLF8kD4pDPvEbRHrr8D7hOKPL6aybncP/0nkciioz2+nVCG/dipOTmwwa2SQ6iDxrbQ1cgeVg3ZnDSEjEihjzM9tum+fVw== 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=McH/2sY4Tz8Q7nzLuJYB1hGd0L0riqnaxTQJjTbW8D8=; b=Lm4hF+BhdyDydqEOx+Axu4YM9fl/JgBVz41qw7cbP5BjyUFFD7v68z2+uYGaF1oCCDamFwCnkfUXLYM87fUZ8lpJObsimKilBjRjCxaU1YKuXtDTI9tDtOwPpHPKx9HLtHsbUvIzXYyf0LrbJTVfBT2+ElJeGebzS7f29lQKPjXdM9KGxHklbEtTsHivI2NqhQuErMOVh8XtpyHcILtE1GjnTD4h/dDZg2NETV1m1qkY7hqBCvqgja1wosDYkFKcshb8vmgD8ylCdfAotHrvLK8pZJVQsPqDKPXzuj4Ub5BvTvpqUBVYrepXHXy4A75tfimZPS59iwXSu7K0XO3Uqg== 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:21 +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:21 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:23:57 +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: [TIS5ElUFx0fxyoKWnqR2BgfmK/kV0jZB] 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-10-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: 674dafea-b479-41d4-34d8-08dc9283f400 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: 3vORvCvCGCTXwAdIF36eQ76fl+GpdvkMHk6fteKK4C24GGA6Q1tT8eE9jGmFHk+oiEjQRSy76bPeD8TVXGugav05djB/qWXQ9HIvVQEuZclhDk2zTCD/JNvN9NDZ9M5/udBDKp5A6ZGd6urXkLREwZHDxecPgv4oWgY41rTFI5OKXDoiHUtPmIhIqDYEhQN/2UPCwe6wnt1IEM/1WDcM86IDfrme6Qp5N+Bq/kd/6X3EFrCvjhOPqp5oRyP5LloBO2d4TUUnaekoIHtjTrFsv1nsjn3LBLZvMiLxbm/JSsyHi9kNEiM/6gf2Zv8ZhrTE9IO6SeuMGd6TTQMunNt1HGvp+LRoK/xgEfszBMEw+yoVPoFD6v1xGZbqA8cinUd6ilnXFBxaFhA2MB9GqMoCJEprpjDcrrvrqmOvyn4WkCM9nd1cmLlHMtah1visjEMsb8tOHsmoa9/fBhI1Plu0WaW2QMHu4IigH2fSRsfQQwONow2jJNCDGM2EfOnYQ9e/Gxq6QKNxWG6cWSJHiLIC3jIqWQTAN738bWALyy/4LrtGxnvHXiizwsAxxzj6xBAwDLb0us4hkYUT+nnPnIm3rscVP/iWcTIuBSVJY325wZtQNi07RkzXq225fMeOsOAO X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: i9AYeqvn++s76+QmQSo4bVPCuu9cFKsgyjLAclzBGODI2xqIUWN395k/DnOqDLdqmj77s90QS58kPnwSwIFLBG2dJFToFV3ATkTuBqLS3uXMyMDLmn8NJa569NrnFOdvRgTEYyJaRAnV9SbEBGJccvi2b1A6yNawPyHjEzqpSgsmYceA0q9jcI1ZI4B9DX8dbXsM8mw9Z8Z0FmXVuLDldTrW3D+37KPU8zLb+XUY7ZQ65zGhPDoXJM7nYMss7zRARkZIGqPd2B/MAJTbzdLXb9O1lvsF54s5Jw4bZzMm0jd2m6UVUEgadwj2fn8lCSGVoOpjACj9+ZpRwuI9/oMSZHqYkB51l/0ss40SZtbjudMvJ+LKU8FEfewA1i6JXMsArz4c1WIM3Us/ck4IjJhJwdTuBMpe8CfqtOzfW+LQf6KeJFsrMj2lPJD4WJIEjKb8W6gEaX2k0s9CFc8MobgPTpjnzBDQVb2waO3kA3Zskks2cA6mjya/Jq/C3QRuUSvT48U5p1iqY+BquKNL3XIDVzg0mneLA6BWRi13wfmAs44QGq1EDZegSNo4jglI1nEwcLFHhc3RSPTdK4uNllqXh4WniFHu/JYiMk/ITom0ZjDqhfOetoX+OdvTV9Ijvvc+6aZG28J0LGk2dTf19bNxIp6E08LuJGryY2gmWyX0rqsUv631PqrPJIVt+KYACFz2aaZvSZ4bXE52R/NxiVhOLVR3q7btzpfZmf2siuLl8LixW6ruDqhGKhApEZdsVWm+XU61g52ghGUlHBtAPdTQjBzMpdIEkDfxUrDWlDZgAK1GXt7awQ7up7BnuCn/7ozuFGECpYsrfLnxX18tNWEtsWOTs+XLQwAGnH0Pbb2UvvoRfVU6vFUQ95hSTPsjrrC3wjF3qWQW6IzdCKZ5FAEpheqFzUraaeBv1qONs9rq7Whddzbxqq6MlROR7qm7N+6ax4TdpNZNEFpZfbM/IoeUyjW7intuB+UFwh0M4WYli5Q5FOG+oSKS1j349Dm/EtP41flkREtGNM71eFlGHTXhBsu+q+5PT8bqKvGyuNlxvThtqq7S3XrM3kIEdvYGA/Hn65jrl/Mw+StVtol0eDmwmULCgdLPKT4X8MUaI7/+rIi6CJqXLVHSrM1PerZ6qBXWGQgG93kcVqY+w5IGre4Zrf36X+qKt6Rflid+3z5YjjOZrBb7F2laYkT0QX0Met3iB4em9iQJKokoBHLErA2Q0qjyQfVRaMaRAERnguWlNThs2dewSJGB9bZEk29IfxVN63m9UG2L+TmpWJOINCY/fA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 674dafea-b479-41d4-34d8-08dc9283f400 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:21.3637 (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 10/18] avcodec/vvcdec: misc, reformat ff_vvc_sao_filter 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: JtcuRb4N6b5H --- libavcodec/vvc/filter.c | 52 ++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index 10d11ce31f..3aa241ad90 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -266,44 +266,44 @@ void ff_vvc_sao_filter(VVCLocalContext *lc, int x0, int y0) { VVCFrameContext *fc = lc->fc; const VVCSPS *sps = fc->ps.sps; - static const uint8_t sao_tab[16] = { 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8 }; - int c_idx, restore; const int rx = x0 >> sps->ctb_log2_size_y; const int ry = y0 >> sps->ctb_log2_size_y; - int edges[4] = { !rx, !ry, rx == fc->ps.pps->ctb_width - 1, ry == fc->ps.pps->ctb_height - 1 }; + const int edges[4] = { !rx, !ry, rx == fc->ps.pps->ctb_width - 1, ry == fc->ps.pps->ctb_height - 1 }; const SAOParams *sao = &CTB(fc->tab.sao, rx, ry); // flags indicating unfilterable edges uint8_t vert_edge[] = { 0, 0 }; uint8_t horiz_edge[] = { 0, 0 }; uint8_t diag_edge[] = { 0, 0, 0, 0 }; + int restore; sao_get_edges(vert_edge, horiz_edge, diag_edge, &restore, lc, edges, rx, ry); - for (c_idx = 0; c_idx < (sps->r->sps_chroma_format_idc ? 3 : 1); c_idx++) { - ptrdiff_t src_stride = fc->frame->linesize[c_idx]; - const int width = FFMIN(sps->ctb_size_y, fc->ps.pps->width - x0) >> sps->hshift[c_idx]; - const int height = FFMIN(sps->ctb_size_y, fc->ps.pps->height - y0) >> sps->vshift[c_idx]; - int tab = sao_tab[(FFALIGN(width, 8) >> 3) - 1]; - uint8_t *src = POS(c_idx, x0, y0); + for (int c_idx = 0; c_idx < (sps->r->sps_chroma_format_idc ? 3 : 1); c_idx++) { + static const uint8_t sao_tab[16] = { 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8 }; + const ptrdiff_t src_stride = fc->frame->linesize[c_idx]; + uint8_t *src = POS(c_idx, x0, y0); + const int width = FFMIN(sps->ctb_size_y, fc->ps.pps->width - x0) >> sps->hshift[c_idx]; + const int height = FFMIN(sps->ctb_size_y, fc->ps.pps->height - y0) >> sps->vshift[c_idx]; + const int tab = sao_tab[(FFALIGN(width, 8) >> 3) - 1]; switch (sao->type_idx[c_idx]) { - case SAO_BAND: - fc->vvcdsp.sao.band_filter[tab](src, src, src_stride, src_stride, - sao->offset_val[c_idx], sao->band_position[c_idx], width, height); - break; - case SAO_EDGE: - { - const ptrdiff_t dst_stride = 2 * MAX_PB_SIZE + AV_INPUT_BUFFER_PADDING_SIZE; - uint8_t *dst = lc->sao_buffer + dst_stride + AV_INPUT_BUFFER_PADDING_SIZE; - - sao_extends_edges(dst, dst_stride, src, src_stride, width, height, fc, x0, y0, rx, ry, edges, c_idx); - - fc->vvcdsp.sao.edge_filter[tab](src, dst, src_stride, sao->offset_val[c_idx], - sao->eo_class[c_idx], width, height); - fc->vvcdsp.sao.edge_restore[restore](src, dst, src_stride, dst_stride, - sao, edges, width, height, c_idx, vert_edge, horiz_edge, diag_edge); - break; - } + case SAO_BAND: + fc->vvcdsp.sao.band_filter[tab](src, src, src_stride, src_stride, + sao->offset_val[c_idx], sao->band_position[c_idx], width, height); + break; + case SAO_EDGE: + { + const ptrdiff_t dst_stride = 2 * MAX_PB_SIZE + AV_INPUT_BUFFER_PADDING_SIZE; + uint8_t *dst = lc->sao_buffer + dst_stride + AV_INPUT_BUFFER_PADDING_SIZE; + + sao_extends_edges(dst, dst_stride, src, src_stride, width, height, fc, x0, y0, rx, ry, edges, c_idx); + + fc->vvcdsp.sao.edge_filter[tab](src, dst, src_stride, sao->offset_val[c_idx], + sao->eo_class[c_idx], width, height); + fc->vvcdsp.sao.edge_restore[restore](src, dst, src_stride, dst_stride, + sao, edges, width, height, c_idx, vert_edge, horiz_edge, diag_edge); + break; + } } } } From patchwork Sat Jun 22 06:23:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50066 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp937596vqz; Fri, 21 Jun 2024 23:32:57 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVWPHtpk8zslEZavmGWP3xDASH+OFldiC8WH4lH6Y+vf0LTvj1gbCYOXkZXgjnV0FgbTCgPncno1aTamKewNi8Qq3CJ7cpUZrGjkw== X-Google-Smtp-Source: AGHT+IH3aeTRMnKvyLFtvA38aVp0Z/CNzVfuqPpbpRB0MN6vS1TbIP3dvtbiKAZi9lWZf6Fb+AIo X-Received: by 2002:a05:6512:3ba8:b0:52c:db4d:9f3a with SMTP id 2adb3069b0e04-52cdb4da0admr2295738e87.15.1719037976980; Fri, 21 Jun 2024 23:32:56 -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 2adb3069b0e04-52cd63b4049si866436e87.63.2024.06.21.23.32.56; Fri, 21 Jun 2024 23:32:56 -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="Ndz3/sEP"; 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 14FDC68D8E8; Sat, 22 Jun 2024 09:24:49 +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-psaapc01olkn2027.outbound.protection.outlook.com [40.92.52.27]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9566B68D863 for ; Sat, 22 Jun 2024 09:24:39 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Skm2RXqdOdqvuohRMov/FHb46H8K6+uA0KE7UJ6JSifavNWRF39ppOjh6TjvaLQS8K4uBzs8IKNSToxsXZxUrS/3qLAR2xiizHWKXLJ/yD670MEkoGgpt9dHW6N8AQyBi3Z4PBtqJkXajUuWTaotftLKVRnwviPjn0RnIieTAmnD+gLNmOJmPQJsRf38DChhRd1iAFgA/ur54nPoMz8Ioc6qC7mray77I1fRcSyU1iCHp03xsvNPJdx6MHC7PmYOln6aEhPVI0KbR6myFfoWiTyYinw4ostrNNx1uxJdmdx+NDnNf52D02K/d/44dutayAdvwn4HVgXc7mae7CUqSA== 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=HvgY5lpOoEkgrJVrxY3fO26KaysQlrdCEpJ/iG2fQe4=; b=SKu9YcAZSNUo7rm0tQrMsnBnqJpe1aybF3eEEYY/FSmTZKZ+W5lIuR/RVsifx2pn8E7GNWB74vDGIdRct53LgZTjyOedylnJwvfZRSl+RodF4/FkiiCuSk09xms1cPPJCLRy7iiWK4aQ+18fBb5wFjU5BMdYyhEfHATdR8qczulSolJqgT/r/C/mWCDqR3xMBOCcRxsh9UCr/v/0RmVMSlqFHbsI+Lp2dfRB9B7+sDS1Zfvh/syD/AvESyC1Kj/splTuNg9WMOuzihOr3STg/Ynh5smIs22xLfPoJ+CLK+2ToCaQv1sD61mvjZUZOpOBXsLUPRmWFLwHSEeKtYDQmQ== 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=HvgY5lpOoEkgrJVrxY3fO26KaysQlrdCEpJ/iG2fQe4=; b=Ndz3/sEPNoDkT4iNbYmZjUUCW0sojMWdCj8096/r1HPaNXO+WDbBkuxH9PYWPZ0zNx5YN1uJu5Z+Hsck8Dr6BkatfO26tYxTBX7iGa2TIhygs+gAXgf5dy23R4FNB8/n6aOGzaFAauvl3ZqC6B7nc6dEQlMeJtcmApGfgQ17s6oD4nRZwE6icbxc/E8NcBv5kwpjrDFvzuAbcR9eZDliNd5S8t6BKMp3YUOk/GFc4MziM9p15pksnlMoE1XThUVoQaKZYW3K7yEh+3g6k0AlX4yu1BIIRe/2DL5NeQOlNjVokn0oThGWY/5iTjfAlBmjRR15KPU13bttEDdu5MTKEQ== 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:22 +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:22 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:23:58 +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: [nwuIENSsTwOVG0+6xu1bv6LeuGiVErQO] 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-11-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: a81fc6c6-6f17-44ac-4359-08dc9283f465 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: 2vp0QxRZ5OXtnxlH+wLhR9I0aYMTfN16tGzo3c1/XDZFTgOq4eO6BWYprFuCc3S5HwO9I2Kyr/O+/T3rQfHfMfm4imGqlfZUO553rShsOousXj7jTSW0EgFktlxtCMBllVIvzgPlOiU9nmaofbcdIOz+JWQVM7qBxzOB7uQHDGmxa6UZc1doLIIq0y00+jIF8skIxdlcPegHYioNzY6sRa61IGppF63aUU1arHhiTMENtGkqOeHoiFSAzQ4hdRaLi8csyJvBmETw1hQOgEN5ayDgMOehGZ1hu7vaJIFrvbUVyRCXZYovggxo4WJRTW8JsG2fwE1hSecBo+aZxKche3GW5T5pTYv7U6kSLilrH9D4bQYORfd5CCVy1jjbaNvmwDoPAKZ6NLgR3pubURj0ImxeyYKd5jJReEPSsMXOpU4zXGB/BdH/5Ww2cLPT5fUNj+BwP8u8nZFzh7lxxHPXBe4J4/SbRnYCxyzkrX9/Zfz0KEC7F2CPhIllJMniDLXWbihtUaPPcaj1BnGKUC8n68EDHbmcWd0IOWpI6ajJ0QdtxfUXO8iyV4rIwFhhehnVjluuJba9cUq8/hlv9RASJuf938wSm5d0vxox2aAymFCLaN7yoKCCpXVwfpZRCvOD X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ZXiL16DFn1NtcyRj/M79xi60wp4UJMQfdss6Kq/vjU5mhAGNxkXyTBb9woK4Nml9ojsR/mjsHUyLC8t/ZhFVpNaF/Z1R1rfWNwFqurqIL4Iv17BclVTB5LywHKqrdDd/Isld8H2wOnHyBppXXw+DNlNISN/EmYegrNVklrYXUCw7TBWm6r0uAxA3oM+ZgGtewgLLRuVVHDhxtSZpPWW8zAmM2Y4zow9mpLmO7DDCErYnmX9Q7971zEvsb6mO8Sx56BzRtNMwztKMtaNdlJ5EQNZdeHYHrt4M+xfYTV1/wJPDaTsod0h4Cl0F+PD9wM3MRqNLwBrNGVUWPceLYakWi4bjLADalM7JejyyqI/drC7qZ/2BLSzQgWLquk2PNjs2fXSIYR3ScRjjjLJxdiQwGHwCP7UdPrQsXx1jwpm3Vn5AUxdS5yAAmzRolSTY7bpSJnaY2NU8VV7HelNjAS5nNDYwvV8sKD5zECiaf0qlw7Tg4O3kv50JEEkcIkAMu68KCm+9pM5JJtB1hE2im0jGgKhpfu0EdE4sz2yzDF/Idsk8xtqXgdZJCC1unsxA0jBB8odzputQo5DXfwOkOyDL9jW7smwm5nYuYVZDtCyGgRXODe3Rui4b9hoQgI2nXKJ4TVp5QaHawIdhEuNZMob9g6CKpxZqAW5LPYkYG9/6us4g/OVlD37cKEdjn4+xq9CAJiy1yZt8yWZXQqqoyp0iECxMF7fuLcENJ4QUGPcu+lgx8sXqS6mBqhJ8QnM3j7h4UzruHSDSDNv5rtpOJoEQdz82VsttZF7RKRtzeGX0F1Kn5Z8V2NmGvQtkj49APOHndNGAZWlINrKTTSgdOttB9mekrN3PNusRFnzcmG5fPur3Jk6YNhFvlXDsf0PNWBF61qKFSf2ayIMYKKi+fPv6hNtNR+h3Jk1h//nFg7geRQ0uBRmOImxHdbLkN2TjZ2aosRwd8yIr0KGcUnemEirpG0kqoMS/W7RKp48m/vmVBIGdyOOo8HFs9tp/K6gr5oM3GhIuE1xnxHPq67JiUfS/kzbJAVdgdpXFen5pA4jNTVXAEpuKvHtqsJgz1tC0SogfNzdeUNwOzUvWsA9J5uB6mxRHQz+syvFLk/kXemkoJPIrMeMzX6VCubKM8RCJ4awlTFHe3svk99qvDFRZADkzvQ4UXb2FEHXd85DiI8TIYArSenKSVc8SvuBwOhUjIIzIBvpuNExfSZMEVAF/FVkPCJMTRsfrxV1e8hm8zEDk+J+B35S+AfoTQWTU/B1Omi6A+57OYFBX+v2pMQnhqmEI1g== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a81fc6c6-6f17-44ac-4359-08dc9283f465 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:22.0040 (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 11/18] avcodec/vvcdec: refact out alf_get_edges 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: UI759Eldm+Aj --- libavcodec/vvc/filter.c | 53 ++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index 3aa241ad90..671e599dab 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -1036,6 +1036,35 @@ void ff_vvc_alf_copy_ctu_to_hv(VVCLocalContext* lc, const int x0, const int y0) } } +static void alf_get_edges(const VVCLocalContext *lc, int edges[MAX_EDGES], const int rx, const int ry) +{ + VVCFrameContext *fc = lc->fc; + const VVCSPS *sps = fc->ps.sps; + const VVCPPS *pps = fc->ps.pps; + const int subpic_idx = lc->sc->sh.r->curr_subpic_idx; + + if (!pps->r->pps_loop_filter_across_tiles_enabled_flag) { + edges[LEFT] |= !!(lc->boundary_flags & BOUNDARY_LEFT_TILE); + edges[TOP] |= !!(lc->boundary_flags & BOUNDARY_UPPER_TILE); + edges[RIGHT] |= pps->ctb_to_col_bd[rx] != pps->ctb_to_col_bd[rx + 1]; + edges[BOTTOM] |= pps->ctb_to_row_bd[ry] != pps->ctb_to_row_bd[ry + 1]; + } + + if (!pps->r->pps_loop_filter_across_slices_enabled_flag) { + edges[LEFT] |= !!(lc->boundary_flags & BOUNDARY_LEFT_SLICE); + edges[TOP] |= !!(lc->boundary_flags & BOUNDARY_UPPER_SLICE); + edges[RIGHT] |= CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx + 1, ry); + edges[BOTTOM] |= CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx, ry + 1); + } + + if (!sps->r->sps_loop_filter_across_subpic_enabled_flag[subpic_idx]) { + edges[LEFT] |= !!(lc->boundary_flags & BOUNDARY_LEFT_SUBPIC); + edges[TOP] |= !!(lc->boundary_flags & BOUNDARY_UPPER_SUBPIC); + edges[RIGHT] |= fc->ps.sps->r->sps_subpic_ctu_top_left_x[subpic_idx] + fc->ps.sps->r->sps_subpic_width_minus1[subpic_idx] == rx; + edges[BOTTOM] |= fc->ps.sps->r->sps_subpic_ctu_top_left_y[subpic_idx] + fc->ps.sps->r->sps_subpic_height_minus1[subpic_idx] == ry; + } +} + void ff_vvc_alf_filter(VVCLocalContext *lc, const int x0, const int y0) { VVCFrameContext *fc = lc->fc; @@ -1047,31 +1076,11 @@ void ff_vvc_alf_filter(VVCLocalContext *lc, const int x0, const int y0) const int ps = fc->ps.sps->pixel_shift; const int padded_stride = EDGE_EMU_BUFFER_STRIDE << ps; const int padded_offset = padded_stride * ALF_PADDING_SIZE + (ALF_PADDING_SIZE << ps); - const int c_end = fc->ps.sps->r->sps_chroma_format_idc ? VVC_MAX_SAMPLE_ARRAYS : 1; - const int subpic_idx = lc->sc->sh.r->curr_subpic_idx; + const int c_end = sps->r->sps_chroma_format_idc ? VVC_MAX_SAMPLE_ARRAYS : 1; ALFParams *alf = &CTB(fc->tab.alf, rx, ry); int edges[MAX_EDGES] = { rx == 0, ry == 0, rx == pps->ctb_width - 1, ry == pps->ctb_height - 1 }; - if (!pps->r->pps_loop_filter_across_tiles_enabled_flag) { - edges[LEFT] = edges[LEFT] || (lc->boundary_flags & BOUNDARY_LEFT_TILE); - edges[TOP] = edges[TOP] || (lc->boundary_flags & BOUNDARY_UPPER_TILE); - edges[RIGHT] = edges[RIGHT] || pps->ctb_to_col_bd[rx] != pps->ctb_to_col_bd[rx + 1]; - edges[BOTTOM] = edges[BOTTOM] || pps->ctb_to_row_bd[ry] != pps->ctb_to_row_bd[ry + 1]; - } - - if (!pps->r->pps_loop_filter_across_slices_enabled_flag) { - edges[LEFT] = edges[LEFT] || (lc->boundary_flags & BOUNDARY_LEFT_SLICE); - edges[TOP] = edges[TOP] || (lc->boundary_flags & BOUNDARY_UPPER_SLICE); - edges[RIGHT] = edges[RIGHT] || CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx + 1, ry); - edges[BOTTOM] = edges[BOTTOM] || CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx, ry + 1); - } - - if (!sps->r->sps_loop_filter_across_subpic_enabled_flag[subpic_idx]) { - edges[LEFT] = edges[LEFT] || (lc->boundary_flags & BOUNDARY_LEFT_SUBPIC); - edges[TOP] = edges[TOP] || (lc->boundary_flags & BOUNDARY_UPPER_SUBPIC); - edges[RIGHT] = edges[RIGHT] || fc->ps.sps->r->sps_subpic_ctu_top_left_x[subpic_idx] + fc->ps.sps->r->sps_subpic_width_minus1[subpic_idx] == rx; - edges[BOTTOM] = edges[BOTTOM] || fc->ps.sps->r->sps_subpic_ctu_top_left_y[subpic_idx] + fc->ps.sps->r->sps_subpic_height_minus1[subpic_idx] == ry; - } + alf_get_edges(lc, edges, rx, ry); for (int c_idx = 0; c_idx < c_end; c_idx++) { const int hs = fc->ps.sps->hshift[c_idx]; From patchwork Sat Jun 22 06:23:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50060 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp935881vqz; Fri, 21 Jun 2024 23:26:28 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWGq/om6ObtgEhigp18TyY6fk0TYL4YiQ4Lq0xNcHpyHaUNwJRhUpGT21BDNjDFczz3/8kgRrdO+ThgDTOjH2pPHk6SwF2Sw+HcNw== X-Google-Smtp-Source: AGHT+IEOXepSlD3G2035JOjh0bUIOsvM+APrUeiK1cmlOqO5eGZBVkv9bdR9tZp1wR22l/+8gGXc X-Received: by 2002:a17:907:7669:b0:a67:a2e0:9dd9 with SMTP id a640c23a62f3a-a6fe76c7142mr35863766b.2.1719037588712; Fri, 21 Jun 2024 23:26:28 -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-a6fcf5ade11si152934566b.1043.2024.06.21.23.26.28; Fri, 21 Jun 2024 23:26:28 -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=qIyftj9F; 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 C444A68D8EA; Sat, 22 Jun 2024 09:24:50 +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 AB17D68D87B for ; Sat, 22 Jun 2024 09:24:39 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WBmW3KhdyUmN6js8mdtMACEzdaFAE46hUDGYTnxLUsgtRD0Tcklj7gRgnR2t22tNZg747UDtcGCX46j54MQ7icsxmeyF45MFpr4czzCU710oc6eEkDOjT1cIwufK5b18WuaTfa1j6UXOr+QAFr5eKNWwPaXEZAWenFNc0NbFkLy4fXrFpZthBidqpYp190wRB9+fYxettcey0mrp4eeIi+8DF9GbFGWLesLoVu37qBUlMYAi8sejSYI+A6ZuxmPug8b8WWNWr1tH0ISwgyipjFu9U8uoaHxEzdy3UdCF2yzQFmzRXj1xhtlL3DMTw6mghxq8dqHBi27TLm947CRzng== 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=vswViS+A7sMJja3ZhR/LljHcMpD9WYqhLtDjeqWHGpI=; b=Bm3J5+/OWC8cqE3cdIsPUtUyn6HECYn4W18uz4M4FFGzkqp7Ra4wVrMYuWchekxOzX8tTBVBEfSpWoiIkF2SACa1IjKuSo9trcHPQzVi5WrTdKEFkVE5uyVvXoHArSW8lP46rJFH613+AvUTc/jJiBIdfyLdRinRwxgknL+s36pxhvg7x0BdjkRbXKjLj4wFFKtIe3wxIWdh9ZjlCeAtLEG52nr66ut7jcpFcrLpyWS6CTE0icI/10WJQmrMGnmeiwjxrygyXg3yn8lTSdXrOSgmomgAMIXDsMqGGYcqezAgBQVdDenByoGLYlk1ZrJUAuqXXiZLWLs9IX/ik13SSQ== 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=vswViS+A7sMJja3ZhR/LljHcMpD9WYqhLtDjeqWHGpI=; b=qIyftj9FQ76W1+V1nffgLaibaPIX0L+8mCU7ZmdldUwwIr5yQhKwHhrB2SYSndhkoL7ys473yML4jIoegcOfTkAXYW9TDcxk5LFNWQ7oHUIcwZ0cdKOBdhdWG3FZPkaN23yoRPhUaMQsdgzNIrDUn93V6U87BrkAa1HpQgNPNykcKKYc6xq1jawMDBG27S5EYl+RtXOSckD2rbCxAGfse1FNpX/M1zh2ZVl0/8jMkSb49Wy0sDaWW23+xiZQU0UEYRRWmm0nrkTPLT3ETaRbAg3Wa/Vv2Bkdm1ctc3O5gjeNkYyqXeY43Zi1Dype6vFLFTTl36AscYS9VhlZc1Z1VQ== 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:22 +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:22 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:23:59 +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: [Wvko5IGuFnfvznkKa9LZbJI2CaipZkkk] 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-12-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: 0668a609-ae51-4cbc-24fa-08dc9283f4c6 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: E4z6QDfOOMGYAreFCYtZijGniTLygj2N5dpAHxINkgkMexWTpEbcwg5EJ7+58ELLuE8CScZj3Js7P3ZGsU/OwlLfGHNb0yFBd51sM00awFyvhYuUnpA4LTHs8k0larYrVg/IhIBn/ZrUCIn6gBS7+lztiA9xxibnX5QXDDAw6ueTwzCzSvBylSRTGZH3dh8GsHzAPR9sbqNOCbksPd6dyjHi8vlQZY+YSz0ldanOFx8RiOXd8qKgecBcodqQ3lM5S/xzH0ADegUlSPU/xH+mydZO1Xa33vJst3zTnZ3SVke4Bnve5IKU5q5r2R6iTxHh3ckCMtpVE0VfPZ9p36gpjrr+7g9urTCumGOq8rFi+lrElfffXx8gpTiHinlGC1tcDN2K3iizg10Xq9UTlWpkEaXIpxcGMzsPO0kRPsSruxHKVdSKHkWM1EPGuqFqeotaYUx6DOzNSoatSI6+zTPebLuSL6xfHnF6NH0F6V+l7xSztyjfXmJKyCUTtdEqSB8hszUufc8WS3TnNDsjz8L8GH0cmfC9EaWO395splTjoshQWpYerRGxCMwaqN3RasEFGGZ1vsrlfGyttFqyuYdI1BSX29hQlhnkd6iKP0CyH7gXYrjV/9+sGM9ttHYsi4zJ X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /BpUDcWlHfiqZw9TzDcw7s5yHBG1LTjiyguLx4yWYGFmWDR2I2Xq/CrjV8ytNtp6yva1xjh2B75hNtJ6Q3m89rwChUQ9/1olkDlJtiOiiHoh26xN7PGAA7gb70t4Fl3nONUBi2WaU4j5DZfD5DLwu4ZYg711MfVeY33Tti2yCE2eI0ihZSWQ+7BB0DhGTGVCB8eKYs6GK/MVPoBOmXaSiHlMLUqzY6mzI8/9YleMQDxx3YN2JopP34uGy9HI4NYy5AF9JJNHQLHDC58xCPcYXaSXGHclsLfvwCI+B3/P6LlTXxrJX/e2oYPmPuodEaKc35WHC85T646Prz/x7rE9g/j5sSgLzJ1ciwIjfrtBievgOQ8o4QTvgaz5JcEdwX1pPnq4g008VccMOjOLGNrrnCjrGJ8oEGrc+oHG0iSAScn2Pr6Wtmvc3V4aMqLXW0zrbKHZ+83zP5+ccbJxmf3LdxF6GL3MPBx3h/tZLU0amwMMlzcB7jRVSbLAupEw7Q3W2d20yFfh8szC7DJ0up7KHOpNOC0GFOgEOEmTK2wseOhBRDVsux4S5EDl+sSjlW0xRO8eXDEwrdnZ84aVb90NhSWTdASkrwZLTitJ/5kLSzEGcbHzHlYLTJthZC7nYKO1jiIlk/b4/AcrpYrp4RDUHaNB5NKzBz3Vvhm5msZwY/dIdCwezE5vdOYp4hQ9cdsF6Q0AU3VQtYRnzZrg5a7rIYz5FuwjBjAf24EB+9dZg+S55IEhgH1XlyrbqEiM1RmfgNBQc4I/SKjwOPNIFhYfYua4X/dR2Ai+Gun15yVEwy0GBvjEGUOfIHbqFyniPTHArY4u0C4+ku9KNWMJ7lXz23KPOwL4jqmSjd2mr4zyH1yzOIZApBMJw2qhU2AGi+eCfC+JQKj8pQzBReTr1x9wzJK+5LftbS4O4lCGP9R6WVoNb45dKkvCkjUdbPMSKECKpzp19o3aU/3ENI/wNObXF8567KgZ8QI3enmLZHchLiOzwg/fxFgjhBGuuUAe2V8D1lySo1hjV9y5WsiACM3qWqJFVLif+6mBYq1+ktljaw7srplYLiGWCcd3LeKc+FUvmTSwAz+oPdoXPykhgKYGvojutHiZSabO+4PFKP3WJKzPE1dXKzm/iRhJ/dTRc6zMsaBzHd/Jlxy6v1nYjI7LEDHZAiAcdhSwUOOkcAHEafnrbG0V7+7r2TwOCrcRxoT6QYOjfkFf6JCdopHI80yWSwUAM6rRzxQCuN0Rvlb3b+1bqMUAt9H2YhQO02R321RLBKfjrcQXvFUH6/LTZUW05w== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0668a609-ae51-4cbc-24fa-08dc9283f4c6 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:22.6417 (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 12/18] avcodec/vvcdec: misc, remove unused ALFParams.applied 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: /w0CVlBpq/3l --- libavcodec/vvc/ctu.h | 2 -- libavcodec/vvc/filter.c | 2 -- 2 files changed, 4 deletions(-) diff --git a/libavcodec/vvc/ctu.h b/libavcodec/vvc/ctu.h index a987328d81..432dbc5ade 100644 --- a/libavcodec/vvc/ctu.h +++ b/libavcodec/vvc/ctu.h @@ -461,8 +461,6 @@ typedef struct ALFParams { uint8_t ctb_filt_set_idx_y; ///< AlfCtbFiltSetIdxY uint8_t alf_ctb_filter_alt_idx[2]; ///< alf_ctb_filter_alt_idx[] uint8_t ctb_cc_idc[2]; ///< alf_ctb_cc_cb_idc, alf_ctb_cc_cr_idc - - uint8_t applied[3]; } ALFParams; /** diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index 671e599dab..457e2b99c2 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -1116,8 +1116,6 @@ void ff_vvc_alf_filter(VVCLocalContext *lc, const int x0, const int y0) alf_filter_cc(lc, src, padded, src_stride, padded_stride, c_idx, width, height, hs, vs, (ctb_size_v << vs) - ALF_VB_POS_ABOVE_LUMA, alf); } - - alf->applied[c_idx] = 1; } } From patchwork Sat Jun 22 06:24:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50061 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp935931vqz; Fri, 21 Jun 2024 23:26:40 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCV/wEbAOtGBD8rqqYcMLqiO2XW7oQV7M5jtrMw8mK6o+tT6PZsBTpj6jCElcXvAUEnZbzDhJV1/5+MDmRJk/QpOMOeTR9s5dZxscQ== X-Google-Smtp-Source: AGHT+IGndzX2on3AQ+5iLfYAEEw+r2KVW3jTf0iT1GjnwEG7uP+1bWERn11EQM4y7oA15omub7em X-Received: by 2002:a2e:9849:0:b0:2ec:4ad0:c9ac with SMTP id 38308e7fff4ca-2ec4ad0ca11mr29700991fa.28.1719037599812; Fri, 21 Jun 2024 23:26:39 -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 38308e7fff4ca-2ec529de196si4189371fa.100.2024.06.21.23.26.39; Fri, 21 Jun 2024 23:26:39 -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=dsMquT3l; 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 7CACA68D8ED; Sat, 22 Jun 2024 09:24:52 +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-psaapc01olkn2076.outbound.protection.outlook.com [40.92.52.76]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F421468D886 for ; Sat, 22 Jun 2024 09:24:39 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=m7amfJ7QjbXPAh710TFAvA9Fg5Jj9to75bu+9wc/jzSuyquZyMCEK8mOOdp6w/7SFGYk+T/lwc+4EbFQilDxMQf0NQ3xuuyoTe90D0c1RW0o1m7HJNhimqFo8oNTwqhDt7OKj+0rydmDmkGf0kxWKjNqQ/y5469uyTqSw7UDZPRfTm9aR2mL00sjM7Nlpo1aQO8OXrqV+d2usrJgGoQoUgcmSRwX7UVg+tHPJT/Rvu+VuBpfR+mdTo1V0lTeV7aYQkKjRgZUsgP3IgSqvcuGK8DUBCOogsqpp9y2gFG50a15xz9752dMcDEmzqMMnPdY+s7PAXfKj4pL/uEyFdJkhg== 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=NcXtoJXrvGfYooQQ9mx3u1x5nSCTkgowyZSfELikKGw=; b=nXSjkXXWYuCptZEfTYA6j2ZvPxlL/nBl1DEVNN6UbCpSGQ1l4TBbMDMTFNMjz/YbXyxZSj5iQHX/9JVRHM/wHrV29BRwz39hW5kosqw7fcLAiNz4yN5lWl5t1eGM8GkNppXxmonthL8lrCL1S5yPDfWnkkSftf9EnUtaXMelzSo3NFacOJwnuGGYkzQwomj8cytI+8A0VRuYN4nekYQjUgZCQ5f+SeZKYU4yqp7ARhTS6Olsce1ch/pmq7iyuCRmoXEUX6C04XLuV+nb003vp2XVgbqliyLMD4X0EW/2Lk+pyo05/c352h+zZroNl5pmQMoQkOmkSgwSRhiX9SmfRw== 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=NcXtoJXrvGfYooQQ9mx3u1x5nSCTkgowyZSfELikKGw=; b=dsMquT3lEpG6TloBp+TVCfT6Bc3sQOrMfO84TImvWwBerZHMod83+DbigFoSMtuwjev1IbvKX5HTDn4Mr8uf9Y5TSt7iPU4gkEPSeAskDR6kmtpo1SEh7uWzVxdWJAo8WsQhcw4IQ8yojDF0Wt/u1hg1347PORWEWPRKNoXfDrP1q24pyZsZ1KFwDST793mEZRRxHiEY8fghKqavAjB5WnhYRV8WVRTjhCC75jP9S9lh1HrOPyAut9dXFzS1CuIdigVmjx4I1j5MQJNJ3iJ1AyqStm1BLHLGIsGkg0+MAPDsQJrC2/5kvjHHSYRn/ptfpq4UeV/a+pIRM+kpLFOe9A== 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:23 +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:23 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:24:00 +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: [mmS5kxtJRmjnVJ2zoKdV43FoYg+DgVpe] 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-13-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: 32360476-fe2e-4a0b-7abe-08dc9283f526 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: VECyZGnFAGrRiQ3FFxXmbtBdhi3G1ahBinvHZ3Gba0VQXgHC7mKN2ZaR99cFXE5OWbFynomL+rnSCAQ6f3w0+d/GtzH1jvqjaGOnv3aJJOjjdznv12gMskxoTMZWyFBZlkpDpa8oT9gFMmwSIEdzPkNcqjMJg/6GwV6w9LMzXzQNaLQ066CFQB3P0W9QeR4GBACcPIzQ4a/2UbM7y65qdnqtTxL7HIk9HgGb+wAzSOgGI9GTwjfZyxvs2fXvpy3MMObKUnYf03M7W0mv1zY2Qr8XsnJYBXlLVE31zgWHaDaz9YcXmzWRTYcZvwrhLuStkfL7dwXPRz5EpA3NzzqGpQRJ53rjCZtEN5p+GXpESm5BEZcn7IrK9xyRf0R5W247gjmO6rELRtHT3HxAeNXw+rwwuCdBKM/LGt3skWka9Kw0EMl/x/PHKMyutRj6HEokT4SjUepK1P82DLvUXxMNJuli2SYM71IWN/BzpbFDV4Lly/0NvJ8+TEHOyConc8wikwMJQBRXAg4Alw944/127ZkLj/cr/Irr8tp5zoTJhbbI6w3Ny8bAyNDf9V3xH5Ys1SkGqUL1Yn3jBSfmZCV8FAuZm/nDb/m3Cg14T4c6eQaNntpkbCDxxIQ3uUzTnIFh X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 71gW1YCpVtg6DK3FcAil3Pv9xa8j+nRFGFLRbnXLuIeyLVb1KENe7ibaEebHadgDyJUnX1ZHFb4ZuaGm7ss2kCWNfYAJfmWcA7k2PZSwkdinLU6cNkySQ7eCueSrRYtCUrA45nl9pcHs1+/kILx2It2ksRAAvul4hLOf30U2IkcMGzGKT1JfZNIRleM9HjCsm2CTzyH63A19s2dMziUx8idw/ErhcgKypPya1PGthYjRkmYkUsFrRyEKv99/Q8pIg3T6XCdRAKg01seOy192B5SIIPx4cc34l5uQstGopKOHgI0uE4MtHW2/XfOGOjuSc4PBCQwZeKAwPIAXBReSp/wlDHOr+uGBSk4lJDFhfQ0xVfrZvTD43teb9ckRf/1WXldKe3Cu+r9jyYKAbrdEllUdUDzPNPKG2DML8Cv785aJmRccrYIG/cffiG+VTAtAn04NQQit4ADzUSn0Fn+7xh/YFJqRu7HGt+PuCAQODYyvlVVI6NARIPmJIyerWBLCgG5zUWQ4MIGJJ9IIlofA/XUpQHfLs3+rbZ4DsqacU7kKgvKsYdhE7Vn+n4LYO3srXalNdSXzGAWZpfa6Zi4f+1MJfUdSpyav32OXtKlVJ9WbFWgO16jnpp4rTShF7DSb3KAlOSsY9YtocMhQEiOw9SxWkT3Nf6Jd6YTgqGHdganS8TSlJr0AjxV2OtdvpJbN4Pd70djNsSPOFkEoTHx4MxWF9YsZzrJIANzNnHCmKdssEcbQdjUDRlSIfVWwhAweQfpfsoRMAlCyJHYvuPna5tnuMZ8/tqaQ9Lv1VPHpzfDIQTMcRvHl0zA1eXYRVTiXs6cnnGrjdjSkQjEKxJVWWVGqDrrEHTo0hd5RwofTASBw9B8Z5gb6qgQfZNKqZ/APuXLtHJ67cqPouJ6dkco/Bf/87HJUS9YUwpRU/OS5u5U+wA3OtLBMFRpFsyyOymUwxCra0FMF7MLxjS+FpGJWbjCUVZMO6G3uSICXYD8kdxartK/H3ovYo8DezBDWKpxRTWFplfQ5ABMmYgEr3gZdx16a1TCkL64rDQwmHmyr0Kh/BoOJ47A/MeEAXp63qweInFNL3/rXkukC4Ll8rweYJ4ND7KCvuEfDTkjkTsHqI16WZUhNUjrz0kt6c2gzluBIigeKmEPpEi4PlfJGPqJ5ICwhO9FOygGOyW76bH+7oiL+Gz8kceqcLGn/WbOV4nHPwWojCflS5rqMyG/3gDSffeRPZhdGHIJKMxtoI5mIMiHx6yMYOLX9NryCKxYw8cboM7PIjB0xog1LoN+8oJweJg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 32360476-fe2e-4a0b-7abe-08dc9283f526 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:23.2838 (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 13/18] avcodec/vvcdec: misc, constify ALFParams 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: G7uniJPxg6qw --- libavcodec/vvc/filter.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index 457e2b99c2..a5635c60df 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -926,7 +926,7 @@ static void alf_prepare_buffer(VVCFrameContext *fc, uint8_t *_dst, const uint8_t #define ALF_MAX_FILTER_SIZE (ALF_MAX_BLOCKS_IN_CTU * ALF_NUM_COEFF_LUMA) static void alf_get_coeff_and_clip(VVCLocalContext *lc, int16_t *coeff, int16_t *clip, - const uint8_t *src, ptrdiff_t src_stride, int width, int height, int vb_pos, ALFParams *alf) + const uint8_t *src, ptrdiff_t src_stride, int width, int height, int vb_pos, const ALFParams *alf) { const VVCFrameContext *fc = lc->fc; const H266RawSliceHeader *rsh = lc->sc->sh.r; @@ -957,7 +957,7 @@ static void alf_get_coeff_and_clip(VVCLocalContext *lc, int16_t *coeff, int16_t static void alf_filter_luma(VVCLocalContext *lc, uint8_t *dst, const uint8_t *src, const ptrdiff_t dst_stride, const ptrdiff_t src_stride, const int x0, const int y0, - const int width, const int height, const int _vb_pos, ALFParams *alf) + const int width, const int height, const int _vb_pos, const ALFParams *alf) { const VVCFrameContext *fc = lc->fc; int vb_pos = _vb_pos - y0; @@ -981,7 +981,7 @@ static int alf_clip_from_idx(const VVCFrameContext *fc, const int idx) static void alf_filter_chroma(VVCLocalContext *lc, uint8_t *dst, const uint8_t *src, const ptrdiff_t dst_stride, const ptrdiff_t src_stride, const int c_idx, - const int width, const int height, const int vb_pos, ALFParams *alf) + const int width, const int height, const int vb_pos, const ALFParams *alf) { VVCFrameContext *fc = lc->fc; const H266RawSliceHeader *rsh = lc->sc->sh.r; @@ -998,7 +998,7 @@ static void alf_filter_chroma(VVCLocalContext *lc, uint8_t *dst, const uint8_t * static void alf_filter_cc(VVCLocalContext *lc, uint8_t *dst, const uint8_t *luma, const ptrdiff_t dst_stride, const ptrdiff_t luma_stride, const int c_idx, - const int width, const int height, const int hs, const int vs, const int vb_pos, ALFParams *alf) + const int width, const int height, const int hs, const int vs, const int vb_pos, const ALFParams *alf) { const VVCFrameContext *fc = lc->fc; const H266RawSliceHeader *rsh = lc->sc->sh.r; @@ -1077,7 +1077,7 @@ void ff_vvc_alf_filter(VVCLocalContext *lc, const int x0, const int y0) const int padded_stride = EDGE_EMU_BUFFER_STRIDE << ps; const int padded_offset = padded_stride * ALF_PADDING_SIZE + (ALF_PADDING_SIZE << ps); const int c_end = sps->r->sps_chroma_format_idc ? VVC_MAX_SAMPLE_ARRAYS : 1; - ALFParams *alf = &CTB(fc->tab.alf, rx, ry); + const ALFParams *alf = &CTB(fc->tab.alf, rx, ry); int edges[MAX_EDGES] = { rx == 0, ry == 0, rx == pps->ctb_width - 1, ry == pps->ctb_height - 1 }; alf_get_edges(lc, edges, rx, ry); From patchwork Sat Jun 22 06:24:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50067 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp937618vqz; Fri, 21 Jun 2024 23:33:00 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVJATuM9CEjlEerXsY+mEAaXZHfVF2AuPobJB0hk9SWRJMQHYjbVe98q4RqD95Ovs35lSf/5mGf4jrzf6zCbh5ITQ3+dM0lMAjjdg== X-Google-Smtp-Source: AGHT+IGR9wR1SlH81LpnnF8J4b3UVz8HzBUuRiXKurWL8PYFeDSqG5eExs2KtVeLlBt0DOE9vPow X-Received: by 2002:a17:906:278d:b0:a6e:7e1f:592f with SMTP id a640c23a62f3a-a6fab643560mr672598166b.39.1719037980090; Fri, 21 Jun 2024 23:33:00 -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-a6fcf54d82asi152698066b.368.2024.06.21.23.32.59; Fri, 21 Jun 2024 23:33: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; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=ez1EIKyR; 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 67E3D68D8F2; Sat, 22 Jun 2024 09:24:53 +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-psaapc01olkn2027.outbound.protection.outlook.com [40.92.52.27]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 37B4368D87B for ; Sat, 22 Jun 2024 09:24:40 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HT65wQrKhhI2b83asnoTrjhb/XJhOFqfxHn2rN4wK9aJLXPqNXsdq5Tmii5qNHPVyMSzF5W5E/kqcn+5LLSNljJp4hzWoNSQp5BNQC6aneR9U6hSonW9FB5mEHt65WfJA15O+exoBQOGl16cF3no1+JtIpfgYdAh1cEcTGkZ4A5Mrxcac+8L3DwmRlF1d/r/e4byrfEmyzal6D9/gCcPcH96BH2+YjBQdLfRRJ60Ihqm/pxbdDjbam6aF+PCRjdl3hlS4DqXCu+WGAIaYgqFzMCrP2/ckDGJWIHA/27kLnrz4KI9LSVuvEJW8R2BdrNAbNpQyM1lxRf9t/jYZvF3aA== 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=M37kKJB8dpPvc4r3vUGnpDc76IPM4x8T5bnhxAMztQM=; b=EgNJL508cduPdbnp2HCfOu6GSUpDC1IkbitMfVZkQdav0PWfHeRQOoBVxrw+kNJ0bkGcj8IvhjUe2ohdA1LzcxGJDYQ7qBOgrFkgU2Obcph9xO3NkZOKZSemv418OlhWgAmJhcFKX2DmiCnpbDtUuettmuWIINHypIXeJaQkmMw8sDpcKIcTSXwnI3WLUlLKtmBMbP7ZEld0glLL92Z/5VU0N72FxrWQlErSeXrvAIouoJBy4upomoe4XmeWgUWVjmO2xPpc+UbsuAg8pc4XNEYANAOBx0t3CZd825osjnAPa4srX5fOVD6Db9cWNBQ/l8iGf1+vyy9HSHArUjUxtA== 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=M37kKJB8dpPvc4r3vUGnpDc76IPM4x8T5bnhxAMztQM=; b=ez1EIKyRgq30IGKjEIUCM0N1IZ5n6LxPVeFGRUcqAiYSgpXEOFjyDN7DconIMU66YHNQ7ioL2ybldFc35SnGmS+06pklGP1vCynyzDTw6BYggV19eVDfbMwdGewUXKPkujyknIVvNFcu5YsHD2ZZvsnsveTLtoDvgh1xdY8bemBJ0r5eGRqU/mdMJDIgxXLBBFJ84Mbx/LBbGzqHcipwCmdVTZo25zP5KbK6gogMPSFLjk2Dl+1BLJ6tNYZI4JGFDAxPyxy12Nu6xF4msUzOH2/vHiV8oCsjWFlbnK1UFEv6JSEnHmFA3QpFbJzGzoNLm8WB11/EyHg9PQzWEB48Qg== 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:24 +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:24 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:24:01 +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: [5XTCRQ4kWROFX+y3Q4M/Q4iFrM2JlJ5C] 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-14-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: 8081e4bb-3fd0-41c4-5522-08dc9283f58b X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: NKh4eAU/Pm2FQjOxEKIPKItitMEAEFXlr8vmf065VOJjplM+KuzDpEEp0VUPLK19BLuwtfAXFX3D2Y2mxfXjtJwasDDYOcjJHTD2X93WhDkNoaqLU6kvXsFSy9BvNhxjWvmMluEiqkNi4uwI5rzdCmqT/9WYjCEbp99dNvnH7YQZ+sHLnX7+VGYtLC8wr3bLMP3R99PI+ugBrltvbo4ZnP2IgBMbNQWLsAPuRGvCdmSD1X2q8fjRI41F8nQQAuG/hGMzNfuP8jkmZWkEjDyGXqLnNSpd4QP01jZWx/uXANnoNYVbJo282z/8GuI8c5m0MthbG9jHLssP0RMbFjRGlkyIXZQbt81/qHRqg0ooCUVlkHgSKklYhprATLnU4JpbVDIKTe9JD1SteRGB/VF21/MvVRxty+ZmnhKaKFRogoKbmUhaIbx/6Fxfgll/X6Sw77O/gE4RcyVFU0/JcqzBTxMmOIAZx3OPlzJGmON7SOGuWcFQiKo2GCQF28ZxEujb2LCjJEJtvByCNdR+faAEVa9WAogIO0JfMhdPb+qAesQnrUsRwpEtdQlsgOglafmhzyezcBThTzS+ZhwyT5Kxb1lyV88IhI1sV6JIodeKKva36NgWobFDPtN+Q3RrU1Rl X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: pkJJ346lOs57dS2E39DxTZUBwZDnU8iENNVzemAA0bO18r7jiFTLOLDYNzcB9Ko0mGZuqFJoFN+uBqhBDZy9fAwfUoD/2OS6MAj9EPALuB8uL3ac2zL26HZ81qYQmG07aEP5ykGEv9y9BXD3XyFXwh/M0K5DWEqhrmHO1mIrCypJRWbMc0/YFSzZiX0K8HigL9jYfe9nub0P0wn2sdzRBlDe20UIIG3JggBhQh+lF0oEu5j6njSzDKgfhk+QqrEFfK7f5kTymKV+CoZSNhRy92RDsX6D3FBmbVljjCEP7aPHqEk7jiN2gxvah8K8+eLafN1OF4LsrNfvwVTLfkzoTZIqjA5XGPNai+3DAcIjKFfm51qN5uxXnn5z8Zghu/LkRoncO6GiwaSKc7lRQqI5qUlaKVgQvkcgR5o3HOUIz+kzStt5rZaTOL5SR1z4XA2J8EpnktmYAA0IldCrkkCtD5hjvwYgGUJZFcRkJq/7B/w0YD06R0x5Y6NUdo6hKd72kjBzupNubKpizcESS7T9HtUgo/4uWuFZo07KXK5LD7QJyEISvk1A1qooCDDlIbriSimKk2g1EMyTwJAzfsU5KfAzTHA9WxV13lCrA24s79PnpoGgera0IzT3CtXH4X+qCH5hjIM9fstjBYW1wTt9ZBQ6bEI18h4QnChil+lU/ZH2z1TLcfkBdgO+dELDLnmuPwx80hqoXh+i9wMX0LQZ3Zl+FdW5QBmQldVbGVJM0VXZQQOOjs1foBL1yncZDUMkwvN0yqdTbah7LSGEnvtGAzjyEjYl4PIuo3BjmAhLxeHabw6hl6pOh6yd4c4FyIIahUFjKxvPY2mplIg4WbJdtI/JMp4WrVBx5KgmvmHwKghIlibIYloOn3ni8dvkvJT4B3SGiSqkNBqM6dp4lS2hYCdSK9mKMTVpTdKovgBanHmS7LcGEHpAwneR9L9/rp89YEhvZXwsYhEmByZ+QRFi2oXxTkLasHD4/Q0MtcqhrqPfIKdo3bTDpvT/U5pkVfHPzbJAhOEK8hO6lri14MgS1EGlkvt44X2xW//rPWHNHp3a6CINod76rbE8k/cP7ILgrTam+q49wLhJW/Anq42f7dMM61KI1MGjFeCjXaUwdiy0UGi0vcE4wtNo71pb2D9HgB5lWZ2L15e2skcgV4dbsvYmPpvubJe99OaYYbXR8H7whoHsztSuqN0hbLWxHK0Z9UkRXozvWr7meonlLF0S1mfnwFqZHPOetljBActvE3q2bAeXrzNA2PgnvtvoEhoVvFNsfuwF2dstvQixixMScg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8081e4bb-3fd0-41c4-5522-08dc9283f58b 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:23.9407 (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 14/18] cbs_h266: add VVC_MAX_VBS for max num of virtual boundaries 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: QuyCFNNZxFWX --- libavcodec/cbs_h266.h | 8 ++++---- libavcodec/cbs_h266_syntax_template.c | 8 ++++---- libavcodec/vvc.h | 3 +++ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/libavcodec/cbs_h266.h b/libavcodec/cbs_h266.h index 21b9a4196c..5f12915b65 100644 --- a/libavcodec/cbs_h266.h +++ b/libavcodec/cbs_h266.h @@ -464,9 +464,9 @@ typedef struct H266RawSPS { uint8_t sps_virtual_boundaries_enabled_flag; uint8_t sps_virtual_boundaries_present_flag; uint8_t sps_num_ver_virtual_boundaries; - uint16_t sps_virtual_boundary_pos_x_minus1[3]; + uint16_t sps_virtual_boundary_pos_x_minus1[VVC_MAX_VBS]; uint8_t sps_num_hor_virtual_boundaries; - uint16_t sps_virtual_boundary_pos_y_minus1[3]; + uint16_t sps_virtual_boundary_pos_y_minus1[VVC_MAX_VBS]; uint8_t sps_timing_hrd_params_present_flag; uint8_t sps_sublayer_cpb_params_present_flag; @@ -703,9 +703,9 @@ typedef struct H266RawPictureHeader { uint8_t ph_virtual_boundaries_present_flag; uint8_t ph_num_ver_virtual_boundaries; - uint16_t ph_virtual_boundary_pos_x_minus1[3]; + uint16_t ph_virtual_boundary_pos_x_minus1[VVC_MAX_VBS]; uint8_t ph_num_hor_virtual_boundaries; - uint16_t ph_virtual_boundary_pos_y_minus1[3]; + uint16_t ph_virtual_boundary_pos_y_minus1[VVC_MAX_VBS]; uint8_t ph_pic_output_flag; H266RefPicLists ph_ref_pic_lists; diff --git a/libavcodec/cbs_h266_syntax_template.c b/libavcodec/cbs_h266_syntax_template.c index 53c4b60b0d..34b766c7af 100644 --- a/libavcodec/cbs_h266_syntax_template.c +++ b/libavcodec/cbs_h266_syntax_template.c @@ -1562,13 +1562,13 @@ static int FUNC(sps)(CodedBitstreamContext *ctx, RWContext *rw, flag(sps_virtual_boundaries_present_flag); if (current->sps_virtual_boundaries_present_flag) { ue(sps_num_ver_virtual_boundaries, - 0, current->sps_pic_width_max_in_luma_samples <= 8 ? 0 : 3); + 0, current->sps_pic_width_max_in_luma_samples <= 8 ? 0 : VVC_MAX_VBS); for (i = 0; i < current->sps_num_ver_virtual_boundaries; i++) ues(sps_virtual_boundary_pos_x_minus1[i], 0, (current->sps_pic_width_max_in_luma_samples + 7) / 8 - 2, 1, i); ue(sps_num_hor_virtual_boundaries, - 0, current->sps_pic_height_max_in_luma_samples <= 8 ? 0 : 3); + 0, current->sps_pic_height_max_in_luma_samples <= 8 ? 0 : VVC_MAX_VBS); for (i = 0; i < current->sps_num_hor_virtual_boundaries; i++) ues(sps_virtual_boundary_pos_y_minus1[i], 0, (current->sps_pic_height_max_in_luma_samples + 7) / @@ -2714,13 +2714,13 @@ static int FUNC(picture_header) (CodedBitstreamContext *ctx, RWContext *rw, flag(ph_virtual_boundaries_present_flag); if (current->ph_virtual_boundaries_present_flag) { ue(ph_num_ver_virtual_boundaries, - 0, pps->pps_pic_width_in_luma_samples <= 8 ? 0 : 3); + 0, pps->pps_pic_width_in_luma_samples <= 8 ? 0 : VVC_MAX_VBS); for (i = 0; i < current->ph_num_ver_virtual_boundaries; i++) { ues(ph_virtual_boundary_pos_x_minus1[i], 0, (pps->pps_pic_width_in_luma_samples + 7) / 8 - 2, 1, i); } ue(ph_num_hor_virtual_boundaries, - 0, pps->pps_pic_height_in_luma_samples <= 8 ? 0 : 3); + 0, pps->pps_pic_height_in_luma_samples <= 8 ? 0 : VVC_MAX_VBS); for (i = 0; i < current->ph_num_hor_virtual_boundaries; i++) { ues(ph_virtual_boundary_pos_y_minus1[i], 0, (pps->pps_pic_height_in_luma_samples + 7) / 8 - 2, 1, i); diff --git a/libavcodec/vvc.h b/libavcodec/vvc.h index c4cec1eb8f..92639779c1 100644 --- a/libavcodec/vvc.h +++ b/libavcodec/vvc.h @@ -151,6 +151,9 @@ enum { // get near that, though, so set a lower limit here with the maximum // possible value for 8K video (at most 135 32x32 Ctb rows). VVC_MAX_ENTRY_POINTS = VVC_MAX_TILE_COLUMNS * 135, + + // {sps, ph}_num_{ver, hor}_virtual_boundaries should in [0, 3] + VVC_MAX_VBS = 3, }; #endif /* AVCODEC_VVC_H */ From patchwork Sat Jun 22 06:24:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50074 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp957499vqz; Sat, 22 Jun 2024 00:42:50 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVDViLGLA2jlk7hVmjHr2s+LCpdpxSM3dyHxAtglK6XOzKpohMt2dz4a2zk9oVycyq1t0lDzEMSj0ccSHjU8W5nAbmA3z25XmucWg== X-Google-Smtp-Source: AGHT+IH6+Wu0fnxYI7kBkFP5Nvbs2pYAHYS7qNn4+e984wi2+z4WHqQzW9R4TGarFZ1LUCL6ef0a X-Received: by 2002:a17:907:31ca:b0:a6f:49b1:dec5 with SMTP id a640c23a62f3a-a6fab643faamr738626566b.46.1719042170578; Sat, 22 Jun 2024 00:42:50 -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-a6fcf4533dasi163110666b.136.2024.06.22.00.42.50; Sat, 22 Jun 2024 00:42:50 -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=Apu7RQwF; 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 65E4968D816; Sat, 22 Jun 2024 09:24:37 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01olkn2034.outbound.protection.outlook.com [40.92.53.34]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5B9CF68D807 for ; Sat, 22 Jun 2024 09:24:30 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PewHqjuQd2xdhdZlAwtro5Hvn/RJTc2e1O/C+KlGL9VRDGxjdmpPtDEs3KZCjgl/Jwa2WzhcEcPrGqT7mGrnb3q1GHJJt68wzkiQwfyVPsD9JCYm58NfWRB6fYV0t4OIApjDD1mk8++iaJ3o3Hjegq1Dnz4GyekWy1x5M47G9kjbRAt7Sdb9+iWnJTltyV7HTPr5lpbPktotv4ci9LhWUm7LrJoID+gBufzQmwR8EFtmzg/qFsha0vKa5A7q2o40OHz+zFM0lngE8Zxop2I99JI0aBYNlkfCxl3t2vSB1VcPuSoQfItp1hB4JsTA7nWN8SZB6tlfQoyqGU0N+1pcUQ== 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=OnwlfDY7kP8skKFm71mDN8NrU0yB37ckomwBrjtq1IE=; b=aAvjW2VFY8gw49HG0+AjLSkOa9ZWobicVidYimvys27/m6D9grTyz2DjojtaqMHoEn5d1Z8bqLGzxqHek9ptsysDZ8C6Lp14NdzB/UdIoixPyxio9boAA/RTBCzewic7OfX1FsP8k4CCQDEtUwpyVwyAEQqbUm9Ok2tr7Zv5mV1tjB9ZYtZF4KhtGbjd/PGxQKqdkkkdh/8C8qCbkfNnT/+dLZesvlyNVB4rLuG2ZyjJALBg+/w83pOqbNc2CY4z7FFfqPwm/2rmeXESnDvJwkQrhqqUW2SkdKIMdkskJZlwSV9yzgakpL2jBaeRpt6IHhFHNsfsDUKuWvN7dPegBw== 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=OnwlfDY7kP8skKFm71mDN8NrU0yB37ckomwBrjtq1IE=; b=Apu7RQwF9cy8X+rKUIQGEaTYoNxvqGbK0cC6df9x/JjRtiMHRZfnRXOo0YmvmOjRoAtSzhY+hG7WYAN3XnwxujWCbwIIKE+WNyXxpblKyin91cXOy3bBGpndwrPli8J0F/aa0WvAXC+44YIAGSusRkuWnHwckljsTHBT6US9hezQDNbWG/wOnyFjQdRQf/DRV+ctCYVasZj4jXjhnudX04bxX5WXR5+080ZbzH5IoWpAlNKvPE8SVEWvh2Wn6LI14lI0lIFjDPQrrpQzToBMfcFrpdRzDbyUmZz+DnYgGO09r2CAFeMzX80lbd03oGbE5u800gY8c+GUK/ZK43RukA== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by KL1PR06MB6258.apcprd06.prod.outlook.com (2603:1096:820:d8::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7698.25; Sat, 22 Jun 2024 06:24:24 +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:24 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:24:02 +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: [iwkkYl8vJgSqcNcrFz4+sWsOxjUqmBhH] 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-15-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|KL1PR06MB6258:EE_ X-MS-Office365-Filtering-Correlation-Id: 89aa81c9-3be3-4494-36d2-08dc9283f5ee X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: cg9AFNrvEI5ophK0CN44GLe1DfTkk47NeQu8eLYuD765nBS3UyyuxtCVQREwtLMWJBPRxSrrl2Dj7SqU0nZThsg3Y/k3juuFmY/jZmlXdJBw0J8Y75abahaWydDEUkNBYXCBDLi02b4+KPY05OFvbnyOWhGV2RCcjoiLVuQkr3nyLqcaMJARQCQXzHw8QoUvwsDvpr2hibaL1qO/Olx6AaVeYUUevRTBd5cDMi1I+/9rR5UZ16E3NonThLLYlxmQ9LdHfzBkCpJQ08y4luG0vGz1RnDvDsTUcPFfzUgQ9oxeEuHYRYncVC+WH2fW1/kN4xJ44qd/UNL2fxtICdqeKaX2fFBaGwRabC3OWU3KYFlRKZzXPmYUllQN/6iMViQRS/0Spdwg0TosRps0sp7VjcfNXe+jzauKhwBF/r1mp6fUryJxruUQ0HPXL5G1R7PqJAtks5+m1DXACis3qaFwEdfhtXwDHAW6LCh0bOidG+uGB3dWF3E7WifpQ6niTrkombv2ZE1Uxtc9OxT9+V6/tBBd7aIKuCRjUg5eQaYnQMcDSjdeE9mrTZLtEBIrCTY5QwkOSkRtZWjwGDlspCQmmrCfHE3CaGOkLsJLz82iIQGbgUi7w/Z22JHfABcJ74WG X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Lc0L5dqwrI4GHzKH80Znrzc5/EoGb31L1h/lg+puHrW2m4QOCNZZVmw98YDd3MRqA3rZbQ4lCpSbsBYFL1VRGHV4YUQr4oie7Ul52YXtxJtgn8+JB/hlMW+6DjFzEqJzZZ/d5PqnddNXl1dVofwEhz3l6gK2ChSO8DQm7Swm8W3H+iPb5pvAAf1ycAg3RGjHzNYNpUfrikT7pdXWJxxiNHvF/w/o2zL0oxafYPDs0xyfiPIXk2CFzYR7sZNcE7U7C2kvvcCCppIJEuNtcVVUqriFJ/9X5MnOewP/xFQAIA+KMmGMNth8hLkrvj/mPkbVvko8rDlwiZ+op8KY8SZJenTNKZ31d/hanlaJxGxuCgZ+yTR7/3yLheXwe27okxGFc1rlTBWwL3aUFMQKi3WZAWjpA2fGr0Opq6dWN4yjS85NPAVCVJ1BEeqC9q6v693Qxk6p2nsthu7MmZ6tE5VG3ecyIxjOR6ZU9m7cDM/r0jSf3hWq+J8k5f+R0xdmy3DA40ja7lL2WgP0T3TELGhoxgJuBZeYrTUJ1L7PKWOCuvDeCqYokCVknY7fdmpFddm3qiQZObXPTwbCQ0MVBaGu+zKRIXQS/vJ9jUUjRY97PgLFaXsDao2YfqaCcAVtX/dCLiyxWZfZCGHKg+N1NAXLaO3GGZgLUz+OGcbdQVPbU2CmVZ7csu5QgrIbi8ZcWnqar7GKXd2MLXSg6JK9SbC2/GhdtlFJis4nOONIWEig1gkVWJs5ZMVGOsf7SyYLW/ZQ02ghAiE0RNaGBgf30dJN+KzbpxPhJQT78SmqJ9DJ5xuS3jAas1WInQrOpSCvpldyVXVnuhLHdDw4AtI7+nGoHOKGR3BlZJ8cRVnVKwMfaCD28d6vvUOC1169mryPuxJefdUlO6Pz2BnTTW0LUWjWLNQemEe9mWX5UwSWeL9smyf9Fr9Lru0Iw0Gh+8sd4R3QPYihCKW7WPgBE7jAJnw9ur6XxWLqYHz10pQfUAH6Kx2iodDu2sSulmDGsE901stSMySbCH1S92x00IbIdPQwmhGPCX3LnPphWyzKsL4WgrcvMBqEMA5WtNIs6gjvVyX1VAobcqnOkyu+d320jktlZHk3z84O1SaPPwFvDa8IRNNRjJOEEzCP0N/ZwODcHOaOBzsYquSfajtagDIpQyVNXNpdGYZ9dg2Fjr53XiazEZvdr4EZPYFyyFyL145Pj1G/aO9wur8Gkwi6JsIrR8ZpzyHnpA9CkDXV5kcbLcCDgvW9q0pgx813KeblX1atl/4JHlDJIJ3tfNj+osZSE2rPTQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 89aa81c9-3be3-4494-36d2-08dc9283f5ee 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:24.5819 (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: KL1PR06MB6258 Subject: [FFmpeg-devel] [PATCH 15/18] avcodec/vvcdec: ps, derive virtual boundaries 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: yOpVVZL7JzZ9 --- libavcodec/vvc/ps.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ libavcodec/vvc/ps.h | 6 ++++++ 2 files changed, 51 insertions(+) diff --git a/libavcodec/vvc/ps.c b/libavcodec/vvc/ps.c index 92368eafc2..58496c9fba 100644 --- a/libavcodec/vvc/ps.c +++ b/libavcodec/vvc/ps.c @@ -796,8 +796,49 @@ static int ph_max_num_subblock_merge_cand(const H266RawSPS *sps, const H266RawPi return sps->sps_sbtmvp_enabled_flag && ph->ph_temporal_mvp_enabled_flag; } +static int ph_vb_pos(uint16_t *vbs, uint8_t *num_vbs, const uint16_t *pos_minus_1, const uint8_t num_pos, uint16_t max, const int ctb_size_y) +{ + max = FF_CEIL_RSHIFT(max, 3) - 2; + for (int i = 0; i < num_pos; i++) { + if (pos_minus_1[i] > max) + return AVERROR_INVALIDDATA; + + vbs[i] = (pos_minus_1[i] + 1) << 3; + + // The distance between any two vertical virtual boundaries shall be greater than or equal to CtbSizeY luma samples + if (i && vbs[i] < vbs[i - 1] + ctb_size_y) + return AVERROR_INVALIDDATA; + } + *num_vbs = num_pos; + + return 0; +} + +#define VBF(f) (sps->sps_virtual_boundaries_present_flag ? sps->sps_##f : ph->r->ph_##f) +#define VBFS(c, d) VBF(virtual_boundary_pos_##c##_minus1), VBF(num_##d##_virtual_boundaries) + +static int ph_vb(VVCPH *ph, const H266RawSPS *sps, const H266RawPPS *pps) +{ + const int ctb_size_y = 1 << (sps->sps_log2_ctu_size_minus5 + 5); + int ret; + + if (!sps->sps_virtual_boundaries_enabled_flag) + return 0; + + ret = ph_vb_pos(ph->vb_pos_x, &ph->num_ver_vbs, VBFS(x, ver), pps->pps_pic_width_in_luma_samples, ctb_size_y); + if (ret < 0) + return ret; + + ret = ph_vb_pos(ph->vb_pos_y, &ph->num_hor_vbs, VBFS(y, hor), pps->pps_pic_height_in_luma_samples, ctb_size_y); + if (ret < 0) + return ret; + + return 0; +} + static int ph_derive(VVCPH *ph, const H266RawSPS *sps, const H266RawPPS *pps, const int poc_tid0, const int is_clvss) { + int ret; ph->max_num_subblock_merge_cand = ph_max_num_subblock_merge_cand(sps, ph->r); ph->poc = ph_compute_poc(ph->r, sps, poc_tid0, is_clvss); @@ -805,6 +846,10 @@ static int ph_derive(VVCPH *ph, const H266RawSPS *sps, const H266RawPPS *pps, co if (pps->pps_wp_info_in_ph_flag) pred_weight_table(&ph->pwt, &ph->r->ph_pred_weight_table); + ret = ph_vb(ph, sps, pps); + if (ret < 0) + return ret; + return 0; } diff --git a/libavcodec/vvc/ps.h b/libavcodec/vvc/ps.h index 6656a06320..9203e2c57f 100644 --- a/libavcodec/vvc/ps.h +++ b/libavcodec/vvc/ps.h @@ -151,6 +151,12 @@ typedef struct VVCPH { //derived values uint32_t max_num_subblock_merge_cand; ///< MaxNumSubblockMergeCand int32_t poc; ///< PicOrderCntVal + + uint8_t num_ver_vbs; ///< NumVerVirtualBoundaries + uint16_t vb_pos_x[VVC_MAX_VBS]; ///< VirtualBoundaryPosX + uint8_t num_hor_vbs; ///< NumHorVirtualBoundaries + uint16_t vb_pos_y[VVC_MAX_VBS]; ///< VirtualBoundaryPosY + PredWeightTable pwt; } VVCPH; From patchwork Sat Jun 22 06:24:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50063 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp937573vqz; Fri, 21 Jun 2024 23:32:52 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCU2MEVeAxqvaJSi9dlCHgKw5BC/afdNbA6eefHSLSFPRIJhk5fKXDPETkilA5s4u2IRMP0VwZ6/MHStmkSjMIjMr5a4PkCbvJa2gA== X-Google-Smtp-Source: AGHT+IExlfN4FSZWieLc3857mGjbLfbghrHPymhmvL6+JgfZbk8LSEvUDsjjiDiGmxaJz+SMIPCj X-Received: by 2002:ac2:4433:0:b0:52c:df55:e112 with SMTP id 2adb3069b0e04-52cdf55e20amr200067e87.6.1719037972278; Fri, 21 Jun 2024 23:32:52 -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 2adb3069b0e04-52cd63b45f3si861637e87.60.2024.06.21.23.32.51; Fri, 21 Jun 2024 23:32: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; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=aHWjcWlr; 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 57B0B68D901; Sat, 22 Jun 2024 09:24:55 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01olkn2034.outbound.protection.outlook.com [40.92.53.34]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 689CE68D870 for ; Sat, 22 Jun 2024 09:24:41 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MxWMNXJJtZ/fkjXZBuOChQDawEjRVQUsvhCq2NtvlrMXR7leJGB9sh5hwibRWpFl3arCnuCU7+Xaky8J/cQIZQgGTExMnI+SssbNUEPJ55qPstrwkKMFUY2tgsIdnD5O0DXIPrzKeX9xI/ZvQ+hKtcsUPREcwYsR0FtJcTzoc4121OlVBjzFoL28IjerKb9gnW1nP6e7kNAwbxZxIwf5AAA63KogPeeA2z7ppIs/s3ExUcKLsSu0XRMRnGPOjwS01c0LmLKRnR56BoNyOP/4fBfeahtsaSkdK7xjXDdok+0wEXRAlmp/pyCD1pSb/JmsgmgOGsfrcIJfaPBIfqVWTg== 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=QVvX/Ic6ZLvs9IsJo+Tus8PxyXmmP3Vw+5bfpMTqAwQ=; b=mAzqoc4g3U1mhGA8SvOoqSlBKquptZXwN3La2OJ8z4k4spi4uGm54hxyB1VLHV7Lolhs9WNlWMjwZg0MuUwnNiHvlafF22kAIvlZrBtfevyJN6mywbkc54U5K7lby5FVtyCZCWAVtjPtiXODYZypul1ZCugILQCTbGjEbNeDyy2wsSAaFolahkZo/FuJKTSDumcgKE5Quy/iwS4x7whBqBlXSSxe55zq731pcUklEPY/rgbJRi706Nd0536snRya4uES3Y/UDQM4GAiw9gfOr9jtWWL1aFUcbw2CcJkjzyiKrcnISzD6N+Mv+QhqduQ/cYpSlkl5GA+kLYH5aT0Ccw== 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=QVvX/Ic6ZLvs9IsJo+Tus8PxyXmmP3Vw+5bfpMTqAwQ=; b=aHWjcWlrsTh896I6RyIiImkUqC1yP/06L8Y5ZlajFoefCc14fWOkFeLrAU3yzdUXF6+LqH83baIjQ6erD9OjgbNzLZ8FeLqMazg7/5Isha1cDQ+m+FSMVzVcJqYhm4Klr4uPBg5rAIQCpQSzbmRiCLiOmq58UsCJJWfetf+ocWRasNGJyxtXpUbKHVKofVozvMGKfUgV7yvCRQhg7LnDMwFoDA5AI6rUs3a1wvHKbViS8WeN1IzuzdXFV3gSRMLKMzpjvfqN1x6zA966xJNMzAAV/0RHmAScPRNbzhUpf/aeBRsiDIx/zFvVKsscIChX+Uq0qjTm+kAC9lhDMD6b2Q== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by KL1PR06MB6258.apcprd06.prod.outlook.com (2603:1096:820:d8::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7698.25; Sat, 22 Jun 2024 06:24:25 +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:25 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:24:03 +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: [+5o9aMMZd6aPRu/umDRqLkbgRM8Rlo8k] 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-16-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|KL1PR06MB6258:EE_ X-MS-Office365-Filtering-Correlation-Id: e61321fb-04e5-41c2-e78e-08dc9283f64f X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: Nogj1GbtvpnEUke4Fq7tH7W6PGcQPfBbyGDSOiUUc5lgz73H+3jXcUPyZAT27XZnCemwdkg0WXaatK0PYt1RmY20mD0I6wZaxtGbH9qEEuxk54N/PQwqXiS/TRQgf3ofq1HItHXjmooQfjzgbKQWCy5CxCi8EDmQADHkt40vX9/fCCNGQPGBpFDswUyLOPphO5vwp4iAFKin+3a88am8KGDLhljxNffH2klT73wnyxU6wJrKv6+NxAXPR+cLgbPUCtstsantbEh76dDVukyHuLSsZVwupUpdjtbcNONq5FNYC00ZFO/jq7FDohEu5wimlQSyKiOEHf3PeUXnSk25tct1LUiIgRuIhUgUSxqLl2Shr5OEds2cIcBTbZJSkCVhOCx6eI+d2R4Xtb1i0nC6V9c1tMlYGGODWrj1zqEOd+KfNBPCt9alG1DRWxhoBIH5hHUxSQcs3/CiHvwwTcrBO/cnO2nA6jEwSMMrmKLJDbLkzOsYgo9O+H+3mtKSbjU2YP1cI1vbm/JgsSjmkLq5a/oWLMKT7oK1d4ATlOP2DfhhgKKs6JyXjOZpQYBaYmPB60dzPYPL+RInwLaiv806hcDazMWtI1THyWiEPCWqIWI= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 1TM/fKl0OsHcyzNxtJfh57AaeYSqBlbkxFpew6Atu7lGol0MBaPKbsMVt/9SDwH5vDUZEHefS1vxj7etSi+lFcaGm/tgDHKnttFtLJLeyMZas0XeCqmLwYjTO6GUALWr0Z7Ub+u7SoOfWF/uw3VMDfXBqZk8wXAus+h9GMcasgGb8SQQCwsokXN7hIq7bcvfT71KI6sPL5FcGoP64UJjJNrsKd1/Sb/gDKApyibQ6Bkb2GVIBRBY0HMA0GJBdkDILjzl6t1/XNt6F7oJ4i/Dyl+4ViK0frMbYBdPXZBl1ZWQjecbWJGGPxOxtmrNO4uNp6PsJ6SjGO8zi2gl95IryMaAdoiixAuixF/PaT0WVEIQdWJJhVH91KV8Kbg2OczfzAi8OZzpTsGf/epd0neXgRm4FB8R3nX80GkQKihwlRHHD+eRIAGxIqVxkI0xVUtK55WOI7vNcadQQ0U+bubuJI730Q+XJ9lnO/0i8xZsFCizLIhMH4g5v+e9QS9CYIUEAxPQgIKQQC6RTr0hlRn6qrJWWsC9HejjuHKzRYgnID9cmMaNOT5nsVMuT/QXMCmIMhfl4f5+IjZ5eU/MbxRdiziTsZ06KRT8XXuCAoa+5mpNrFPnGX+hOXQFh9i7vxl4viVyHvS8UbxJux8IUkrq9L/7uVcdLNo3jxrJNETK7nd/FVNVe+kxZ9ipaLvUgZowYLJKBz4BSu6EObo+F5lVRegimDItISizTk+Y8e8FvaVLTazJeXIbBnxzTKUXe23I4ljFbB0IU9SpGUOywvK65wxu6CfXn2VowhkjLKqjP8Px07qrvNNyxfKkt2WXyVYJnfmt/ZLVPsY8S5ymuKZiDhWCz1U9JSOVc4V7gZmagQUiip2c+y9tAgZ+BLYxl1Jq8VCwyc2UdMiKOkhR08CydNujNL6q6q0Hf+SHLqPZZ95eQSvN55gfEwbkp8YxHy/82wMj1a5jB3iVAgNsdlde0cMkA8v12C73Il1cCAOsKkHljYUgRk+KgRX4wmR/1WUxNIHR5rD7++K6cBIK/mBc+7ZeqrvGKXcodvThcquLJCvW/vp7vwDAoCvKNg9NVlaLE+m5wlqpgXdxj4goqU1GXRoWQ59LXgC3k9iYwR6pbfE1Qb5ERrQCwZiFl2q6WFfGkeAx09052xInyTZqTy+TPzA7ZDWedsODemt6Mnq3MuckbSP3cJdeDxpJxo4yUFnC3t09eO3LEKltEClVIa71ubjquOWsrhzpmPsF2Hf4qHa2bmC7zylS7g48xW3Gv2cGbcmuYdxMaYer2Yh1KBdqog== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e61321fb-04e5-41c2-e78e-08dc9283f64f 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:25.2340 (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: KL1PR06MB6258 Subject: [FFmpeg-devel] [PATCH 16/18] avcodec/vvcdec: deblock, support virtual boundaries 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: KqGhgEMEOjnX --- libavcodec/vvc/filter.c | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index a5635c60df..69d67cb7f6 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -55,6 +55,29 @@ static const uint8_t betatable[64] = { 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, }; +static int get_virtual_boundary(const VVCFrameContext *fc, const int ctu_pos, const int vertical) +{ + const VVCSPS *sps = fc->ps.sps; + const VVCPH *ph = &fc->ps.ph; + const uint16_t *vbs = vertical ? ph->vb_pos_x : ph->vb_pos_y; + const uint8_t nb_vbs = vertical ? ph->num_ver_vbs : ph->num_hor_vbs; + const int pos = ctu_pos << sps->ctb_log2_size_y; + + if (sps->r->sps_virtual_boundaries_enabled_flag) { + for (int i = 0; i < nb_vbs; i++) { + const int o = vbs[i] - pos; + if (o >= 0 && o < sps->ctb_size_y) + return vbs[i]; + } + } + return 0; +} + +static int is_virtual_boundary(const VVCFrameContext *fc, const int pos, const int vertical) +{ + return get_virtual_boundary(fc, pos >> fc->ps.sps->ctb_log2_size_y, vertical) == pos; +} + static int get_qPc(const VVCFrameContext *fc, const int x0, const int y0, const int chroma) { const int x = x0 >> MIN_TU_LOG2; @@ -429,6 +452,7 @@ static void vvc_deblock_subblock_bs(const VVCLocalContext *lc, // bs for TU internal vertical PU boundaries for (int i = 8 - ((x0 - cb) % 8); i < width; i += 8) { + const int is_vb = is_virtual_boundary(fc, x0 + i, vertical); const int xp_pu = (x0 + i - 1) >> log2_min_pu_size; const int xq_pu = (x0 + i) >> log2_min_pu_size; @@ -436,7 +460,7 @@ static void vvc_deblock_subblock_bs(const VVCLocalContext *lc, const int y_pu = (y0 + j) >> log2_min_pu_size; const MvField *mvf_p = &tab_mvf[y_pu * stridea + xp_pu * strideb]; const MvField *mvf_q = &tab_mvf[y_pu * stridea + xq_pu * strideb]; - const int bs = boundary_strength(lc, mvf_q, mvf_p, rpl); + const int bs = is_vb ? 0 : boundary_strength(lc, mvf_q, mvf_p, rpl); int x = x0 + i; int y = y0 + j; uint8_t max_len_p = 0, max_len_q = 0; @@ -557,6 +581,7 @@ static void vvc_deblock_bs_luma(const VVCLocalContext *lc, (x0 >> log2_min_pu_size)].pred_flag == PF_INTRA; if (deblock_is_boundary(lc, pos > 0 && !(pos & mask), pos, rs, vertical)) { + const int is_vb = is_virtual_boundary(fc, pos, vertical); const int size = vertical ? height : width; const int off = cb - pos; const int cb_size = (vertical ? fc->tab.cb_width : fc->tab.cb_height)[LUMA][off_q]; @@ -569,7 +594,7 @@ static void vvc_deblock_bs_luma(const VVCLocalContext *lc, const int x = x0 + i * !vertical; const int y = y0 + i * vertical; uint8_t max_len_p, max_len_q; - const int bs = deblock_bs(lc, x - vertical, y - !vertical, x, y, rpl_p, LUMA, off, has_sb); + const int bs = is_vb ? 0 : deblock_bs(lc, x - vertical, y - !vertical, x, y, rpl_p, LUMA, off, has_sb); TAB_BS(fc->tab.bs[vertical][LUMA], x, y) = bs; @@ -594,13 +619,14 @@ static void vvc_deblock_bs_chroma(const VVCLocalContext *lc, const int pos = vertical ? x0 : y0; if (deblock_is_boundary(lc, pos > 0 && !(pos & mask), pos, rs, vertical)) { - const int size = vertical ? height : width; + const int is_vb = is_virtual_boundary(fc, pos, vertical); + const int size = vertical ? height : width; for (int c_idx = CB; c_idx <= CR; c_idx++) { 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); + const int bs = is_vb ? 0 : deblock_bs(lc, x - vertical, y - !vertical, x, y, NULL, c_idx, 0, 0); TAB_BS(fc->tab.bs[vertical][c_idx], x, y) = bs; } From patchwork Sat Jun 22 06:24:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50062 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp935987vqz; Fri, 21 Jun 2024 23:26:56 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWSZqEqWq2TdLe8m5TJCzzeICxO9Ux7bTJZnljUBOmto72VE2SIdLgZ+Ps2maM//Amnwm/HsmPy74pdsHZTZC4dIYYioaADTMJrMQ== X-Google-Smtp-Source: AGHT+IFpdfSJ7urO9FCTxMmM5xrXOqC2KBHDsA8nlyGOr95xOAaeSRT/hgEf2xuJ2jdfbrIxnxOT X-Received: by 2002:a2e:6e17:0:b0:2ec:55f3:40d with SMTP id 38308e7fff4ca-2ec55f30b96mr3571401fa.30.1719037616387; Fri, 21 Jun 2024 23:26:56 -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 38308e7fff4ca-2ec4d78864bsi8006611fa.535.2024.06.21.23.26.56; Fri, 21 Jun 2024 23:26:56 -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="XmV/1EGS"; 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 4FD7D68D8FA; Sat, 22 Jun 2024 09:24:54 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01olkn2034.outbound.protection.outlook.com [40.92.53.34]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C733468D88D for ; Sat, 22 Jun 2024 09:24:35 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TDbYxyVuLNCaxjFJtrB+3rcKp1R6ZiEl+4D02vf+MXDgdzYAKqJnBqbRO84jbsy+S1OdkWMlXfmeKstpIFPEb2hbOevZxB4Yh6G6YxW5ZS8QETKoyI+B1Tm0GbSGpZm6ltJZDTs/uaRPDV8P5FG/Y2QGBhAd2a6OpgakdQWwZIcl29qkycnGr5f+AZ9blhIBn5btWSQZEzDZ4nCWPXAs6YNHP1sVmN7cXxjMy+5Ko2lfZiEUjCJZqU+TheljJuT8IxZZPUAjrfDOHg5yVo6yZoHypmUOTD8FhDaqtCbDSklZWRanf1LXGqF9NKWgAlgvUCocomjRAFdMP78M/1HnAg== 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=BkcWvHmCj6TXqrjHdWEA0JyUjwk4WzG1Qt/DW7lwN8E=; b=dK48+Dhf9VTJqmVN6J1pFkm8VX1qzCvq5f1vKM2rna5+7z58cW+wYr/EfT9ev0oEFnq4fdCW/+U6+B1IwPQMLTA2IOtiOIUg4PmGPZ5LE4xUoVMdXuwmkhPbmnwFllX6/CvFukREaY8GiR1ZnNDJaf4jUiMME9H2kv/vB0pQOfFl/+gg8V715IEbMKSTknBAD/w7cQaRXbzu3vbb7njT1PK7ChJmgjBsUKos8TmOjUSQ3a28PChAiwX1Lu5EmiFrolNHr+TWakENwBZihJj4TQz1q98UkQyvq3hCGxuSbupoBfsFwIncFnLiAAAnIVoBU3aR+jazE77L7lqgRA4kEQ== 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=BkcWvHmCj6TXqrjHdWEA0JyUjwk4WzG1Qt/DW7lwN8E=; b=XmV/1EGSJkIQmJqvAPSKbW32RslwXmSLT/Ml/USCLjnEiy2SQqnZfGZtu8X/JOixW+HMxD7pgjM+yYRQenKeClBnwTVkLdBU3SCPC2A9Ecc4bKZzWLgREYyKHb18JJiyxxu0L6udnUmby4Ns4rkd93YgbljN9o8tZ3+LSy80gUnm5SBRpaEAGwydsPdhKJgQmDjYVj/lda0dybr9gGjr3Pk7PX4XP42hjEqvF+T9d9h/ruWsaNtoetK1S3dZXfQ+b+W6kV0dM3wVsF99jjqazgPVNR+VwecrALPlv4vjN1/oy4rMdy1/5iOQqPIQOpdO3YpavwqfACrkYQTtFBcg0g== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by KL1PR06MB6258.apcprd06.prod.outlook.com (2603:1096:820:d8::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7698.25; Sat, 22 Jun 2024 06:24:26 +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:26 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:24:04 +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: [rPIRUzrcWNjpaDQXWKA/q3dyh12+z0fV] 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-17-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|KL1PR06MB6258:EE_ X-MS-Office365-Filtering-Correlation-Id: 1e1c976f-48eb-4f6b-9796-08dc9283f6b5 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|440099025|3412199022|1710799023; X-Microsoft-Antispam-Message-Info: us1Dc1TQeY4V0g/DZeGNTTFZ9aaTXp4sRbm/qnsF9PLFGNlQmnHXdeJlqUXcMF5DmjtOTBE68WOp6syi4jPCZlQRNBdezgYrvH7zwvaqzHzkCsC/mvepPfwNIkHuThc1DucgSgy80Be96zFtYNOt/stf4Ly9npSNGtfV9uRi+4pwUX/ELjSFkw91yNxo9JC1w1txI6PsBgig1xoZmhLnA2telos8N+yHB0FGiSPQYD0ALNr9+QZLS4BxiN5Efd/0jtJfzBiuuq8+AhKvFb4Au0emmm1u5cItfyUJpZQvMeoFE5IUmKY4hmGjxZsfGTcGvu2QSluZ4gKL+8aLCICKu4ZBxDr4Fthe4Wdt2UpwEL5d3YgW8qL8SUkynHssTplODqYCP7sIb3myLZCK3y4WhdXlQnjzHN+Se5xcaWDKkfPV9T4xvo6VjE3HAMviGqAMH6OpzPbusW1CTZwE6nU382Ply/j+Ki6wSnRZYeG4QQSoTwnPWzOkNOfml2MdsQj8qlcl0ZXOmrwuz1Fag5NKVNA+LDAl/md2Gqig/k+kHXL6ZvO0UQyY/4ovb8W29Pz7X0D+y0um7KvkzyGx5fJmacrBE0sV7NqwE1WZBODz+Wgq9U/jCh+kH6G+0/wtOyfG X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: g+mWTNbYXg+yOTFZYcvm6uO06lbZwer25urybEiQgptYUNp7n97Y0ZIBsJP5J3g1eRVI9QifFayCn4ZyD9ixipHRpbdajeI25sXLEFrt6KJMGML0IpVKNV4ZMLamq4JEw+YKW0hYY3JeuFMGtRusELs+fUMbByz9ADYdUYrKWjff8TS74UnTgRq9L1J95HWdZH4fpJCKr4+Yh7Oey24eNU3JYwGpgwICBwAGhYAMi4h1vje+8F4m2fLy5NGjHkh7sh4B5yP3t4OOWLVvMfmvwLUux7YwjJdpkZ1kP9e/yOOhhzbernczySt0hKEkzJ4yd9AexKVoNo0AesVCRVgRjRErwqYCNu8w822NOi+AtTlIXvBx8yxvqZCmGjuSs/mRIUwOjBJDWSIsLXjoZoaBC8ViiLmI8ylZNlJu7YBztUK2BSCvklbWde48wzRXckfhTJC0OBl0Et9SiY+BUtn9GVeZoOxB+6kN4HRWWCJse5b75zDdcHzl5hGNisw1PS4M0Mpq/DVYBeVftBLd3dla6bGL3KyXnFkyJzYMOG5a8g1Lw/KEaSkYrkL3jBsxN8XG3QqFL7nVJ5HC2oqpimHk4g/N9ldYOhHG1BlKoiEXE6gBFL+wNdML7YYUocGfRWg5e34HIkp/Za3dxnkuNuZgtubsUQpyNbDsC0/j6Kk9d+vD3W73ti6w1oyCGUa9IGdiqmsJraJLpCfMVTeoXaBYxxMV31rdB4VOLB2j50dxw9lnLHOmoKitX7Uf3VYDvub69RC4WrZR7HwBOqYb+H8zZbVoGqm3QcYm9Dkm2+NrXy/GA/nvUqMbmdvRne14b8iu5BFqse7LP1cFYUQHHOEn3zFK6y8B3jXz0580/WsuQ2PgsH0SDk33CELVX3FSK6ALOJTt2I42bGttslDbSdA2Uxlyb95lHfLeIBOzbho2v+fMS1NCo/RKxUjUcSozXQVMEH125DQRVhG8J/mYd70+Sg81S2o5jhP7FWJIsAdmtWuhYuMorIze6WnVje5yDPFJhuW5h9sbK4zggSNj+FZifSrVOkHjq/FglWVBCLderZZRuRuLzH9l+X8PVbAopPhEra9LZq6KHgMjr1arrggn5oXYCKkN5p60FkdkZxoZRSapx8MyewGlKgAQBzaugIR1MYFdBMBtwbbej4XFPrdQnAbKNxKsBZYs+4QlShm9Yx0glG2Yj15glQ6nl88Uv4Jt0EzlmWFerbkx2TTCaxQEb4xrC3MMq3jWFai5cKl0SVVXPJ+SaP+mfJdf47mNkj/WR162oGAZQBuGdJQvXESpfw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1e1c976f-48eb-4f6b-9796-08dc9283f6b5 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:25.8916 (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: KL1PR06MB6258 Subject: [FFmpeg-devel] [PATCH 17/18] avcodec/vvcdec: sao, support virtual boundaries 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: stkfdp1OiiXf --- libavcodec/vvc/filter.c | 46 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index 69d67cb7f6..44dd895d7d 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -20,6 +20,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "libavutil/frame.h" +#include "libavutil/imgutils.h" #include "ctu.h" #include "data.h" @@ -198,7 +199,7 @@ static void sao_get_edges(uint8_t vert_edge[2], uint8_t horiz_edge[2], uint8_t d const uint8_t no_subpic_filter = rsps->sps_num_subpics_minus1 && !rsps->sps_loop_filter_across_subpic_enabled_flag[subpic_idx]; uint8_t lf_edge[] = { 0, 0, 0, 0 }; - *restore = no_subpic_filter || no_tile_filter || !lfase; + *restore = no_subpic_filter || no_tile_filter || !lfase || rsps->sps_virtual_boundaries_enabled_flag; if (!*restore) return; @@ -206,21 +207,25 @@ static void sao_get_edges(uint8_t vert_edge[2], uint8_t horiz_edge[2], uint8_t d if (!edges[LEFT]) { lf_edge[LEFT] = no_tile_filter && pps->ctb_to_col_bd[rx] == rx; lf_edge[LEFT] |= no_subpic_filter && rsps->sps_subpic_ctu_top_left_x[subpic_idx] == rx; + lf_edge[LEFT] |= is_virtual_boundary(fc, rx << sps->ctb_log2_size_y, 1); vert_edge[0] = !sao_can_cross_slices(fc, rx, ry, -1, 0) || lf_edge[LEFT]; } if (!edges[RIGHT]) { lf_edge[RIGHT] = no_tile_filter && pps->ctb_to_col_bd[rx] != pps->ctb_to_col_bd[rx + 1]; lf_edge[RIGHT] |= no_subpic_filter && rsps->sps_subpic_ctu_top_left_x[subpic_idx] + rsps->sps_subpic_width_minus1[subpic_idx] == rx; + lf_edge[RIGHT] |= is_virtual_boundary(fc, (rx + 1) << sps->ctb_log2_size_y, 1); vert_edge[1] = !sao_can_cross_slices(fc, rx, ry, 1, 0) || lf_edge[RIGHT]; } if (!edges[TOP]) { lf_edge[TOP] = no_tile_filter && pps->ctb_to_row_bd[ry] == ry; lf_edge[TOP] |= no_subpic_filter && rsps->sps_subpic_ctu_top_left_y[subpic_idx] == ry; + lf_edge[TOP] |= is_virtual_boundary(fc, ry << sps->ctb_log2_size_y, 0); horiz_edge[0] = !sao_can_cross_slices(fc, rx, ry, 0, -1) || lf_edge[TOP]; } if (!edges[BOTTOM]) { lf_edge[BOTTOM] = no_tile_filter && pps->ctb_to_row_bd[ry] != pps->ctb_to_row_bd[ry + 1]; lf_edge[BOTTOM] |= no_subpic_filter && rsps->sps_subpic_ctu_top_left_y[subpic_idx] + rsps->sps_subpic_height_minus1[subpic_idx] == ry; + lf_edge[BOTTOM] |= is_virtual_boundary(fc, (ry + 1) << sps->ctb_log2_size_y, 0); horiz_edge[1] = !sao_can_cross_slices(fc, rx, ry, 0, 1) || lf_edge[BOTTOM]; } @@ -285,6 +290,24 @@ static void sao_extends_edges(uint8_t *dst, const ptrdiff_t dst_stride, copy_ctb(dst, src, width << ps, height, dst_stride, src_stride); } +static void sao_restore_vb(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src, ptrdiff_t src_stride, + const int width, const int height, const int vb_pos, const int ps, const int vertical) +{ + int w = 2; + int h = (vertical ? height : width); + int dx = vb_pos - 1; + int dy = 0; + + if (!vertical) { + FFSWAP(int, w, h); + FFSWAP(int, dx, dy); + } + dst += dy * dst_stride +(dx << ps); + src += dy * src_stride +(dx << ps); + + av_image_copy_plane(dst, dst_stride, src, src_stride, w << ps, h); +} + void ff_vvc_sao_filter(VVCLocalContext *lc, int x0, int y0) { VVCFrameContext *fc = lc->fc; @@ -297,7 +320,12 @@ void ff_vvc_sao_filter(VVCLocalContext *lc, int x0, int y0) uint8_t vert_edge[] = { 0, 0 }; uint8_t horiz_edge[] = { 0, 0 }; uint8_t diag_edge[] = { 0, 0, 0, 0 }; - int restore; + int restore, vb_x = 0, vb_y = 0;; + + if (sps->r->sps_virtual_boundaries_enabled_flag) { + vb_x = get_virtual_boundary(fc, rx, 1); + vb_y = get_virtual_boundary(fc, ry, 0); + } sao_get_edges(vert_edge, horiz_edge, diag_edge, &restore, lc, edges, rx, ry); @@ -305,9 +333,13 @@ void ff_vvc_sao_filter(VVCLocalContext *lc, int x0, int y0) static const uint8_t sao_tab[16] = { 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8 }; const ptrdiff_t src_stride = fc->frame->linesize[c_idx]; uint8_t *src = POS(c_idx, x0, y0); - const int width = FFMIN(sps->ctb_size_y, fc->ps.pps->width - x0) >> sps->hshift[c_idx]; - const int height = FFMIN(sps->ctb_size_y, fc->ps.pps->height - y0) >> sps->vshift[c_idx]; + const int hs = sps->hshift[c_idx]; + const int vs = sps->vshift[c_idx]; + const int ps = sps->pixel_shift; + const int width = FFMIN(sps->ctb_size_y, fc->ps.pps->width - x0) >> hs; + const int height = FFMIN(sps->ctb_size_y, fc->ps.pps->height - y0) >> vs; const int tab = sao_tab[(FFALIGN(width, 8) >> 3) - 1]; + const int sao_eo_class = sao->eo_class[c_idx]; switch (sao->type_idx[c_idx]) { case SAO_BAND: @@ -325,6 +357,12 @@ void ff_vvc_sao_filter(VVCLocalContext *lc, int x0, int y0) sao->eo_class[c_idx], width, height); fc->vvcdsp.sao.edge_restore[restore](src, dst, src_stride, dst_stride, sao, edges, width, height, c_idx, vert_edge, horiz_edge, diag_edge); + + if (vb_x > x0 && sao_eo_class != SAO_EO_VERT) + sao_restore_vb(src, src_stride, dst, dst_stride, width, height, (vb_x - x0) >> hs, ps, 1); + if (vb_y > y0 && sao_eo_class != SAO_EO_HORIZ) + sao_restore_vb(src, src_stride, dst, dst_stride, width, height, (vb_y - y0) >> vs, ps, 0); + break; } } From patchwork Sat Jun 22 06:24:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nuo Mi X-Patchwork-Id: 50068 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp938854vqz; Fri, 21 Jun 2024 23:37:49 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXP08AmrGPERgxk1BqUG6gg8EOpBjzVNhJ8zXG/x1O0qt16gwHzO7TIaE+FH/bKFWKMR9Sb1tP6ebWBBBK83agKBkSNzE0KFg1k0A== X-Google-Smtp-Source: AGHT+IEaUMyT90WEPeigdWQvGvVxGYffD4aACj+L+wxNPrffUujHsQhPp2jxtZJUGvZqarNqlY/0 X-Received: by 2002:a17:907:7f0f:b0:a6f:9e2d:6b52 with SMTP id a640c23a62f3a-a6fab6096d4mr929579866b.3.1719038268700; Fri, 21 Jun 2024 23:37:48 -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-a6fcf54d55csi151787566b.441.2024.06.21.23.37.48; Fri, 21 Jun 2024 23:37:48 -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=bIlXMgAa; 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 56F4868D907; Sat, 22 Jun 2024 09:24:56 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01olkn2034.outbound.protection.outlook.com [40.92.53.34]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 52A0F68D896 for ; Sat, 22 Jun 2024 09:24:42 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Mde+nFmecosw5njnIxpLxdxEv3quL4W71f8LUyBcsIp3uxALpXtKhp2R+WpxaybvsetSzwVetTE8H40V4IukMM+EJ+D4Yes0MueBT7XQwWxV4J7VyQVIwa8d2h/glqx8gKMoizk+XR9p5v3YUk/tJOrfc+mc6Ra4sA97UOEIfPeZud5oL9XJY4w5KGB0x49wEJEnbgZfHVeA/Ob+rKxPxeDmHBZg02Qw8MCD+x1u2Aih5HwTFDHpXsO46zNehVl4unrAUq8JmljVHSnKANsJlnfgHto4i8q9T4gKspJl/kZhE1ktbSHcfZMWE5Ejvc2yely1VAlW/scA7PFA7IUMeA== 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=gn3bx3UZhN85XeVOY9NbzbRdoyFTGsB7FxXfAoBa/MA=; b=WeKzMW2pHP2UmM3ySz5ZDs3LJ1PKuVAa+lE2YxKLsEO1YQDwH50oo2AJ0akTfbIhqwh9MJ2e0qqQrQB9K8HammWscf0x9QSJVVgs5zdTJ3s+m9bY7qVoms+o6tCEqkAvd+UNO1KXXSqj6P0mLjllYN6fnkjeOKElAhFvX5UqF4DBXwFLhI95HYU2WI6AfovvGzdHDLJqmoDVYMEZMuREis1hyxS5oYX8N9vJwv8cNyR9CEDRNBu3MXvRkwgxzpvL5necm1We/597xixY9DI1TffjgMqYjxRZQp5bbghC/INazErB/smKfqIoL3y5fwnxnmSpm4LIH/CAqQ4YmbmJFA== 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=gn3bx3UZhN85XeVOY9NbzbRdoyFTGsB7FxXfAoBa/MA=; b=bIlXMgAaFN2WZvEXxEhLfHk8zUP3ikvcQofUXVBbBWBWjGlUIaufwXvFjXxabWoB4Lpa9BBRBP4MK9PNegR0yjOKAGtxu3LjcoiPrRRSIDFWVkB/6ynJuiKOo0pacArcO8IE+zVPSJUIhsA9M48THNEKdivJhwyGNy3PtCt70NhTqHoAWM7nlZazmMd2dsJ7UpFVJLZJYq2rgNP9cFPlhVM6nLPEoLU3GN8drdQJYJ1QeBdi5ZbCeGDedh/vRjy8xMsTBa+3bGoAkeO9lNF/mEj7dNrObgm7gesumH4/Ga+12W3jJrsRRnrJU45Mj+NBLM8knNTyZGdycuCPR+oobQ== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by KL1PR06MB6258.apcprd06.prod.outlook.com (2603:1096:820:d8::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7698.25; Sat, 22 Jun 2024 06:24:26 +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:26 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 14:24:05 +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: [IITarZPu9H77+xwHjcaUie6cw24hRJS2] 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-18-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|KL1PR06MB6258:EE_ X-MS-Office365-Filtering-Correlation-Id: e6938bfb-2bed-445e-8987-08dc9283f719 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199025|4302099010|440099025|3412199022|1602099009|1710799023; X-Microsoft-Antispam-Message-Info: JP+hfC5tGKCjM5mD0YpCjjpEycvJ+KcJPhrf8eOQPKvHz06j2WROWteI84WvVJzzwLuFIWbaK7am73yzAjx60Puka1qfC5Sew5GjvCHoWWuGidAc4dc+XZldhEMN+T56OEgD0DEueeb7apt74YwrQFNTxLyc1rsyPcDQHzIVtiMkHZgSzwcsjvRFfQ5CdsSXlbY+AT3JPFmDdPlf9vu051/SUGl9L/y1WReSFw584cO35PNytEeYmQ3k32EO7T5mI4925roWOEgxVIECuRYeill35uTcaoqMukudhoqAuhHf/OaAh47XfQF+q8WJ8R/YJtMhMoAQv+5EFXZGTe6f2wr61WhLgq6rf7cVORTUK59uSylKlIKgBnNqT9l2ElwULlVWqgUmRapwpjW/bHG9GiVMseBiePwoA8mdO7P84qJ2BpUZ3wBp/aQbl9UPdTAV9Bxa69WZhQnKtn/byY88Wh+d6mD/XQsrLI7W4nt+703bCE2ZduYUpGLL+ZPlzCvSrbMxJueeNeklFZ1qot77zvfqZCFMaWar3gL8kJkJjyr+mNgAV7Iumr1Y+HxbWH+wfTqTLtKefqVzOH4THwjyouyNqj7LJemgpsXbxBeCxHQBQadg4KVqVutO0VbPMAgoNY73WaoMfFESZN1CYPRXsC/COGV8NI83+G5hx7kFylAJIldnvf6t20By0qL+GmskPwa+DX+hlPt5MLWqYObMm5HOff8skYc055wrd1DocTo= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: LdOBNMyxo4pJyaO2g1896xxuUEoTPTM/km+ic21RnDozfiqxTzts+CDYBOT4emWcdMgM+WgoOEJ47bQ4WbyGqaSudq2NMY7RE9wkxIkgfMBOlcYfL6RFqiMoHNVRRhzBMhtm9PWYeicApnvU+x1sdjhcp2WUYH77GWKbogYwzmRW9WEFqC8jqdk94ox7i27VcIaPHVAODh+j2OvNDr/bCUY3VvaR3y6NGcHfwpxnceaDpIS0FZFeVzxnU4bwQ0MpShMHXElUz7QDLnwMcmfy13+a5+rcDvgiZxd9IBRf4KUmn6l8hS+av9VEm/C9S//TBMe3eGGSpSDc7qOGdqbVJdF+SGj1ycPh81wndX2blnn3Tc5+dQRjeI0MNC40ZMCfJ2XzMYQ10nw9QN+WWLTds8zy+zIZbFdIKp+/NYfPJ15RHgtdEUEnov65Zu0v3CJRFJ6plQdSrS2wV2E5STrns8laVuFEpVHAhp4P0hyGtvT5vRcZfvsJOERJTmJETNgc2YaeBnheDSf+pe7OGDPvanIHusygWrDcA6DbO7H0HOOfePk0IO4LWF3ZpvD7HhjnyGD2XQubP6S/L22tZwM2/DNpcysD1xGLUxjx5bekhaNFJkxXfofddMs8ACSwlJGtpAweLDIq4jPYE7zjN72jEUcHMfTCDu4jvibbm+w3f0E+CcYgQBsAAAC4AyMaangGnYw0kLt7uC4uwELYH85iLVHeiCUI2xrdpWWauF2mmuBxO1aNjvij9RMZLK5iqcHwJq0wG1dzqo0mrT3YrVit6GuJ5bXYRUtaD9/g7lAfVaduMzUj00jcpuazOrnjvXB9m9N7rroFrr221G1fOaDIBUQyTpamlXyUroYq9SyWqVp385fsVsE5nFTzBsC5WTQ5v0gnOcvLJ4sTujZbEDMrzAeWG/lIsINZtZtYb03tDU/9tq9KwfqGj677x0Nng2iBOpBc5SmC1ZHSmvZUjS8FNp1m/oWFiwlIayF6oGjJ8ykEfUSZCN0iOR/BYu7XAu859f4pZfXYoSDF5DCqn0inFJrLclxLZ6sQvm+xI3/6rd8nAN9pOSa0pPecskc98z6GSHieSsMkTD6V6Qh4eb4A/Clgf8dbIjde//48K7cwW/XQGIVdJtDQecFXyBvkaAKDz7GF8iecGGLWojeZBo9lmYUw/15MP2bN+Y53EkbTb3rkbh0UoQ4ZTB6vNqgTC1lzGa2aez880L3ZkNZqNqe9XTsWNrYVimHHlIMrsgfHq6OPzhoVXXzt2+0UahbhFOc67gh2w/WtpOazGFIyLHp3ug== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e6938bfb-2bed-445e-8987-08dc9283f719 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:26.5584 (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: KL1PR06MB6258 Subject: [FFmpeg-devel] [PATCH 18/18] avcodec/vvcdec: alf, support virtual boundaries 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: 2roNhhOmSD/5 see https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9503377 passed files: GDR_A_ERICSSON_2.bit GDR_B_NOKIA_2.bit GDR_C_NOKIA_2.bit VIRTUAL_A_MediaTek_3.bit VIRTUAL_B_MediaTek_3.bit --- libavcodec/vvc/ctu.h | 7 +++ libavcodec/vvc/filter.c | 134 ++++++++++++++++++++++++++++------------ libavcodec/vvc/inter.c | 7 --- 3 files changed, 100 insertions(+), 48 deletions(-) diff --git a/libavcodec/vvc/ctu.h b/libavcodec/vvc/ctu.h index 432dbc5ade..d5c3e8d96f 100644 --- a/libavcodec/vvc/ctu.h +++ b/libavcodec/vvc/ctu.h @@ -463,6 +463,13 @@ typedef struct ALFParams { uint8_t ctb_cc_idc[2]; ///< alf_ctb_cc_cb_idc, alf_ctb_cc_cr_idc } ALFParams; +typedef struct VVCRect { + int l; // left + int t; // top + int r; // right + int b; // bottom +} VVCRect; + /** * parse a CTU * @param lc local context for CTU diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index 44dd895d7d..19b69f078e 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -56,6 +56,9 @@ static const uint8_t betatable[64] = { 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, }; +// One vertical and one horizontal virtual boundary in a CTU at most. The CTU will be divided into 4 subblocks. +#define MAX_VBBS 4 + static int get_virtual_boundary(const VVCFrameContext *fc, const int ctu_pos, const int vertical) { const VVCSPS *sps = fc->ps.sps; @@ -1127,58 +1130,107 @@ static void alf_get_edges(const VVCLocalContext *lc, int edges[MAX_EDGES], const edges[RIGHT] |= fc->ps.sps->r->sps_subpic_ctu_top_left_x[subpic_idx] + fc->ps.sps->r->sps_subpic_width_minus1[subpic_idx] == rx; edges[BOTTOM] |= fc->ps.sps->r->sps_subpic_ctu_top_left_y[subpic_idx] + fc->ps.sps->r->sps_subpic_height_minus1[subpic_idx] == ry; } + + if (sps->r->sps_virtual_boundaries_enabled_flag) { + edges[LEFT] |= is_virtual_boundary(fc, rx << sps->ctb_log2_size_y, 1); + edges[TOP] |= is_virtual_boundary(fc, ry << sps->ctb_log2_size_y, 0); + edges[RIGHT] |= is_virtual_boundary(fc, (rx + 1) << sps->ctb_log2_size_y, 1); + edges[BOTTOM] |= is_virtual_boundary(fc, (ry + 1) << sps->ctb_log2_size_y, 0); + } +} + +static void alf_init_subblock(VVCRect *sb, int sb_edges[MAX_EDGES], const VVCRect *b, const int edges[MAX_EDGES]) +{ + *sb = *b; + memcpy(sb_edges, edges, sizeof(int) * MAX_EDGES); +} + +static void alf_get_subblock(VVCRect *sb, int edges[MAX_EDGES], const int bx, const int by, const int vb_pos[2], const int has_vb[2]) +{ + int *pos[] = { &sb->l, &sb->t, &sb->r, &sb->b }; + + for (int vertical = 0; vertical <= 1; vertical++) { + if (has_vb[vertical]) { + const int c = vertical ? (bx ? LEFT : RIGHT) : (by ? TOP : BOTTOM); + *pos[c] = vb_pos[vertical]; + edges[c] = 1; + } + } +} + +static void alf_get_subblocks(const VVCLocalContext *lc, VVCRect sbs[MAX_VBBS], int sb_edges[MAX_VBBS][MAX_EDGES], int *nb_sbs, + const int x0, const int y0, const int rx, const int ry) +{ + VVCFrameContext *fc = lc->fc; + const VVCSPS *sps = fc->ps.sps; + const VVCPPS *pps = fc->ps.pps; + const int ctu_size_y = sps->ctb_size_y; + const int vb_pos[] = { get_virtual_boundary(fc, ry, 0), get_virtual_boundary(fc, rx, 1) }; + const int has_vb[] = { vb_pos[0] > y0, vb_pos[1] > x0 }; + const VVCRect b = { x0, y0, FFMIN(x0 + ctu_size_y, pps->width), FFMIN(y0 + ctu_size_y, pps->height) }; + int edges[MAX_EDGES] = { !rx, !ry, rx == pps->ctb_width - 1, ry == pps->ctb_height - 1 }; + int i = 0; + + alf_get_edges(lc, edges, rx, ry); + + for (int by = 0; by <= has_vb[0]; by++) { + for (int bx = 0; bx <= has_vb[1]; bx++, i++) { + alf_init_subblock(sbs + i, sb_edges[i], &b, edges); + alf_get_subblock(sbs + i, sb_edges[i], bx, by, vb_pos, has_vb); + } + } + *nb_sbs = i; } void ff_vvc_alf_filter(VVCLocalContext *lc, const int x0, const int y0) { VVCFrameContext *fc = lc->fc; const VVCSPS *sps = fc->ps.sps; - const VVCPPS *pps = fc->ps.pps; - const int rx = x0 >> fc->ps.sps->ctb_log2_size_y; - const int ry = y0 >> fc->ps.sps->ctb_log2_size_y; - const int ctb_size_y = fc->ps.sps->ctb_size_y; - const int ps = fc->ps.sps->pixel_shift; + const int rx = x0 >> sps->ctb_log2_size_y; + const int ry = y0 >> sps->ctb_log2_size_y; + const int ps = sps->pixel_shift; const int padded_stride = EDGE_EMU_BUFFER_STRIDE << ps; const int padded_offset = padded_stride * ALF_PADDING_SIZE + (ALF_PADDING_SIZE << ps); const int c_end = sps->r->sps_chroma_format_idc ? VVC_MAX_SAMPLE_ARRAYS : 1; + const int ctu_end = y0 + sps->ctb_size_y; const ALFParams *alf = &CTB(fc->tab.alf, rx, ry); - int edges[MAX_EDGES] = { rx == 0, ry == 0, rx == pps->ctb_width - 1, ry == pps->ctb_height - 1 }; - - alf_get_edges(lc, edges, rx, ry); - - for (int c_idx = 0; c_idx < c_end; c_idx++) { - const int hs = fc->ps.sps->hshift[c_idx]; - const int vs = fc->ps.sps->vshift[c_idx]; - const int ctb_size_h = ctb_size_y >> hs; - const int ctb_size_v = ctb_size_y >> vs; - const int x = x0 >> hs; - const int y = y0 >> vs; - const int pic_width = fc->ps.pps->width >> hs; - const int pic_height = fc->ps.pps->height >> vs; - const int width = FFMIN(pic_width - x, ctb_size_h); - const int height = FFMIN(pic_height - y, ctb_size_v); - const int src_stride = fc->frame->linesize[c_idx]; - uint8_t *src = POS(c_idx, x0, y0); - uint8_t *padded; - - if (alf->ctb_flag[c_idx] || (!c_idx && (alf->ctb_cc_idc[0] || alf->ctb_cc_idc[1]))) { - padded = (c_idx ? lc->alf_buffer_chroma : lc->alf_buffer_luma) + padded_offset; - alf_prepare_buffer(fc, padded, src, x, y, rx, ry, width, height, - padded_stride, src_stride, c_idx, edges); - } - if (alf->ctb_flag[c_idx]) { - if (!c_idx) { - alf_filter_luma(lc, src, padded, src_stride, padded_stride, x, y, - width, height, y + ctb_size_v - ALF_VB_POS_ABOVE_LUMA, alf); - } else { - alf_filter_chroma(lc, src, padded, src_stride, padded_stride, c_idx, - width, height, ctb_size_v - ALF_VB_POS_ABOVE_CHROMA, alf); + int sb_edges[MAX_VBBS][MAX_EDGES], nb_sbs; + VVCRect sbs[MAX_VBBS]; + + alf_get_subblocks(lc, sbs, sb_edges, &nb_sbs, x0, y0, rx, ry); + + for (int i = 0; i < nb_sbs; i++) { + const VVCRect *sb = sbs + i; + for (int c_idx = 0; c_idx < c_end; c_idx++) { + const int hs = fc->ps.sps->hshift[c_idx]; + const int vs = fc->ps.sps->vshift[c_idx]; + const int x = sb->l >> hs; + const int y = sb->t >> vs; + const int width = (sb->r - sb->l) >> hs; + const int height = (sb->b - sb->t) >> vs; + const int src_stride = fc->frame->linesize[c_idx]; + uint8_t *src = POS(c_idx, sb->l, sb->t); + uint8_t *padded; + + if (alf->ctb_flag[c_idx] || (!c_idx && (alf->ctb_cc_idc[0] || alf->ctb_cc_idc[1]))) { + padded = (c_idx ? lc->alf_buffer_chroma : lc->alf_buffer_luma) + padded_offset; + alf_prepare_buffer(fc, padded, src, x, y, rx, ry, width, height, + padded_stride, src_stride, c_idx, sb_edges[i]); + } + if (alf->ctb_flag[c_idx]) { + if (!c_idx) { + alf_filter_luma(lc, src, padded, src_stride, padded_stride, x, y, + width, height, ctu_end - ALF_VB_POS_ABOVE_LUMA, alf); + } else { + alf_filter_chroma(lc, src, padded, src_stride, padded_stride, c_idx, + width, height, ((ctu_end - sb->t) >> vs) - ALF_VB_POS_ABOVE_CHROMA, alf); + } + } + if (c_idx && alf->ctb_cc_idc[c_idx - 1]) { + padded = lc->alf_buffer_luma + padded_offset; + alf_filter_cc(lc, src, padded, src_stride, padded_stride, c_idx, + width, height, hs, vs, ctu_end - sb->t - ALF_VB_POS_ABOVE_LUMA, alf); } - } - if (c_idx && alf->ctb_cc_idc[c_idx - 1]) { - padded = lc->alf_buffer_luma + padded_offset; - alf_filter_cc(lc, src, padded, src_stride, padded_stride, c_idx, - width, height, hs, vs, (ctb_size_v << vs) - ALF_VB_POS_ABOVE_LUMA, alf); } } } diff --git a/libavcodec/vvc/inter.c b/libavcodec/vvc/inter.c index 344a0a8c13..9578fd8de4 100644 --- a/libavcodec/vvc/inter.c +++ b/libavcodec/vvc/inter.c @@ -30,13 +30,6 @@ #define PROF_TEMP_OFFSET (MAX_PB_SIZE + 32) static const int bcw_w_lut[] = {4, 5, 3, 10, -2}; -typedef struct VVCRect { - int l; // left - int t; // top - int r; // right - int b; // bottom -} VVCRect; - static void subpic_get_rect(VVCRect *r, const VVCFrame *src_frame, const int subpic_idx, const int is_chroma) { const VVCSPS *sps = src_frame->sps;