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 968EC43201 for ; Fri, 24 Jun 2022 09:51:10 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 44F0C68B6F9; Fri, 24 Jun 2022 12:51:09 +0300 (EEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2066.outbound.protection.outlook.com [40.92.90.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E422568B1AE for ; Fri, 24 Jun 2022 12:51:03 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=i4A+zsy9p/01DyxrgDAAd8CagXS0NeKExCCoPnbG/ScfvNgLMG11NFHsDy+xPWWjfq79Q4rnf9scuaP+ZcMVrKZ2sYD3fbBNXsS5e70Xnf/yAevA2Zrb4lvMZ9DdDCTLAGUdPKP18mV/0OoOXJveD3VJ1Z7Bi6NUZmb3bNABma+GhE7doflhAuKRghkTVaWjolRDfRbZH/C++suezcooNnVx1UE7z3U/LQXdZAyBcoK3urTfsYP5xf3RIh834KZThl8AqvVGaVNxb1403XsknDeBGRwIbitwEAeD+Qnci3iewfF0q8L85/1oq3noHZBe+Cw9gUP6/G7iwpxRd9TVWg== 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=iYkDadfll97cOmZt0rFBwVPyozS98qAmwQX3V+qd2Dg=; b=Td7t6jzNFxTcPRDL7izcpCbd98iGxUnIF5GgwH8e5OtjB2pimJyXlyTAkOVfIIQcQ8p6J67mu9MO8FNJpHm035/SfvJXxm0I3eL81zgKz3VSKGdKFHEnnIWBLwK4f99fdUKD3Xc/Qq2knIOIIYoo6IftI4b+bzA8G2AG6SOZwD/0R+Ktg8MX2WJYL1BD7DIdeTKgOHUBfzQ/wN4a9S+n+OsL0PkUTar3QIiiYdc3xnkmO0nJXdDr1OdeF6cqyBvpqMPWCr1ixybeLV05KiYdaRj9rwRLEA3DmmviImZx7P3A0rRlNFuLaZ0oVoZupCMSvlt5S/jwDwjgMPYC0vbQIg== 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=iYkDadfll97cOmZt0rFBwVPyozS98qAmwQX3V+qd2Dg=; b=rGUxBkuCRBRBq4Hz267kAOJV2J0DB4SChQ48Qe7tMX5tgZKgUz3gaQ+S2CMtPkA5z8JPRNkMNuEB8Yf5o534HzXsVVs4nFioWuGIFiKiRAQvtG2+zX/72S+jPx1A8z/EeflHc79QVOAqx7qSv5POISLeZgam9EWu/bEp+oLkL4A55z8QiJpsC2IyacsXA3sFwEIoycvH8G640dwz8zinG6ewCjS7avabOuh3Rd0yY1RWQdM+HZLVCnTdOyPcBeVqoCAttjUktwUVwEzjmlvsUWn3Dv5Q9HAN9fnMe5CctqxZtKq4g8vR9cOyzPovfS2bhotpm/lbo5yEE+hFoQa9RA== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by DB8PR01MB5803.eurprd01.prod.exchangelabs.com (2603:10a6:10:10f::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5373.15; Fri, 24 Jun 2022 09:51:02 +0000 Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c]) by DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c%10]) with mapi id 15.20.5353.022; Fri, 24 Jun 2022 09:51:02 +0000 Message-ID: Date: Fri, 24 Jun 2022 11:50:59 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: From: Andreas Rheinhardt In-Reply-To: X-TMN: [kawTAAAgLLWdYovPJdEvXhlC3n3UtnDZ] X-ClientProxiedBy: ZRAP278CA0018.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::28) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <7d60497a-a626-97df-cff5-3a1597e78932@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 50f50891-c678-4b4f-20c2-08da55c70bdf X-MS-TrafficTypeDiagnostic: DB8PR01MB5803:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8UA3ldoZfBhapa6Rrn2bVNXNrvYFSw0o7eidrDr5g944UrrqVn0JBDJolPCqqvuB/RNk/usVLTkImzGgZzJOG1jB1o80crEpktRr/7N5DjQj6sw/px/2Z31xZEgVZFeknCIsnFdZ/3QFC/xSQM2zauic/1Ur7V788ZZaeuchoUUm+L/e8HsetAql4wMYqQPHB2Z2a/HDeDGKd5bspRCnQwk4a+fBB389fFjTnUB5iUPVyMX5dKo1wUpon7Ulhmhpb3lYIy1nzY2ukED3l5YiCEUsy2EUsvoJBu3LRYBOpBiu/HYyfy7K+Gb4n66zgaBql0nvCBaZMQVdv7GjTsUkltX6LP+gBVP3tJYncRymB3H60qIDajRH+pJAhcbGa8V5UagcenzTgZrP896UP4epdO+C5J0JmWVUYbCMcYM8KIuNDRyHV+1xS8mfb+qSN/kesU27CmkZWnTTtyS6g3D+I4jDbpo35Nl3eeGKlo6wqJij4UfQlN2N1HXmFgHOJsQWtGCftfSIYZ/VInYJCEP1CFXB9FTTsXm7pgCANBtvzxjPbooWDyUWv8f4dsctMOHjN8B6oIgYnysi43eyWgam9IL9u3apRhqWsCCKMD3Y1B5gSLmjr+6jjUETFIqDDC25twyU4FZ4JLqhsu7LtDYMGg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R212TElFUU1FMkRoaW5jNWl1Qm41SHgzZnJ2eUtHZWZGUFo1TC9CMzJ0cEpl?= =?utf-8?B?aGxxRGp6VGh3eFZwTFVabk9PYU5aSVBlemFWZjQ2OHZ4SlVhbVFRYldva3lE?= =?utf-8?B?SEwvOUJmNEM4LzVnaDRkOFJOSlBnemJaYWw0WkpsaCt1T1dXWWFnTnBEUWVX?= =?utf-8?B?TzROeU5ZU1BmMzMvWnVyZnF4cml3QUE1dVpPMmtNb09PYk41L1ZrbFk2UFBr?= =?utf-8?B?QllidENHM2p1QXUzZE1XTjR5NEVsTk9OdFVTYkVqSDU3OStMTVhYemlRZ2FK?= =?utf-8?B?aHVMMndzVW5adDNDZ2hNNjBoWTNZM2x6V1hVK0lWSS9qTEhud2RaL05FOFBP?= =?utf-8?B?a1dSdVhuSVFFc3B5UFEyeTJMZUNPVnh4N3Q3cTJ0a3lScjh2WWdHTm1ubVJZ?= =?utf-8?B?MUxTMzRuQ0NJWGZUd2UzNDBPc3JBSFVNbHdPSWMvVkNVUlZjYnBLaXpkNkkw?= =?utf-8?B?RUdIbHNzZHZmQ2hFc2crazk4NFdhaVdPVVVkVm9udnIrdXpSN3ljVlFaS2tn?= =?utf-8?B?WEtqTXNrV1lOMENjek1IR1oxQ3RMN1BVUklDV0l0SFNjbGY0c1ljd0RwTDc1?= =?utf-8?B?Q3czQzdkMkloc2lId21yVkpiNVl3SDE0TWxBQnRxRHBHS24xU01BZE8vbHZV?= =?utf-8?B?TC9XaHRYMTBCd3lrWFFoalZabzYwUXJyTllDT01BeElGeFVIaGNDek5FMlkv?= =?utf-8?B?aWFFQVdha1oxUHk5K1E2bytiR3luODlQT0RRVGxMM0tWazlEbDdIMERrdGta?= =?utf-8?B?dTZsZ1lXeUlydWJlMWFiZ0g2ZFNBZFZEbm1RN2J5Z1pkQ2RwS21weVZ1TGdk?= =?utf-8?B?VWszbjdTZ01JazRjcllWdHZOdEo2WmtNYzdZM3BSbkhYNFJMNDlDbVVXY3Nx?= =?utf-8?B?VzlYdWI1a2pMakZuVVAvdkh6L3h4dVBMZW9NSitCbkMyZ3pXUWc2N3FEUTFY?= =?utf-8?B?aTNNaCt5dXBEbWoxN2piNHJ4cVhoWDFLTmZDTkRVdlFNWm1IWlppNWczVERa?= =?utf-8?B?Mk14M0p1ZUMvalhYOUVTV1dMR3JIWWNIUmU4ZkNDTVZGa0FueGxmS2lBS1ZN?= =?utf-8?B?ZnA5SElqM2JnWTg4UU1XUzZCSWczWVdtZEMxS1VSQ2hMbHBmZVFQUGk5NUhB?= =?utf-8?B?TENlNFF3MEp0c3daVlhDWFZiazQ5WThZd0NBUGhBcmk1Rk5YTHpaNHFnU1Ur?= =?utf-8?B?aG5Dbi9hMnA4RWRwTmlQNmhYVlFTQlpqMzQzMjBvZzJDcmxDMnZ5WWUwVENq?= =?utf-8?B?bkZScUcvL3o5VkozQ3hGNTJLaUVzcDhCUzd0emFzd2RFQUNzaXZDZmRVblRh?= =?utf-8?B?enFSclAzUklYQmd5Tlhaa1g0M1dhQXNwamlLRGtKYkUxYVNsQTMxdHY5K09S?= =?utf-8?B?aS8yZEY1RnlTM2JJWHdPb2NPbW9tbGZwdjhJVFpHeEUzZDRmcjVMOCtTNjlF?= =?utf-8?B?c3M1UDdEa1h5QVBtQVg3Ym1aR00rT2FMR0REbnFUQkRIUjRBTWROUjNVc1ht?= =?utf-8?B?Mlpod3ZsYnBwN05jU2M3ZDgrN2FZUjRYV2QwREFZUXNobHFjdGpqZEI3M3ps?= =?utf-8?B?aHlrWGdwbjhnYXhqUnNBYUZoTEUzYkRibllicXVsMnNXd0hQY1p5eUtqcG9q?= =?utf-8?B?U3AzOHBrUHQ2ZWNmTkw3bmRXWUFUejk0YVNjZGd6bUxlM0pqNkVHR2llbzV4?= =?utf-8?B?QjVwbkVteE5oanNsMXdreXZ3MURrblBjZFNGeVBzOTQwbGtxSkU1NUdsVnlL?= =?utf-8?Q?sEF5EZaU5mL2y2prLY=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 50f50891-c678-4b4f-20c2-08da55c70bdf X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2022 09:51:01.6277 (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: DB8PR01MB5803 Subject: Re: [FFmpeg-devel] [PATCH 1/6] avformat/matroskaenc: Split assembling CodecPrivate from writing it 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 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: Andreas Rheinhardt: > This is in preparation for splitting writing and updating > extradata more thoroughly later. > > Signed-off-by: Andreas Rheinhardt > --- > libavformat/matroskaenc.c | 74 ++++++++++++++++++++++++--------------- > 1 file changed, 46 insertions(+), 28 deletions(-) > > diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c > index 163af8aec8..b4756832eb 100644 > --- a/libavformat/matroskaenc.c > +++ b/libavformat/matroskaenc.c > @@ -1099,9 +1099,9 @@ static int get_aac_sample_rates(AVFormatContext *s, MatroskaMuxContext *mkv, > } > #endif > > -static int mkv_write_native_codecprivate(AVFormatContext *s, AVIOContext *pb, > - const AVCodecParameters *par, > - AVIOContext *dyn_cp) > +static int mkv_assemble_native_codecprivate(AVFormatContext *s, AVIOContext *dyn_cp, > + const AVCodecParameters *par, > + unsigned *size_to_reserve) > { > switch (par->codec_id) { > case AV_CODEC_ID_VORBIS: > @@ -1112,7 +1112,7 @@ static int mkv_write_native_codecprivate(AVFormatContext *s, AVIOContext *pb, > return ff_isom_write_av1c(dyn_cp, par->extradata, > par->extradata_size, 1); > else > - put_ebml_void(pb, 4 + 3); > + *size_to_reserve = 4 + 3; > break; > #if CONFIG_MATROSKA_MUXER > case AV_CODEC_ID_FLAC: > @@ -1139,7 +1139,7 @@ static int mkv_write_native_codecprivate(AVFormatContext *s, AVIOContext *pb, > if (par->extradata_size) > avio_write(dyn_cp, par->extradata, par->extradata_size); > else > - put_ebml_void(pb, MAX_PCE_SIZE + 2 + 4); > + *size_to_reserve = 4 + MAX_PCE_SIZE + 2; > break; > #endif > default: > @@ -1153,21 +1153,21 @@ static int mkv_write_native_codecprivate(AVFormatContext *s, AVIOContext *pb, > return 0; > } > > -static int mkv_write_codecprivate(AVFormatContext *s, AVIOContext *pb, > - AVCodecParameters *par, > - int native_id, int qt_id) > +static int mkv_assemble_codecprivate(AVFormatContext *s, AVIOContext *dyn_cp, > + AVCodecParameters *par, > + int native_id, int qt_id, > + uint8_t **codecpriv, int *codecpriv_size, > + unsigned *size_to_reserve) > { > MatroskaMuxContext av_unused *const mkv = s->priv_data; > - AVIOContext *dyn_cp; > - uint8_t *codecpriv; > - int ret, codecpriv_size; > + int ret; > > - ret = avio_open_dyn_buf(&dyn_cp); > - if (ret < 0) > - return ret; > + *size_to_reserve = 0; > > if (native_id) { > - ret = mkv_write_native_codecprivate(s, pb, par, dyn_cp); > + ret = mkv_assemble_native_codecprivate(s, dyn_cp, par, size_to_reserve); > + if (ret < 0) > + return ret; > #if CONFIG_MATROSKA_MUXER > } else if (par->codec_type == AVMEDIA_TYPE_VIDEO) { > if (qt_id) { > @@ -1193,7 +1193,7 @@ static int mkv_write_codecprivate(AVFormatContext *s, AVIOContext *pb, > if (!par->codec_tag && par->codec_id != AV_CODEC_ID_RAWVIDEO) { > av_log(s, AV_LOG_ERROR, "No bmp codec tag found for codec %s\n", > avcodec_get_name(par->codec_id)); > - ret = AVERROR(EINVAL); > + return AVERROR(EINVAL); > } > > ff_put_bmp_header(dyn_cp, par, 0, 0, mkv->flipped_raw_rgb); > @@ -1204,7 +1204,7 @@ static int mkv_write_codecprivate(AVFormatContext *s, AVIOContext *pb, > if (!tag) { > av_log(s, AV_LOG_ERROR, "No wav codec tag found for codec %s\n", > avcodec_get_name(par->codec_id)); > - ret = AVERROR(EINVAL); > + return AVERROR(EINVAL); > } > if (!par->codec_tag) > par->codec_tag = tag; > @@ -1213,14 +1213,32 @@ static int mkv_write_codecprivate(AVFormatContext *s, AVIOContext *pb, > #endif > } > > - if (ret >= 0) { > - codecpriv_size = avio_get_dyn_buf(dyn_cp, &codecpriv); > - if ((ret = dyn_cp->error) >= 0 && codecpriv_size) > - put_ebml_binary(pb, MATROSKA_ID_CODECPRIVATE, codecpriv, > - codecpriv_size); > - } > - ffio_free_dyn_buf(&dyn_cp); > - return ret; > + *codecpriv_size = avio_get_dyn_buf(dyn_cp, codecpriv); > + if (dyn_cp->error < 0) > + return dyn_cp->error; > + return 0; > +} > + > +static int mkv_write_codecprivate(AVFormatContext *s, MatroskaMuxContext *mkv, > + AVCodecParameters *par, > + int native_id, int qt_id, AVIOContext *pb) > +{ > + AVIOContext *const dyn_bc = mkv->tmp_bc; > + uint8_t *codecpriv; > + unsigned size_to_reserve; > + int ret, codecpriv_size; > + > + ret = mkv_assemble_codecprivate(s, dyn_bc, par, native_id, qt_id, > + &codecpriv, &codecpriv_size, &size_to_reserve); > + if (ret < 0) > + goto end; > + if (codecpriv_size) > + put_ebml_binary(pb, MATROSKA_ID_CODECPRIVATE, codecpriv, codecpriv_size); > + if (size_to_reserve) > + put_ebml_void(pb, size_to_reserve); > +end: > + ffio_reset_dyn_buf(dyn_bc); > + return 0; > } > > #define MAX_VIDEO_COLOR_ELEMS 20 > @@ -1833,7 +1851,7 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, > > if (!IS_WEBM(mkv) || par->codec_id != AV_CODEC_ID_WEBVTT) { > track->codecpriv_offset = avio_tell(pb); > - ret = mkv_write_codecprivate(s, pb, par, native_id, qt_id); > + ret = mkv_write_codecprivate(s, mkv, par, native_id, qt_id, pb); > if (ret < 0) > return ret; > } > @@ -2626,7 +2644,7 @@ static int mkv_check_new_extra_data(AVFormatContext *s, const AVPacket *pkt) > return ret; > memcpy(par->extradata, side_data, side_data_size); > avio_seek(mkv->track.bc, track->codecpriv_offset, SEEK_SET); > - mkv_write_codecprivate(s, mkv->track.bc, par, 1, 0); > + mkv_write_codecprivate(s, mkv, par, 1, 0, mkv->track.bc); > filler = MAX_PCE_SIZE + 2 + 4 - (avio_tell(mkv->track.bc) - track->codecpriv_offset); > if (filler) > put_ebml_void(mkv->track.bc, filler); > @@ -2649,7 +2667,7 @@ static int mkv_check_new_extra_data(AVFormatContext *s, const AVPacket *pkt) > } > par->extradata = side_data; > avio_seek(mkv->track.bc, track->codecpriv_offset, SEEK_SET); > - mkv_write_codecprivate(s, mkv->track.bc, par, 1, 0); > + mkv_write_codecprivate(s, mkv, par, 1, 0, mkv->track.bc); > par->extradata = old_extradata; > } > break; Will apply this patchset later today unless there are objections. - Andreas _______________________________________________ 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".