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,