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 B415046F02 for ; Thu, 22 Feb 2024 07:15:23 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EF9EC68D1E1; Thu, 22 Feb 2024 09:15:03 +0200 (EET) Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01olkn2011.outbound.protection.outlook.com [40.92.53.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 78A0968D1CB for ; Thu, 22 Feb 2024 09:15:02 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FZkw34VZxnCWzWE9UulZbJUbGsFOBRmtrZbBtUAoT2QV+TFmOUe1kdYm3CjiZkBcO4B9zaTGLtBXRO8hPV0M/gB9QsSw7dyeCs4zFWxDi8FxgmlfqnaJPr+NinUAJsbRIVzTEKC0ifHxA4/In/3J4mKgnmAHvs2BQ1dt/UJPYOd1todfcG/T5GJWw6r2xE+E/8El3ShixsDAKZTTK++/nEXs8hjPTTZVrdtOT0qW2IPOGlsfXa6mqCpdKj0iqV8NZuxdnxir7nDDi1O+izO3FE8nfYOW+zTU0a+IGsoIXHphSJiW4l3hpx2JYIaP2nNgzz1B8U3mMW7FRloAQAqR3w== 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=79oL7fdwEF4U64v1tIb34u5vQSgWgEhM8H81S7Zz1nM=; b=jpLUH9ZfMkpNgyA4avlzkbJcRAJqywyibNiRLpVxOtRx8TXXXwBV4tYPcvmkoDEmSk0YQN7b9F57SJgwf1LS+qU0pQlQFI7dptDLdppaVOCR/w9I2dCWDzffRCHtPVvcx7k4wDOaPhd7LR3UPo1ff2I1XEfd4dcRMO7cMQGUw8RVlvgqNXXtL98XxcRuci9CqHU98Km9sHKtscBDczZLmZju61EPb2Ee6ya+GKH7IEbiYiovqHeGuzT621hUzuqqj1nFiHCciSV7+23fJzbu1qrGWpvjJDHS7Bsl+ypIusAfD0+1vNWXw7M75PD1rQ4IQWKnp2gKoIYKcs2I71zewg== 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=79oL7fdwEF4U64v1tIb34u5vQSgWgEhM8H81S7Zz1nM=; b=LxNuubn0M7BAfRNvR9uuQc1PU564wbj9K44zSgNyAsRZH0IlbuRNt7/kFX4/U45W7f0MqQkDF1g1DjQmtJyDZwVY3tn4u3p1evMtc/HydiixN1su0yah4RZ/yNzdiZxIjFqpYk8Kd/urMtjV4rKa8TSeB8aPGuhg/1DYSA0Lkkt2Kxu2CyLjgjtYPr3frHsvF+PV0N2evbK0fgiPYZi3PkQZbO7YsBr6Nj7RF+MUVbV8Wi0IEVQFQRTCjXm7y72NfzSBbQaGsgJ8zCPwSRVUuY1fjpsUZcGcdNavLNtj9FicQAkx/1/n4KNCtZtRbD2MS5WROfj+c6fc2KLIEYUrlw== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by TYUPR06MB6241.apcprd06.prod.outlook.com (2603:1096:400:358::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7292.38; Thu, 22 Feb 2024 07:14:49 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::e139:fd7a:1b66:a3f7%7]) with mapi id 15.20.7292.036; Thu, 22 Feb 2024 07:14:49 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Thu, 22 Feb 2024 15:14:00 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240222071406.5714-1-nuomi2021@gmail.com> References: <20240222071406.5714-1-nuomi2021@gmail.com> X-TMN: [ThhPrXhYjqu6kv4LXnl0N4S4i2nG5pvh] X-ClientProxiedBy: TYCP286CA0049.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:2b5::7) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20240222071406.5714-6-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|TYUPR06MB6241:EE_ X-MS-Office365-Filtering-Correlation-Id: 33446eaa-07e5-4344-3b52-08dc3375f50a X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Gr2cAEpUYQVi9gcqmnUdnOUbhFHNixXTxFTvt0HRyOD86XrKcND9Cs/jh3dp9cqcWwcSgxfY9btHY1I9F1NspYcWG3UHadwCPSGax22MP2N9iw6phTbPELFx2TCye6/PHP2qKOtERoAx9LMqKOtKc8n+SALuSgdbh+NW6b/xpP6j/wSGkQXbGG4e8YfPWvTbiYjGZCHzQ9ONkiGpihfmgPBH1contvEnY7XpYZEfMVRwmHW7n5B96SGr2qfKaGem59f9wab1+sjBHVsqGNFWig5NuAW6Jg8X5XY5UKOssLE5KrY1ZCihQENJakFm8DZ4xCEMhj3AAIZrp3b6KtR7kwx9MpQncPIreR7KK0nUh/Gv1ot/FWg24Bn3jY3hDw/zNud6wpnoCyCtGBfc7ct06Y4hoPz6doDdbYCHDpaPiOnpd++g8om+8zrZYiyk7P3ukdwHuUrqKlvGq3CdfBvuNvkzpNOCQDiTLdpZi7mgOO7pMqAoiACNXy6ZhTrOXfcmxnOAcQkUrdMeVMlUcU+zkATF3KGv+XS+qoXjUn7IZ5LNv/Vx/TXss6sApvJdTKLUwfjf+hbi2MLY4nK9vXb/unf5dOZNgkvDL+8XlNzreq1pXzRKDXWMxAxdO2y/d3Vs X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?7o0ss4u8G2U3XXaGxJ3LDgz4RcZ9hY30jyBDtv9XJ5NICRV60Ke4+V3Ey12q?= =?us-ascii?Q?CnJ4VNIMJawhUGMEPs3Ncc+OQaH8eK6XxXwlt12xnq2PLwI/sAULis16v+4+?= =?us-ascii?Q?9wLkjSDcD3OYOdNaTSpoG3SRiKaw5eesjfjvAFKL04jKmLPNpvxFwMBJ5FMo?= =?us-ascii?Q?KpVFQrPdvm+7qm8MTGclbYoWIJqg8JAnjPwvfSfbO4Xrnaj/uI24ZgHnbI7X?= =?us-ascii?Q?gv7Y4yPnYxBAFap1vwnZMZQNzou7KnMMIGAgbEaY2lpThbv8HE0mFVFeSv+X?= =?us-ascii?Q?8F0H/6Y1Z57YkgaxyIWloMKAycVbouiHthIUoHyAXHX4xZVDP8WEuu1GL9KI?= =?us-ascii?Q?X/hiMg5vIiRUXeg01qf2xeF1cGWkfdv/SXDLU/MmxnupnchUUQ/eU1lmkcih?= =?us-ascii?Q?CH5s2idVBuFxeHOahnnVZK7ajQh4hnpBeOUOfF8ZI8KcJB9fKpulp+nxo6qU?= =?us-ascii?Q?FLfbx6i6WBm8I0ZmPRtdQBtUhtZpf1fGOX2EuklhlHV4MyBqdITAPG8sQTIy?= =?us-ascii?Q?ZP9QEswwCf74rmFsZYXtmjt+dbgrSdencsf3bb3maUwQiVeB3slp0OcDiSjB?= =?us-ascii?Q?Qrq3BfrLtUtC0sozsPP2+35IoZF+N/pA9xCXGihpBdErSxUQ3QtX13aB9gH5?= =?us-ascii?Q?QVxGuXeOhcwQEMNUTOEUqeem0RV8Q36bUD3qdnBWtXsf3jMOKaYH0hQd5j2h?= =?us-ascii?Q?vBDLR6ZD+f8ZKiVxldusskaDNT++7G+QIOyXsntHnNAmEie7PgRceb67icbu?= =?us-ascii?Q?deILK35cl/OmOkQ0ZpOXwk907HHeF4eA1BgDUoCfncppZnjOgzcnXVDmmkk9?= =?us-ascii?Q?q5IZoZc4GjCbJucZwmMmABD0MXUmWIWG/SDDF85t9li4+WWfWEpP0GVIYDAj?= =?us-ascii?Q?RDHf2WOGfSpPlJu3E5UaEzI9BzqiVAiF1FgY9/JX4XbTjiy+VVPuSkXV/xEr?= =?us-ascii?Q?k4nPbc6GfdOf7jbs+sclySei0ivM5xLtYTJmuAAjQK4cJzEVuIMx8GlV+FpX?= =?us-ascii?Q?yxmNwKtZbs8pVev1MM7uTtyzd+3m5oTVQsGKZT6aS/NkJnB3oHLJR1BVZB9n?= =?us-ascii?Q?cXBv4jW1/sec1qqMrhfeHdlNIlhxikVMmzLgnwO3VXbJfx/iVY3Gm6L+Fjy/?= =?us-ascii?Q?Znshx53azg5ovBWa+uvOL1wBqnCNrld0FmOxyMHyd7jOKGn+3t2GkaQxm/Uq?= =?us-ascii?Q?RM6q20r56IDqS7+7X3Uax/hZqRGpYPaMV1jw2KpvW498sPcqU883yBQPKBsi?= =?us-ascii?Q?PXWN2IvwzfO/fivT0pRaMl9ctNZ+VEK51SnUgvZwSw=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 33446eaa-07e5-4344-3b52-08dc3375f50a X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Feb 2024 07:14:49.7347 (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: TYUPR06MB6241 Subject: [FFmpeg-devel] [PATCH 05/11] avcodec/vvcdec: implement update_hmvp for IBC 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 , Wu Jianhua 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: From: Wu Jianhua Signed-off-by: Wu Jianhua Signed-off-by: Nuo Mi --- libavcodec/vvc/vvc_ctu.c | 9 +++++-- libavcodec/vvc/vvc_ctu.h | 3 +++ libavcodec/vvc/vvc_mvs.c | 53 ++++++++++++++++++++++++++-------------- 3 files changed, 44 insertions(+), 21 deletions(-) diff --git a/libavcodec/vvc/vvc_ctu.c b/libavcodec/vvc/vvc_ctu.c index 2e48f7bed8..b78a1417c7 100644 --- a/libavcodec/vvc/vvc_ctu.c +++ b/libavcodec/vvc/vvc_ctu.c @@ -1717,10 +1717,15 @@ static int inter_data(VVCLocalContext *lc) } else { ret = mvp_data(lc); } - if (!pu->merge_gpm_flag && !pu->inter_affine_flag && !pu->merge_subblock_flag) { + + if (cu->pred_mode == MODE_IBC) + { + ff_vvc_update_hmvp(lc, mi); + } else if (!pu->merge_gpm_flag && !pu->inter_affine_flag && !pu->merge_subblock_flag) { refine_regular_subblock(lc); ff_vvc_update_hmvp(lc, mi); } + if (!pu->dmvr_flag) fill_dmvr_info(lc->fc, cu->x0, cu->y0, cu->cb_width, cu->cb_height); return ret; @@ -2394,8 +2399,8 @@ int ff_vvc_coding_tree_unit(VVCLocalContext *lc, int ret; if (rx == pps->ctb_to_col_bd[rx]) { - //fix me for ibc ep->num_hmvp = 0; + ep->num_hmvp_ibc = 0; ep->is_first_qg = ry == pps->ctb_to_row_bd[ry] || !ctu_idx; } diff --git a/libavcodec/vvc/vvc_ctu.h b/libavcodec/vvc/vvc_ctu.h index ab3fac626d..5ed331a831 100644 --- a/libavcodec/vvc/vvc_ctu.h +++ b/libavcodec/vvc/vvc_ctu.h @@ -357,8 +357,11 @@ typedef struct EntryPoint { int ctu_end; uint8_t is_first_qg; // first quantization group + MvField hmvp[MAX_NUM_HMVP_CANDS]; ///< HmvpCandList int num_hmvp; ///< NumHmvpCand + MvField hmvp_ibc[MAX_NUM_HMVP_CANDS]; ///< HmvpIbcCandList + int num_hmvp_ibc; ///< NumHmvpIbcCand } EntryPoint; typedef struct VVCLocalContext { diff --git a/libavcodec/vvc/vvc_mvs.c b/libavcodec/vvc/vvc_mvs.c index 2ed05ad2a4..8af57e8ed3 100644 --- a/libavcodec/vvc/vvc_mvs.c +++ b/libavcodec/vvc/vvc_mvs.c @@ -1758,34 +1758,49 @@ static av_always_inline int is_greater_mer(const VVCFrameContext *fc, const int y0_br >> plevel > y0 >> plevel; } -//8.5.2.16 Updating process for the history-based motion vector predictor candidate list -void ff_vvc_update_hmvp(VVCLocalContext *lc, const MotionInfo *mi) +static void update_hmvp(MvField *hmvp, int *num_hmvp, const MvField *mvf, + int (*compare)(const MvField *n, const MvField *o)) { - const VVCFrameContext *fc = lc->fc; - const CodingUnit *cu = lc->cu; - const int min_pu_width = fc->ps.pps->min_pu_width; - const MvField* tab_mvf = fc->tab.mvf; - EntryPoint* ep = lc->ep; - const MvField *mvf; int i; - - if (!is_greater_mer(fc, cu->x0, cu->y0, cu->x0 + cu->cb_width, cu->y0 + cu->cb_height)) - return; - mvf = &TAB_MVF(cu->x0, cu->y0); - - for (i = 0; i < ep->num_hmvp; i++) { - if (compare_mv_ref_idx(mvf, ep->hmvp + i)) { - ep->num_hmvp--; + for (i = 0; i < *num_hmvp; i++) { + if (compare(mvf, hmvp + i)) { + (*num_hmvp)--; break; } } if (i == MAX_NUM_HMVP_CANDS) { - ep->num_hmvp--; + (*num_hmvp)--; i = 0; } - memmove(ep->hmvp + i, ep->hmvp + i + 1, (ep->num_hmvp - i) * sizeof(MvField)); - ep->hmvp[ep->num_hmvp++] = *mvf; + memmove(hmvp + i, hmvp + i + 1, (*num_hmvp - i) * sizeof(MvField)); + hmvp[(*num_hmvp)++] = *mvf; +} + +static int compare_l0_mv(const MvField *n, const MvField *o) +{ + return IS_SAME_MV(&n->mv[L0], &o->mv[L0]); +} + +//8.6.2.4 Derivation process for IBC history-based block vector candidates +//8.5.2.16 Updating process for the history-based motion vector predictor candidate list +void ff_vvc_update_hmvp(VVCLocalContext *lc, const MotionInfo *mi) +{ + const VVCFrameContext *fc = lc->fc; + const CodingUnit *cu = lc->cu; + const int min_pu_width = fc->ps.pps->min_pu_width; + const MvField *tab_mvf = fc->tab.mvf; + EntryPoint *ep = lc->ep; + + if (cu->pred_mode == MODE_IBC) { + if (cu->cb_width * cu->cb_height <= 16) + return; + update_hmvp(ep->hmvp_ibc, &ep->num_hmvp_ibc, &TAB_MVF(cu->x0, cu->y0), compare_l0_mv); + } else { + if (!is_greater_mer(fc, cu->x0, cu->y0, cu->x0 + cu->cb_width, cu->y0 + cu->cb_height)) + return; + update_hmvp(ep->hmvp, &ep->num_hmvp, &TAB_MVF(cu->x0, cu->y0), compare_mv_ref_idx); + } } MvField* ff_vvc_get_mvf(const VVCFrameContext *fc, const int x0, const int y0) -- 2.25.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".