From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 8E4B249776 for ; Sun, 19 May 2024 13:42:21 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 764E868D313; Sun, 19 May 2024 16:40:13 +0300 (EEST) Received: from SINPR02CU002.outbound.protection.outlook.com (mail-southeastasiaazolkn19011003.outbound.protection.outlook.com [52.103.65.3]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D08AB68D130 for ; Sun, 19 May 2024 16:39:54 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JcD4GwfkAY1R9MPRScEpLXo20VJpTjFcr42/wWNVnwmYZGDeZ4ZrBCVONoOgkKMGuiWTJjIxl1C7C6Iyg8k+YK7gFtu0pdUvCtl5bH4Io7tmrCFWlE6baXF0dxP9gohWegFyJ6sZMe0eC0FCD8Uh6dGZNAyn+LzpIBJyNzJbEUuWzFKs5vauJ5M45qgwPMqwpD0ZsE/tC+7jvTXLRTmAwGjZaPyLblw1zkMBRgj13v5FPhqaNYNKelUqrD0nvumCzuSOUTwFgE5kF5SHQOvoe2V9U5z94x6HHrEFJW0CKgoHal2+ud5m3If0nk1x6QOoN7k7stjjqNAAQyyOmTKURQ== 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=nvAzFc9Dtx2wLsE6ZZaFmKhJXote2+sxLTVt00dycLI=; b=jq5oD74OljYRASlB4hZRzAS0Zpz305al95keSWuwk+QxdxvwJ94BF8dtOgAyHfJYQkwf4NC2OGF9d1ODKdrwEJu7wPSjkfkDoifoQODrI+Ja3IDE6sRiWeJ9MRGMlepKQqiOSgUbkD522FuliTVp4MZ6YzEF/hLFd6jtdc7k4MDrwqxUMxVqlZVgfRrq1GzZ4UiY0nZ4+C74cuvunAHlEF6X6icJyADPQuZT2x2+gH/bTd1tV3QzYe4AASo2YgtmjTjbakzgWe9qRLoS4eakGE7ornHTCojqjmSu3+YjPtRT+lWN/uTgiqvUPX8esataBxDbFAXISA43tliNDHJPdw== 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=nvAzFc9Dtx2wLsE6ZZaFmKhJXote2+sxLTVt00dycLI=; b=Dt6PK4kkyAt1/1wi93xR9rtIUJLJ9+2XR6wqkO/QTsqZDPx9cMlPGg34gTqW3mcheiEcS3ii87vgaYBVBt+buK7NK/jwZMJrseUjrthGvVdrco2Z52TyqVEEq2nMHaXJtwCey3IXuU12qO5ibDCKC7sxncSpWJpT0zA2HqlELXaECgiLA4mcY20RGLZFtcpSTCBwtfqwmiZ5WIDPJkoexCnPAxOYTpWmJaBy89v7J7JUobnN4620b+CMrwtgSAxOmcg5vTPb6IcQSLnS+OTPpn4gSluHmZ3sSd5CPjQQP8RKFCx7F0UYpoiGtITVvs4FN9jMTyDLIJDTTkMfkyIjsg== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by TYUPR06MB6098.apcprd06.prod.outlook.com (2603:1096:400:358::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7587.34; Sun, 19 May 2024 13:39:37 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::81f7:9125:583a:1cca]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::81f7:9125:583a:1cca%4]) with mapi id 15.20.7587.030; Sun, 19 May 2024 13:39:37 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sun, 19 May 2024 21:27:38 +0800 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240519132749.790832-1-nuomi2021@gmail.com> References: <20240519132749.790832-1-nuomi2021@gmail.com> X-TMN: [cNjlK1AytBB/1+TNysHywzcvikufmcBv] X-ClientProxiedBy: TYCP301CA0017.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:381::8) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20240519132749.790832-7-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|TYUPR06MB6098:EE_ X-MS-Office365-Filtering-Correlation-Id: 99f28640-60f6-429d-aa5e-08dc7809208d X-Microsoft-Antispam: BCL:0; ARA:14566002|461199019|440099019|3412199016|1710799017; X-Microsoft-Antispam-Message-Info: Fav0iojGv21Iio5afmzPnwNglniShlUvuBjUK34ie8cehIdKAnlkxnvhSbp5mYLGaWJ7bBMGorZWMXp8Jx31njSkLEUNfCOVq4EhHWVaL022CGYPX8Et5x85mis0UE88nCjEP4KqDbSlomMlJ4yEz9WIsAF6QlTD7jkTY7ScN7wkz5i2abgDpplph8a4q+zpn0YbNf9S8HwMisPCQuCw2yWRnhI5jJhKbtiqz7XyiuwheB6boJ0tgfKEFf1y9FrPsoarTsnpq+pP4kgaJtk+onSNcvK1S+6jH5fE4gQzN+2NYLFFQV5z63VgnI8g2vAoQKdWFPiqjtCZaOR4QpphmfxqKoVyvTH5BzXIiY9a78YRmZZi+XldL14XYaeUfm9eDXwgTXq2yDdKp3fm+G1aVZQ73AWNMVv00WURnGiiCzah0R/HaNFaMiCX3AwVVFR6z8ZJkeQGR+hq1OiyNZgY0kSpHfnlPUwPuBXMtl5j9aJhoYHwG/CS6GUUi6W05ywfC/KXXm2lA5zWBjVlB1dhjlBaoY1djtUEuPfDGiF2B+RDROVU8DwFLlTkxDLoYsdtuRLjQ9aOqtjTeLAvWZo+5rkYhQ5yVCN5E4dGLBIEyrCdzvB9KrcF/n/l1WKaLCdY X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?mkFqr6RWCoMTYn5mfxKPtt9ZhglB8kv07y/gduNzGaPPKtsmlC4MFKMczm1o?= =?us-ascii?Q?X051f4MuuaEm6n26NTVCNVUN1+iPJ63AgGqW0a91ml/DpjiNXPBk9uWH7Uvj?= =?us-ascii?Q?b7qPtzR0fTGBav5FEf/dzg1wAR3ssz+OcOMhWumi70O5gwNTyNtdtx8bQ/mT?= =?us-ascii?Q?IyUid8WTVKzqQ7JmjHaN0NRgDOAMQR9dwup+ZFd0mp+pvbRArwtCtYrHpdlm?= =?us-ascii?Q?w3fgAAi2tv055t28vBGEoaj1C0Ed5fqb4ifQdnQ/IzCMP03TOgsIp/kp45A2?= =?us-ascii?Q?U7udtiEa2v3eoVrZNvgC/SDXTC1NdPNLYMOeLQe/Aq5AxsutuhXPx+R47HaW?= =?us-ascii?Q?rzW0l+Bq7s8Iua0W8JKy6L3bX76iJ5xA+r394b6Dqvxhvr62Yp/P57ffYIl9?= =?us-ascii?Q?17fBZdoChiEudKRRVBn0qEJKtxRvyMKENZJpIlJHMWKhLwaaulT+a/PaD/dY?= =?us-ascii?Q?lLFqu8s5W8alg3hJKiGmB9hU+ACAK1dRdUXXrUDXjsN7v+loM6zU+xqVgsz7?= =?us-ascii?Q?FgoPTX8yzlYk7y+Fictr4CeNCFzTlJNqmaZRtgkNklH0Mp5V8nWSJcvzUW4p?= =?us-ascii?Q?A7LRRnbg9Hda/NA/YFhlU64PZYecsXcSaVj4zo+2N2cO+3/n+N8M3FZ5OCAz?= =?us-ascii?Q?ONNFMxK+Ns9y6Id2ugCX4GGEazg7O2YAhjSVyTrvK5GN+Wszi9RlcolxZ9/I?= =?us-ascii?Q?EQKuwtBwDcYZrcvPgRLmIsbSN0tr3eh5J6mRTjvADOPqBMnEhHYZilwzoReY?= =?us-ascii?Q?D8ReQsHIN0vWcyhWnyC2f3haZDEZZcQfX0Qp4GVS9vkNTdGEc5I5SGX6gUDO?= =?us-ascii?Q?LiCXI89lZblLkgRCJgpzk8NP8g9SaenoN+bDRF+IVPgynKRz7PvSaZHHM+vz?= =?us-ascii?Q?1zB2mK9AnDGgwEuKcKCCBUZEUVgvlT3RVIXAMuyaxW3wbd8u8uW2NOP16ogL?= =?us-ascii?Q?wnhC2YDxvE56ItsrsKCElJSRnTlgp4YQh7Ezz9+03gIZV+O97q1AxBrUat3C?= =?us-ascii?Q?yTDb9wZjdNX8GH3meQ48Axp9c6jdK3DR94obzZaUr42jp87SnEoNeK3R0W5C?= =?us-ascii?Q?QpVUUWbC0SGMw8XovNr6y2/SshsBqcE0JWoXLqPJvlJAjM4LhUoKDDoSMLmn?= =?us-ascii?Q?1QhD1v+22U6aKG8dXDjMFIHoXeOn6/cqFPe6T//mnopi92mPxHYcIg0x9YoM?= =?us-ascii?Q?6pYayis/+FWbmm+anpnaUem5ERAPMVoAf7CR6/DWtAnPMwekdrVj+kajcQRy?= =?us-ascii?Q?8Hgix5/vL4P2/wuMizL3gBG+1mx1WxRkBWCpTzplsA=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 99f28640-60f6-429d-aa5e-08dc7809208d X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2024 13:39:37.7926 (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: TYUPR06MB6098 Subject: [FFmpeg-devel] [PATCH 07/18] avcodec/vvcdec: refact out VVCRefPic from RefPicList 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --- libavcodec/vvc/ctu.c | 10 +++++----- libavcodec/vvc/dec.c | 4 ++-- libavcodec/vvc/dec.h | 10 +++++++--- libavcodec/vvc/filter.c | 22 +++++++++++----------- libavcodec/vvc/inter.c | 4 ++-- libavcodec/vvc/mvs.c | 36 ++++++++++++++++++------------------ libavcodec/vvc/refs.c | 11 ++++++----- libavcodec/vvc/thread.c | 2 +- 8 files changed, 52 insertions(+), 47 deletions(-) diff --git a/libavcodec/vvc/ctu.c b/libavcodec/vvc/ctu.c index 53f92ca10f..242caa58f7 100644 --- a/libavcodec/vvc/ctu.c +++ b/libavcodec/vvc/ctu.c @@ -1263,8 +1263,8 @@ static void derive_mmvd(const VVCLocalContext *lc, MvField *mvf, const Mv *mmvd_ const RefPicList *rpl = sc->rpl; const int poc = lc->fc->ps.ph.poc; const int diff[] = { - poc - rpl[0].list[mvf->ref_idx[0]], - poc - rpl[1].list[mvf->ref_idx[1]] + poc - rpl[L0].refs[mvf->ref_idx[L0]].poc, + poc - rpl[L1].refs[mvf->ref_idx[L1]].poc }; const int sign = FFSIGN(diff[0]) != FFSIGN(diff[1]); @@ -1275,7 +1275,7 @@ static void derive_mmvd(const VVCLocalContext *lc, MvField *mvf, const Mv *mmvd_ const int i = FFABS(diff[0]) < FFABS(diff[1]); const int o = !i; mmvd[i] = *mmvd_offset; - if (!rpl[0].isLongTerm[mvf->ref_idx[0]] && !rpl[1].isLongTerm[mvf->ref_idx[1]]) { + if (!rpl[L0].refs[mvf->ref_idx[L0]].is_lt && !rpl[L1].refs[mvf->ref_idx[L1]].is_lt) { ff_vvc_mv_scale(&mmvd[o], mmvd_offset, diff[i], diff[o]); } else { @@ -1699,8 +1699,8 @@ static void derive_dmvr_bdof_flag(const VVCLocalContext *lc, PredictionUnit *pu) pu->bdof_flag = 0; if (mi->pred_flag == PF_BI && - (poc - rpl0->list[ref_idx[L0]] == rpl1->list[ref_idx[L1]] - poc) && - !rpl0->isLongTerm[ref_idx[L0]] && !rpl1->isLongTerm[ref_idx[L1]] && + (poc - rpl0->refs[ref_idx[L0]].poc == rpl1->refs[ref_idx[L1]].poc - poc) && + !rpl0->refs[ref_idx[L0]].is_lt && !rpl1->refs[ref_idx[L1]].is_lt && !cu->ciip_flag && !mi->bcw_idx && !w->weight_flag[L0][LUMA][mi->ref_idx[L0]] && !w->weight_flag[L1][LUMA][mi->ref_idx[L1]] && diff --git a/libavcodec/vvc/dec.c b/libavcodec/vvc/dec.c index 25cdb39cab..b4c35330eb 100644 --- a/libavcodec/vvc/dec.c +++ b/libavcodec/vvc/dec.c @@ -403,8 +403,8 @@ static int8_t smvd_find(const VVCFrameContext *fc, const SliceContext *sc, int l int8_t idx = -1; int old_diff = -1; for (int i = 0; i < rsh->num_ref_idx_active[lx]; i++) { - if (!rpl->isLongTerm[i]) { - int diff = poc - rpl->list[i]; + if (!rpl->refs[i].is_lt) { + int diff = poc - rpl->refs[i].poc; if (find(idx, diff, old_diff)) { idx = i; old_diff = diff; diff --git a/libavcodec/vvc/dec.h b/libavcodec/vvc/dec.h index 4dacefc06a..205427f681 100644 --- a/libavcodec/vvc/dec.h +++ b/libavcodec/vvc/dec.h @@ -42,10 +42,14 @@ #define L0 0 #define L1 1 +typedef struct VVCRefPic { + struct VVCFrame *ref; + int poc; + int is_lt; // is long term reference +} VVCRefPic; + typedef struct RefPicList { - struct VVCFrame *ref[VVC_MAX_REF_ENTRIES]; - int list[VVC_MAX_REF_ENTRIES]; - int isLongTerm[VVC_MAX_REF_ENTRIES]; + VVCRefPic refs[VVC_MAX_REF_ENTRIES]; int nb_refs; } RefPicList; diff --git a/libavcodec/vvc/filter.c b/libavcodec/vvc/filter.c index 8f44255ce4..7844d34eac 100644 --- a/libavcodec/vvc/filter.c +++ b/libavcodec/vvc/filter.c @@ -321,9 +321,9 @@ static int boundary_strength(const VVCLocalContext *lc, const MvField *curr, con if (curr->pred_flag == PF_BI && neigh->pred_flag == PF_BI) { // same L0 and L1 - if (rpl[0].list[curr->ref_idx[0]] == neigh_rpl[0].list[neigh->ref_idx[0]] && - rpl[0].list[curr->ref_idx[0]] == rpl[1].list[curr->ref_idx[1]] && - neigh_rpl[0].list[neigh->ref_idx[0]] == neigh_rpl[1].list[neigh->ref_idx[1]]) { + if (rpl[L0].refs[curr->ref_idx[L0]].poc == neigh_rpl[L0].refs[neigh->ref_idx[L0]].poc && + rpl[L0].refs[curr->ref_idx[L0]].poc == rpl[L1].refs[curr->ref_idx[L1]].poc && + neigh_rpl[L0].refs[neigh->ref_idx[L0]].poc == neigh_rpl[L1].refs[neigh->ref_idx[L1]].poc) { if ((FFABS(neigh->mv[0].x - curr->mv[0].x) >= 8 || FFABS(neigh->mv[0].y - curr->mv[0].y) >= 8 || FFABS(neigh->mv[1].x - curr->mv[1].x) >= 8 || FFABS(neigh->mv[1].y - curr->mv[1].y) >= 8) && (FFABS(neigh->mv[1].x - curr->mv[0].x) >= 8 || FFABS(neigh->mv[1].y - curr->mv[0].y) >= 8 || @@ -331,15 +331,15 @@ static int boundary_strength(const VVCLocalContext *lc, const MvField *curr, con return 1; else return 0; - } else if (neigh_rpl[0].list[neigh->ref_idx[0]] == rpl[0].list[curr->ref_idx[0]] && - neigh_rpl[1].list[neigh->ref_idx[1]] == rpl[1].list[curr->ref_idx[1]]) { + } else if (neigh_rpl[L0].refs[neigh->ref_idx[L0]].poc == rpl[L0].refs[curr->ref_idx[L0]].poc && + neigh_rpl[L1].refs[neigh->ref_idx[L1]].poc == rpl[L1].refs[curr->ref_idx[L1]].poc) { if (FFABS(neigh->mv[0].x - curr->mv[0].x) >= 8 || FFABS(neigh->mv[0].y - curr->mv[0].y) >= 8 || FFABS(neigh->mv[1].x - curr->mv[1].x) >= 8 || FFABS(neigh->mv[1].y - curr->mv[1].y) >= 8) return 1; else return 0; - } else if (neigh_rpl[1].list[neigh->ref_idx[1]] == rpl[0].list[curr->ref_idx[0]] && - neigh_rpl[0].list[neigh->ref_idx[0]] == rpl[1].list[curr->ref_idx[1]]) { + } else if (neigh_rpl[L1].refs[neigh->ref_idx[L1]].poc == rpl[L0].refs[curr->ref_idx[L0]].poc && + neigh_rpl[L0].refs[neigh->ref_idx[L0]].poc == rpl[L1].refs[curr->ref_idx[L1]].poc) { if (FFABS(neigh->mv[1].x - curr->mv[0].x) >= 8 || FFABS(neigh->mv[1].y - curr->mv[0].y) >= 8 || FFABS(neigh->mv[0].x - curr->mv[1].x) >= 8 || FFABS(neigh->mv[0].y - curr->mv[1].y) >= 8) return 1; @@ -354,18 +354,18 @@ static int boundary_strength(const VVCLocalContext *lc, const MvField *curr, con if (curr->pred_flag & 1) { A = curr->mv[0]; - ref_A = rpl[0].list[curr->ref_idx[0]]; + ref_A = rpl[L0].refs[curr->ref_idx[L0]].poc; } else { A = curr->mv[1]; - ref_A = rpl[1].list[curr->ref_idx[1]]; + ref_A = rpl[L1].refs[curr->ref_idx[L1]].poc; } if (neigh->pred_flag & 1) { B = neigh->mv[0]; - ref_B = neigh_rpl[0].list[neigh->ref_idx[0]]; + ref_B = neigh_rpl[L0].refs[neigh->ref_idx[L0]].poc; } else { B = neigh->mv[1]; - ref_B = neigh_rpl[1].list[neigh->ref_idx[1]]; + ref_B = neigh_rpl[L1].refs[neigh->ref_idx[L1]].poc; } if (ref_A == ref_B) { diff --git a/libavcodec/vvc/inter.c b/libavcodec/vvc/inter.c index 3bf06d6d53..cd96707c02 100644 --- a/libavcodec/vvc/inter.c +++ b/libavcodec/vvc/inter.c @@ -394,7 +394,7 @@ static int pred_get_refs(const VVCLocalContext *lc, VVCFrame *ref[2], const MvF for (int mask = PF_L0; mask <= PF_L1; mask++) { if (mv->pred_flag & mask) { const int lx = mask - PF_L0; - ref[lx] = rpl[lx].ref[mv->ref_idx[lx]]; + ref[lx] = rpl[lx].refs[mv->ref_idx[lx]].ref; if (!ref[lx]) return AVERROR_INVALIDDATA; } @@ -450,7 +450,7 @@ static void pred_gpm_blk(VVCLocalContext *lc) for (int i = 0; i < 2; i++) { const MvField *mv = pu->gpm_mv + i; const int lx = mv->pred_flag - PF_L0; - VVCFrame *ref = lc->sc->rpl[lx].ref[mv->ref_idx[lx]]; + VVCFrame *ref = lc->sc->rpl[lx].refs[mv->ref_idx[lx]].ref; if (!ref) return; mc(lc, tmp[i], ref->frame, mv->mv + lx, x, y, width, height, c_idx); diff --git a/libavcodec/vvc/mvs.c b/libavcodec/vvc/mvs.c index fe7d923460..9407fbfd8a 100644 --- a/libavcodec/vvc/mvs.c +++ b/libavcodec/vvc/mvs.c @@ -88,8 +88,8 @@ static int check_mvset(Mv *mvLXCol, Mv *mvCol, const RefPicList *refPicList, int X, int refIdxLx, const RefPicList *refPicList_col, int listCol, int refidxCol) { - int cur_lt = refPicList[X].isLongTerm[refIdxLx]; - int col_lt = refPicList_col[listCol].isLongTerm[refidxCol]; + int cur_lt = refPicList[X].refs[refIdxLx].is_lt; + int col_lt = refPicList_col[listCol].refs[refidxCol].is_lt; int col_poc_diff, cur_poc_diff; if (cur_lt != col_lt) { @@ -98,8 +98,8 @@ static int check_mvset(Mv *mvLXCol, Mv *mvCol, return 0; } - col_poc_diff = colPic - refPicList_col[listCol].list[refidxCol]; - cur_poc_diff = poc - refPicList[X].list[refIdxLx]; + col_poc_diff = colPic - refPicList_col[listCol].refs[refidxCol].poc; + cur_poc_diff = poc - refPicList[X].refs[refIdxLx].poc; mv_compression(mvCol); if (cur_lt || col_poc_diff == cur_poc_diff) { @@ -126,7 +126,7 @@ int ff_vvc_no_backward_pred_flag(const VVCLocalContext *lc) for (j = 0; j < 2; j++) { for (i = 0; i < lc->sc->sh.r->num_ref_idx_active[j]; i++) { - if (rpl[j].list[i] > lc->fc->ps.ph.poc) { + if (rpl[j].refs[i].poc > lc->fc->ps.ph.poc) { check_diffpicount++; break; } @@ -1059,9 +1059,9 @@ static int sb_temporal_luma_motion_data(const VVCLocalContext *lc, const MvField colPic = ref->poc; if (a1) { - if ((a1->pred_flag & PF_L0) && colPic == rpl[0].list[a1->ref_idx[0]]) + if ((a1->pred_flag & PF_L0) && colPic == rpl[L0].refs[a1->ref_idx[L0]].poc) *temp_mv = a1->mv[0]; - else if ((a1->pred_flag & PF_L1) && colPic == rpl[1].list[a1->ref_idx[1]]) + else if ((a1->pred_flag & PF_L1) && colPic == rpl[L1].refs[a1->ref_idx[L1]].poc) *temp_mv = a1->mv[1]; ff_vvc_round_mv(temp_mv, 0, 4); } @@ -1418,16 +1418,16 @@ static int mvp_candidate(const VVCLocalContext *lc, const int x_cand, const int const MvField* tab_mvf = fc->tab.mvf; const MvField *mvf = &TAB_MVF(x_cand, y_cand); const PredFlag maskx = lx + 1; - const int poc = rpl[lx].list[ref_idx[lx]]; + const int poc = rpl[lx].refs[ref_idx[lx]].poc; int available = 0; - if ((mvf->pred_flag & maskx) && rpl[lx].list[mvf->ref_idx[lx]] == poc) { + if ((mvf->pred_flag & maskx) && rpl[lx].refs[mvf->ref_idx[lx]].poc == poc) { available = 1; *mv = mvf->mv[lx]; } else { const int ly = !lx; const PredFlag masky = ly + 1; - if ((mvf->pred_flag & masky) && rpl[ly].list[mvf->ref_idx[ly]] == poc) { + if ((mvf->pred_flag & masky) && rpl[ly].refs[mvf->ref_idx[ly]].poc == poc) { available = 1; *mv = mvf->mv[ly]; } @@ -1450,15 +1450,15 @@ static int affine_mvp_candidate(const VVCLocalContext *lc, const MvField *mvf = &TAB_MVF(x_nb, y_nb); RefPicList* rpl = lc->sc->rpl; const PredFlag maskx = lx + 1; - const int poc = rpl[lx].list[ref_idx[lx]]; + const int poc = rpl[lx].refs[ref_idx[lx]].poc; - if ((mvf->pred_flag & maskx) && rpl[lx].list[mvf->ref_idx[lx]] == poc) { + if ((mvf->pred_flag & maskx) && rpl[lx].refs[mvf->ref_idx[lx]].poc == poc) { available = 1; affine_cps_from_nb(lc, x_nb, y_nb, nbw, nbh, lx, cps, num_cp); } else { const int ly = !lx; const PredFlag masky = ly + 1; - if ((mvf->pred_flag & masky) && rpl[ly].list[mvf->ref_idx[ly]] == poc) { + if ((mvf->pred_flag & masky) && rpl[ly].refs[mvf->ref_idx[ly]].poc == poc) { available = 1; affine_cps_from_nb(lc, x_nb, y_nb, nbw, nbh, ly, cps, num_cp); } @@ -1550,7 +1550,7 @@ static int mvp_history_candidates(const VVCLocalContext *lc, { const EntryPoint* ep = lc->ep; const RefPicList* rpl = lc->sc->rpl; - const int poc = rpl[lx].list[ref_idx]; + const int poc = rpl[lx].refs[ref_idx].poc; if (ep->num_hmvp == 0) return 0; @@ -1559,7 +1559,7 @@ static int mvp_history_candidates(const VVCLocalContext *lc, for (int j = 0; j < 2; j++) { const int ly = (j ? !lx : lx); PredFlag mask = PF_L0 + ly; - if ((h->pred_flag & mask) && poc == rpl[ly].list[h->ref_idx[ly]]) { + if ((h->pred_flag & mask) && poc == rpl[ly].refs[h->ref_idx[ly]].poc) { if (mvp_lx_flag == num_cands) { *mv = h->mv[ly]; ff_vvc_round_mv(mv, amvr_shift, amvr_shift); @@ -1725,14 +1725,14 @@ static int affine_mvp_constructed_cp(NeighbourContext *ctx, if (check_available(n, ctx->lc, 0)) { const PredFlag maskx = lx + 1; const MvField* mvf = &TAB_MVF(n->x, n->y); - const int poc = rpl[lx].list[ref_idx]; - if ((mvf->pred_flag & maskx) && rpl[lx].list[mvf->ref_idx[lx]] == poc) { + const int poc = rpl[lx].refs[ref_idx].poc; + if ((mvf->pred_flag & maskx) && rpl[lx].refs[mvf->ref_idx[lx]].poc == poc) { available = 1; *cp = mvf->mv[lx]; } else { const int ly = !lx; const PredFlag masky = ly + 1; - if ((mvf->pred_flag & masky) && rpl[ly].list[mvf->ref_idx[ly]] == poc) { + if ((mvf->pred_flag & masky) && rpl[ly].refs[mvf->ref_idx[ly]].poc == poc) { available = 1; *cp = mvf->mv[ly]; } diff --git a/libavcodec/vvc/refs.c b/libavcodec/vvc/refs.c index 6694bc4c51..74c105b619 100644 --- a/libavcodec/vvc/refs.c +++ b/libavcodec/vvc/refs.c @@ -352,7 +352,8 @@ static VVCFrame *generate_missing_ref(VVCContext *s, VVCFrameContext *fc, int po static int add_candidate_ref(VVCContext *s, VVCFrameContext *fc, RefPicList *list, int poc, int ref_flag, uint8_t use_msb) { - VVCFrame *ref = find_ref_idx(s, fc, poc, use_msb); + VVCFrame *ref = find_ref_idx(s, fc, poc, use_msb); + VVCRefPic *refp = &list->refs[list->nb_refs]; if (ref == fc->ref || list->nb_refs >= VVC_MAX_REF_ENTRIES) return AVERROR_INVALIDDATA; @@ -363,9 +364,9 @@ static int add_candidate_ref(VVCContext *s, VVCFrameContext *fc, RefPicList *lis return AVERROR(ENOMEM); } - list->list[list->nb_refs] = poc; - list->ref[list->nb_refs] = ref; - list->isLongTerm[list->nb_refs] = ref_flag & VVC_FRAME_FLAG_LONG_REF; + refp->poc = poc; + refp->ref = ref; + refp->is_lt = ref_flag & VVC_FRAME_FLAG_LONG_REF; list->nb_refs++; mark_ref(ref, ref_flag); @@ -463,7 +464,7 @@ int ff_vvc_slice_rpl(VVCContext *s, VVCFrameContext *fc, SliceContext *sc) } if ((!rsh->sh_collocated_from_l0_flag) == lx && rsh->sh_collocated_ref_idx < rpl->nb_refs) - fc->ref->collocated_ref = rpl->ref[rsh->sh_collocated_ref_idx]; + fc->ref->collocated_ref = rpl->refs[rsh->sh_collocated_ref_idx].ref; } return 0; } diff --git a/libavcodec/vvc/thread.c b/libavcodec/vvc/thread.c index 3b27811db2..2654b40058 100644 --- a/libavcodec/vvc/thread.c +++ b/libavcodec/vvc/thread.c @@ -294,7 +294,7 @@ static void schedule_inter(VVCContext *s, VVCFrameContext *fc, const SliceContex for (int lx = 0; lx < 2; lx++) { for (int i = 0; i < sh->r->num_ref_idx_active[lx]; i++) { const int y = ctu->max_y[lx][i]; - VVCFrame *ref = sc->rpl[lx].ref[i]; + VVCFrame *ref = sc->rpl[lx].refs[i].ref; if (ref && y >= 0) add_progress_listener(ref, &t->listener[lx][i], t, s, VVC_PROGRESS_PIXEL, y + LUMA_EXTRA_AFTER); } -- 2.34.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".