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); }