From patchwork Sun Jan 16 23:03:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33629 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2273825iog; Sun, 16 Jan 2022 15:06:58 -0800 (PST) X-Google-Smtp-Source: ABdhPJxy0HY+VL1ZkYhZHs2mGtGkz+vYLuO4E5yDzy5HhLSXDbJyXfVBL8dVGv9+ZVoCUk2ParLv X-Received: by 2002:a17:906:d18e:: with SMTP id c14mr14853773ejz.561.1642374418253; Sun, 16 Jan 2022 15:06:58 -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 a22si4383397edx.578.2022.01.16.15.06.57; Sun, 16 Jan 2022 15:06:58 -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=CDjSsWs1; 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 96F8B68AF99; Mon, 17 Jan 2022 01:05:25 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-oln040092073040.outbound.protection.outlook.com [40.92.73.40]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2022968AF11 for ; Mon, 17 Jan 2022 01:05:22 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IxemJpMZX2yoWCqiGnW8arEWgntXTwyV6XPjrNwRLaOJ+c6hdO0/e8DoPwe0lIODOXQGOv2V1N/4/3/NhwnDYiuaGO3rg7dIu2xJXAHZGqsadRXcEbY4PxNnQNF0sS4VL+zzJ0ISaKOCJn6FVfKXkmNHETnpiSRY++bBTDROUxZETYD6iYxOGAaaYiC0O/Zqzqchv28o7wDk5uMaL/SPy5qa8yaNGq9QFT/blKoNiN91mw5ms3UkPjIHVc8AH81pbBPJIRZM1sgq13JevUbDQbH+9+v4QPjwM6LGyvnmfBVKBf1HbLd2j9JYkcqzBZN/+6nKgXwvTPOCJInSGU/p+w== 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=RCmSRHP9GNLM2YTy+o+EZKfdy2OJSx3HzNTDSbSovJo=; b=kkI2BEkyu1/NyEl7DvhnZNE8FVYR1HFIRWS/qEgL6SxBthCTIu60CmoEszsMCfYOqISHjAWnOAd/5cLeT2KiYIzZOVwSMi4/qhsXeZzDPVHJK5QmuHN2zWyzU9y59uCL++pxdFmC4myWX2amqqJM0WHmtqEvpjQARSNOa8IJe2JO2Ox8g8LSSsbrnJHOnuYrFw8fAqUQJ1O/w0dwNSpepR60fCd89uHfRPrv4AZ8UxKKnEKuRCwh8+Kc4OIZcI2mmi8u1J7IZVJNKsAFsJ4t4kOcO8b7piE4ytWDfFGe1aSlOVilJaprP6G3TJJTEXgqN9UWj0g3nWyDXRGp2zCQlA== 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=RCmSRHP9GNLM2YTy+o+EZKfdy2OJSx3HzNTDSbSovJo=; b=CDjSsWs1AszhYlrgN91CU78aorDcH64q1f3h/scPDPvD/TwHPAV+MF8Cnxaq4fbamBHdeg0srrALmr8+U3B0U4MWxZaAW8AR9WrhZ/T/U1OiwwLtZD+MwEp48GClIM7W3y8Qe3AenWxLU9UtJXcrHi53MCadQ9iHq0X4fod5Tu2jehcruXitXJsnrqkEDHj/cONUyJkloBUbc6gk2lqXiV6hH6lusNGCB0r9zS7gw+Pn1uM+hQirbBdKTyBW6LG/8ufaHJjLYsTvDaXRGtO8XSEC+N6IE9EFG9DCqzT0VVJccpUwmbh2L3w+axSp9ai8ysV4XmRmOI5295a7KUwSuQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AS8PR03MB7704.eurprd03.prod.outlook.com (2603:10a6:20b:403::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.10; Sun, 16 Jan 2022 23:05:21 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5%9]) with mapi id 15.20.4888.013; Sun, 16 Jan 2022 23:05:21 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:57 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [GAiJQV05oMZbjRrVOTZX5nRQ9vAGvW8D] X-ClientProxiedBy: AM0PR10CA0070.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:15::23) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220116230405.194506-16-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 62a6a133-4046-4c32-7ea8-08d9d944abcb X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPnsCL1aUht2cIVQPb9i5BElj+HIxjHvatLXo9HOKrbYUkGqhGQS7Pj+PuYWVGZ3KPdQsMRfCp2DK+RdQUx8Eofw/PsqNJzElxS9Z+Dnsmaq0+FuLlF15VlfY8RI2ujVCFIfRYfN056U5ujEs6REfih4RkdqgOO71xJ/IAW3UQ/eHh2l47tXgkJy3+ag8NI/O8PZDIEkAW8vm95hkU6C2MiSlGlb96U+hRg3heElT2whs4eed4l8raRMkoFo5mwCtyaVJj3lBaQY1M4gpEDTONTvqfKhQK9861uZ042QS9R4v7Iyr6r/3dDtRZ3geR05uHSCf7XQwaOUfI5eUvCZDxndGaN/PQQ3xDI7knCn0dQZN4CUR3t8LKEElFO4l39mhzSrkWI5hHC/SxuyYPzQi2SCoLEJx5FAS4ZoibE3RdcHzt71ntFaEM7RE5h0f32DUt1u91iGypD4ahze0M2J8YPR7Kd/P08+31YszU86c7E9VL9iMu+KMkGvcQttVX3MV34Sbczjg67MUIGldbs7Gm87/dhrsO1IRTR74ABntYg4eFZvfce/qjZeDB5eDguGIjmtXSEhoUry+zjGAilmNd7wU38xkL/HE3N/UggBGNLRYA8QU4xJykYhP/oYh0wpgmTzGMfqlV3RJFWMhW5tszmWa1ujoGwRp89/SudmYxLTGOKRdLCZZUGT8HYSogP95CLqQj+QHRw+kCB8c7hrLv8KaGjxYW3PgLXNr9oB7cGfbcI= X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: AhK+dQazVyR9p/BOcRIM9IihcBvhpjzROMJ4eArZPYaTaeM38Hc1BC5imgZcaB8s3Oa3XhK9bEE21OMROxm5ePyeKP7GqNzXrSy5qCAuhgXMsqI/3vED6fpUbCYHI20MAZNhU9HmWop0Jarg2ZPhkHQu7MKOzijL1meFjNEggnGpPHHPW2SX7SGg4f1Lp2CLWmssmLRiC97XP3jDtJK4AyBCniDiW2dqIB+v3ZdGVfnsSDtBjNS+UnfKw8diP9AMtQW7QaDVDLmjnY5cAIa144L79JJ97F5lvVjVUCGxoFlT/8vzZUS5nVZRmNMdbmGGahLM4KULpl4nK8qo8kHsHStkuRYOqhOVyVYiwT1VQbnf/zZggItNdctNhFAQ+SMvEFIax+lqou/te1/4XZxmz6pqsGZANzTXdyUL5DDVJMT/91mcZKQfC96X3HDxHjhFCA7J14kuWu/jAbn/PfDPUzqD2pzm15DWmK3vxDnHupITXgBFP7PtvDlqw5Ekj7DBzKyxQH6bC3WG9CG2z+1rVz8kNZONFf9Hsea9SxPSPOTDEbDLUMf1QMnrxZ7Hu6ON5ZN6iaBhE8WB66AvYLbAYw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PL7DmxPmWBqlBLvXR2XXfTte3oX0rhgqjO/YRONJA1RBRWfMxV3VsaQWxjL4lOHH9A4SmWD+AvBsmAG2wwgPFABvTEs/YMVwU91UTFG4v8OKSmGhOIhmLu4ALbHObPhb6U6XEI1hu3A7zW2ar7puThtkmi4LKIENV5sL3y/dHyojikHLdZa4SamJ4dJ/skLP/dAS6Af7fNxaRgHNqjjL9gPLoO2f8PD6zAa+wcQ5n/1FayVlDbu0amRtra9Izy4xxVpvidyRastFhMuoEeLWKMlNKL5sxFhsuu0n2SlD9nTiiO1CAHzttSy/Kl23xq/3qAb56Ake8D2usrAOONlrBkdIzkIMIv/iXeJkBTiCN/mNhGSw4MqG5F2WwHuqBc5o3vtuVYa68gvrFZta3a7daianpGz/06IBtUMKYGAEp1XzSdQ5d/5xSE82/Jsh3m0L6CTVb1B4Ejly6Fvu7MrfP6Y0+HIBpEtdzpyN2OUIq8bNrV58c604Xf1N1ziJva/F8q3WTEAIdvD7fo/w0CKYgqWf+rEMK2nRdQiEekiFE3ZT7bYILkq0dqG3j2VylvlfSMETfHGdALf1NnfhL9BgrgBqLnGgciyJ/4XcXPZe/1wiMmSkRg7Iuz2bn1Y8lvJkW0qD/705pHjesRrqnCwp/1qYi0RldD2iovfs4u9K3/faeDz4Xt8OhLQIcwgKbSnN2RPvplkdEjIHkx5I/W9ezIpIBpLbi9bRFiWSlaYinOg2lWmMrM02nREL71FGwSjjmbdYFBG4xOLjK5dsBt32iaGPoI1oGELVXSOky/GcFGNCByETG84VzDjBP82rEhPD3756BAnaAHMIb923MlbPJXIfqYIu6L1BgIGNwj5UilyXz53LRs3l85qlxDGHh0fqg8cPJO5mCm9lWJPnWgWdtaogizqKm1hSrhALd8jLTmjLMC7z5t6Xp+z8iqaS3REudDfhzrDvKA9ql1wzr1dVWQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 62a6a133-4046-4c32-7ea8-08d9d944abcb X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jan 2022 23:05:21.4597 (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: AS8PR03MB7704 Subject: [FFmpeg-devel] [PATCH 17/25] avformat/matroskaenc: Avoid temporary buffers when reformatting H.2645 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: PwjBhT9JEMCP Do this by using the new NALUList API. This avoids an allocation of a dynamic buffer per packet as well as the (re)allocation of the actual buffer as well as copying the data around. This improves performance: The time for one call to write_packet decreased from 703501 to 357900 decicyles when remuxing a 5min 14000 kb/s H.264 transport stream. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 0446cd6ca9..e247f1029c 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -199,6 +199,8 @@ typedef struct MatroskaMuxContext { mkv_cues cues; int64_t cues_pos; + NALUList h2645_nalu_list; + AVPacket *cur_audio_pkt; unsigned nb_attachments; @@ -746,6 +748,7 @@ static void mkv_deinit(AVFormatContext *s) ffio_free_dyn_buf(&mkv->track.bc); ffio_free_dyn_buf(&mkv->tags.bc); + av_freep(&mkv->h2645_nalu_list.nalus); av_freep(&mkv->cues.entries); av_freep(&mkv->tracks); } @@ -2347,6 +2350,21 @@ static int mkv_blockgroup_size(int pkt_size, int track_num_size) } #if CONFIG_MATROSKA_MUXER +static int mkv_reformat_h2645(MatroskaMuxContext *mkv, AVIOContext *pb, + const AVPacket *pkt, int *size) +{ + int ret; + if (pb) { + ff_nal_units_write_list(&mkv->h2645_nalu_list, pb, pkt->data); + } else { + ret = ff_nal_units_create_list(&mkv->h2645_nalu_list, pkt->data, pkt->size); + if (ret < 0) + return ret; + *size = ret; + } + return 0; +} + static int mkv_reformat_wavpack(MatroskaMuxContext *mkv, AVIOContext *pb, const AVPacket *pkt, int *size) { @@ -2426,13 +2444,6 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, pkt->size, pkt->pts, pkt->dts, pkt->duration, avio_tell(pb), mkv->cluster_pos, track_number, keyframe != 0); -#if CONFIG_MATROSKA_MUXER - if ((par->codec_id == AV_CODEC_ID_H264 && par->extradata_size > 0 || - par->codec_id == AV_CODEC_ID_HEVC && par->extradata_size > 6) && - (AV_RB24(par->extradata) == 1 || AV_RB32(par->extradata) == 1)) { - err = ff_avc_parse_nal_units_buf(pkt->data, &data, &size); - } else -#endif if (track->reformat) { err = track->reformat(mkv, NULL, pkt, &size); } else @@ -2489,8 +2500,6 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, track->reformat(mkv, pb, pkt, &size); } else { avio_write(pb, data + offset, size); - if (data != pkt->data) - av_free(data); } if (blockid == MATROSKA_ID_BLOCK && !keyframe) @@ -3110,6 +3119,13 @@ static int mkv_init(struct AVFormatContext *s) case AV_CODEC_ID_WAVPACK: track->reformat = mkv_reformat_wavpack; break; + case AV_CODEC_ID_H264: + case AV_CODEC_ID_HEVC: + if ((par->codec_id == AV_CODEC_ID_H264 && par->extradata_size > 0 || + par->codec_id == AV_CODEC_ID_HEVC && par->extradata_size > 6) && + (AV_RB24(par->extradata) == 1 || AV_RB32(par->extradata) == 1)) + track->reformat = mkv_reformat_h2645; + break; #endif case AV_CODEC_ID_AV1: track->reformat = mkv_reformat_av1;