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;