From patchwork Sun Feb 18 02:44:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 46337 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dda5:b0:19e:cdac:8cce with SMTP id kw37csp573546pzb; Sat, 17 Feb 2024 18:43:05 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCWVvhKYSPLy7OAMfif/WZETTxuGY4AFEZRt1pjCkpq3v0geOT2OusQFeXdTwHBJeHlB46jRW9xK5yoGql5Af+4SYGD/7MQwt99+hQ== X-Google-Smtp-Source: AGHT+IHgF7dtPCxRXdY/SCe4t2q047AZHeU8I28vUs3/YjiXp0IE009W4MKaEkTunuWYE9RyCavJ X-Received: by 2002:a05:6402:545:b0:564:4211:6705 with SMTP id i5-20020a056402054500b0056442116705mr728452edx.10.1708224184972; Sat, 17 Feb 2024 18:43:04 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id w3-20020a50d783000000b005645a23c239si147769edi.585.2024.02.17.18.43.04; Sat, 17 Feb 2024 18:43:04 -0800 (PST) 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=CkB5fZBr; 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=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7FBA768D331; Sun, 18 Feb 2024 04:42:56 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2075.outbound.protection.outlook.com [40.92.89.75]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0C6D168D2EB for ; Sun, 18 Feb 2024 04:42:50 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K1+DNuQ6ifqqesX7QSUDXFqTurb/JgKmO8LZUYADCvXXdlm6QtbjxhgB7NDs+J4ZAEIepLNZ3XpNg7J5jt1YEexX1Lm22HT9zmSgVinnzKBX9SYkdH+e3/aNyMivSZK+8WOEFVCb8fkuWyOaStgJErpGR7FbdOHtYINJD2M6yJeoZEkskjvZ1jR+Ura+3TYOmWISgN7TBzUbHPttiOD0JzWpKpqMGZb2z512qcnZb4OIPFPrTYB0MQJRX1zw9lxsZedfPE9uYo7aNU2IQl46KOG61jU8eJMMl2WYGHapRJBk4+/BNWSAEYdiJfp4HDmOsQ6U4HLE7hFtfZizhnQ39g== 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=hPfxS/oGG4EziHAO43GK0H2EAE9yYmBFB5nFS9mMkso=; b=Gx4NFjY54k26XjYvAl81+T1F89RmI0HHuUJmL4XZXk/9NC5fHqSU7QbnInZS7ey8QQowlXT2+GfeyMbFh09M4gKoF/HibgTfUtbqDvugH0C2wAFPB34rgYP1DkQ+9ufuVF7Qzp6KSBzbTtn50C3Fe0qzy6TTwxH09T8spXfzINLg974WmwfriIVdYz9KmOlr/GQ6rrLoB6v5yAdnRxCQhVJ2Q4vnJG0L1inLTkSsHscQgg5J7AaEEoDCfpCD8zDlfDZLsxnTX8cbYOBD0idyETY4JkDsk8Pk11Vz0LL+ogC5Jg2EWO/Ovxgl4ZBhmq2mlBE2jS9K/Dq3H4SBKIbTvg== 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=hPfxS/oGG4EziHAO43GK0H2EAE9yYmBFB5nFS9mMkso=; b=CkB5fZBrFqYXn+l9scuhaJzOLWP2JSMwvHt5/yNXQc4hROMQjq6na2mR+fb7iVg1w2YDjeJCj9XY6pfF2GfSHDB7dSWSbiYgYVt9cM7rFP+p6v7mgvuOcdL68gOPvEhItJWRGRqkKKNyUUp7MXbOW+rm6ExJZkrfbsTroP4Bq7sWSMiE8qoevrwAI8B4z96ucSm+MxiUkq07AJPBS4f6wD8gxFka8Wp5aXIHHrGN6AvlJ3RmCX7ZbecglvapirxbsL9csdo4ahrA9WhFyhph3fNCdB9zJjs+lkuokj4JxbNFaEWLWGy4Kx6/kS7H+XL6+pVlqLc4/8xCd2t5BhnOgQ== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AS8P250MB0054.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:359::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7292.32; Sun, 18 Feb 2024 02:42:43 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::65aa:deb0:a18e:d48d]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::65aa:deb0:a18e:d48d%5]) with mapi id 15.20.7292.033; Sun, 18 Feb 2024 02:42:43 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Feb 2024 03:44:26 +0100 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [EawqAkI1zlgQjD5lWCUYoGBQeq+CP2Gfn/GOXwswL3s=] X-ClientProxiedBy: ZR2P278CA0034.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:47::15) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20240218024427.3103449-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AS8P250MB0054:EE_ X-MS-Office365-Filtering-Correlation-Id: f17d8b4a-a07f-4940-5bd4-08dc302b486e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KYFwjXkOrlnAQnfyZnoVdMkRMyvdxmNWfwmfRzlhfCLRbT0G72VkK+5jqvQdK49OfEomE9/X3alv9gyldM351BxgHATYuzEtF2lLfQKiJ+BeveLQZAxIoHOO8f7t/A/VED7l/dTOi9SUUEHMdLQwnw7cgaRsoftOHRtRtukK3E+a37B4VlFwNkVp+GkGDuVTa7oGaRezMPdh4a9P+uec2tuiBSBSaWMQg2uRMidUEFN1BafdlyZCNOrl1O9j49BVWENb8UxbwPIie37OHyoOODZOIEPFqKRBl2J6TUVh3BP4gJ+dttGGdMskF6hJyXdj9MhEwOAeNs/kylg6JMJ6s6SPQu3dxn+I2smoDQ+NeIDfLnalGO0wc/imR+qbEuKylJV9Lm+OMJ0Z10+ZjL174JgdX1hOEVkeCZ2Z7IO+BTbqu29bDNraVVTUJ3YQzrodcWgrcl2gt6cq7PHvGh+H7qF0m3l69OK25oNoO5KBLLg5El8r8BAVcd7R3E0hHZF4QSNXzzEienYQRJAuEDlbyqiHwE8enkCCxSHBa3qIvRvs24WOVhBCrdHRNdc3ShXhDCbHRwou+NsMo2QUCm8KcD90wBZ3puHon+EivrCE3s+JkwxQ8n4CMHIHYcJVLZcG X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 0w4PtOYudfW2T+HTCPfkJscEDVFG5TdHx/CAnOA43S1T4IdW5MWKyIXxDMteOpfyAtjAzbQiDgH/NbNvV6A8cdPO9CYPRmgZzGd5IS0QzesD39AnFex3n9/3iU4GCmrEth7uqTsshAEvQC+f6AUSg7htdEbD5dgGF3357tO3T3cZN1kPqGSzqSvIZ3FaJ49xOe2ywIVqe7MkkmbEL7OQuCUROfMELh/Q8w2Z0p8IPeaQ+6XEHiZd+PXRUIV9YmuZF0LApHNglTDmV6rJ8lFiNmd3ogWpDSL6r7rsdavimVmuLIRgD9vcIPtVEfjHbeh5eOBUU4ootitjdjwi6JggaJi+KXkre+6tOCrv62fBHpFTlNOGrB64HM5eiXH2Hmc8+RiXc8vjK98YaYlDW887h4L9tcw6mec74c9DCxg+abbqtZprC2sVkFPSggSAS397S5HMDHuaPSSk4DR1D8XmDZRXeVTH96ZvWwMew+u4WIt0lO7LOa5XnMjiEHxM8Y0rdBab0ww3oEu3uQqPfuFkowm61KFULuV0g0ObvIhh9fzGQdXiAIV934vpg4fP8eaN4lzrOs4Grue0x49XmzE6KQ8h6LcKJ3Dx40zLNr6DaRVLxAd9MmbWePlZzypgH3p8YdaeJ5YJcCM2gY7MiwTX5RuF2Js8bGqtDWfMo3cyFkn8vJnyjRTTrcGT6AqwAquMHimPy934S927cShgrp0aeuKG/DLMNSLMWiB6Ebmz5svmzH/eKTH87UgUOOPDptJ84Yafp/ABKr66DLb4mwl8OfLC9r0gBChXm8Li1FT5XXvjMnIls6D0nYsZrYBaWNjx3yZNs6gEJMLtb82nsgaO4Oo3gR+4J3l4Vw/JKImspKBtEIfIdW9cLXDFXEA7w67SE7YjrvSqO2K0uWLVPd6qBbvbMYAfJnTbp5MhefTkfUvP4p5ub4z5tJWzXcgOxESKsuRtsEAzX4owJN/IdsGK0IAzsW4QA9wBtC3vaggDrwx1FeqhIXztuTAa43GaiNhYaEdjp+cDV1DLRvnW7Yg/Xb0RvDOt6LMTtvyOk2of1QKYscFvID9KGAoZf4r++cKrW46cq9Cst0S38AcHB3j64+P7aPWVuUUM3csCIX23TEUvuodENR5HOOikPCN/On+VAlA9XDqCZ3uwnN9sWiR7YYpd0w91dfyZznUfeV+DcKImClE61QZyc2YdLuPMWQD5o0uliuKo3cksjsLMSURuIIviDnIPyb+KkgI4FpjUU4P5fU4sq7mVXE8yyCfvkNg+vuFKByr/v1gGCIlhEVl2AQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f17d8b4a-a07f-4940-5bd4-08dc302b486e X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Feb 2024 02:42:43.8246 (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: AS8P250MB0054 Subject: [FFmpeg-devel] [PATCH 4/5] avcodec/bsf/vvc_mp4toannexb: Factor creating new extradata out 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: dDubNzbOJC7v This is in preparation for the next commit. Signed-off-by: Andreas Rheinhardt --- libavcodec/bsf/vvc_mp4toannexb.c | 116 ++++++++++++++++++------------- 1 file changed, 67 insertions(+), 49 deletions(-) diff --git a/libavcodec/bsf/vvc_mp4toannexb.c b/libavcodec/bsf/vvc_mp4toannexb.c index 1b851f3223..bfb0338116 100644 --- a/libavcodec/bsf/vvc_mp4toannexb.c +++ b/libavcodec/bsf/vvc_mp4toannexb.c @@ -37,16 +37,77 @@ typedef struct VVCBSFContext { int extradata_parsed; } VVCBSFContext; +static int vvc_extradata_to_annexb_internal(void *logctx, GetByteContext *gb, + uint8_t **new_extradatap, + size_t *new_extradata_sizep) +{ + int num_arrays = bytestream2_get_byte(gb); + uint8_t *new_extradata = NULL; + size_t new_extradata_size = 0; + int ret; + + for (int i = 0; i < num_arrays; i++) { + int cnt; + int type = bytestream2_get_byte(gb) & 0x1f; + + if (type == VVC_OPI_NUT || type == VVC_DCI_NUT) + cnt = 1; + else + cnt = bytestream2_get_be16(gb); + + av_log(logctx, AV_LOG_DEBUG, "nalu_type %d cnt %d\n", type, cnt); + + if (!(type == VVC_OPI_NUT || type == VVC_DCI_NUT || + type == VVC_VPS_NUT || type == VVC_SPS_NUT || type == VVC_PPS_NUT + || type == VVC_PREFIX_SEI_NUT || type == VVC_SUFFIX_SEI_NUT)) { + av_log(logctx, AV_LOG_ERROR, + "Invalid NAL unit type in extradata: %d\n", type); + ret = AVERROR_INVALIDDATA; + goto fail; + } + + for (int j = 0; j < cnt; j++) { + const int nalu_len = bytestream2_get_be16(gb); + + if (!nalu_len || + nalu_len > bytestream2_get_bytes_left(gb) || + 4 + nalu_len > FFMIN(INT_MAX, SIZE_MAX) - AV_INPUT_BUFFER_PADDING_SIZE - new_extradata_size) { + ret = AVERROR_INVALIDDATA; + goto fail; + } + ret = av_reallocp(&new_extradata, new_extradata_size + nalu_len + 4 + + AV_INPUT_BUFFER_PADDING_SIZE); + if (ret < 0) + goto fail; + + AV_WB32(new_extradata + new_extradata_size, 1); // add the startcode + bytestream2_get_buffer(gb, new_extradata + new_extradata_size + 4, + nalu_len); + new_extradata_size += 4 + nalu_len; + memset(new_extradata + new_extradata_size, 0, + AV_INPUT_BUFFER_PADDING_SIZE); + } + } + + *new_extradatap = new_extradata; + *new_extradata_sizep = new_extradata_size; + + return 0; +fail: + av_freep(&new_extradata); + return ret; +} + static int vvc_extradata_to_annexb(AVBSFContext *ctx) { GetByteContext gb; - int length_size, num_arrays, i, j; + int length_size, i, j; int ret = 0; int temp = 0; int ptl_present; uint8_t *new_extradata = NULL; - size_t new_extradata_size = 0; + size_t new_extradata_size; int max_picture_width = 0; int max_picture_height = 0; @@ -132,50 +193,10 @@ static int vvc_extradata_to_annexb(AVBSFContext *ctx) max_picture_width, max_picture_height, avg_frame_rate); } - num_arrays = bytestream2_get_byte(&gb); - - for (i = 0; i < num_arrays; i++) { - int cnt; - int type = bytestream2_get_byte(&gb) & 0x1f; - - if (type == VVC_OPI_NUT || type == VVC_DCI_NUT) - cnt = 1; - else - cnt = bytestream2_get_be16(&gb); - - av_log(ctx, AV_LOG_DEBUG, "nalu_type %d cnt %d\n", type, cnt); - - if (!(type == VVC_OPI_NUT || type == VVC_DCI_NUT || - type == VVC_VPS_NUT || type == VVC_SPS_NUT || type == VVC_PPS_NUT - || type == VVC_PREFIX_SEI_NUT || type == VVC_SUFFIX_SEI_NUT)) { - av_log(ctx, AV_LOG_ERROR, - "Invalid NAL unit type in extradata: %d\n", type); - ret = AVERROR_INVALIDDATA; - goto fail; - } - - for (j = 0; j < cnt; j++) { - const int nalu_len = bytestream2_get_be16(&gb); - - if (!nalu_len || - nalu_len > bytestream2_get_bytes_left(&gb) || - 4 + nalu_len > FFMIN(INT_MAX, SIZE_MAX) - AV_INPUT_BUFFER_PADDING_SIZE - new_extradata_size) { - ret = AVERROR_INVALIDDATA; - goto fail; - } - ret = av_reallocp(&new_extradata, new_extradata_size + nalu_len + 4 - + AV_INPUT_BUFFER_PADDING_SIZE); - if (ret < 0) - goto fail; - - AV_WB32(new_extradata + new_extradata_size, 1); // add the startcode - bytestream2_get_buffer(&gb, new_extradata + new_extradata_size + 4, - nalu_len); - new_extradata_size += 4 + nalu_len; - memset(new_extradata + new_extradata_size, 0, - AV_INPUT_BUFFER_PADDING_SIZE); - } - } + ret = vvc_extradata_to_annexb_internal(ctx, &gb, &new_extradata, + &new_extradata_size); + if (ret < 0) + return ret; av_freep(&ctx->par_out->extradata); ctx->par_out->extradata = new_extradata; @@ -185,9 +206,6 @@ static int vvc_extradata_to_annexb(AVBSFContext *ctx) av_log(ctx, AV_LOG_WARNING, "No parameter sets in the extradata\n"); return length_size; - fail: - av_freep(&new_extradata); - return ret; } static int vvc_mp4toannexb_init(AVBSFContext *ctx)