From patchwork Sat Oct 9 15:13:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 31014 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2084:0:0:0:0 with SMTP id a4csp1977618ioa; Sat, 9 Oct 2021 08:13:41 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzldYwP4gz2GvF7O034MMpXon3N9HZtqLsjRWvjG0xM+11Us1h2TDmtvT1tam2XhToB2OqM X-Received: by 2002:a05:6402:424a:: with SMTP id g10mr2399361edb.158.1633792421277; Sat, 09 Oct 2021 08:13:41 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id g1si3241349edk.532.2021.10.09.08.13.39; Sat, 09 Oct 2021 08:13:41 -0700 (PDT) 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=YVvN29Ab; 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 EB89D6881B1; Sat, 9 Oct 2021 18:13:35 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-oln040092072035.outbound.protection.outlook.com [40.92.72.35]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4AA6B6881B1 for ; Sat, 9 Oct 2021 18:13:29 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dns8ODc1zDHVAnb5ShUULx1Az9W1rLdrWcqPFUCBeLO+jyrlTKvLHq8u2wHkvCm2RLLIwpXhJRI73On1l0JeYck73L71JEV2Jvmzd3YQPUqgBCMxhl8tNGiQ1QX7KR+m1BRBZIIdjxCr8wkwwFReKPoqgTQRNxi3/lqyqPKdj/2adA94TcCq0D9uT/ms36v26WSwfPjXGTxNnbTNDz8zeZXzy2hZi5/xAYwq0uJh/dUTl+Q0bnC+6O9GMc4cYN+NTYVRjL5IetvFqvwo+xBhrgzqXObBFzTvDdrVF2qeA/T/2+pvz1TjC++l+xLsJ88mvttbxusU++sLOUvPqutTvA== 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=202n+ZdtNNkFQsAuGz3lIC+oBvve7+/u1eOile0I3IY=; b=APj7YZt2x9gLM60ljO79IOv3CTnSAp9ZTaZ96Du6LuCZmatvUf3SASjo1EK9IgNldrRqxMVQyIltDX4re6I4pwHMqn9Bm6kYwG98ccF3UIXL74zwI7RUjH+fmrYMu7XaDY3mBmNLSGSggFQa4Rh8YpaGnjou36XuSOEWbxQK3uY5W5YsokvqeOdz20Nxd74U/EZRTTmNtws76GjgvNlu+zZ5baPnWB0RlTXOJVQCzXW60qkvo9NHmHLq3D9+/4uLFHJ8aP4TCvrtP6nYV+VstyC4ELDUIDErbvTLxklbte4+rcpO92kdF4ZH96L2b6hpU7G1jhB7P2AvLsO7imo1BQ== 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=202n+ZdtNNkFQsAuGz3lIC+oBvve7+/u1eOile0I3IY=; b=YVvN29AbB4SxmTcCL+Ok+pZlJ42lh7PV+Ph0mgI5X96w8fdnTSx/LSgzCoDp2cxdob0KFz66o2TmiDMM6de81tJsLnw4QgIoVZ1R++q+//Bdyqv2Ib5EnQ750YctbAhJ3UXFEDguzDlv+6Sbv8ql+AiuDpvVZDlP1aAGfcswrCwyht2VXB5dHcu2xrwlsuALnSayikhw8rk7Yc3AVUX6Ah8PinLGQFE6IEEn7TsXpqCQ2odS31vZSrytY6xLFTeYoSLK3gBA7GsBZJQItML+6Abc13aIooOdP7qhFHd/hLdECoyslTSQPdcCIcjAjiX070+TsioAhfPNTMlYvOYvBg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB4885.eurprd03.prod.outlook.com (2603:10a6:20b:87::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4587.22; Sat, 9 Oct 2021 15:13:22 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::700f:d70b:3bb8:4d51]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::700f:d70b:3bb8:4d51%7]) with mapi id 15.20.4566.026; Sat, 9 Oct 2021 15:13:22 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 9 Oct 2021 17:13:12 +0200 Message-ID: X-Mailer: git-send-email 2.30.2 X-TMN: [UMbOt6OiOXNzoiSAg3O+wISr3jKRd4Dj] X-ClientProxiedBy: AM0PR02CA0033.eurprd02.prod.outlook.com (2603:10a6:208:3e::46) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20211009151314.1723302-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.193.170.49) by AM0PR02CA0033.eurprd02.prod.outlook.com (2603:10a6:208:3e::46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.16 via Frontend Transport; Sat, 9 Oct 2021 15:13:21 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 097f099f-de75-4939-02fd-08d98b375542 X-MS-Exchange-SLBlob-MailProps: EpEO96k6Wom1YuMMyazFFMoNlUqEzrs+zDW9/ScSKdmuNQucbR6NtcvKikoyXKMk4xAzOummR/drL6Gh/YV0g868aURrb/YXZByns6Mp1S6EaTRpvfFR1DgM+AXzs8cXWzr6UyBOHH3oeSSnbRYBxPpdxiB8uy3glGmHNUEM+H7GjksMAXybyWDV2UCOSiN2bhkgQ1sCaCuzv0Sy3qr9Azb5qTZNoD4Hdh19o5MOXI1Ql7Yi5odVPi+xi+1cHpgSo7MhPfl6HK/0G/p8EyLpY9AZJbR+fC8LYKspCmgSG9tCrhszyi1KTiDYTMVTyYoFvSiCU55XQgJKnoRCXLVtHOrkdZt1B2q58zg0N3j6Iv7pLS+y6o5VvHRgpcQ7/YwVcZM5XjHd6yW2ACKpgGuUqArc9A1C6SV3tuJGnbMm6BFg677qvmSn9nmufCMMG5BocxweE0FzYbyxOn1qHEpIaSidnxjaKBXAlEWjbXLspJGaWuLwq+IgCeWgsrOGl1jq/IquWJPSKt1UGFKsWIQMgNhpfRIG3Lvr02CYSo3EYflfCEMwYSmO8lGVEeaXoOs36eOJwgouArsicjzoBWXFSdwejY6T96U/RTbMtd2Huooqp7l6ybqoZmIhdV6Pc49Vr0xwc414EW/e0F+OyJV9M4TSZze6ckrGVR3kx4d9k1POY/Y3p9/AVd1KBRYDK6jW1HrpBrWhJbBW4VBV+EgYa/6Z7PwsA5E8K48QhPYSI97I8iI7njENQ6ZXrybJpURmPKwdfrYuFbY= X-MS-TrafficTypeDiagnostic: AM6PR03MB4885: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: pc1ZBBBT48OGSQyMYunYl4Lh2DRaCz4Ksrg/Q+MTuEnLZV3zQnLGP0XC0v/9M7M2c8RWpfobi/hef9YDmhp4iWcW3/GIGnzFebY97x3jzUGO1lVhbiW5R2gtb9XONBEM1w09mPu6U0gmC8Pyi90eQNkQbbpo2ht5Anir1VtYHMtc2WSF1o2L/RyhfkEa1vf6+tVTT5n2RQWmYKlmJBCruIReW0/vZJWHtsrieZIkrh2v+UzuOuj8wTe+gk2YgB60NBpwV+6tQ85MdAMZ7AmSPmVmx1yRbH9QMvcrPz7xS/ylkidq7OL6dIXUB3K1hVQPLaz/LIMB/K28cC1sWe7BtWn06Au2X9uIH6rBirPYeWkTlUFlTWFNDfOPYsIbuLkzyL+L1feIHdUCH/j88/PoabU2hrNpnfi88qAwKazEC36ZhP/jGdMfWOgSNzuGaVcx X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: P/7OgJVZ6b50UDG3g/RtY9C/ybBFIR0agznWm9/0Kw1VXXiLzvYhDcQJZcQGUbLadwaHGDj7dglOZ59olBjH+1iMVbpjaufvL959HoPiAsMdCCSfxOx6SoYsl62WQAFpU0pi0htYKbd3HM4gaM6N8A== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 097f099f-de75-4939-02fd-08d98b375542 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Oct 2021 15:13:22.2603 (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: AM6PR03MB4885 Subject: [FFmpeg-devel] [PATCH 1/3] avformat/mux: Store pointer to interleavement func in FFFormatContext 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: o6gFSejNhCtA It avoids branches lateron and will allow to easily avoid the overhead of the linked list currently in use in case there is only one stream. Signed-off-by: Andreas Rheinhardt --- libavformat/internal.h | 6 ++++++ libavformat/mux.c | 17 +++-------------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/libavformat/internal.h b/libavformat/internal.h index f1ae7db365..223befdbc0 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -81,6 +81,12 @@ typedef struct FFFormatContext { */ int nb_interleaved_streams; + /** + * The interleavement function in use. Always set for muxers. + */ + int (*interleave_packet)(struct AVFormatContext *s, AVPacket *pkt, + int flush, int has_packet); + /** * This buffer is only needed when packets were already buffered but * not decoded, for example to get the codec parameters in MPEG diff --git a/libavformat/mux.c b/libavformat/mux.c index a6e1a08be0..f4f1bc289e 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -334,6 +334,7 @@ static int init_muxer(AVFormatContext *s, AVDictionary **options) if (par->codec_type != AVMEDIA_TYPE_ATTACHMENT) si->nb_interleaved_streams++; } + si->interleave_packet = of->interleave_packet ? of->interleave_packet : ff_interleave_packet_per_dts; if (!s->priv_data && of->priv_data_size > 0) { s->priv_data = av_mallocz(of->priv_data_size); @@ -1054,19 +1055,6 @@ const AVPacket *ff_interleaved_peek(AVFormatContext *s, int stream) return NULL; } -/** - * A wrapper around AVOutputFormat.interleave_packet. - * See its documentation for details. - */ -static int interleave_packet(AVFormatContext *s, AVPacket *pkt, - int flush, int has_packet) -{ - if (s->oformat->interleave_packet) { - return s->oformat->interleave_packet(s, pkt, flush, has_packet); - } else - return ff_interleave_packet_per_dts(s, pkt, flush, has_packet); -} - static int check_bitstream(AVFormatContext *s, FFStream *sti, AVPacket *pkt) { int ret; @@ -1089,8 +1077,9 @@ static int check_bitstream(AVFormatContext *s, FFStream *sti, AVPacket *pkt) static int interleaved_write_packet(AVFormatContext *s, AVPacket *pkt, int flush, int has_packet) { + FFFormatContext *const si = ffformatcontext(s); for (;; ) { - int ret = interleave_packet(s, pkt, flush, has_packet); + int ret = si->interleave_packet(s, pkt, flush, has_packet); if (ret <= 0) return ret;