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 BF7814A3DB for ; Wed, 27 Mar 2024 13:04:14 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5E1D568D6FC; Wed, 27 Mar 2024 15:01:56 +0200 (EET) Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01olkn2027.outbound.protection.outlook.com [40.92.53.27]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2C1BD68D6E0 for ; Wed, 27 Mar 2024 15:01:51 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fzffR2dURQ5ivRNGJ7+hmUK2X7kFK/OmEVsKOXq9ovyJf6QG4Chd5xsjUogtnB0/jYd+Li0LngGjmolRKH9yUc7G+6nh/4M0U7zhT3ADk7m1nzy9BX9TbB3uorN8uCLz+I2+xFSxQ/CCwhvGLF0NoIFBERxpqTnt7GOf7jhvb733I4hkAOyRBGpKpW0o5cdf/ymRddIwsJoJ/E1cfHGFwwRBROkys1LJ17CHxYaRQZEaCCdtB2wSxhiBwOAYnWRr2tvEAk1MmkpdHqwAGcCqFAglkO5H8RlsDXRLjxan1xfDdkS8EyX6iGQr07aPFl9u8kEqXZfuhnvzNxbsQf6s1A== 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=1W+scUffJES1fcjP5hvp3L+YrFiepKUmatPufAbLZZI=; b=ht8/Thusn+x+gs1iMpFNvhrkBYNy9T7EB812Biim7HB0BHDuhLa2zHK3ncCwbYOI/5ZFlVdCNVqSXeTcXUaGq/Fb3mx97Mp6Rp4PgFXODVGi93ax0w9m8Nur3Qge7g6E3+PlbZELwqOVKbWgLLTNT+nhd4mMnJbqI2PdHwcBW24iygmM9QKJuC2ekL/2w4WwMWcontmx2oC1ZKsUGd4Xr7Tb9QsRqLfHUl+Zwwp5z0X6LtsDm+mIS8misTOPBeqTueoQlU10GwTpqmwrVFyoWNzqKHzwNbksxyyupHo+04n2DLRGo6JbG3yZGuRNMTg4wGfv4xF2vTvX8kAnupAeHA== 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=1W+scUffJES1fcjP5hvp3L+YrFiepKUmatPufAbLZZI=; b=rXNjpYglob0+Hsysv/giHQdwKdi6lI8zKbrLUqaIPgOmpBpJ339w6kcqOSr+74L63+AlalYWz6joT4dF4FDWZXAJksraInfuNJuh6mzVbRQqZave2YpMlNzcvCUzeQ/LBzm+0aveadezlMGO7P4Q1lWmohGxZeOc0o5fillkHK0E2jrhCwrPmbutjRxPN3eD4g9cJ03WNdULRW0eDf18lSQDe1a3ifS7F9YNnc1bXG/YYdTxUwSnTm5K63mR2rRHGbxLKg8LcIuUAa255N9je5vBFdh1LIx/NObSOo/E2Z+K+Al0pwvpiLi0EuiinC7/V14Lavt4Q7nBin9/6mGdSQ== Received: from TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) by JH0PR06MB7107.apcprd06.prod.outlook.com (2603:1096:990:9b::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.33; Wed, 27 Mar 2024 13:01:33 +0000 Received: from TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::d001:da90:518b:ec1c]) by TYSPR06MB6433.apcprd06.prod.outlook.com ([fe80::d001:da90:518b:ec1c%3]) with mapi id 15.20.7409.031; Wed, 27 Mar 2024 13:01:33 +0000 From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Mar 2024 21:01:12 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240327130112.6111-1-nuomi2021@gmail.com> References: <20240327130112.6111-1-nuomi2021@gmail.com> X-TMN: [NfPpKetnPDSmIO/T4uNpn2ryDSN7TloE] X-ClientProxiedBy: SG2PR01CA0117.apcprd01.prod.exchangelabs.com (2603:1096:4:40::21) To TYSPR06MB6433.apcprd06.prod.outlook.com (2603:1096:400:47a::6) X-Microsoft-Original-Message-ID: <20240327130112.6111-17-nuomi2021@gmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 2 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYSPR06MB6433:EE_|JH0PR06MB7107:EE_ X-MS-Office365-Filtering-Correlation-Id: 5a451881-7f0e-4392-eedf-08dc4e5e070f X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zN6R1o/eMJraezCgZvyoaC2Mhr0OYmSG5FetqQP0cUT8mMAW7lV5xR/E6cxO2Ro0MF+lD3DrlhMXIUhjw2GjIjFhDzJHmi6x1EJTEA8g8nuoxieI90+NbtHhmSuu6NFSA3f2Sy6PKOu8ZhuvzTrFqZ8sfh9I4+zt/jG1xCfIZNGdENaDVu2pUQyiCaEGPe7FQFm/PHVIOE4eNX8kFCQgPgyXg1rXbL/H7TQo3y2INmmvfpdEie89gH3wN9yGdEcyiuRRL91K4SXrTT/wiAXrqblWyTgUcTsj/78M7PchNQqKDurlBqkjGrzuM65WhIfNyBWEUIJHfXz3geMXovBHOWB2/qHgs1/ZdAtUJAWSCsztb9FmnJaVHhGGX6qEHhYhxYwlOt+G2lbRiyYZNqOOyTyKXmzN+oiV48IUxEEmfDqB5ZbA2cGqRz/emAbtU5GNyhkM2pEWT72022qYZCy6UyWq2vl1YenPrfBYkMUDRD9c4jZVkhAUeAxQuaEMsWgdmDW4eG1betRS/UDXzLBRZ9XI7T3kGcAcmEQFXJSxHUeVaWGXwGiAty6WW/atZNYucxH81JMzmryXTSR2j9wAkFY/G3zx2SD1hME+jDroxc12ZPFTz7DvotGliVyVKlLmsWHeBMCDk7HFqy4rS9aCcGDI9eQ5Ky9No48cNQSSw2E8D0BbUAyncmSIMD39spAY X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?wmq2nHxSBSCB4AtPv5j7tiPMJaa01RGiXs3b/+DJChcwZLZ+iBHF6A8GBNVn?= =?us-ascii?Q?xJeFZbF2MndsJ5hrgnlnq+axnxT1nrGqT2JAGBooKOSumt8XcXsVIHOASy/F?= =?us-ascii?Q?Jm0Pu0vuNYHkkWR0lvlvMVP/kIK4iGNIS84VPN+9yIFUbpRPB2eD89Gk3dLm?= =?us-ascii?Q?gq2E2zkpzaJMYswfpuoDne0mAHFWP0oKrJJB6Ltr+mFjKYUWzm/8wttl/eC7?= =?us-ascii?Q?PURkjMOqSpkNpygl9mMqX0wL99Btz45QdTAB+ze+jQlAsolQLMv0cmp2CnyH?= =?us-ascii?Q?GOCmcG4Q1xuQXC8Bs6eC5L0tUFnt6G6jOYEJF8FXTHRggf5KIrSqpXTDjsXL?= =?us-ascii?Q?j7tEFPQqaKem6w+SJ46WQvsarvMAY7dtugljiO0x5+SxuiUTa5cqtQqgZTTH?= =?us-ascii?Q?1U3Tais1YH1Dkqj66Vra0cypZ+KuwcQ+raijgg0iSzYfLn75Px2sxpXmG7/q?= =?us-ascii?Q?ieFQtR1KFylnGfF8n8zF0ziXjUR12/7DDQSly99W96wlNz/7dWNf83a3vMcY?= =?us-ascii?Q?I8JMD+WUtJ2/UppCgI2MfQlNUvDKjpcq0lVdiuY0pN7D9lQyo6mDWpAr+nta?= =?us-ascii?Q?JWkSHP16uk8OZmO0eezt8BVopRI63WpAKOmsrK6irVTSsgk/FsBi8MfQ/RdC?= =?us-ascii?Q?ioiOt2Cx3VxwbrfM8wXVYPRki/2kJZ8+ckjsMCWtzpZJ0yWjiHqbY+uXcGc+?= =?us-ascii?Q?SeZZI3JzbdzX2MKx+Teb7awqGwIAKSWrs3fgagn++cjtoh4SQPJiqNWjQUgh?= =?us-ascii?Q?3MenN2tRGDeQU80pu6KnVJ54kEKE2noDurWeZYHA0fZbo/c5MvwLXX6MEe5a?= =?us-ascii?Q?vg9+S7NZwxZMPtDOGm/VrEzUAp0zjw5fzyNdj0bQ084pKK4bQXXaliWV1ovz?= =?us-ascii?Q?Gh3TjrP+gAb2q7h2hTJhL+D7NvD0EOstZMLIfSN96e+sWFuRP/TpluUq3Dl5?= =?us-ascii?Q?etXid/s0wx/XmwNFcP7o7O9zDCRlacTWdEY3EXSoIQj19Sjp6VDCkYY7VlyS?= =?us-ascii?Q?pYcbx9b3DkMQ5j84i1t+e/KGrNC//rFTmZMzuDx1VD1TF4pVhN5SzBVHvNBs?= =?us-ascii?Q?FYiR1HFt0UmMA0XW5mMfr+l6T6j+UBEfq7p6ilHWi6FeTDuALHs9J306JsHB?= =?us-ascii?Q?W7t8FeMcf+eER2+ZHAVkamc2VxbGDcHWtRfO0AmMtSl5b5PjVp2gC/mUbPs6?= =?us-ascii?Q?DSino6ePa0DAzl9YrJGCtWQIXefzVhQd/cxSy4DweiD+UC+ihykAAMchRemo?= =?us-ascii?Q?U92e78l6CFSqp3hETC/ujV/yAWX7ZupL01Y60k99CQ=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5a451881-7f0e-4392-eedf-08dc4e5e070f X-MS-Exchange-CrossTenant-AuthSource: TYSPR06MB6433.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2024 13:01:33.4118 (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: JH0PR06MB7107 Subject: [FFmpeg-devel] [PATCH v2 16/16] avcodec/vvcdec: inter prediction, support subpicture 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: passed files: LMCS_B_Dolby_2.bit CodingToolsSets_E_Tencent_1.bit SUBPIC_A_HUAWEI_3.bit SUBPIC_B_HUAWEI_3.bit SUBPIC_C_ERICSSON_1.bit SUBPIC_D_ERICSSON_1.bit SUBPIC_E_MediaTek_1.bit passed dvb conformance files (https://dvb.org/specifications/verification-validation/vvc-test-content): VVC_HDR_UHDTV1_OpenGOP_3840x2160_50fps_HLG10_mosaic.bit VVC_HDR_UHDTV1_OpenGOP_3840x2160_50fps_HLG10_PiP.bit --- libavcodec/vvc/vvc_inter.c | 79 +++++++++++++++++++++++++++----------- 1 file changed, 56 insertions(+), 23 deletions(-) diff --git a/libavcodec/vvc/vvc_inter.c b/libavcodec/vvc/vvc_inter.c index c5629f7f6f..1a87cb71cf 100644 --- a/libavcodec/vvc/vvc_inter.c +++ b/libavcodec/vvc/vvc_inter.c @@ -30,14 +30,34 @@ #define PROF_TEMP_OFFSET (MAX_PB_SIZE + 32) static const int bcw_w_lut[] = {4, 5, 3, 10, -2}; -static int emulated_edge(const VVCFrameContext *fc, uint8_t *dst, const uint8_t **src, ptrdiff_t *src_stride, - const int x_off, const int y_off, const int block_w, const int block_h, const int is_luma) +static void subpic_offset(int *x_off, int *y_off, + const VVCSPS *sps, const VVCPPS *pps, const int subpic_idx, const int is_luma) { - const int extra_before = is_luma ? LUMA_EXTRA_BEFORE : CHROMA_EXTRA_BEFORE; - const int extra_after = is_luma ? LUMA_EXTRA_AFTER : CHROMA_EXTRA_AFTER; - const int extra = is_luma ? LUMA_EXTRA : CHROMA_EXTRA; - const int pic_width = is_luma ? fc->ps.pps->width : (fc->ps.pps->width >> fc->ps.sps->hshift[1]); - const int pic_height = is_luma ? fc->ps.pps->height : (fc->ps.pps->height >> fc->ps.sps->vshift[1]); + *x_off -= pps->subpic_x[subpic_idx] >> sps->hshift[!is_luma]; + *y_off -= pps->subpic_y[subpic_idx] >> sps->vshift[!is_luma]; +} + +static void subpic_width_height(int *pic_width, int *pic_height, + const VVCSPS *sps, const VVCPPS *pps, const int subpic_idx, const int is_luma) +{ + *pic_width = pps->subpic_width[subpic_idx] >> sps->hshift[!is_luma]; + *pic_height = pps->subpic_height[subpic_idx] >> sps->vshift[!is_luma]; +} + +static int emulated_edge(const VVCLocalContext *lc, uint8_t *dst, const uint8_t **src, ptrdiff_t *src_stride, + int x_off, int y_off, const int block_w, const int block_h, const int is_luma) +{ + const VVCFrameContext *fc = lc->fc; + const VVCSPS *sps = fc->ps.sps; + const VVCPPS *pps = fc->ps.pps; + const int subpic_idx = lc->sc->sh.r->curr_subpic_idx; + const int extra_before = is_luma ? LUMA_EXTRA_BEFORE : CHROMA_EXTRA_BEFORE; + const int extra_after = is_luma ? LUMA_EXTRA_AFTER : CHROMA_EXTRA_AFTER; + const int extra = is_luma ? LUMA_EXTRA : CHROMA_EXTRA; + int pic_width, pic_height; + + subpic_offset(&x_off, &y_off, sps, pps, subpic_idx, is_luma); + subpic_width_height(&pic_width, &pic_height, sps, pps, subpic_idx, is_luma); if (x_off < extra_before || y_off < extra_before || x_off >= pic_width - block_w - extra_after || @@ -57,14 +77,21 @@ static int emulated_edge(const VVCFrameContext *fc, uint8_t *dst, const uint8_t return 0; } -static void emulated_edge_dmvr(const VVCFrameContext *fc, uint8_t *dst, const uint8_t **src, ptrdiff_t *src_stride, - const int x_sb, const int y_sb, const int x_off, const int y_off, const int block_w, const int block_h, const int is_luma) +static void emulated_edge_dmvr(const VVCLocalContext *lc, uint8_t *dst, const uint8_t **src, ptrdiff_t *src_stride, + int x_sb, int y_sb, int x_off, int y_off, const int block_w, const int block_h, const int is_luma) { - const int extra_before = is_luma ? LUMA_EXTRA_BEFORE : CHROMA_EXTRA_BEFORE; - const int extra_after = is_luma ? LUMA_EXTRA_AFTER : CHROMA_EXTRA_AFTER; - const int extra = is_luma ? LUMA_EXTRA : CHROMA_EXTRA; - const int pic_width = is_luma ? fc->ps.pps->width : (fc->ps.pps->width >> fc->ps.sps->hshift[1]); - const int pic_height = is_luma ? fc->ps.pps->height : (fc->ps.pps->height >> fc->ps.sps->vshift[1]); + const VVCFrameContext *fc = lc->fc; + const VVCSPS *sps = fc->ps.sps; + const VVCPPS *pps = fc->ps.pps; + const int subpic_idx = lc->sc->sh.r->curr_subpic_idx; + const int extra_before = is_luma ? LUMA_EXTRA_BEFORE : CHROMA_EXTRA_BEFORE; + const int extra_after = is_luma ? LUMA_EXTRA_AFTER : CHROMA_EXTRA_AFTER; + const int extra = is_luma ? LUMA_EXTRA : CHROMA_EXTRA; + int pic_width, pic_height; + + subpic_offset(&x_off, &y_off, sps, pps, subpic_idx, is_luma); + subpic_offset(&x_sb, &y_sb, sps, pps, subpic_idx, is_luma); + subpic_width_height(&pic_width, &pic_height, sps, pps, subpic_idx, is_luma); if (x_off < extra_before || y_off < extra_before || x_off >= pic_width - block_w - extra_after || @@ -88,11 +115,17 @@ static void emulated_edge_dmvr(const VVCFrameContext *fc, uint8_t *dst, const ui } } -static void emulated_edge_bilinear(const VVCFrameContext *fc, uint8_t *dst, const uint8_t **src, ptrdiff_t *src_stride, - const int x_off, const int y_off, const int block_w, const int block_h) +static void emulated_edge_bilinear(const VVCLocalContext *lc, uint8_t *dst, const uint8_t **src, ptrdiff_t *src_stride, + int x_off, int y_off, const int block_w, const int block_h) { - int pic_width = fc->ps.pps->width; - int pic_height = fc->ps.pps->height; + const VVCFrameContext *fc = lc->fc; + const VVCSPS *sps = fc->ps.sps; + const VVCPPS *pps = fc->ps.pps; + const int subpic_idx = lc->sc->sh.r->curr_subpic_idx; + int pic_width, pic_height; + + subpic_offset(&x_off, &y_off, sps, pps, subpic_idx, 1); + subpic_width_height(&pic_width, &pic_height, sps, pps, subpic_idx, 1); if (x_off < BILINEAR_EXTRA_BEFORE || y_off < BILINEAR_EXTRA_BEFORE || x_off >= pic_width - block_w - BILINEAR_EXTRA_AFTER || @@ -111,19 +144,19 @@ static void emulated_edge_bilinear(const VVCFrameContext *fc, uint8_t *dst, cons #define EMULATED_EDGE_LUMA(dst, src, src_stride, x_off, y_off) \ - emulated_edge(fc, dst, src, src_stride, x_off, y_off, block_w, block_h, 1) + emulated_edge(lc, dst, src, src_stride, x_off, y_off, block_w, block_h, 1) #define EMULATED_EDGE_CHROMA(dst, src, src_stride, x_off, y_off) \ - emulated_edge(fc, dst, src, src_stride, x_off, y_off, block_w, block_h, 0) + emulated_edge(lc, dst, src, src_stride, x_off, y_off, block_w, block_h, 0) #define EMULATED_EDGE_DMVR_LUMA(dst, src, src_stride, x_sb, y_sb, x_off, y_off) \ - emulated_edge_dmvr(fc, dst, src, src_stride, x_sb, y_sb, x_off, y_off, block_w, block_h, 1) + emulated_edge_dmvr(lc, dst, src, src_stride, x_sb, y_sb, x_off, y_off, block_w, block_h, 1) #define EMULATED_EDGE_DMVR_CHROMA(dst, src, src_stride, x_sb, y_sb, x_off, y_off) \ - emulated_edge_dmvr(fc, dst, src, src_stride, x_sb, y_sb, x_off, y_off, block_w, block_h, 0) + emulated_edge_dmvr(lc, dst, src, src_stride, x_sb, y_sb, x_off, y_off, block_w, block_h, 0) #define EMULATED_EDGE_BILINEAR(dst, src, src_stride, x_off, y_off) \ - emulated_edge_bilinear(fc, dst, src, src_stride, x_off, y_off, pred_w, pred_h) + emulated_edge_bilinear(lc, dst, src, src_stride, x_off, y_off, pred_w, pred_h) // part of 8.5.6.6 Weighted sample prediction process static int derive_weight_uni(int *denom, int *wx, int *ox, -- 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".