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 39D67497F0 for ; Mon, 19 Feb 2024 21:51:27 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1277968D423; Mon, 19 Feb 2024 23:51:21 +0200 (EET) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2076.outbound.protection.outlook.com [40.92.91.76]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4F54268D415 for ; Mon, 19 Feb 2024 23:51:14 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=meErhbYZTYl1rVAAGP/qGV5EujmhmPLzZKXt8w/zyurGz1fIEhzf6euFm6y50jRx7rtnHAvqujq0qO2XxKqAH5NtM1WG0MRFrz78uNz+F1cOXJsWaX5V/lE4sRgPwIxI3y6ZWA8OVZUJs2SjMJ8Er/pJoivG19J1iZ7OrBix2s1KOkak8lTNTpbKqwXZ7a+rXjY/iZMRqfZ3Sk+V92tTSOgz/KZ+hL/drlBi1p4Zv4Nllvn2vvWdAq6uQ5c3HIOQT4DV4xx+Q+jXOIr31rEq0/wI/WDFzGep+iQcivKM/EK0MCFgUeEtP/Zse/9TbBmX39rRo/pBwEAZA68MH4n6Qw== 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=nTT3/9PI7ScHhDbftjxznEwp/zYDKfdF1QdyLzr6LCs=; b=nAUuOc5fADodHvjhKXP50KSM1D9ow9QG360x6SCoDz18HCiscVhq7+wdO4eKngUdfBgS4TX2WRvMpMY9+xuzj7qbKO00egKB7ayhiudWoWSiFR+c35FsHtdANvD5drnjEIu/V2xuZIVFGc7DGTrJHLeIps4MdmBpi+JT1S6Z73tz7l6O+o1DnJ5opB0OCL6JebjXehRxSOLta0FLKTVhaIjjrqckK0guMYPsCwjVF6U86mZ42jzsTRCLqtDnXRJaTduNCzJ1igIrJf5zwVoSI04nipWTipRXwQwnN+4uGcC/uc8zj6qz+HIA5VzWlu1dzQ7OHIx57zFYN50CiHcTWw== 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=nTT3/9PI7ScHhDbftjxznEwp/zYDKfdF1QdyLzr6LCs=; b=cM7bb4sZdxI5BywI7C35lZm8zL36Zy1+Finc2AVqdsQN9VUTT79EphyqeDv6gsw6rA9abcwXlnDDiXR3mtU1GAXsHZKpo5jkmqaYvpIQ4GbGQ6N2d0YzrcbDIP7zrpRkSh1WkcA8gGjqAZRSRfXv17BI6yUzMq74LQSRVCd3eBiKhaXR+ID6LTdPVF9IoKjytD1mqS7RBgkGDfRVCRqLx5XR6GbLNtYn3z77lQbOOG0EfQ8mSGVaOsnYUFQm6INswDaaq5XmS/chAVTu9UBpS6su98V+qcLvmVTqx8+c9NjdF//I+cveOsQf+t3VQUP4csihVZgNosDNUiHogmpuPA== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by PR3P250MB0161.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:174::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7292.39; Mon, 19 Feb 2024 21:51:12 +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; Mon, 19 Feb 2024 21:51:12 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 19 Feb 2024 22:52:45 +0100 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [of3g/vPs+gVh84NbLiPiWf3NsnUXHrgbgFQ96SqFxAA=] X-ClientProxiedBy: FR3P281CA0114.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::6) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20240219215246.743238-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|PR3P250MB0161:EE_ X-MS-Office365-Filtering-Correlation-Id: b9787a62-6f99-4118-5ad0-08dc3194e37e X-MS-Exchange-SLBlob-MailProps: Cq7lScuPrnomf9zhpdf2mR/+OogaImHY6RSlXA5cVwA/rEK8Gl8pkMCS+xqDFLYE2UPwyiZndiV4/I0YTJAMf6zv6cOFGnxKfI0PaEGDdWcpLQX8rV3XWK+iCSy5232W7DXG3i0RPg4mtC4XWulDKlRBdxApoovDHDM3LdVIsn6imX+QvSUy3e6B4B41NEt3vDS4k3gKYgcMW4La1YzvemwmSVbUSkZ9TTV6JkEqU1IuQAwI7D9Zg9Q7mDw+9ZHPRLO8gKYc5/fM4xjwGcsPVRffP+G0+oyRkYgnsE415Vf19b3Aywgq4NVSwAqoNLJU7aMThYvStfBRMQP67TIgpQIuBlwxOW+qNvNI0JLyPhtHQye/Q3SnM01oPnrr9KmqByoOrxnp1NcCNITvErGySei5B23ZZLOVBKWvvl6GQ9KgpTsem6VX09fT4whvYlAtceqQd08MyaDCPDgmPr86j1ev7CshRrmApZEpGs7r+hETPI2HgblB/ebBQvghkQRd2z7ScrG4fTfqXM1h4fojm0Nf0jPb82KEAeMGzpKcIg7KAvglWh/6DnVWouOLcQhsabkBG0sNM4xcTkjFoXyxFfdFC0D7CLX9Owpi7s2k95prZMeliND0adjkPjdZWJx44Uul8m3A9eKJjj+z84HOSWyy69HDndvWiFAjTgTx7BiLPYOkSiPI27USXQATzKfjJyHtIlAXY0M1ZQdCR7Y1goly9T3MizrT7NxAt6yrENRf5Y1wpvPW2kuQ62k9B+U0hXrwlhlgiho= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xYS+iw/AUTR0UnIasbW7P/rJPYuC8po04a0EKtqsU58cvKSlksyqvJRMbGTTbsGeJFzaiqbHud1MkRunZcXnLmPgHIUC+KRVIg7FlUkB6gEtciOiAuSUfuHIAhq03QNYugnIG++WxWvIcYa8eazN5HQ4I1WT0pQqBSMyh6h/PQzkfw/oaxcaiFYlTiHP7ZnJv0la56cqUBvIv9nZwA9BxgjBT8yOz84aFQ8YyWxTDCNB1eo3jlQ0aihgxGgwtUacD/xKe6jOHP7NbsjE1YsJF/b4kYi3QfrTiHdCD9zKOIfxusDMQQPTiPcphw4xcFCPDNSNEO/+n6SzFSQUBjONJhZg1SkEkj8/HcmsOpew7ICKWcgzzNXh9PSTyG6oV9bYc8qJuqp5ROBy9qIHCGlU0E7Y/vs4WqZ2mzW7Bt8F1GLnx4OIcviSs4jy9oi2Zd9UlMZm+2ltIsmPmt07pzdcCE7IClZZ07Y3Wuyqh/78qWDdMNQvUuFvFSFcwn+MgK07rOoWOcI61FmWeuxu7A4rb3LvVrCG7fKU4iEbLU3553Gev4lWzisA4tM3/etUVt6kqA89vmaydFpIVY6rYK+IOn+i6OL6TwspFl+04dlzrqBhKc/4HEWNAXHVLjkAz/+G X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?EmP4gkzDfb8b9d+eBVQoIUutZ/20tTl5d3rVazNPT5ImXbXz5aTPOP4nTi5r?= =?us-ascii?Q?d59GXuEtZpG/BLWZhFszaJLP1doYLZUtLJsMoTegAkAOFax7NBPL19gkREM0?= =?us-ascii?Q?t09nDsu6edXxQ75iGDSPJk1XbU1AxlBN+IH/pKiBelCaDncJcAG7GlmwHe/V?= =?us-ascii?Q?didvTkBEJbwtowrkAQV3viSMFA9l5sQAD+86UIOy2VU54u9Fo3dcbwnC9Z91?= =?us-ascii?Q?yJOG7R/n5rsQGLc0WKK/yOCY/62VpjTRMAvPmKb0kdURnz28t55UqBpcPVET?= =?us-ascii?Q?KDNuMm7mnldLHXphYop72C5svlatc5Ez35HvIcSL9i96nYsquHH/HQggqiQk?= =?us-ascii?Q?irF+0HMDbVqw+yEZy/5YCdIZjozSu2BhUguiGNlRzapKYGHDx4tHxauoLy9H?= =?us-ascii?Q?Ny9IG+9HQE4m44kTKK/wf9T+rp3yLUoUrd09kQxUMybZGt27Q9BaUCK1sLcS?= =?us-ascii?Q?jsqtD3x38SiPx9QbiCUCC4amRbYiynu89jiyjzZsUpykyaT9RkR4f8mK9e0V?= =?us-ascii?Q?v+ybRn1m1WNVrgteks7u7HsygqcLplUTM3XcrXt7t7zipddwREIpNMF9GfCP?= =?us-ascii?Q?ICVYgqIvHg3iouuc7dqymtGj+Qoo5ujVX2KXrItqFTfpe7N9nVfK6jHbdi51?= =?us-ascii?Q?h6xrYMjlWux6vkNNAdJUSPk9yw+MKweg+n1z9DnDm2DjmSyWrZHSvZ6Vha69?= =?us-ascii?Q?JY/zC4azz+YujYpqhN1F8oMB9R05TkWutE1DeC6utY3d9XHfM6V4BLsZJ0Ha?= =?us-ascii?Q?ZX4rQ2o7p28eM5fnhPh6lRMrXtpJNNLVIvr1sPfDQmXTP3HOy8M5jYJ50cy5?= =?us-ascii?Q?rIm7+/orXyNQ54Lup9yXFDRLQI4lBEZDqRA+4IR/glujgIsgPPTvOeRDWdjT?= =?us-ascii?Q?qUWlrcWEMuRPC2fnc7zeSS/Tg5Yopc5gXyR3r09+85RMxdc6D0WVPawhJVOO?= =?us-ascii?Q?7XEyKkVAqJNQke/Ohp/mFSluRPduJJ9h5lUiakGfvYKjbhiOyLqm9HJpYsZB?= =?us-ascii?Q?QP22W3rUJpingmgzgQWjgwCV6XLFqWREBXSISOBExBiYHWFOsOLZ5y4OzDek?= =?us-ascii?Q?AWw3X4EIOzj1DaBGHgXLk2Ns+FsrWtjpfGNi9b4a3Q7Ykg0Kjn1vQHxNr3f7?= =?us-ascii?Q?8dh1kvuT9j6fC0u2hf+pKtjRHZ8mxUr0/3pE0XR61LdTI713SY50/KLrQUk1?= =?us-ascii?Q?AaQxlIcoNHNw8azDTWq2ocYu2XOoT8gXSbhgoI5YveIXIMiEg67QPgcwTa1+?= =?us-ascii?Q?KUd3tlOxnITThWNlWsFeO64HurFg20TPYeWMJTtfRg=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b9787a62-6f99-4118-5ad0-08dc3194e37e X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Feb 2024 21:51:12.2847 (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: PR3P250MB0161 Subject: [FFmpeg-devel] [PATCH 4/5] avformat/iamf: Don't mix ownership and non-ownership pointers 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 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: IAMFAudioElement and IAMFMixPresentation currently contain pointers to independently allocated objects that are sometimes owned by said structures and sometimes not. More precisely, upon success the demuxer transfers ownership of these other objects newly created AVStreamGroups, but it keeps its pointers. iamf_read_close() therefore always resets these pointers (because the cleanup code always treats them as ownership pointers). This leads to memory leaks in case iamf_read_header() without having attached all of these objects to stream groups. The muxer has a similar issue: It also clears these pointers (pointing to objects owned by stream groups created by the user) in its deinit function. This commit fixes this memleak by explicitly adding non-ownership pointers; this also allows to remove the code to reset the ownership pointers. Signed-off-by: Andreas Rheinhardt --- libavformat/iamf.h | 10 ++++++++++ libavformat/iamf_parse.c | 2 ++ libavformat/iamf_writer.c | 16 ++++++++-------- libavformat/iamfdec.c | 22 ++++++++-------------- libavformat/iamfenc.c | 12 +----------- 5 files changed, 29 insertions(+), 33 deletions(-) diff --git a/libavformat/iamf.h b/libavformat/iamf.h index d88a24c435..0cb0902e86 100644 --- a/libavformat/iamf.h +++ b/libavformat/iamf.h @@ -86,6 +86,11 @@ typedef struct IAMFSubStream { } IAMFSubStream; typedef struct IAMFAudioElement { + const AVIAMFAudioElement *celement; + /** + * element backs celement iff the AVIAMFAudioElement + * is owned by this structure. + */ AVIAMFAudioElement *element; unsigned int audio_element_id; @@ -100,6 +105,11 @@ typedef struct IAMFAudioElement { } IAMFAudioElement; typedef struct IAMFMixPresentation { + const AVIAMFMixPresentation *cmix; + /** + * mix backs cmix iff the AVIAMFMixPresentation + * is owned by this structure. + */ AVIAMFMixPresentation *mix; unsigned int mix_presentation_id; diff --git a/libavformat/iamf_parse.c b/libavformat/iamf_parse.c index a6443f4f3d..50dfd1a6c2 100644 --- a/libavformat/iamf_parse.c +++ b/libavformat/iamf_parse.c @@ -651,6 +651,7 @@ static int audio_element_obu(void *s, IAMFContext *c, AVIOContext *pb, int len) ret = AVERROR(ENOMEM); goto fail; } + audio_element->celement = element; element->audio_element_type = audio_element_type; @@ -809,6 +810,7 @@ static int mix_presentation_obu(void *s, IAMFContext *c, AVIOContext *pb, int le ret = AVERROR(ENOMEM); goto fail; } + mix_presentation->cmix = mix; mix_presentation->count_label = ffio_read_leb(pbc); mix_presentation->language_label = av_calloc(mix_presentation->count_label, diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c index 9a665dc002..e8a88b44c3 100644 --- a/libavformat/iamf_writer.c +++ b/libavformat/iamf_writer.c @@ -234,7 +234,7 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void if (!audio_element) return AVERROR(ENOMEM); - audio_element->element = stg->params.iamf_audio_element; + audio_element->celement = stg->params.iamf_audio_element; audio_element->audio_element_id = stg->id; audio_element->codec_config_id = ret; @@ -329,11 +329,11 @@ int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, vo if (!mix_presentation) return AVERROR(ENOMEM); - mix_presentation->mix = stg->params.iamf_mix_presentation; + mix_presentation->cmix = stg->params.iamf_mix_presentation; mix_presentation->mix_presentation_id = stg->id; - for (int i = 0; i < mix_presentation->mix->nb_submixes; i++) { - const AVIAMFSubmix *submix = mix_presentation->mix->submixes[i]; + for (int i = 0; i < mix_presentation->cmix->nb_submixes; i++) { + const AVIAMFSubmix *submix = mix_presentation->cmix->submixes[i]; AVIAMFParamDefinition *param = submix->output_mix_config; IAMFParamDefinition *param_definition; @@ -465,7 +465,7 @@ static inline int rescale_rational(AVRational q, int b) static int scalable_channel_layout_config(const IAMFAudioElement *audio_element, AVIOContext *dyn_bc) { - const AVIAMFAudioElement *element = audio_element->element; + const AVIAMFAudioElement *element = audio_element->celement; uint8_t header[MAX_IAMF_OBU_HEADER_SIZE]; PutBitContext pb; @@ -503,7 +503,7 @@ static int scalable_channel_layout_config(const IAMFAudioElement *audio_element, static int ambisonics_config(const IAMFAudioElement *audio_element, AVIOContext *dyn_bc) { - const AVIAMFAudioElement *element = audio_element->element; + const AVIAMFAudioElement *element = audio_element->celement; AVIAMFLayer *layer = element->layers[0]; ffio_write_leb(dyn_bc, 0); // ambisonics_mode @@ -565,7 +565,7 @@ static int iamf_write_audio_element(const IAMFContext *iamf, const IAMFAudioElement *audio_element, AVIOContext *pb, void *log_ctx) { - const AVIAMFAudioElement *element = audio_element->element; + const AVIAMFAudioElement *element = audio_element->celement; const IAMFCodecConfig *codec_config = iamf->codec_configs[audio_element->codec_config_id]; uint8_t header[MAX_IAMF_OBU_HEADER_SIZE]; AVIOContext *dyn_bc; @@ -669,7 +669,7 @@ static int iamf_write_mixing_presentation(const IAMFContext *iamf, AVIOContext *pb, void *log_ctx) { uint8_t header[MAX_IAMF_OBU_HEADER_SIZE]; - const AVIAMFMixPresentation *mix = mix_presentation->mix; + const AVIAMFMixPresentation *mix = mix_presentation->cmix; const AVDictionaryEntry *tag = NULL; PutBitContext pbc; AVIOContext *dyn_bc; diff --git a/libavformat/iamfdec.c b/libavformat/iamfdec.c index 99622f697b..9b3f4c7429 100644 --- a/libavformat/iamfdec.c +++ b/libavformat/iamfdec.c @@ -232,7 +232,7 @@ static int parameter_block_obu(AVFormatContext *s, int len) case AV_IAMF_PARAMETER_DEFINITION_RECON_GAIN: { AVIAMFReconGain *recon = subblock; const IAMFAudioElement *audio_element = param_definition->audio_element; - const AVIAMFAudioElement *element = audio_element->element; + const AVIAMFAudioElement *element = audio_element->celement; av_assert0(audio_element && element); for (int i = 0; i < element->nb_layers; i++) { @@ -403,7 +403,9 @@ static int iamf_read_header(AVFormatContext *s) av_iamf_audio_element_free(&stg->params.iamf_audio_element); stg->id = audio_element->audio_element_id; + /* Transfer ownership */ stg->params.iamf_audio_element = audio_element->element; + audio_element->element = NULL; for (int j = 0; j < audio_element->nb_substreams; j++) { IAMFSubStream *substream = &audio_element->substreams[j]; @@ -428,20 +430,22 @@ static int iamf_read_header(AVFormatContext *s) for (int i = 0; i < iamf->nb_mix_presentations; i++) { IAMFMixPresentation *mix_presentation = iamf->mix_presentations[i]; AVStreamGroup *stg = avformat_stream_group_create(s, AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION, NULL); - const AVIAMFMixPresentation *mix = mix_presentation->mix; + const AVIAMFMixPresentation *mix = mix_presentation->cmix; if (!stg) return AVERROR(ENOMEM); av_iamf_mix_presentation_free(&stg->params.iamf_mix_presentation); stg->id = mix_presentation->mix_presentation_id; + /* Transfer ownership */ stg->params.iamf_mix_presentation = mix_presentation->mix; + mix_presentation->mix = NULL; for (int j = 0; j < mix->nb_submixes; j++) { - AVIAMFSubmix *sub_mix = mix->submixes[j]; + const AVIAMFSubmix *sub_mix = mix->submixes[j]; for (int k = 0; k < sub_mix->nb_elements; k++) { - AVIAMFSubmixElement *submix_element = sub_mix->elements[k]; + const AVIAMFSubmixElement *submix_element = sub_mix->elements[k]; AVStreamGroup *audio_element = NULL; for (int l = 0; l < s->nb_stream_groups; l++) @@ -467,16 +471,6 @@ static int iamf_read_header(AVFormatContext *s) static int iamf_read_close(AVFormatContext *s) { IAMFDemuxContext *const c = s->priv_data; - IAMFContext *const iamf = &c->iamf; - - for (int i = 0; i < iamf->nb_audio_elements; i++) { - IAMFAudioElement *audio_element = iamf->audio_elements[i]; - audio_element->element = NULL; - } - for (int i = 0; i < iamf->nb_mix_presentations; i++) { - IAMFMixPresentation *mix_presentation = iamf->mix_presentations[i]; - mix_presentation->mix = NULL; - } ff_iamf_uninit_context(&c->iamf); diff --git a/libavformat/iamfenc.c b/libavformat/iamfenc.c index b588a507bb..b5572c79af 100644 --- a/libavformat/iamfenc.c +++ b/libavformat/iamfenc.c @@ -218,7 +218,7 @@ static int write_parameter_block(AVFormatContext *s, const AVIAMFParamDefinition } case AV_IAMF_PARAMETER_DEFINITION_RECON_GAIN: { const AVIAMFReconGain *recon = subblock; - const AVIAMFAudioElement *audio_element = param_definition->audio_element->element; + const AVIAMFAudioElement *audio_element = param_definition->audio_element->celement; if (!param_definition->mode && param->constant_subblock_duration == 0) ffio_write_leb(dyn_bc, recon->subblock_duration); @@ -353,16 +353,6 @@ static void iamf_deinit(AVFormatContext *s) IAMFMuxContext *const c = s->priv_data; IAMFContext *const iamf = &c->iamf; - for (int i = 0; i < iamf->nb_audio_elements; i++) { - IAMFAudioElement *audio_element = iamf->audio_elements[i]; - audio_element->element = NULL; - } - - for (int i = 0; i < iamf->nb_mix_presentations; i++) { - IAMFMixPresentation *mix_presentation = iamf->mix_presentations[i]; - mix_presentation->mix = NULL; - } - ff_iamf_uninit_context(iamf); return; -- 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".