From patchwork Sun Jan 16 22:49:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33612 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2264213iog; Sun, 16 Jan 2022 14:49:49 -0800 (PST) X-Google-Smtp-Source: ABdhPJxEK5Wi9Odzldp6ADZBWZZOFPdKHtS9Uee+yfRj/NSkGMLlapiTqVyUHjdjE6quYZ7Mb/sT X-Received: by 2002:a05:6402:1d84:: with SMTP id dk4mr13856134edb.209.1642373389513; Sun, 16 Jan 2022 14:49:49 -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 ho13si6234946ejc.994.2022.01.16.14.49.48; Sun, 16 Jan 2022 14:49:49 -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=FEuTGUjb; 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 989EB68AE51; Mon, 17 Jan 2022 00:49:44 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-oln040092068107.outbound.protection.outlook.com [40.92.68.107]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 537D3688081 for ; Mon, 17 Jan 2022 00:49:38 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ehV2XcZlTtquytLiZNs7DQ6JDF8dse6vn2rrOYBtqP3VoTMPj90AcpkP7m4a8cyU6tIqBCezRErk0VsUwedZx9YFPmtLDuLt1VdBI3dONCnfhAzYLTxgFOhLgA/8ggtdk0ghsLSTrbqAh+rnEPF9erh/XTSNPtEEtR81r9zcxaOSLjArOAcMCcBcfok73dnoeCUngqJjIk3Y26HNSgmIs+uHWZDXJkg2Ob1Am9fRrSnCRWkFs75lgNFg0kcmm2r/cs6rfmZXzIgDMWWNHOVVuZsWKDtu4UrIgGRY8n4aCmkTR7er01dfjuAbV5tYeuNAQXlKpWcTDKBlyApkKz30Mg== 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=1edlTi+/lV9M6bUwbjUntsmZJqHuTcJgmMTYqwhJrFE=; b=M22J1VnOH3CNzq9Ni17owzIfRZNcO9JUmceDVV7nZ+juxy4YPrk+NbPdg4X9g2DaKuArqIZTmCMe8+86XDfHbhUeGF+XlZzc1Y8mV8r5/j9w5QsNHYjDSsqDNhRdjK1rXgdO11lizm0QOQ2nTQ5ri4MyX3fSNIBHvEGnzCWlbR3R/e0O56zmnJKB5aPzF3MTREBsUntIf30NKJHq+smB5d8zTgvJ5Fz/X7jtEwARQ6b0AR6nIigT4DF6jr9QQB0Y8MvJzAdU2c02lQralk3At+MJCIfSixCugdmIdi2QwpkmCzvpCBCMo3DlY5isi/TBBpG5zRlRoYj6vh8LX8489A== 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=1edlTi+/lV9M6bUwbjUntsmZJqHuTcJgmMTYqwhJrFE=; b=FEuTGUjbjL6XK574sxE+Fv2AyGc91AfAhEr3pQKXVgJJKN1E5wr38pGp78pohwm9Gs3BRxeAss/OPlUGq71fAlQ+bszYMvtPvScY4BYtBcNEcoZ2SRz25c/FW+l/AN9rklMZACHYON/cPIxS+epvBDlN8AEZmjAemZarIEeR61zG/L6qTXCHaMMdoveNXh1KLQaUbQIlBzaXjZRYN7ZiSwxH5V6WFOqulSuQg3+w27LPE/FoKvASrT3qhPGbxvt+Oj8E4nwzHm17x5/Rq5XtQB/WyeVIcNeCluho+2jJWwt5aLsgcVpsEvcAOZsIU6bt0DCM9tFjiBhD5d/w6NeJ6Q== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM0PR03MB4834.eurprd03.prod.outlook.com (2603:10a6:208:101::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Sun, 16 Jan 2022 22:49:36 +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 22:49:36 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 16 Jan 2022 23:49:02 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 X-TMN: [aqVtWmEd2Hou+9ouMU5bkvExvgf0aMj/] X-ClientProxiedBy: AM0PR07CA0017.eurprd07.prod.outlook.com (2603:10a6:208:ac::30) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220116224926.194061-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e4c3e7df-542a-4573-d50e-08d9d942783a X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPnsb2ky7RIoN4rHf4RDm5HycS3No7+/6hpsMojsTOEOm5S/PiGZBPVSTKubELyS/DKAZ/lg0EoQ91x0h9tph3yvBb9s5MO0aXhIcK59WCUCng7r+toVZ+4YdxlB+AyF1qzp85EYmHI5uE4XLSIwPa9S2B99Bv9tfiSZ/8GhLYOuKJWrTA8NtjY75ab2twcnuG7Jpgzipcd0gt/Y6n1EToCw5u3NNrFPj/IZJ5uKHd+KnNw61bdv1TG0akeBD4FoQ4z9qZHE4GxAHU13PdOqUk4V9UtPQV0/u2/AA3wJxHaNV4eFjYH9wMe1ytSfrRTb8D2dnuZNFyo/EHmLtwVwK3UAUVnvmxspEUPoYzQtiGa2vk9JsO2WQDn5077J74CHBVtgHqWk92+k2v0cDpi41sda5t51VIj/riW/TlCDnC83ZJaOUAXPXLRccnkXANupBICMcfVzrVmyncgk2hfAPpg2pNijRQkZicc1xj17Kv/SOppAmEBdZn4amtbgOqQjDdPnB05PRxhRCAEJec1Bu92CaS0v2njsrXiVLErPtbzS39/I1+Hi2RiRZLGlX5b0ByvdrGpzLjW2dcinVLYPMMB73xEHVEtqkj3OYf2POZNed/j9Ck2b8UfErlfaG2Ba+qcci23obAhS/y2bgGnPPWneZNXjI6WyF8eL4E0x5EA3aII6TIKX7dyY0oBKUdmwxhWouTlrdy8rmOl9lYliKzdEsZfXnUeQldMj3yraYK5mhUw= X-MS-TrafficTypeDiagnostic: AM0PR03MB4834:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hrpuHAzAItZGn/N3G27q/apnsJRym0AwEDTa3WlgR7knyZfM+Cm7o9u1mlXZKm5NgBtGArpE9woPHiZBOD1Y40zNWNthJBnqTFG2k5zuBl3BEQ64kNiYpcMQwlFOg5saccKN5ehShX+Ykw37oBlH+QUwNN7ZON6Sdqskuu9SqiqM3MUb82FNId2mKkchvai44sSC4p7VwVA2J5CxkDntJ1El6oaZLUOz1KoDJtiAwmay5jnvhbV59l6rJcHQPdnV8tvPSair/lSXRAjgzuiR6ERArQpNfLaqpYpEEhVKne3AAeF3GC8tpydEPAIlPKEkwNlLCD37rxLQfCTk5pqIFIcieY1mUqKAKAb41ff6BvDnuLAzj+5alat0VRDcG7KowPH6C+6Fj8Em8N+xSNq5rvF8C1lOenk6t7DBcDWhOMDg27O1ERzHK7K591YjgoPbbbAoJSf7aWrYFipBhqTtgV7h+YIudCVHsULNhwPA5TiSFfWi4vwR/Qvd1gZRKy+bhsFzNeqJIL154PkystQfooDJ3+qsvPjjmfXPtZg24og7+BGacoepH5RrpE0AfikbB8ZereBLTPtYvyXxopc3Ug== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: M0s09VESdYd2/CSCukdXUKivXs+/X4FRiSjViKgViHGBuRZEb0gBftJfQsZgqMoG7EXCCs7hJelBnUkoX+Clk8tHKOErMceMvUNN/2e5lQd3zmnOWnltBgaKG1AoZx7X5FgkbENqP9guSAu6sinEEDfhtQCajlR2bq/9AxcKHO93YG6rRCmkEX1zqkPadidYXSTbdu0uYMZfZejWrb4tnyan2S+wzqKCZp/fQ0ghVNCtr/n1nRTh6KzX8FWFNOBm+i5i+qN+fD0yB4Tby4RCs+AaaGAj1rSB0Qmwi//rt8CcuYuDacpzHDULKNcusLA47tE4UCXmD31fXIAouZYzrR9tX/6oA7LUkkbq10kp1Yfc59oJt3rtyUrFDCEyJ8ouJPBFBNImYue6/BfrODGIQAIsCzh92NZzrKi/n7O1Zdp6CFWjlPE9p3ge+HgqPuJjZ6CsRKybnJAI+CedIzhMU5DB9mr/WrkeAtRQGNVyW63gJkxlyLdW/Y8vIJdc3Sr2kUNvfHiB9HA1DXsZuglNzkR412lHddhkrrEwmqYTbqoCe0rDMqVlIMWOg9W3Z3T+WZVfGn3q2a+YCxyaA7G/V2KIarQzLyEZ2wONZrY6Y+NjlgzN8dbwwLDUwZ+/tyP+6M3v+AergFqLA5GPDRXwVe3ABr3Jxbd5+FueWeQwqze5F8GQkCkrQ9gbn7i4RfGKGiflK7OvDDQzku6uXJJhatyi/jmAVf6TFbIHiwyv+J1w7rqWEhwgTi8lhJySDl5nL0BRe4FHcgAIbyuie57U1xkog7dHNlE6aol/OksZw0KTcqmDB/e5DRirErbq9UAVltbFjCKchFSHhVXGVzr0LXvC8aujs3Ap3Qp+KAuy2AoBYUrPt3S/6+hikyIL/+t8UFEd1XYUGqfEVOLvtd4T2fopLpVdkvQq36YV1CSSgI2ZppGp03shSsl/zsAiSU9NQLLsVSu/v217XXePmYZQVA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e4c3e7df-542a-4573-d50e-08d9d942783a X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jan 2022 22:49:36.1576 (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: AM0PR03MB4834 Subject: [FFmpeg-devel] [PATCH 01/25] avformat/matroskaenc: Fix potential overflow 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: sglK6a1Jqcu+ Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 41b2df7dbf..1dde12a7d9 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -286,7 +286,7 @@ static void put_ebml_uint(AVIOContext *pb, uint32_t elementid, uint64_t val) static void put_ebml_sint(AVIOContext *pb, uint32_t elementid, int64_t val) { int i, bytes = 1; - uint64_t tmp = 2*(val < 0 ? val^-1 : val); + uint64_t tmp = 2 * (uint64_t)(val < 0 ? val^-1 : val); while (tmp >>= 8) bytes++; From patchwork Sun Jan 16 23:03:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33613 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2272220iog; Sun, 16 Jan 2022 15:04:24 -0800 (PST) X-Google-Smtp-Source: ABdhPJx7J3HK3K0tJv+eQNirTQzj4OyuLOopRc/2yUXYpjRQ1Cm3guv4fMLV9YCvwyvdpE01okdG X-Received: by 2002:a17:907:9712:: with SMTP id jg18mr15612486ejc.328.1642374264213; Sun, 16 Jan 2022 15:04:24 -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 ds22si1569070ejc.748.2022.01.16.15.04.23; Sun, 16 Jan 2022 15:04:24 -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=QHL5ZWwz; 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 AC79668AE5D; Mon, 17 Jan 2022 01:04:20 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075109.outbound.protection.outlook.com [40.92.75.109]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6F0AE68807F for ; Mon, 17 Jan 2022 01:04:14 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CpPUpmtBEITByL0mYDxuVKH54Ky9KcKWgfnZXcZjx1rOSB8pdHoT+a3G/Sia9W9o82WE66HlCoI5ZQSlKm7i12N5BYcLBaWbkyHQq7cJ5KxXbErpJKL+SnfEKGaZE7yUDbFAwaoYHRQ90PYsg8OexUf3rFh+5G3Xv/DTIOYJ5/Wjc2mgh/VTtOKetSTsyI+zzqIC9av83MPJdR4Mb1UjCXlbRbESxEosed7jcenIa8FOMS3W3cElzhFcqGju7r4XNGMpPiVbix6HWzHf3wCkIxh7E3LbgpFLxTXk0fcJn8G+YhWEDrnK98MZ943685svlF4tuOEquMbohL6X0X+vWQ== 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=F++kil6itOCifgszEUycj6m/Cu38AQLlRH75QrBrfsQ=; b=RtcMbIgqlIFpFctdeFVPOksyQYyCjlpVAPWpQ/BSiujF0sVyTXuqJWINPSaJ9oJ5Ep8frrJqj9FGI/iWYYuzxwxUDxbUBbk7sfItbt7Pdq5lUl6S73Nh70GdIA2A92dRFZoYhwON/OeSj4oHIn9pG2ZQ7HfjOzU3zWa4jZ+awpP9qxt7Y3LBhW3nOHVts5FO8DE2kx6O0Zw8myx0Hc8DGszx110XMAA9HpSlfkGHmT/nUYwn2Nh0sv7LnQ7MJX5u/ILahX30bAzJA9fYVaBVLS/tggWw8Lbr3nEs7XmF1N+xObEOn5IAhrXodPx9T3IseR3HUYzF2loW4Loehjs8Jw== 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=F++kil6itOCifgszEUycj6m/Cu38AQLlRH75QrBrfsQ=; b=QHL5ZWwza4O7X9i3BG+9Kvr/v6i83seBFrjoimG8Z79Lc8bV2aNLGBPyHV9K2o9poSCTVPaA472vds++EFenJuREj1ig9VynLwMHu3CljDBzX+x/NubqI9NQCBKIULcDX9xDmrZi1R5Xnlsz5ig+cdWbz92r4yhQhOaS3XxKiA5BBRbahSEmzhHxAXe9wzVp/xlXc2IoLI3BTJqcu6uHdgh6rsjluAX/Fomg2EQRk7Tfcsmq6ToIgtnogttzMsuDg6OKoLXQyFzB5YBXoe6QR7cGZtePBxJe2UJtPeFSWXRpQwiFHH0156pwNjnQPKGovMZ7jWFIuY9JQ6alhYrL6A== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VE1PR03MB6126.eurprd03.prod.outlook.com (2603:10a6:803:113::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Sun, 16 Jan 2022 23:04:13 +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:04:12 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:42 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [ZHuMq+ziraz0Hjuzl/kKgiKYmrU9xdjF] 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-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3e773956-f6e6-49e1-13e8-08d9d94482d3 X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEuZvKHt/RRJ4O3wxWCrUcc4w1PFSmNcPIAOdnZbNspMO44J3VCQwhkING6tOI3xs5DOaUpmk81GuUNN28UgPJi3OAhUrYK63W3eMXbP8JwdCbW7PhD7cl/CXFifOUnGZhZa17xaRwyXjthnstFB00mPpuKVr7OZE2ydE9PTXok5lZs8V8t9aTgUCqHWXjbFBR5DlyXn319S1spq1Gu+SVYYOrL2lL9ZMPmHTrnOTMp/vK2NWb/OyC0ft6hUGXviWz9XPjr/Onvi7nn+qtnS5FVAkf/okiFxvPVpmdjD06/TT/tVB6hvBv2pegzAc+EyNaIlRBTLgEIfDf4uugHDV5pxhPL02/jNHA4kerAreMJbkfaWML88gpwho4+j8ghgrolJDHmMkSeXnhxAC2UczyVZPeb4EaW9nsGIHRSI8uucMCmoP6UktFoz5nL0zZtPoJV+Zwy9qRY013pds/Y8Iqpewor04EPwVr6WiAmRBvdACIBzG2/L2BZl2PRAKLzuDhkR1oST0WvRyzT+CI9EzUyugp2m7Syl2NJalhpgEgX1PtOAgTfXGuyxjzc/HIX3/Ck2FxlM9rxom0K5dmnzuU55m7xVCXo47dnuqkWy3iqf6DoA3BcbrWdYDhNNLL47D6BQ4e8l0DXpQZBkQG0+4TkXEzvUjVQi72cCu3KzpxYyPqRP+gKrDD7947gwEZpnbGC1ZjUqcJb+Hc1oozeKTekiwPHyNOfAmN/956bs7iE00r+3laFtYcTdd7khK+8GxQEQ5viNEcTewNhbpIwXOlMy X-MS-TrafficTypeDiagnostic: VE1PR03MB6126:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: cQ8gxSSpx9M+++2cKEkaWnCWY0rJVHwWK7SrObIKkybyRwJmStcc7wWY4VQB5WnkKXi/5W2E+MRyPZeLbMWlWNfKaxge90nElCKfnZWANLiVShUYS/PMi3c742jRlOE+MFErrIcOQcetIXprSAsOEJ8TQpiv/65kYF4IkHCYazdf6Lg6gQlePlyy1eT1I82lwTB53w504zAC7TYjFqOsQ/j8VM5s+e1tUchilF+X8oGE0d43NkyXuM+LZ4J7Zeq9ElYZ09dg23YVXI6OvDN+StVoS5w4PkEqQeSbVe1oMV+T4CF5tg0nlRFtzoefjvv6B7Lfq+opVvNYkjDthDx0kIQSE24fY2f+Swtt4kGzw0VZZAeQmVRyUbtCcYHxMa0hyzIzQUxC7GEUiMMuJg2D5Cs6mWMRseIX/lbGRWEHftEZXs6AUOqjgJWgGIvXKMtmOGpt3dK8wlUBexIZ8p7s7mr/wDkUXJ4y3DhapzHACuZMkYOvvDD/YLaJKVLI4RaETqck3CD2zNVb3wdU6iMo162nkm030HKYGQNSkX5gQpCGDlDo5EOqJwoBIGawmTvqmf+Kv7+ZYW5trYIvrjMfqQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: BcAduOsEoCpXmEjiG6YA/6M159PuuYFw1iBZHVeLjJfq6iyg5jTsWRVRAWtarhg0wvmi0wu1iZ8N+qhPNvgsioZskBm1SgBpNGKJS3jYoqid3g+/3iRv07L5Si5DjMEMFpSt42qB4H+zJ0lnSWzMZOqgkP8MO6qbaCyJ5Ny492AgkJouIBXc5fZimJqPY6HCcuiAo5QJDjGOJBRppK/uPdj4pl64RXi1vtXHLMj4TIuzfJvX2L0KV23NXTCuKJGQNtECysyWZSpQdIOwD89bc+X1vJsfEq+AdPiWpx0rMW3boUK/2RxJOYhOfoqj8wyaKrsG1QYVbV9aB0qEOezHy1SDZYPeYce+RBfoPT6ZA5KIsd4pY7aDgYucmPSUeQEzx/bXX1BGqxd7KYsE3ZQDCbVcWHjbl1UD64CEeHdefNzf48MpqvqAjvrf///i3WRqkd4guwBkv42QS8+lPg/r+XBJCl0p5lX29X/hCM64MLYEO11fbLi2WeWeprGE4NYwnhJdK6jzJmXlq3QbDj6r8NswuXRD1h9DqOrYTipjKextw3htSnRjbmWSJ1Pv9aVbuZPENjosJzpfUTF7x0yguV3rfrhsv98pNsFSQnNIvRTbdxYuUTrR98ugI6Y1gFsWTR+0lMKr3gHHRS0xFuMrfC6lYPbA0wWRNglK8C93TbaqpskvTzpqaA5pmZ7KmjaVpENoT66ROynppanDfP+uwjj5gmM9Q+CxASmhlbLJB+E1yfLbZ2HY1KiDEBYZB7KeVblrC+OAJn7FHYeDPf2BakAoVxUP+MKDcDHYkjdGNKqjQQY2GegCOOabPrQynQXvFp07rG1AXYtLJ09mh3oFxm67Hwr3kBwmwaBu8K6ptjpb3sE6KByLnQAjvekmQQalsFTXPwqMZKQlES7O6MSPdQhkBaFb8rs8aq121v6doEGYyoqfNRke16TSByYEGgDf6vXDfm/dI6u8BUVYmGhNTA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3e773956-f6e6-49e1-13e8-08d9d94482d3 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:04:12.8165 (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: VE1PR03MB6126 Subject: [FFmpeg-devel] [PATCH 02/25] avformat/matroskaenc: Don't open BlockGroup twice 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: JmXde3oUKLO1 This would happen in case non-WebVTT-subtitles had BlockAdditional or DiscardPadding side-data. Given that these are not accounted for in the length of the outer BlockGroup (which is a quite sharp upper bound) it is possible for the outer BlockGroup to use an insufficient number of bytes which leads to an assert in end_ebml_master(). Fix this by not opening a second BlockGroup inside an already opened BlockGroup. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 1dde12a7d9..81194fd28d 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2095,6 +2095,7 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, int64_t discard_padding = 0; unsigned track_number = track->track_num; ebml_master block_group, block_additions, block_more; + int blockgroup_already_opened = blockid == MATROSKA_ID_BLOCK; ts += track->ts_offset; @@ -2141,7 +2142,7 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_SKIP_SAMPLES, &side_data_size); - if (side_data && side_data_size >= 10) { + if (side_data && side_data_size >= 10 && !blockgroup_already_opened) { discard_padding = av_rescale_q(AV_RL32(side_data + 4), (AVRational){1, par->sample_rate}, (AVRational){1, 1000000000}); @@ -2152,7 +2153,8 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, &side_data_size); if (side_data) { // Only the Codec-specific BlockMore (id == 1) is currently supported. - if (side_data_size < 8 || (additional_id = AV_RB64(side_data)) != 1) { + if (side_data_size < 8 || (additional_id = AV_RB64(side_data)) != 1 || + blockgroup_already_opened) { side_data_size = 0; } else { side_data += 8; From patchwork Sun Jan 16 23:03:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33614 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2272297iog; Sun, 16 Jan 2022 15:04:33 -0800 (PST) X-Google-Smtp-Source: ABdhPJwxmsxNPXmE5BxrtLUvc9WDVICfjlQm672YWAivSMHe60VdJjAhRncUdR4rkGwh6o/xowWK X-Received: by 2002:aa7:db8d:: with SMTP id u13mr18215765edt.111.1642374272977; Sun, 16 Jan 2022 15:04:32 -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 rv24si6241976ejb.190.2022.01.16.15.04.32; Sun, 16 Jan 2022 15:04:32 -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=i5fQyNAK; 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 CF0EB68AEA3; Mon, 17 Jan 2022 01:04:26 +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-oln040092073077.outbound.protection.outlook.com [40.92.73.77]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 18A8768AE46 for ; Mon, 17 Jan 2022 01:04:20 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DEimdZvcM0SeKVHNSBRvqaexuhxXSmjcZLyJ3fPS90kDUIchAcl7eWkdzSCBP2zgbk8VM2Ib9wos/Ru8hq4WKr1us0AQ1K7z0nBl6DBc+lSc3hNAU9HhixW21fz3UmU4RlNbkchBvP7x+z+BJsqMzgOqHzpG11Mpzgmfp0QmsINKUYldnpcHtC0X616ebRyhXyE4mICPreBrNpMXAx+lO6XOGEDb0mccvWVqe8tbnR46f+OMa4eCweoVj6Z30mJaeXofGnPBRBK0oQJuiVP81PSHE0n7NebE3IqDyVMDrj5c37JZKEWxjJXuvKkrq51MVgazIGqBMKmYwBNlMLCMMA== 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=nwRJoSNOmwHkYqFthhBpxXEfAgOfQGGC8fwiD+V3G7Y=; b=IeVr/Bk1CXe1RU0VrtsTWRbr4rm+CMtq6bx00ybLpSGC7NMZgGqr/v8spJ0i3MUO7xP5TDynU5n4oe9kYJDAySzZryy/NJTF/C4z42aVQmESS2FUpEBW9fFNZspkQODYqiXQu9ePbW+wl4b8NcNAlrIol8bxNI7odt+Wmy5KA7QOSof/Hz3caHz0alQPNRW8cn11JGx0OaybDGkBs+d8mbpdOc+1selCoBqgkhuWTYQgvv9pxbr3Viqf4m37FD7zgXmAiNhyhXUNtghcV2T0vd1ZQmFRMnBrtgB8tzFcpY95wcByF9OQz1fpTVJBvGivjgODQzjOLlJk/ezC1HzJNw== 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=nwRJoSNOmwHkYqFthhBpxXEfAgOfQGGC8fwiD+V3G7Y=; b=i5fQyNAK2gEVsm0aU3FTTJ/AHYPX6UHTbOo0KEMz5jD8jawGRfPvnXlHaycYZtoW5uizS1ZArni271Zi8zDYFjEmbWNglBEzOvNKuBLwgfkDBneLpGArW91EXZENFujfJQ+gDdXKuP9NZs3Qjv2aY+RekUYJVBRgxvNYJ6WGNSQmjD5wtOgQJuL3TyabySolIjYwweJ8W3d173pipj+TVXyXiFljCTexD21ZJGldz/8wThXDghOlAvKWeBDf0aW5JFmfgx1Fa0JRP1KYwMqUeehRe8Sxuobtsn96iOCf315MX28AOdMLYK1BGpyAPDhNnQIlnBRkGp4B4Kgod2F9fA== 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:04:18 +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:04:18 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:43 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [Gp9OEMDshydZYD7t3fLD6YLUst2AH6QY] 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-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5690d0f0-c1a2-4dbd-853b-08d9d944867c X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPnsHYHPXpWD+nggV2vCdc9I08W4RIAiJorJg6k8FmO4IaNNf4rjYYgsR7fHtiOiFjEo8ccv0Hq+pl2is44ouVM+tFCU44r8jH+6hMy/FNQp8rjSumEpg1B/MGSrpszopZPrrMDzaf617hvesPQAhX1S4HpY6CSi1u/9NDmn0/r4TaohwFt5euX3zePPSuaqFu5ZAy3NBpHCnmPIZJfT0V9Diws16D91T4+Uk3XFJvO1SLEkMrev5ggXG7l//f0NzAjDa1xFB/yvk1JzTrlxqqrnC7DG9+AEZq+BWtYXjYNDt9QERTVVGNURuaRWpRTbpOf3ew3p77ATLE3VzFw65e0PQ9KExnx8sjfeV7U3+k/jYudJm8SEypeHiBVLgC93/y4VcEPD52kWk/1yUNNypN3FsgovVMgvmesRCOZaXUj3Xg6M06+lY1OGAA466HyPdkta8r+q4v5/XsTERMkIkH3SpEm0YPaltNHdZo93S4XP+2cGOt4/w/k6amuDvDKQzXx0N+JYAkCc6r5LxaPphe0ZCSQbswzBpoWskTH+cywpxSO5XKO0GfX4cLR5MZOpkdoILxEGmzZa8Hscd2ji/nYTvilrIpXgIg+DgAn3VL1sJm3916DKoKpSc/T/hlnSQutoho85nUU0DrMk3y+iKOrnbyztmuXa/O9vRIS/wCwS5bER55kW3JCbMwhd4Rom4U7FBCHI4g1K+Uu8PfXQHC2pb393rrzVGILsCbx2qA7RL/Y= X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1JIVWgMEfH9mvX7MQ7B9pxbFjjq/pQ71LApXraZN3zMPmmyeJWS3Ap4dOpc2WYk9H/YvZtkimf2piI6O9Jcmh3tA03FvJnQejqdKaI6azB1A4rcB0klelcQHULkhOjricY9rzgE2V0Q8GRAz3n4yn8iRVL9vVs3bAtUwFxbztMjJbSv6pVunziGTQFcYGcd+VRsrjuD26NphcYwTPVDUN9G8H5ooAlBaQFolJN+N4TUmbLJzlYdaygwTzRmkPjI8jKNd97s25r3hoyYxv/x9hUa2zKU59KXGzk1GN/79ci+QswyHCN8Zqqd/Y/17szAmg4x9yyJfigZfseubQimNdy9cT2VzTeqs0WUXDBICTWuy0yP5LDEQBmgHiWs5vLfSwa0Kmqu+dGrvA/uhHyo4M69zR/e/Xa1ht160tgytw41A1TYv0yaaQ+vU44ArrTQK3zth86HIF3SfT0L2FszrfRioNi46CUh/GPLQf9Z+52Q2sU3uHixgpRdS53rBEIUHfanI/hbviyNzBTmWLymDdvXw51ZsLx2QB1iiTyTbHz1+BhUdj250+GUkhVi9J8oL0pBvBHrOS7Lb84dYTtTWwQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: V4NTKw+ZjWNF7W3VZ+s2NTR3A60FpxYsFcUXR5FwZ0NSkWvwFFwYHY9xHIdpPpKCuj6JJYTJiX1R+6g7iAcwYZgStFKE9ljqnLO0ECD6xqbgRQwfd2urWo/n1aL6Rs2Vt4tNQ+5zxB/VWwQVyG9/kYP7KozYWZPBKHW78x2kuewqH5JftIBv/gKAaaFch8oX3JHV5MQAEoPP3s0Vg++QCChPiWNvbOqzLatvy8WTygWcgSSge2Sett4P0c+njL8cqDlTF8d4qKOyvqDwxlWLT0/VGE55NJdJRCeQ9dueTyfDnSdQSWPSsct7Fas+ZwTVYi5m7CfdQXlj1y93lbD1S6u1/4+ce4MwAA7qlDDf7K8lB9N6auPcYaRma4Bko9XB9qbxPPboGggtjZCsYYQXb1usMh7FUrWffuYDi7MX3exBcO8djlNiBc4tjSrmWWlF14KzWFK8xe7h1nMR8xgwyYDn+hyMp8Ja4W0hMOyn4h0pU4Rluyl0pczSeSF+p2jJubSkyo2gNDimrxsYQXqr26WILcUQYkTwnCi5+y7C+Y4ErVWSWLSw97wnOxXoi0JMOzNuS8ZOlyOTR6iM2XrMuhpESCKZzj9B+Gy6NazRi2VmvsFMMCJgbc3TD3mQljtLGpzrUW24B4HeXYRsmgciomv4kGdMJK9y7bmqlGVEYGZDNRvok42mfVRyLjadLjthnOnHXunIkE2O3T2BJZXbDuSkHYs41KjcJipPVNVj+EXiKERa5urnlY4/FjtacuxsZqnmpqpfBDxW/K5aaom5T9D6eR9/rKRuxOoTh6P4egGjWiZ/q7OdmMu73jgRH6oR7UGS9ZeZ+zI0rv4SeHEVHJWskvUiwfKIjXiFIsI7A8bZYnB4eDHqdy8vY9WEQpyVObXsrhTljZb5/LWBEQUid5Rxt4OimCSn8fOJL7Qm4Z7jK9QpbmO6IPr5+YzLWNsopRKlplkjQZ0BZPwVSK696w== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5690d0f0-c1a2-4dbd-853b-08d9d944867c 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:04:18.8977 (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 03/25] avformat/matroskaenc: Add API to write Masters with minimal length field 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: 1jzvxdR2khSI This muxer currently uses two ways to ensure that no bytes are wasted by writing unnecessary long EBML length fields for Master elements and the (Simple)Block element (all the other elements are fine as one either already has the right length or getting the actual length is easy and necessary anyway): Either use an upper bound that is good enough in case one is available or write the data into a dynamic buffer first to get the length; the former approach is impossible in lots of cases, whereas the latter incurs allocations and memcpying. It is therefore unfeasible to use the latter to e.g. This patch adds a third alternative to complement the former two: It consists of an EbmlWriter that one can add EBML elements to that can be written later by calling ebml_writer_write(); the latter function first traverses the written elements recursively and calculates the length of each element; then a second pass is performed in which all the elements are written directly (without any seeks). This new API also performs checks for overlong elements; this is in contrast to put_ebml_string() which simply performs a size_t->int conversion even for strings originating from the user. The new API is designed to have very low overhead: It is designed to use a stack array and performs no allocations; this also comes at a price: Right now, it can only be used in contexts in which there is a compile-time upper bound for the number of elements. It is also incompatible with storing the offset of an element in order to update this field later. Furthermore, it puts the onus of memory management (i.e. ensuring that pointers stay valid) on the user. These restrictions might be overcome in the future. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 248 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 81194fd28d..4ec2074d2c 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -61,6 +61,12 @@ * Info, Tracks, Chapters, Attachments, Tags (potentially twice) and Cues */ #define MAX_SEEKHEAD_ENTRIES 7 +/* Largest known-length EBML length */ +#define MAX_EBML_LENGTH ((1ULL << 56) - 2) +/* The dynamic buffer API we rely upon has a limit of INT_MAX; + * and so has avio_write(). */ +#define MAX_SUPPORTED_EBML_LENGTH FFMIN(MAX_EBML_LENGTH, INT_MAX) + #define MODE_MATROSKAv2 0x01 #define MODE_WEBM 0x02 @@ -85,6 +91,48 @@ typedef struct ebml_stored_master { int64_t pos; } ebml_stored_master; +typedef enum EbmlType { + EBML_UINT, + EBML_SINT, + EBML_FLOAT, + EBML_UID, + EBML_STR, + EBML_UTF8 = EBML_STR, + EBML_BIN, + EBML_MASTER, +} EbmlType; + +typedef struct EbmlMaster { + int nb_elements; ///< -1 if not finished + int containing_master; ///< -1 if no parent exists +} EbmlMaster; + +typedef struct EbmlElement { + uint32_t id; + EbmlType type; + unsigned length_size; + uint64_t size; ///< excluding id and length field + union { + uint64_t uint; + int64_t sint; + double f; + const char *str; + const uint8_t *bin; + EbmlMaster master; + } priv; +} EbmlElement; + +typedef struct EbmlWriter { + unsigned nb_elements; + int current_master_element; + EbmlElement *elements; +} EbmlWriter; + +#define EBML_WRITER(max_nb_elems) \ + EbmlElement elements[max_nb_elems]; \ + EbmlWriter writer = (EbmlWriter){ .elements = elements, \ + .current_master_element = -1 } + typedef struct mkv_seekhead_entry { uint32_t elementid; uint64_t segmentpos; @@ -362,6 +410,206 @@ static void end_ebml_master(AVIOContext *pb, ebml_master master) avio_seek(pb, pos, SEEK_SET); } +static EbmlElement *ebml_writer_add(EbmlWriter *writer, + uint32_t id, EbmlType type) +{ + writer->elements[writer->nb_elements].id = id; + writer->elements[writer->nb_elements].type = type; + return &writer->elements[writer->nb_elements++]; +} + +static void ebml_writer_open_master(EbmlWriter *writer, uint32_t id) +{ + EbmlMaster *master = &ebml_writer_add(writer, id, EBML_MASTER)->priv.master; + + master->containing_master = writer->current_master_element; + master->nb_elements = -1; + + writer->current_master_element = writer->nb_elements - 1; +} + +static void ebml_writer_add_string(EbmlWriter *writer, uint32_t id, + const char *str) +{ + EbmlElement *elem = ebml_writer_add(writer, id, EBML_STR); + + elem->priv.str = str; +} + +static void ebml_writer_add_bin(EbmlWriter *writer, uint32_t id, + const uint8_t *data, size_t size) +{ + EbmlElement *elem = ebml_writer_add(writer, id, EBML_BIN); + +#if SIZE_MAX > UINT64_MAX + size = FFMIN(size, UINT64_MAX); +#endif + elem->size = size; + elem->priv.bin = data; +} + +static void ebml_writer_add_float(EbmlWriter *writer, uint32_t id, + double val) +{ + EbmlElement *elem = ebml_writer_add(writer, id, EBML_FLOAT); + + elem->priv.f = val; +} + +static void ebml_writer_add_uid(EbmlWriter *writer, uint32_t id, + uint64_t val) +{ + EbmlElement *elem = ebml_writer_add(writer, id, EBML_UID); + elem->priv.uint = val; +} + +static int ebml_writer_str_len(EbmlElement *elem) +{ + size_t len = strlen(elem->priv.str); +#if SIZE_MAX > UINT64_MAX + len = FF_MIN(len, UINT64_MAX); +#endif + elem->size = len; + return 0; +} + +static av_const int uint_size(uint64_t val) +{ + int bytes = 0; + do { + bytes++; + } while (val >>= 8); + return bytes; +} + +static int ebml_writer_uint_len(EbmlElement *elem) +{ + elem->size = uint_size(elem->priv.uint); + return 0; +} + +static av_const int sint_size(int64_t val) +{ + uint64_t tmp = 2 * (uint64_t)(val < 0 ? val^-1 : val); + return uint_size(tmp); +} + +static int ebml_writer_sint_len(EbmlElement *elem) +{ + elem->size = sint_size(elem->priv.sint); + return 0; +} + +static int ebml_writer_elem_len(EbmlWriter *writer, EbmlElement *elem, + int remaining_elems); + +static int ebml_writer_master_len(EbmlWriter *writer, EbmlElement *elem, + int remaining_elems) +{ + int nb_elems = elem->priv.master.nb_elements >= 0 ? elem->priv.master.nb_elements : remaining_elems - 1; + EbmlElement *const master = elem; + uint64_t total_size = 0; + + master->priv.master.nb_elements = nb_elems; + for (; elem++, nb_elems > 0;) { + int ret = ebml_writer_elem_len(writer, elem, nb_elems); + if (ret < 0) + return ret; + av_assert2(ret < nb_elems); + /* No overflow is possible here, as both total_size and elem->size + * are bounded by MAX_SUPPORTED_EBML_LENGTH. */ + total_size += ebml_id_size(elem->id) + elem->length_size + elem->size; + if (total_size > MAX_SUPPORTED_EBML_LENGTH) + return AVERROR(ERANGE); + nb_elems--; /* consume elem */ + elem += ret, nb_elems -= ret; /* and elem's children */ + } + master->size = total_size; + + return master->priv.master.nb_elements; +} + +static int ebml_writer_elem_len(EbmlWriter *writer, EbmlElement *elem, + int remaining_elems) +{ + int ret = 0; + + switch (elem->type) { + case EBML_FLOAT: + case EBML_UID: + elem->size = 8; + break; + case EBML_STR: + ret = ebml_writer_str_len(elem); + break; + case EBML_UINT: + ret = ebml_writer_uint_len(elem); + break; + case EBML_SINT: + ret = ebml_writer_sint_len(elem); + break; + case EBML_MASTER: + ret = ebml_writer_master_len(writer, elem, remaining_elems); + break; + } + if (ret < 0) + return ret; + if (elem->size > MAX_SUPPORTED_EBML_LENGTH) + return AVERROR(ERANGE); + elem->length_size = ebml_length_size(elem->size); + return ret; /* number of elements consumed excluding elem itself */ +} + +static int ebml_writer_elem_write(const EbmlElement *elem, AVIOContext *pb) +{ + put_ebml_id(pb, elem->id); + put_ebml_num(pb, elem->size, elem->length_size); + switch (elem->type) { + case EBML_UID: + case EBML_FLOAT: { + uint64_t val = elem->type == EBML_UID ? elem->priv.uint + : av_double2int(elem->priv.f); + avio_wb64(pb, val); + break; + } + case EBML_UINT: + case EBML_SINT: { + uint64_t val = elem->type == EBML_UINT ? elem->priv.uint + : elem->priv.sint; + for (int i = elem->size; --i >= 0; ) + avio_w8(pb, (uint8_t)(val >> i * 8)); + break; + } + case EBML_STR: + case EBML_BIN: { + const uint8_t *data = elem->type == EBML_BIN ? elem->priv.bin + : (const uint8_t*)elem->priv.str; + avio_write(pb, data, elem->size); + break; + } + case EBML_MASTER: { + int nb_elems = elem->priv.master.nb_elements; + + elem++; + for (int i = 0; i < nb_elems; i++) + i += ebml_writer_elem_write(elem + i, pb); + + return nb_elems; + } + } + return 0; +} + +static int ebml_writer_write(EbmlWriter *writer, AVIOContext *pb) +{ + int ret = ebml_writer_elem_len(writer, writer->elements, + writer->nb_elements); + if (ret < 0) + return ret; + ebml_writer_elem_write(writer->elements, pb); + return 0; +} + static void mkv_add_seekhead_entry(MatroskaMuxContext *mkv, uint32_t elementid, uint64_t filepos) { From patchwork Sun Jan 16 23:03:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33615 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2272392iog; Sun, 16 Jan 2022 15:04:43 -0800 (PST) X-Google-Smtp-Source: ABdhPJxy/q8jotG110bZoqG+9rlkY8v3rEsiZsa8cXNw88aKSZ7YFc0w8K6q1Q0UEi3pkg4ThLVw X-Received: by 2002:a17:907:6d1b:: with SMTP id sa27mr14909708ejc.182.1642374282916; Sun, 16 Jan 2022 15:04:42 -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 e16si3181290edz.161.2022.01.16.15.04.42; Sun, 16 Jan 2022 15:04:42 -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="Qzlpo/Q2"; 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 DCAC968AEBD; Mon, 17 Jan 2022 01:04:33 +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-oln040092073048.outbound.protection.outlook.com [40.92.73.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2B3B668AE74 for ; Mon, 17 Jan 2022 01:04:27 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RHDvieCOTwG4Z7MT597bWqKGXyP/xAaM5tg96IwiHa6hBi2AZmbZ8ZG3IYxaBpH8ZAQAw0ynqC1LOw0rUraTYK2OBrIO5oSU9Hz5zZAF7XUdHRIQcCHQl2N3UebkrvzGZbnWAfin6TZjr5qxZeDWRJ5F3jG7oLjvsxqNGLtuq4ggDoDyriVMq2ASzvVmReL9m/XYJTRu8qyPOuYEHYQEeDZ1GOSDxi7kG9cyss417QKBezXCfuKV42cjvQRHxyKgKwteTq9DwiHljr2icMhVW0Cvav5wouMga4ODJyWVKKd1urgijb/MtOmSPv+8MgOAtkI/Xz2/DFpVRuTwCCmyOw== 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=1a9RtAnMLniH69kugHEao4/CFh1uW83A4yj+pJNV7f0=; b=nWBaNEFPOagJ0v6RoIUjBPyq0ZSd7ZE7Fp44Kng/GMvaxWj3YBUPxt7kTRxUeZ+DE/GkWDUKxiEJLakbsh/c7HKpmCacDVK++GNEUPSDp5mCz9PCstNV2Jpm8uq8idFrmS1lC3Go3tceN3Etydo5cDIX/8wg/oyPBJZg409ELDPboOlSoNBfWo2qlIuonlwVKQCJE2B23sQnIy3NcA+FVnaqdq0v98jnGhauPO+IPCm2ewdEIsFoliQTEKffK7QuUMyRWf2OCCuAmXZByVT6FwPOHxImKehYI4odQasGXkXm2k2tm7SQ+h/pbN9k5QQe5Q9/KV0RceKto4jMHQCufg== 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=1a9RtAnMLniH69kugHEao4/CFh1uW83A4yj+pJNV7f0=; b=Qzlpo/Q2iKSNLeZWYrn333G7EsuwVfNLyCua6ivywZqk3fORv4ysZ7busXU2jC6QG9kOEqV5LhSz/fDNztfwL9mYooIFbrsHGK9Qp16wHTOOGv4lp1LFyMsImmf2FLEzrxY7i64lQfPRqwP9z/k1PQfr6eDeWK9KMSFsRfALII5Mynl02K25+JBmvz7zo7pXQwZQVndtHuOXI3VHogOT7vJyk49oOO5aXrYmjT/fuQZCo/W6NZz2VCfuuYs4aMXqWOqfm/Ai1lAcFi2s+MDXV/jA5Z393cjsCpyPiRVAbW7tGa8NeKfU85keZgmpGuHaMKBfTC1aaF0Id79kbSPWaQ== 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:04:25 +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:04:25 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:44 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [x2rWx2btSO9kdHkIwgO3Ff/UPf8YKKXH] 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-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7b75eb19-54ed-492f-acce-08d9d9448a6f X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEuZvKHt/RRJ4O3wxWCrUcc4nfNgvZzzzWJSNaK3vnCJ+GHOmJ9UHjMqI/8RC5FexaARReoMdw19lJEmk4F5NpnRGHsqSmlXYCZoKpwdfRM74yMoqNBwcYwO1YZIBtWjYtSoBZsiLAPUQhX9rODPMHLNHYjv+yzypecqyidH8yF7UbjyHLkwpAMSWrKHUZy86sohUyDxi3gMTNt39N8tw5VivkZ6JbkgJkdJ2RZKZ21+Vz3uWwNMcdVeHUDD4iCaapopbd8nAUPJE0uJYuVcvI1PipBfzLr8BjJNZ/1FB+UrV36o60wdA1a8oV9jmxKnSvUnJiGP2aFM5QzjqNghYHLNSwg3nnIeykZ/4LfmkNw76NsLiAahWaXo7j6s+sjsayrGbiLBSnoCoD8PsyOD3Xa7sCb4Q1jS/ynWibd5S8oRC7gXgSB1+6PBtWN0xNB5wfEB2w4wl2MKEH4mtRDYucJMDUajsvki/teX25IthW30cnFqnrE1ZVbecqJ8JlAWKM+yv/FWkRlbSq8z+0IS5Hx5FJdKaYjjrFp+eFytDckpIVpigivok0M6zlaNV0DUyQGjKNTHf9EIAWvGIqpiNgcvnXlUbFBIIK4Y7zVj7+gJWbsUAtrC1ReGwLbvMYHCJxYiqPEzpX/a1SZSkBOf2cG3SEU65q1/9GffNmIb/h4qBXvDmaJY4TsfUu4toOP5cs7Ewp6PcI8YVW3BOrWtks5OMKNwit+eqmuCGfWw8SJBqDbV0hQMkcHm1Ked/OCsaNzaOYTNdiBWytZh4FOg8GJK X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 92KwqhnWCyXFiKRGcL2mGjo4ZKg+38wikZvHjQyJUrlfy+/zjQnvMJumogb6ljjVmwvRsPcTTRHoUuB/oe5pqzTvdqUWkcsO0o/gubeZPcdDOubJHBfJujupRYxhEhjBI1kvT61NLipLyTkdgtov3TfhzS9reVrVlNqyAJzadU1VDTygRThZ6yNRGK8nyDBOYq2WMQNiWYB98MggKGba1CNUIyEXHdchC7MgH67/Gu0TMqxmgCDz3Le4fOzEQrtM4yWH+2oY59c47n9pCYlOmmzeqcSe+vpCG0YhXbP1mTOI3v0HxYZJChPIIv/NWPg19TaeSvNxJ74Ln748orCvlO3Ug9ie14wJshgYyp5ANFCX25aj+eDtbhHtYmRLAPzk55UEs221si1C9sjqPt3Ec+NrpiJIcDrN3MFcyqvNFLClpvMDFHSQpYiwJkyq9Mnm3i9husI9WYn/XlY3Crjo0Kmf2filkTGIGZjWbdzAdVLyT+3Th3Pyus9P2UVYb3+/XBVbfZ/NLdnAuxdAnkLLQjpewwz72JboD7hQaXuGFgQ6TFFn1ZIL63KTf3r20ePJHI3R0Tv08R4JZ2vHjclBLA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ltmHIPgBuDYTTRTajFurzGtCKm/fPy2Vp2CvOFAvBOqyzixob10Tr4eKUgH3+NdI+maTRhn4J9wpyyeECahYXnRZOBSV96i2nS/pynaQEPd1bJt4Z5wu2pP9HtaLeYo2R1m7kJW7oCXYrIMBn7rHI6SUEkB3GZNpsAli3e3MUF8uGau1zt+xK9YsOG+k+iZyfJnqlwBpJsAUMA7bc9gDboViUhBTy8BvBDxDJsX32vu1C9yi3p1i61kSWhfR5N4g5hRI6xNCbu1ix7jZUprc1d1ceHMg4FfizO4qWnZlesww+pAzkOa12vZo1cuYwOzQN8k8/lQVVETs+ZHFMjlbEhsxUeRJgCMO1b4y5IswNguzAIvNXO7RRGHjDOwB8jSvO6RFa8dSvC3eQvr88wZRLevP9qa3DRMBCyN5103qc2igcVJKSonhhd1FznBPkp2zyiXecUyykN1iM4IJTAAcdj7IK8z9nRp/Srr+qNuI+16egzcfGP4N/Yoyc46iAblw01QFJQNgGwoy59SZ1YVA3RbW2tV66nz0QppV4fO6Jm6pDaAlGK0/4HWAMuZ8dMCGba9NHUyK5vAwueFX+ukoAdAQ59u9/pQZu75iiqL5UvEFT3KlzB2JxhAlVArHX3zJCVi31Y1rtVZIQienbRocICxsDV6bVffpaGmvaIRN0eEnnAUjAmM48Zmp4dubAdqQwxBAtn+0GvMdhBnfFRliaAGIEtFqqTRycUh9Ad16XR6laFsNnDP2yP8zmSyvxW9/bQwcVV9SDkLKDXv9UxsCfqJn786k9AhfFbeb8+JwH0qkP6Y4MQWrVvvlCfcTIKFEBYBKeFt9u820LB5lVk+mf6Wydri1p++ECcoHH6acBgz0mXYhJK+eBI3kcJdkxE5GqWXbNcI7S9QixIxlTDCaxhxXpj/plCKARcGqRNGO52+lJFPhaZ7TfuYuGtHzTTEsDFxJcWNrBxMgyqqVKVG38Q== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7b75eb19-54ed-492f-acce-08d9d9448a6f 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:04:25.4932 (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 04/25] avformat/matroskaenc: Don't waste bytes on SimpleTags length fields 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: TyuYLJOSWrd2 Also check the (user-provided) tags for being overlong; the earlier code had an implicit unchecked size_t->int conversion. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 15 ++++--- tests/ref/fate/matroska-dovi-write-config7 | 4 +- tests/ref/fate/matroska-flac-extradata-update | 4 +- tests/ref/fate/matroska-h264-remux | 4 +- .../fate/matroska-mastering-display-metadata | 4 +- tests/ref/fate/matroska-move-cues-to-front | 4 +- tests/ref/fate/matroska-qt-mode | 4 +- tests/ref/fate/matroska-vp8-alpha-remux | 4 +- tests/ref/fate/matroska-zero-length-block | 4 +- tests/ref/fate/rgb24-mkv | 4 +- tests/ref/fate/webm-dash-chapters | 4 +- tests/ref/lavf/mka | 4 +- tests/ref/lavf/mkv | 4 +- tests/ref/lavf/mkv_attachment | 4 +- tests/ref/seek/lavf-mkv | 44 +++++++++---------- 15 files changed, 56 insertions(+), 55 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 4ec2074d2c..154de25f59 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -1753,10 +1753,11 @@ static int mkv_write_tracks(AVFormatContext *s) static int mkv_write_simpletag(AVIOContext *pb, const AVDictionaryEntry *t) { + EBML_WRITER(4); uint8_t *key = av_strdup(t->key); uint8_t *p = key; const uint8_t *lang = NULL; - ebml_master tag; + int ret; if (!key) return AVERROR(ENOMEM); @@ -1774,15 +1775,15 @@ static int mkv_write_simpletag(AVIOContext *pb, const AVDictionaryEntry *t) p++; } - tag = start_ebml_master(pb, MATROSKA_ID_SIMPLETAG, 0); - put_ebml_string(pb, MATROSKA_ID_TAGNAME, key); + ebml_writer_open_master(&writer, MATROSKA_ID_SIMPLETAG); + ebml_writer_add_string(&writer, MATROSKA_ID_TAGNAME, key); if (lang) - put_ebml_string(pb, MATROSKA_ID_TAGLANG, lang); - put_ebml_string(pb, MATROSKA_ID_TAGSTRING, t->value); - end_ebml_master(pb, tag); + ebml_writer_add_string(&writer, MATROSKA_ID_TAGLANG, lang); + ebml_writer_add_string(&writer, MATROSKA_ID_TAGSTRING, t->value); + ret = ebml_writer_write(&writer, pb); av_freep(&key); - return 0; + return ret; } static int mkv_write_tag_targets(MatroskaMuxContext *mkv, AVIOContext **pb, diff --git a/tests/ref/fate/matroska-dovi-write-config7 b/tests/ref/fate/matroska-dovi-write-config7 index 1c1422c0e4..b652fe411d 100644 --- a/tests/ref/fate/matroska-dovi-write-config7 +++ b/tests/ref/fate/matroska-dovi-write-config7 @@ -1,5 +1,5 @@ -3fa1f47c5c3d22b5c33156ff14928d6c *tests/data/fate/matroska-dovi-write-config7.matroska -72758 tests/data/fate/matroska-dovi-write-config7.matroska +058e95f1effefe3842b6174bba2693fc *tests/data/fate/matroska-dovi-write-config7.matroska +72707 tests/data/fate/matroska-dovi-write-config7.matroska #extradata 0: 116, 0x2b8d1669 #extradata 1: 116, 0x2b8d1669 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-flac-extradata-update b/tests/ref/fate/matroska-flac-extradata-update index 1a8add7736..260d596904 100644 --- a/tests/ref/fate/matroska-flac-extradata-update +++ b/tests/ref/fate/matroska-flac-extradata-update @@ -1,5 +1,5 @@ -c2b76d47a9f0e9626a4999bd395cae08 *tests/data/fate/matroska-flac-extradata-update.matroska -2029 tests/data/fate/matroska-flac-extradata-update.matroska +56ff5763fd81ad3bc02c22402cd685e2 *tests/data/fate/matroska-flac-extradata-update.matroska +2008 tests/data/fate/matroska-flac-extradata-update.matroska #extradata 0: 34, 0x7acb09e7 #extradata 1: 34, 0x7acb09e7 #extradata 2: 34, 0x443402dd diff --git a/tests/ref/fate/matroska-h264-remux b/tests/ref/fate/matroska-h264-remux index b5ecebaf24..e55708ce37 100644 --- a/tests/ref/fate/matroska-h264-remux +++ b/tests/ref/fate/matroska-h264-remux @@ -1,5 +1,5 @@ -36fda8942bfed91fed04c5ba63dc8b1a *tests/data/fate/matroska-h264-remux.matroska -2036089 tests/data/fate/matroska-h264-remux.matroska +ae0ccd32cc0d3bfc1eaa15c7fc985dfb *tests/data/fate/matroska-h264-remux.matroska +2036075 tests/data/fate/matroska-h264-remux.matroska #tb 0: 1/25 #media_type 0: video #codec_id 0: rawvideo diff --git a/tests/ref/fate/matroska-mastering-display-metadata b/tests/ref/fate/matroska-mastering-display-metadata index 8f5d7b6a22..f13d60ff2f 100644 --- a/tests/ref/fate/matroska-mastering-display-metadata +++ b/tests/ref/fate/matroska-mastering-display-metadata @@ -1,5 +1,5 @@ -542ababe5c088ab925ee49373d8b8a85 *tests/data/fate/matroska-mastering-display-metadata.matroska -1669695 tests/data/fate/matroska-mastering-display-metadata.matroska +64403411e52d7ba9081ab5692e422737 *tests/data/fate/matroska-mastering-display-metadata.matroska +1669597 tests/data/fate/matroska-mastering-display-metadata.matroska #extradata 0: 4, 0x040901a3 #extradata 3: 200, 0x506463a8 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-move-cues-to-front b/tests/ref/fate/matroska-move-cues-to-front index 46effff53e..55a03b8c10 100644 --- a/tests/ref/fate/matroska-move-cues-to-front +++ b/tests/ref/fate/matroska-move-cues-to-front @@ -1,5 +1,5 @@ -ce15d8b7577933a057c413af505500df *tests/data/fate/matroska-move-cues-to-front.matroska -23210310 tests/data/fate/matroska-move-cues-to-front.matroska +62064edeb4a621fd0097f04c410c165c *tests/data/fate/matroska-move-cues-to-front.matroska +23210303 tests/data/fate/matroska-move-cues-to-front.matroska #tb 0: 1/1000 #media_type 0: audio #codec_id 0: pcm_s24be diff --git a/tests/ref/fate/matroska-qt-mode b/tests/ref/fate/matroska-qt-mode index 9dc115cc0d..770d9e7e91 100644 --- a/tests/ref/fate/matroska-qt-mode +++ b/tests/ref/fate/matroska-qt-mode @@ -1,5 +1,5 @@ -a741bd63da27d6b8ce3a21009267703d *tests/data/fate/matroska-qt-mode.matroska -1884278 tests/data/fate/matroska-qt-mode.matroska +1e525172caec2bf4e191a68c97bbbc51 *tests/data/fate/matroska-qt-mode.matroska +1884243 tests/data/fate/matroska-qt-mode.matroska #extradata 0: 90, 0x817d0185 #tb 0: 1/1000 #media_type 0: video diff --git a/tests/ref/fate/matroska-vp8-alpha-remux b/tests/ref/fate/matroska-vp8-alpha-remux index adb771df88..165c2404e7 100644 --- a/tests/ref/fate/matroska-vp8-alpha-remux +++ b/tests/ref/fate/matroska-vp8-alpha-remux @@ -1,5 +1,5 @@ -d06be833da8e8d9d00bf334e0dfe8a58 *tests/data/fate/matroska-vp8-alpha-remux.matroska -237192 tests/data/fate/matroska-vp8-alpha-remux.matroska +e3912762161bb6e7f9607c085b371676 *tests/data/fate/matroska-vp8-alpha-remux.matroska +237185 tests/data/fate/matroska-vp8-alpha-remux.matroska #tb 0: 1/1000 #media_type 0: video #codec_id 0: vp8 diff --git a/tests/ref/fate/matroska-zero-length-block b/tests/ref/fate/matroska-zero-length-block index e8c5decb39..924cec1e3f 100644 --- a/tests/ref/fate/matroska-zero-length-block +++ b/tests/ref/fate/matroska-zero-length-block @@ -1,5 +1,5 @@ -ba78b3e846d57002711bc481fa806717 *tests/data/fate/matroska-zero-length-block.matroska -643 tests/data/fate/matroska-zero-length-block.matroska +f37ba7e8a30eaa33c1fd0ef77447fb41 *tests/data/fate/matroska-zero-length-block.matroska +636 tests/data/fate/matroska-zero-length-block.matroska #tb 0: 1/1000 #media_type 0: subtitle #codec_id 0: subrip diff --git a/tests/ref/fate/rgb24-mkv b/tests/ref/fate/rgb24-mkv index 1ef70349b7..2630265ebc 100644 --- a/tests/ref/fate/rgb24-mkv +++ b/tests/ref/fate/rgb24-mkv @@ -1,5 +1,5 @@ -6244b8750d4155d3c9357bab26396ef9 *tests/data/fate/rgb24-mkv.matroska -58245 tests/data/fate/rgb24-mkv.matroska +2c7192d8b62c6a11e311a09ab3bef3b8 *tests/data/fate/rgb24-mkv.matroska +58224 tests/data/fate/rgb24-mkv.matroska #tb 0: 1/10 #media_type 0: video #codec_id 0: rawvideo diff --git a/tests/ref/fate/webm-dash-chapters b/tests/ref/fate/webm-dash-chapters index c04fc6a3ee..c2f87b2d7c 100644 --- a/tests/ref/fate/webm-dash-chapters +++ b/tests/ref/fate/webm-dash-chapters @@ -1,5 +1,5 @@ -c39ad75ef516d1d2e1332d960ad1057b *tests/data/fate/webm-dash-chapters.webm -111239 tests/data/fate/webm-dash-chapters.webm +d3a67db17fdca71b9f8cf57c341a031b *tests/data/fate/webm-dash-chapters.webm +111218 tests/data/fate/webm-dash-chapters.webm #extradata 0: 3469, 0xc6769ddc #tb 0: 1/1000 #media_type 0: audio diff --git a/tests/ref/lavf/mka b/tests/ref/lavf/mka index 9c0ec88637..5d4ab243c0 100644 --- a/tests/ref/lavf/mka +++ b/tests/ref/lavf/mka @@ -1,3 +1,3 @@ -52d2c70afe0f9ac510819f723b5ceb3b *tests/data/lavf/lavf.mka -43583 tests/data/lavf/lavf.mka +036f852ae7ae18cf38ddc99ea39032fb *tests/data/lavf/lavf.mka +43576 tests/data/lavf/lavf.mka tests/data/lavf/lavf.mka CRC=0x3a1da17e diff --git a/tests/ref/lavf/mkv b/tests/ref/lavf/mkv index 6e517efede..e737cdf6ac 100644 --- a/tests/ref/lavf/mkv +++ b/tests/ref/lavf/mkv @@ -1,3 +1,3 @@ -c1af29ab33c9477049672b62da221552 *tests/data/lavf/lavf.mkv -320438 tests/data/lavf/lavf.mkv +3e37e53471f20f2b7169afd75cba70d2 *tests/data/lavf/lavf.mkv +320424 tests/data/lavf/lavf.mkv tests/data/lavf/lavf.mkv CRC=0xec6c3c68 diff --git a/tests/ref/lavf/mkv_attachment b/tests/ref/lavf/mkv_attachment index 86ba4180cb..0149bf2010 100644 --- a/tests/ref/lavf/mkv_attachment +++ b/tests/ref/lavf/mkv_attachment @@ -1,3 +1,3 @@ -a669ae1a502ff0c487eee99753e7bef0 *tests/data/lavf/lavf.mkv_attachment -472593 tests/data/lavf/lavf.mkv_attachment +6a77b40186840d596bd584182ac3a283 *tests/data/lavf/lavf.mkv_attachment +472579 tests/data/lavf/lavf.mkv_attachment tests/data/lavf/lavf.mkv_attachment CRC=0xec6c3c68 diff --git a/tests/ref/seek/lavf-mkv b/tests/ref/seek/lavf-mkv index fc65b14cd0..37945246ab 100644 --- a/tests/ref/seek/lavf-mkv +++ b/tests/ref/seek/lavf-mkv @@ -1,48 +1,48 @@ -ret: 0 st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos: 686 size: 208 +ret: 0 st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos: 672 size: 208 ret: 0 st:-1 flags:0 ts:-1.000000 -ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 902 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 888 size: 27837 ret: 0 st:-1 flags:1 ts: 1.894167 -ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292318 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292304 size: 27834 ret: 0 st: 0 flags:0 ts: 0.788000 -ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292318 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292304 size: 27834 ret: 0 st: 0 flags:1 ts:-0.317000 -ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 902 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 888 size: 27837 ret:-1 st: 1 flags:0 ts: 2.577000 ret: 0 st: 1 flags:1 ts: 1.471000 -ret: 0 st: 1 flags:1 dts: 0.993000 pts: 0.993000 pos: 320159 size: 209 +ret: 0 st: 1 flags:1 dts: 0.993000 pts: 0.993000 pos: 320145 size: 209 ret: 0 st:-1 flags:0 ts: 0.365002 -ret: 0 st: 0 flags:1 dts: 0.491000 pts: 0.491000 pos: 146870 size: 27925 +ret: 0 st: 0 flags:1 dts: 0.491000 pts: 0.491000 pos: 146856 size: 27925 ret: 0 st:-1 flags:1 ts:-0.740831 -ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 902 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 888 size: 27837 ret:-1 st: 0 flags:0 ts: 2.153000 ret: 0 st: 0 flags:1 ts: 1.048000 -ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292318 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292304 size: 27834 ret: 0 st: 1 flags:0 ts:-0.058000 -ret: 0 st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos: 686 size: 208 +ret: 0 st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos: 672 size: 208 ret: 0 st: 1 flags:1 ts: 2.836000 -ret: 0 st: 1 flags:1 dts: 0.993000 pts: 0.993000 pos: 320159 size: 209 +ret: 0 st: 1 flags:1 dts: 0.993000 pts: 0.993000 pos: 320145 size: 209 ret:-1 st:-1 flags:0 ts: 1.730004 ret: 0 st:-1 flags:1 ts: 0.624171 -ret: 0 st: 0 flags:1 dts: 0.491000 pts: 0.491000 pos: 146870 size: 27925 +ret: 0 st: 0 flags:1 dts: 0.491000 pts: 0.491000 pos: 146856 size: 27925 ret: 0 st: 0 flags:0 ts:-0.482000 -ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 902 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 888 size: 27837 ret: 0 st: 0 flags:1 ts: 2.413000 -ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292318 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292304 size: 27834 ret:-1 st: 1 flags:0 ts: 1.307000 ret: 0 st: 1 flags:1 ts: 0.201000 -ret: 0 st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos: 686 size: 208 +ret: 0 st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos: 672 size: 208 ret: 0 st:-1 flags:0 ts:-0.904994 -ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 902 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 888 size: 27837 ret: 0 st:-1 flags:1 ts: 1.989173 -ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292318 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292304 size: 27834 ret: 0 st: 0 flags:0 ts: 0.883000 -ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292318 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292304 size: 27834 ret: 0 st: 0 flags:1 ts:-0.222000 -ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 902 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 888 size: 27837 ret:-1 st: 1 flags:0 ts: 2.672000 ret: 0 st: 1 flags:1 ts: 1.566000 -ret: 0 st: 1 flags:1 dts: 0.993000 pts: 0.993000 pos: 320159 size: 209 +ret: 0 st: 1 flags:1 dts: 0.993000 pts: 0.993000 pos: 320145 size: 209 ret: 0 st:-1 flags:0 ts: 0.460008 -ret: 0 st: 0 flags:1 dts: 0.491000 pts: 0.491000 pos: 146870 size: 27925 +ret: 0 st: 0 flags:1 dts: 0.491000 pts: 0.491000 pos: 146856 size: 27925 ret: 0 st:-1 flags:1 ts:-0.645825 -ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 902 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 888 size: 27837 From patchwork Sun Jan 16 23:03:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33617 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2272487iog; Sun, 16 Jan 2022 15:04:53 -0800 (PST) X-Google-Smtp-Source: ABdhPJy1Ip6XjI2VndzDVFaQcIQg0fsNi1mrRIn/3oCXyqw2zvzX6VJrQ4ab4joHV1r6Pm8Y7zii X-Received: by 2002:a17:907:a41e:: with SMTP id sg30mr14346367ejc.249.1642374293035; Sun, 16 Jan 2022 15:04:53 -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 ds6si1036570ejc.375.2022.01.16.15.04.52; Sun, 16 Jan 2022 15:04:53 -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=TUYMo5BX; 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 B838868AEC7; Mon, 17 Jan 2022 01:04:43 +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-oln040092073090.outbound.protection.outlook.com [40.92.73.90]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3A2CB68807F for ; Mon, 17 Jan 2022 01:04:37 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nbdZkwHcfsRNjugAF73vwoJpFpiupoFBe/U0Uq8f5AUo7WJdzlmBgm9OzHZEwjPvc9y+chvQgUJ849al4Wc7jg3FstzgUPV210GGBYPVlY8IWr2dmnkOXDbVj9VIwr/DNvpwIGjQru1UlhIXJLYvdRDvkniudKAA6dKm58uD3OrATBjtePUhXqZ5XcWLNKRu+6VM/lUMHGTqo0a97KYbjsnf+iNL9NRLZ181ByXqq/kSPhkNSNw6/wP0WZnG1YJiHfNs4DoHVF15ntEKCux87q1GjqI2hEdNU+dTKo2E7uE/X9mgvOfFNRvLMTnAuTCXqVSnBYekFZNqTi52jXXqCg== 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=LC6NVNISpAUChC8i9FEbt1XRSKpv4rwS1mgNn+Hz3Cw=; b=FqHHvWNJbwv/cFz43K5GuWEFtRQ6EEgs2yJsMKdDaZT26gG1jUfnJa5tMi1t4Z+pgSWzBBy4donL6UUoeFXPzEmO8Q68ttEJyuLn4MPcHEH2arFuszrfleiw78rNt87ez57rSGNfjNj5XAAAY3GdWzVA639rEeXEVSdie6Q0lUqV+vfaYFnfE4gj7/DHT76hMuM007uWmKv3QadHrjIUp+V1SyqXbrQ9OXI07T3U+K+S/W1MvIz3UY6bv13gjZ8CQt+W6vbgt8+42HHEwv7H1NcprZOCIkaB6DwUWD94aVxYA4UyZNK/K1cTySfmZSo3nvESfZ7s89IRob9En9LsoA== 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=LC6NVNISpAUChC8i9FEbt1XRSKpv4rwS1mgNn+Hz3Cw=; b=TUYMo5BX9Qudd8ZxBncbNTbtxM4Kz85kttl3XYzHV/SIAxsijGj63cA8IW/Tx97aK4oTS7fY+F3GetOtLJi6o5jlu84UUVPxPpsEE/3CAdJ8pWNDtkAnU114+egrRhCCSDixIym6CvSkg78T6HL5G7Sc72rLVMB/HCVGEMMW/zhsf74viH1xCF14wgWhcvdFTJA+zsMaiNtBephb+uZdd8MddElh3dus11APRbErG8cGp7oHnkNgiewTQJ/E9jD9a77HZr4RFJU7LAW5RfvWILRHq3UbheDmIoNFCxYNn/K1qCYqXvO8jWMU8U7RxN28vIPGpb9D6jSOVHzsrHOuiQ== 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:04:36 +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:04:36 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:45 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [XucHFi5q05jz5EOo3umqfNUljXFnIe0s] 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-4-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 79c283b7-9839-4605-6439-08d9d94490b9 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPns34yw9P8ngdqfNwe25h/h6nNOlivhwyzCnV1+eaVi6oIMSvIizD75EYeB35va1oeTn8DamOrsvZ1GRRbWZUpHBb2xNHw7U98cDYPBmKhEctEjVZN2crpD0mJ14uhpNO96AVkGjIqjYbIL8aHiAgRhg1meBdg71bLxC2buWuZ6ElsgfcLGsW3vw+hQwA82AxYDgczUhHitNdEpx+dtf5JkScPgCpGZ5fhyUD965rLNAKNZ7/+xOJnrNyhnvr8Zmc9GmdNBEoEa68OsGeBbJ9Fmgc+EIF/E8gJDBGikmbI+VOVCrinVdgl4UVith8s2nAN+80ozmiFvJSxdr+sSwqGc4kq7sxIO1RTN4UdAyOE6ugVhp8FtrE1nfSRGhcXKGQ4XQC82oS6EKvP0oVnyrN5vwYCVEceoTNdLlBIpjyXNCiRtrXPCsM7/V0+KeWtzKMDc40kElS8DmjcUqK/vaveVw+q4Yr193h3dYdgqIGKgFmiqLg7sRwp+1QQCXOkQv51BXul90Cfxq2RPOCCsTclUfgJZNAX30x+KG8EYZgOFIEQmf1emizU2T54m7ZzA7g95/GNUPDaBNANok9xjpuc1xuGmzHShsH2M2AP0mT2jNbh+PTRbVFbTjlaOV0TEQKuZTgc2dNk3VVc1Z8xXRBkZjNCBMfUs1IZD9/3xe1CtCBW6y4VwDFKGBM96SfL8lW6h+ysRnOf/lJsnNB1+yP4DYxsNaxqahhboefueZVEznLE= X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HZepuD4c9bm2uZhM7VF0ooHEY7qMyAMA+gDZq4QGuiZICxh4XH/avXUs9PExsASjx2c1qqj8OjGuWBdExBYI4vQpDi68/6xdD0b+b18K/Mgz+zc3G9WfUptlFAodtWkdXBFu78BlVsQ68a8pJ5FHm07OE9LruJdzPcuaRLHc3gR8N3ymT6tu7Rn9FFCtL0kzJ9FYFcotWsGSXo4G9eDm8zbErb2ejc+Kk4WBVR9TGM99BPjv5QN/QdDN6LVCaFhmaXHYl+XpLWBr1FYHviJBhvgNP8QyqBrqXARS1tDjhTQ9wWDJxlD59XLAPIjOweijrZOXJ7T2vAca+949b/RKxIqpQj82WFqx3JjB30IVKS6T9r8ril1y5N/aMJfjMfJNrf5ecL/5P94E9eutwGk9ZR8VqHYd5qEgQK1iqnHxa/5licAoA8leSpKv29c+UoW1L3xKYXnvTAc+OcLdGOONsnlLufDi5R1qQSxifpDDc6xR/xb+HuBepX+F116KLMLhGFKfnLqcUfnQRw/dbno0nESVmpMpWbMkJNGYq0sc/2tGL1I+Iw+mGpt7yrfVYYD+BacpgwoxLK4hEUM7C+vqSw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: dayGeicGZPZNDQME643jFWCPlPZyombcBv3V+XXI2Bjc0u7o4jvzfXUq1eX96ymwPG6ubBylbQKXnsNfH36WPYVegye6LFqYWm19oYav3qNf02CNO6ZfEx09Z05TcEVOYA4pdHQRRYCdz+6EUPg60+Cga3lh9//1CfWihheimeeZhK49AJqYuWS72W2rNEAXfm5retERE35A/TunucS5WvA1l+PrvrDoh+UwdXY5IcyKCAKWI1FjOuBD7rUnKuBOyPKCSVES7z4PhixzIy6g2BV6a8CkxnxVWmI+okinfNnJMzlaZ2N1YaLB+b1m+LyxAFifYG5aVpyQF39gFrv7KkdSXQLBEvMJaxAHrET2BO4eM1yKbR5ByUh1CSuGwcNQEuZ7QZIWmtiQ8rkXBueax9GFtlzScxmV1hPjT9e1s51SyTb3P972HjAYQlVxUIEyu0yuo1KJgE0WsmGe2T51hFIUBPeNK7y4AMPMT9ps3CR6rueYjqhxl2UdRoe/RhCK0i0B+estShFtMHRypp9Ve2FCYkBwQlb1S7o5CH9+PZuo/hvli152X63pmkqH/qaLLXFqhPrUOOzc2GvIrWUjk41mdNtiAmWpi75emsML97DSk/AneBcnc5KhfRCUkyfvwTIanBV/8CYG0vgYlaE6N3yttpwd9DvQcERiLHGUexZOH0STW/45SXsZvGgiRed64TGNIIZRwLjD9DztLWJc7gowTA9NgnoXyZ1Rp8qNXaAW/0tMgiIi89lZPLiMzJ89LolxdrLnPgZnJjs5f+PReIj8UP+VFTUIL3lAMxOAkoNhepvOhUU83gL1tvvbz02h2od3aoEAc40LR6YbCOHyADVdFxzERd8szWjN9pRRkT9DhP46GAEuIbAt4TSn6JqmVAYOqWIJbzThYgUF6GsJVnbsU0wAQ53wvvUCpBfotNd0dORilovDd5ZyXssgU42aTxnKOkhYjFgiPqoe9994TQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 79c283b7-9839-4605-6439-08d9d94490b9 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:04:36.0594 (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 05/25] avformat/matroskaenc: Don't waste bytes when writing attachments 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: lU508K08JzBS Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 20 ++++++++++++-------- tests/ref/lavf/mkv_attachment | 4 ++-- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 154de25f59..0927e0b873 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2056,30 +2056,34 @@ static int mkv_write_attachments(AVFormatContext *s) for (i = 0; i < s->nb_streams; i++) { const AVStream *st = s->streams[i]; mkv_track *track = &mkv->tracks[i]; - ebml_master attached_file; + EBML_WRITER(6); const AVDictionaryEntry *t; const char *mimetype; if (st->codecpar->codec_type != AVMEDIA_TYPE_ATTACHMENT) continue; - attached_file = start_ebml_master(dyn_cp, MATROSKA_ID_ATTACHEDFILE, 0); + ebml_writer_open_master(&writer, MATROSKA_ID_ATTACHEDFILE); if (t = av_dict_get(st->metadata, "title", NULL, 0)) - put_ebml_string(dyn_cp, MATROSKA_ID_FILEDESC, t->value); + ebml_writer_add_string(&writer, MATROSKA_ID_FILEDESC, t->value); if (!(t = av_dict_get(st->metadata, "filename", NULL, 0))) { av_log(s, AV_LOG_ERROR, "Attachment stream %d has no filename tag.\n", i); ffio_free_dyn_buf(&dyn_cp); return AVERROR(EINVAL); } - put_ebml_string(dyn_cp, MATROSKA_ID_FILENAME, t->value); + ebml_writer_add_string(&writer, MATROSKA_ID_FILENAME, t->value); mimetype = get_mimetype(st); av_assert0(mimetype); - put_ebml_string(dyn_cp, MATROSKA_ID_FILEMIMETYPE, mimetype); - put_ebml_binary(dyn_cp, MATROSKA_ID_FILEDATA, st->codecpar->extradata, st->codecpar->extradata_size); - put_ebml_uid(dyn_cp, MATROSKA_ID_FILEUID, track->uid); - end_ebml_master(dyn_cp, attached_file); + ebml_writer_add_string(&writer, MATROSKA_ID_FILEMIMETYPE, mimetype); + ebml_writer_add_bin(&writer, MATROSKA_ID_FILEDATA, st->codecpar->extradata, st->codecpar->extradata_size); + ebml_writer_add_uid(&writer, MATROSKA_ID_FILEUID, track->uid); + ret = ebml_writer_write(&writer, dyn_cp); + if (ret < 0) { + ffio_free_dyn_buf(&dyn_cp); + return ret; + } } return end_ebml_master_crc32(pb, &dyn_cp, mkv, MATROSKA_ID_ATTACHMENTS, 0, 0, 1); diff --git a/tests/ref/lavf/mkv_attachment b/tests/ref/lavf/mkv_attachment index 0149bf2010..4a2f9eb7f1 100644 --- a/tests/ref/lavf/mkv_attachment +++ b/tests/ref/lavf/mkv_attachment @@ -1,3 +1,3 @@ -6a77b40186840d596bd584182ac3a283 *tests/data/lavf/lavf.mkv_attachment -472579 tests/data/lavf/lavf.mkv_attachment +32b24b97956f1fbcfbc1a94aac8f6202 *tests/data/lavf/lavf.mkv_attachment +472574 tests/data/lavf/lavf.mkv_attachment tests/data/lavf/lavf.mkv_attachment CRC=0xec6c3c68 From patchwork Sun Jan 16 23:03:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33618 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2272579iog; Sun, 16 Jan 2022 15:05:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJyxr7zInc3WLH+oHiQgAHpl3amGq8aviEL/IXVfzTuxqsRPqzyhsQI7ph88pAaP1tEqLtLf X-Received: by 2002:a50:eb8d:: with SMTP id y13mr7129304edr.269.1642374303166; Sun, 16 Jan 2022 15:05:03 -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 t10si1333242edd.378.2022.01.16.15.05.02; Sun, 16 Jan 2022 15:05:03 -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=eNgHsXTP; 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 C631A68AED0; Mon, 17 Jan 2022 01:04:47 +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-oln040092073056.outbound.protection.outlook.com [40.92.73.56]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7947E68AE7A for ; Mon, 17 Jan 2022 01:04:45 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JV/nhS1z6SCdOoqIXH7Ekjn6ybgaqXda56KmAGdfPukzRIGcwbKfA9IHHp6hJOSZ4WwzJV1rnbmHc5jI8sFbsbU5+FOy/0EUpvtKlYt3xYk8TaASr+VbE5UfrCceX2RS1JX8rBqiRoexcvX90kNMxBaoSVsip0baMqPk7OQS8bGipLqCFXrbDGlkmBdJNPUcgPkxZeGuuD9nIWgFeHC92v/DyQySJSXSKvCdRGUIfBnNJ4ha0Wf42E43vGAGAXRXX2eWVuNmpLcUXHOV6oklyw5EajzQoz6Sw415LKTB7UNR9TFag7KPIpBCxdAuaHXte7roPFFjXd2thEmsetbuFw== 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=NOwRvdmFm/lxM1DwQnsI/ZUj0XoMtYSO3wcyVyIeb8M=; b=KES835kSbCcRZKwneRIFIUlyHa9O01ACZlzxmYrrPorxZDzVGpfPn6nOw75RYPLYLutPRssL0yuj+fJa8Y6Lmxy9GT/73pw8mVIDt/J/lwBwMvlNPjzfD332P59vMqNf6ZR8zHgSQkvkSFv++Pfe8SAfLz//APQXXDJiN/h9btkHzIJ7IrSbwumM8RdpfKseUZyIX3mDJ4rcpnX2N8lcgTY/susPq0SIccVwzU1V9RE4HwOlXKrjDzVFX+N3e/ArfdRpvrgdsVqGZK1DuRiyyMsxup+L4xDAv82iVieWKECcsbuGx8ZyLo5vqVZERwYN+CuP6H5nEgxj78h4FmFFMg== 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=NOwRvdmFm/lxM1DwQnsI/ZUj0XoMtYSO3wcyVyIeb8M=; b=eNgHsXTPJSRLMM4NCFGP5vqkXWTEAxXpigSgFO09fb15ER8/OkDFDPHqiaS06sFRp59VhGkXjf2XZFg0uLwXYTyZwLy76VollVEIaYAkYNIMD3+3QnotIfO2dN9/HlACkZwOKdQZExCehJMM7wAZO+vMMdogmne/AJOQvXpye11+QoJ2q7OmGi4NxEIcZqFQrMxygC0TmkWR6FWGgxxFSD4CJhMaT+YY3BLz8JmQfXicRY8ASdEdUvYKuwK1s+QfonDvKG6Hvks/hKCLJVd/yaje5p0GVCky8ptQdNNPlCwrNmOyyXx14Y+3phY4oBmGuuaSS8Do+fR3hdB89WmNQg== 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:04:44 +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:04:44 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:46 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [suSIsriyYBGFz5HLD8m3V4DytGF7cmIs] 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-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d280e242-6b86-41b0-15ab-08d9d944959b X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPnsCL1aUht2cIVQPb9i5BElj28/oNEqyPsNwH4KwKtE9xY+LZG1mesHNOVk6Pu4gZo/9gU/GvD6N3kb4AvAfIgorJXbDThAYmzWdq3sdwuieYJz4OxFrm292mZluJ1GI8X4qli7CDmYh+56v7HPWhKEvx3NG+vKbWgJdNdgpUotHggm0e6ryDgSaWEU4MllDggcBRBMOwxXTUsEclH4BqFphEmFeW80j1C1M2fvEYhi90yE8ZEmej7JuiySR03LjeIyZJOkWxAmZ/FCE0LIUBKaJaAzegoSG82AcIWDq79T+IVGgisJ+3m8YhogPU+jG1OW1KR9sh5nqm/6euL6kX2SNDhxlrsgT2Z63pChvuep8pWTGDQamKebZcCq8T3p2cadTkbLMsK6GOKsJehW3IoZlW2BVARO35frnO+ITMtpx22lMmcvrtPzyd4OaHEJIDmKNheosPY4Sl3/dY3BI3cvpbNAvRYHY3m/m+tPb/Qy89D2lS8Dw85072PhCM2bo14nmlVMADlRw+lZjdFFt/FI9JYWBXcJE+4yCdghqy/0DmfZkm1QkC0fAdK8IgHyI8J9jzr30ClYxG5WRYRcqUn/ywfXr8jt/MyMZ9BKpa4aVQSc8pf/4d1Cvnw+qYhJ4xf5NyYd5TFbnL55ZpJs9KvFCIefuaC69CD+BZdv19ZtuFqeGInMWNijLiQ9k4v9bH0MN15pkuXVFjqDBxt1iA+WWBITJOv7onK/OimaiwWXttA= X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9rX+gzolKHx5e9blygDrO2MBk1Sk60hElpeIH7w5Rf6t3caPXWRgrqp7N5PnOLvgURB2z+M4K3O7Blb1VqutprZhy5v4juOSYtDNe/pVwYgPNcU5GUss5vvzvCNBy3BzgEwL2waBARaLDLH0rvWxz20bW75++Nqp1/Ot01SUb9X3P/saxAvLAtPynpVMlJtu45OwvqFJEPod6qlmVgEgmJMQLOgPCpGO7u4z3Vyj9I0o1zlp+jVYFLa70QLxWPWwZxibyHRpeeP8VHGZ3lJKeZ3Mf5KtkB8fVE+775PaBCeRLpPYrpUFRrlyi1AfDrph4lWCKA/9JSw/JKBP8W7siMe1xZUfDT/mcS/dmc38Haum7Hhlj7/MS15GIUYO00jakS06ENykCQALYAOFUjd6wtgUxmeF5fqCraDgmiRg44927Bs4q9oIIyJKLonaz53noAqWFp2X5WhmRDa+Tl+jvC18mvm1LLhY3ROpaA3/Auq3RukHG8nCtXTopfdtW0BZmUA1uu4F/jevlSX+h7cH4vJ9bRoWv7ae89+/Hgxc6eDbfCQe9Yuv9T6MbPOb16f3ZHUCezKymYN03xsa33wxow== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ITk9zTicNSmNafCqfD12IqCFsJI1zd7CTIoBCvXE89LObt/o+wag7MNzqGBg4hu1tJEJ0Htc12+h7wXumO1H42F60srcJre5hbclgWJg4MwP+HDRlSSE/d5jpkU7kHtOL5Dj6Lh2eY20nPPk/onjBd3TXpmt5O4i6mog5qnrVY08vXY6xocbiCuEjXrdhIkMf4R/pPiNltPHvlTMgxxzLN2qjCdIn6F98rw4M6nX08qT9darczzhSuV5g2/syxTRU3VmGIM+RmElv1sd2FBMvnd3OWiqzztg96+so3+HaDI3wfgYIBM7zOvZp/ZO4V/Q9Q9BRnUVp1QFy7HAPQPHG1Hqck/mHTY4BRd4vPF7U1AzJFzDQhZWveBjZ/ZvDuQTGC6heuW/+BFCZwOx+ttVLTWUWziT6b2UsaXT2wHDVKggcF8aPwtgGZg/shfLNoRnxQaafb1DKTbuI4gQgwB07mYnzmo/P4AiGYfauwfkoSen2hbUQhrl2bAJnusz8S9IJjqKWoEXPK69OysOf75zZIjH1M5HH7sSWOznsv84bF3dgaeKngehHsF4HCTj7j1aeVC++g+Za0Ffb6h1V90ySc+M9lCJF9RgGsq03BrCGsjjAPWDhvNp1pHaqPnXvCnPmGfW3s0kiR6KkhGvB4XY3g9GYxoy6SLK/rA5M4bOwFPp3h6PmVvzbnaSUUlapZCxi2Ucv1JconEwR9g8TurVxB/00fjIpYre4UCc1anLSSVy2JrCEyz9oSQVl0EBfVcDC9jSmuye1/OcWaL28ZQZAyG1CyeDAGODGVgXVRZtPjYXySwpxDL5RMZ+pINUwmttnPuw4dO7Bh5rAzHqKxYEhYI01uQMFOIXYkWLS40rUq8+3+2/yRJdqB8CmXEDMxnK6IrLS9u23w3xwJOTJLjbmf2YTm5yCl44+nPwRTLHdjkCK110NG3GvoNLx2wY2WU5kEvSH0YxAri4ISZxd/bF1w== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d280e242-6b86-41b0-15ab-08d9d944959b 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:04:44.2482 (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 06/25] avformat/matroskaenc: Avoid seeks when writing EBML header 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: LI2bjoJOul5u Using start/end_ebml_master() to write an EBML Master element uses seeks under the hood. This does not work if the output is unseekable with the AVIOContext's buffer being very small (the size of the currently written Matroska EBML header is 40) or with the AVIOContext being in direct mode, because then this seek can't be performed in the AVIOContext's buffer. So using an approach that does not rely on seeking at all is preferable; this is achieved by switching to EbmlWriter. Also factor writing the EBML header out into a function of its own. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 0927e0b873..4d4d270db1 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -214,10 +214,6 @@ typedef struct MatroskaMuxContext { uint32_t segment_uid[4]; } MatroskaMuxContext; -/** 2 bytes * 7 for EBML IDs, 7 1-byte EBML lengths, 6 1-byte uint, - * 8 byte for "matroska" doctype string */ -#define MAX_EBML_HEADER_SIZE 35 - /** 2 bytes * 3 for EBML IDs, 3 1-byte EBML lengths, 8 bytes for 64 bit * offset, 4 bytes for target EBML ID */ #define MAX_SEEKENTRY_SIZE 21 @@ -463,6 +459,13 @@ static void ebml_writer_add_uid(EbmlWriter *writer, uint32_t id, elem->priv.uint = val; } +static void ebml_writer_add_uint(EbmlWriter *writer, uint32_t id, + uint64_t val) +{ + EbmlElement *elem = ebml_writer_add(writer, id, EBML_UINT); + elem->priv.uint = val; +} + static int ebml_writer_str_len(EbmlElement *elem) { size_t len = strlen(elem->priv.str); @@ -2113,11 +2116,26 @@ static int64_t get_metadata_duration(AVFormatContext *s) return max; } +static void ebml_write_header(AVIOContext *pb, + const char *doctype, int version) +{ + EBML_WRITER(8); + ebml_writer_open_master(&writer, EBML_ID_HEADER); + ebml_writer_add_uint (&writer, EBML_ID_EBMLVERSION, 1); + ebml_writer_add_uint (&writer, EBML_ID_EBMLREADVERSION, 1); + ebml_writer_add_uint (&writer, EBML_ID_EBMLMAXIDLENGTH, 4); + ebml_writer_add_uint (&writer, EBML_ID_EBMLMAXSIZELENGTH, 8); + ebml_writer_add_string(&writer, EBML_ID_DOCTYPE, doctype); + ebml_writer_add_uint (&writer, EBML_ID_DOCTYPEVERSION, version); + ebml_writer_add_uint (&writer, EBML_ID_DOCTYPEREADVERSION, 2); + /* The size is bounded, so no need to check this. */ + ebml_writer_write(&writer, pb); +} + static int mkv_write_header(AVFormatContext *s) { MatroskaMuxContext *mkv = s->priv_data; AVIOContext *pb = s->pb; - ebml_master ebml_header; const AVDictionaryEntry *tag; int ret, i, version = 2; int64_t creation_time; @@ -2134,16 +2152,7 @@ static int mkv_write_header(AVFormatContext *s) version = 4; } - ebml_header = start_ebml_master(pb, EBML_ID_HEADER, MAX_EBML_HEADER_SIZE); - put_ebml_uint (pb, EBML_ID_EBMLVERSION , 1); - put_ebml_uint (pb, EBML_ID_EBMLREADVERSION , 1); - put_ebml_uint (pb, EBML_ID_EBMLMAXIDLENGTH , 4); - put_ebml_uint (pb, EBML_ID_EBMLMAXSIZELENGTH , 8); - put_ebml_string(pb, EBML_ID_DOCTYPE , s->oformat->name); - put_ebml_uint (pb, EBML_ID_DOCTYPEVERSION , version); - put_ebml_uint (pb, EBML_ID_DOCTYPEREADVERSION, 2); - end_ebml_master(pb, ebml_header); - + ebml_write_header(pb, s->oformat->name, version); put_ebml_id(pb, MATROSKA_ID_SEGMENT); put_ebml_size_unknown(pb, 8); mkv->segment_offset = avio_tell(pb); From patchwork Sun Jan 16 23:03:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33619 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2272682iog; Sun, 16 Jan 2022 15:05:14 -0800 (PST) X-Google-Smtp-Source: ABdhPJwvzfBniPbdKMP0QlKqnPFwWWfF3PUHBzjCiSt0jQprtD34SaCgt5S1xlCGIJcT3RDedGVb X-Received: by 2002:a05:6402:254d:: with SMTP id l13mr175414edb.190.1642374314304; Sun, 16 Jan 2022 15:05:14 -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 v19si6362970edy.253.2022.01.16.15.05.13; Sun, 16 Jan 2022 15:05:14 -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=fUMfk92K; 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 1554B68AEE5; Mon, 17 Jan 2022 01:04:53 +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-oln040092073050.outbound.protection.outlook.com [40.92.73.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7495E68A637 for ; Mon, 17 Jan 2022 01:04:50 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GNbDMxtr1as+oTeJl3kLKkALSHVtluIOkcjPN638MjkPYfVxd5YW9LxPWfM0NCsr/pAWMfU6RAKzCs5DU7sg4l+W02b+RFZeXWmMH+TM3gkyBnkHC/TDD/oj9NQbPPzBPf6zMxznP12sgP4ZYcu+V2e6FN6jfymPXGBUi7ZtLn3IzQWVDHnpIYG6WZmMVp2Ee5COyU20FrD+CfS4G7Ym28rKjm16rNCME08rVfExGkvDOFxOaXlXINh9SrnWBarUhFXUe3CBnaxNztRLtaOTKCjxL5LGrYqdDs6DTwLCVee1xoepU2YvjcTv4MRWG8pTyWKh4XStl2zbVL1UNXWYSQ== 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=YgCxS4brnsrWXK2axiANFCOcqICwTrog3A/W8l5WKdw=; b=UloSG89Oln7SxvreHaRCk9ailLJpfJAYb+Zept4muph0D9y/wVWoouwYUY6PejYTf7BYMH6RZ/VEQLFTMX61QKyXW4KWjhnzQDsfbyKr1CyDY7cMojxMN6sIPogS/PBkeW3YvIDNwylYZkR40pDT68kVQmPNWVqESc444koFVGKUAMT0BbsMeMVW0X4vUR8/JYcQnyWbK/ydgke1FusAP+iQ0kQyOhfNr81RP2ioAV0cFgeUnXHCPWf8n4jNseZKb/A5JWVlCHUgHPTyjOqHaZmAcIndZXC6qLsTrtvAgkrjtPFPz97df8xaIqxlOZQmCWyBkJjRYKW5gYsXnLS97g== 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=YgCxS4brnsrWXK2axiANFCOcqICwTrog3A/W8l5WKdw=; b=fUMfk92KH2PtyzHi5BrTrskstqs3wiRC8HO6Y/nBN5g8pulW3oZglNx/VsH7fkfzfqDl9IoWt97pn1s431wchoK0I8tiv0shGE0Rkdn4JNz9VpjzxomW2CwxuD4MluxpY57aFyv+BvWfWfLMM77yKBeeId3d7j6PE0P0I0l2o9TLzVG/If+CYTqOdw/Rg7mrS1QOBesij7T9F3OPvGydFKCJTUeFf6vRiJsujTGXisqYPInXyFYevtmZeSiBiTQmDrSe+pSPu+ge3JWp34sr1+lbYxsegllSf+iFBnTEXxe6nJ6K1s0sBMy1NWPE27n7hcG+ZhvlrxcnV+UWRFv0Pg== 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:04:48 +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:04:48 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:47 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [6gOq9cnnZ1U+xP7kQGEe1aSktO7Y3NkE] 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-6-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7bc89652-a8c1-49cf-d4e0-08d9d9449865 X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEuZvKHt/RRJ4O3wxWCrUcc4zPZLO170Iff30BvLy5N4zDzkkTeUaytBr+Km/usYTH8Rbh8oTpaQ3yjdgqPDIOxm8+j6Jn+MhHS7kxTpX2hqQc1gZFWjEqmELyyb4Yj+yhxWw5nkQbO89KkkJG+wSDJd3Xj2wNs5Ef1nLwwh1uH9eCCCEz9Pd6L3dto/pNYYRQfrRFVT7xvUnW2rV/IXQwBa5YnzbgW2vZi7JEHSYFVr71AWyfDVeNbp3uceWZ9q+nxDBwqNz0R8p+rDCiJ62SPeQF0cWqJjj1AHQxNfBZ691vplF9g0SLeZJc/Tm1cod2avi/7ZBuXkHaz4KTxgI3qhjrMzvEyHzY2p5w+87s8Owh2WbKpBLX22ZpS3yu/gCd6wfhKhINuvifvRFqPM9b9pE28B+LvmZ15qbYqTkyFkFt/WjSgK/0ZW7m0KMxKOsE0MwFSXSKvs4muBITebAXZVjPQeq1MwpqO4wxPraYE6JGjkS1nhcKe/BbD7DjD+cg6E2jnVOeD4Y+zyQ8Dc65NZE+uz7ZNZ5ctMgKmP46fGbt3nfurJfHly/7RZcuOjSeRYi2bm8zf1wXd4rq/ljbslyTocJfEyDpJgncq3J26SCS6HX8FwN+OIjCd88IxbzCsXyPP1LVCdLctczTyPE7q65qd5T3G15j5uxwxKeeYOb5JKUqmePC0HSPQKEVm5iS90dhm3Y6wCZW22i3plZWHa+NSHfKlBqoM1xvqNJRYyU3D+1iEZnob2CgXsI1KB7PLOK2TC1O89o9hhbVvjDfjV X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FgN/t6b1kxQgc3sz1V14Q7O8Gh7gi0g9CXgLg975nPv872FQfQJDKI6aJWJ+kdb2kxxV5gWM3x4+TvCDlIDtxijNChNXX62yn1FOzuH6rH7tCKJ0FVDljTnTm/nUzJMOkiBi0ROP6ETzpzzAZyiJIIYWgz0sqgvIrN37pvefont/V23T1NMrWPk8g0ipDxG/n+w1a9encSWu+7l9IjBlrtddvd0zt7ElP94EKeSMg9W9i+d3+Tm7YYft5Pktd0u/p3pbG2Htn6yYZ7DNnTbrM7ofuUBq2yzepgVKGvXlGIFEHEwVB+alEsgtBWVKMB2Yd7PDSiLMMHqEPipGpP4NLyktoBSA/z/AQriyRu4VKztQ7sBbleCHMrqOvqwYv5ezkuNN6qtTtlMpBrzntk3Hr4BQjbCRJHyyUMUu88Kz1eH7c8Y8XMtGgdFJigbJ1C8QCYGf+gk+yoedSaDekxH2b6j7QYywPO9U6zoX1/1id5kuHFhexxTkL6uTFRmaQmsoRDjukfbl+QJks+hA7x9XVucx55u5DJCpsB7Ir1DCvO1P9XdoP+NnQVTx1ZkkRqxfwIHC3/bD58/slRnraHt5kw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: RGU07d2miKLksVb7eE6kcSOTUpveXaK5T8pBTBUt1YlbqSsBQnGH1i/mecLt4wfNTkuNseyYOz18hOrVXjnr73PTpucAO8UByLc+5igR4K4nCTM0ef25C/aBcCKq+gUynUjlsNyPn+y6a/FltYcyc46AhitNhayIkWzxHdjlIS+ztMAqaljBTrmUEYpO+SpfFvFTO/uSSx7oFNLtA/b4+Wlx44q2E9p3TnP3b4XClXEtWQXp6/Zeox3iZK6d6rl/pyTcBA4yG2aySh9u2F3CWJSKhrp2BM71LsEM7Xy0yjc3ercmFw5ETp37u6NI0lVQ01q3HAKCOQyQytvxzv7Ytkicwe7pBpeXHqcQKFCLYrQCd1zqkZJyA4L/DyrGv8/mNxkTo0mXmzEtdogWOH37N99/wEFtb79QKJnKKbb03bkYB79kx5ef4NTWZqVJepa3+Lns+QK19chRncvhgK36vCZeDEgXKRh+9nB0mb3rc9ENazeNhFvF65V3dS2KMsCw1UEaxNpHW50wdfNBzg/ORFyLPlMrAp7Ivlmvj4FaC4HpTkOPwAgQ7jiCU2hNPtUsem6fCGm7PAY+bcAU/BeihwGlBBgUXeAAC63F9fPpyOIDk8qD36LFpamaLJ98XIn4NcURJm4yc1m3HtKQUsKGDrXJOjAxjHrKJAQ0V1e02F3b9imE/PjSvWHxT3PBg2S00J3u6zYZ0vTEUpmpkipvTotyQFS0gLVY/jmRQFsTAw8IMTxnalI0rmKaRrDzA4DQ9OLJbZIjvxZ1bitcZbJvoLJhrssEZOoIHS1j1iRCIZNiu45B5St5l3qmWfDT5X7DK4w6fAJAbL0tCgsyKO0gjBxTA928T8xaJlxQV0gDAeO4m+JiQThrL6DnXpuS2eAaTC1gTYngvw8ng4Yw2UpbR6HGK6PsxqFaBx7G816vWRCS9z3JMU6vk86L4aRNBaBhnU6YjdoHoMpvLeNwodiNnA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7bc89652-a8c1-49cf-d4e0-08d9d9449865 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:04:48.9168 (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 07/25] avformat/matroskaenc: Factor writing TrackVideo 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: 7ZZfPjRduEVK It is already quite big. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 130 +++++++++++++++++++++----------------- 1 file changed, 72 insertions(+), 58 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 4d4d270db1..2f5f1cc56d 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -1418,6 +1418,77 @@ static void mkv_write_dovi(AVFormatContext *s, AVIOContext *pb, AVStream *st) #endif } +static int mkv_write_track_video(AVFormatContext *s, MatroskaMuxContext *mkv, + AVStream *st, const AVCodecParameters *par, + AVIOContext *pb) +{ + const AVDictionaryEntry *tag; + int display_width_div = 1, display_height_div = 1; + ebml_master subinfo; + int ret; + + subinfo = start_ebml_master(pb, MATROSKA_ID_TRACKVIDEO, 0); + + put_ebml_uint (pb, MATROSKA_ID_VIDEOPIXELWIDTH , par->width); + put_ebml_uint (pb, MATROSKA_ID_VIDEOPIXELHEIGHT, par->height); + + mkv_write_field_order(pb, IS_WEBM(mkv), par->field_order); + + // check both side data and metadata for stereo information, + // write the result to the bitstream if any is found + ret = mkv_write_stereo_mode(s, pb, st, IS_WEBM(mkv), + &display_width_div, + &display_height_div); + if (ret < 0) + return ret; + + if (((tag = av_dict_get(st->metadata, "alpha_mode", NULL, 0)) && atoi(tag->value)) || + ((tag = av_dict_get( s->metadata, "alpha_mode", NULL, 0)) && atoi(tag->value)) || + (par->format == AV_PIX_FMT_YUVA420P)) { + put_ebml_uint(pb, MATROSKA_ID_VIDEOALPHAMODE, 1); + } + + // write DisplayWidth and DisplayHeight, they contain the size of + // a single source view and/or the display aspect ratio + if (st->sample_aspect_ratio.num) { + int64_t d_width = av_rescale(par->width, st->sample_aspect_ratio.num, st->sample_aspect_ratio.den); + if (d_width > INT_MAX) { + av_log(s, AV_LOG_ERROR, "Overflow in display width\n"); + return AVERROR(EINVAL); + } + if (d_width != par->width || display_width_div != 1 || display_height_div != 1) { + if (IS_WEBM(mkv) || display_width_div != 1 || display_height_div != 1) { + put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYWIDTH , d_width / display_width_div); + put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYHEIGHT, par->height / display_height_div); + } else { + AVRational display_aspect_ratio; + av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den, + par->width * (int64_t)st->sample_aspect_ratio.num, + par->height * (int64_t)st->sample_aspect_ratio.den, + 1024 * 1024); + put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYWIDTH, display_aspect_ratio.num); + put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYHEIGHT, display_aspect_ratio.den); + put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYUNIT, MATROSKA_VIDEO_DISPLAYUNIT_DAR); + } + } + } else if (display_width_div != 1 || display_height_div != 1) { + put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYWIDTH , par->width / display_width_div); + put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYHEIGHT, par->height / display_height_div); + } else if (!IS_WEBM(mkv)) + put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYUNIT, MATROSKA_VIDEO_DISPLAYUNIT_UNKNOWN); + + if (par->codec_id == AV_CODEC_ID_RAWVIDEO) { + uint32_t color_space = av_le2ne32(par->codec_tag); + put_ebml_binary(pb, MATROSKA_ID_VIDEOCOLORSPACE, &color_space, sizeof(color_space)); + } + mkv_write_video_color(pb, st, par); + mkv_write_video_projection(s, pb, st); + + end_ebml_master(pb, subinfo); + + return 0; +} + static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, AVStream *st, mkv_track *track, AVIOContext *pb, int is_default) @@ -1429,8 +1500,6 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, int bit_depth; int sample_rate = par->sample_rate; int output_sample_rate = 0; - int display_width_div = 1; - int display_height_div = 1; int j, ret; const AVDictionaryEntry *tag; @@ -1552,65 +1621,10 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, ffformatcontext(s)->avoid_negative_ts_use_pts = 0; } - subinfo = start_ebml_master(pb, MATROSKA_ID_TRACKVIDEO, 0); - - put_ebml_uint (pb, MATROSKA_ID_VIDEOPIXELWIDTH , par->width); - put_ebml_uint (pb, MATROSKA_ID_VIDEOPIXELHEIGHT, par->height); - - mkv_write_field_order(pb, IS_WEBM(mkv), par->field_order); - - // check both side data and metadata for stereo information, - // write the result to the bitstream if any is found - ret = mkv_write_stereo_mode(s, pb, st, IS_WEBM(mkv), - &display_width_div, - &display_height_div); + ret = mkv_write_track_video(s, mkv, st, par, pb); if (ret < 0) return ret; - if (((tag = av_dict_get(st->metadata, "alpha_mode", NULL, 0)) && atoi(tag->value)) || - ((tag = av_dict_get( s->metadata, "alpha_mode", NULL, 0)) && atoi(tag->value)) || - (par->format == AV_PIX_FMT_YUVA420P)) { - put_ebml_uint(pb, MATROSKA_ID_VIDEOALPHAMODE, 1); - } - - // write DisplayWidth and DisplayHeight, they contain the size of - // a single source view and/or the display aspect ratio - if (st->sample_aspect_ratio.num) { - int64_t d_width = av_rescale(par->width, st->sample_aspect_ratio.num, st->sample_aspect_ratio.den); - if (d_width > INT_MAX) { - av_log(s, AV_LOG_ERROR, "Overflow in display width\n"); - return AVERROR(EINVAL); - } - if (d_width != par->width || display_width_div != 1 || display_height_div != 1) { - if (IS_WEBM(mkv) || display_width_div != 1 || display_height_div != 1) { - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYWIDTH , d_width / display_width_div); - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYHEIGHT, par->height / display_height_div); - } else { - AVRational display_aspect_ratio; - av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den, - par->width * (int64_t)st->sample_aspect_ratio.num, - par->height * (int64_t)st->sample_aspect_ratio.den, - 1024 * 1024); - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYWIDTH, display_aspect_ratio.num); - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYHEIGHT, display_aspect_ratio.den); - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYUNIT, MATROSKA_VIDEO_DISPLAYUNIT_DAR); - } - } - } else if (display_width_div != 1 || display_height_div != 1) { - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYWIDTH , par->width / display_width_div); - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYHEIGHT, par->height / display_height_div); - } else if (!IS_WEBM(mkv)) - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYUNIT, MATROSKA_VIDEO_DISPLAYUNIT_UNKNOWN); - - if (par->codec_id == AV_CODEC_ID_RAWVIDEO) { - uint32_t color_space = av_le2ne32(par->codec_tag); - put_ebml_binary(pb, MATROSKA_ID_VIDEOCOLORSPACE, &color_space, sizeof(color_space)); - } - mkv_write_video_color(pb, st, par); - mkv_write_video_projection(s, pb, st); - - end_ebml_master(pb, subinfo); - if (!IS_WEBM(mkv)) mkv_write_dovi(s, pb, st); From patchwork Sun Jan 16 23:03:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33620 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2272802iog; Sun, 16 Jan 2022 15:05:25 -0800 (PST) X-Google-Smtp-Source: ABdhPJwVvNzxW42ldCPSpaqBA57UXxGFzkkaojB2uoCyQMlVPBvxxIzba+sZlbT9NF1n/vYXZ3zu X-Received: by 2002:a17:907:9869:: with SMTP id ko9mr14489471ejc.633.1642374325737; Sun, 16 Jan 2022 15:05:25 -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 z14si7579166edd.604.2022.01.16.15.05.25; Sun, 16 Jan 2022 15:05:25 -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=E+3FS5nd; 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 1CFDB68AF00; Mon, 17 Jan 2022 01:04:55 +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-oln040092073074.outbound.protection.outlook.com [40.92.73.74]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E2BA168A637 for ; Mon, 17 Jan 2022 01:04:53 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mX2gsUTotsrNxF753r3av0rYr0QklslW0m9UqbaNREwtOTIJ7qsSbGHWSYiarSRGvAETzCLdKzQ08KPlbJEr04B2Y4q07c42XitwjOvBquH9S4FpBHqOyxWBW8g2udx7ZcVg4UdfsOnufZ+NaM14QmyMplW0HhC4/0ohxutJU3QZ7PdKtbySRE83kM3pjC1V8apv0JesDC133dW5ar8k55zr/JgMdRd6g/iO5uwOyi4ShfpA9lq/isp9beSXpaFtAyBkl9/f7+ZIZSpPLLeQOQhMrw2lvMi85qj5thROa5zl3g2ifPWcBVQqp0VInRC4zqiWxFZY+Lfx6hezU5s+fQ== 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=6aqGPc3AVf9p/5A3wFMWuPiT1WYtpurONOz/ih76q0Q=; b=Qf76IkFh61mTrQuO+fc6Y/mXbsIPdUqGygfkUlA6Gs6p9X18q2bzAErB3pH9DQ8/K/HjD1XLZcpNorwVd8PGlcze9ihElVhun6jPkG6XXVeaj94zB0UOBnW+QJ4D5Fa4XyeMbsYW3zy2QHLmKAJbb+yGpgOulnztpqCra/FvTOX9fUKz29G7k5hjZdhgPeMkXNh/MzICL4PGdg2FKazHvZBr1yCWSUeva7op7eP1fZQ1lAT23RvcHdoppGEyH6eK8QF4sNdCgucBGJAAjLi2D0z5jDA5+0uDS+ekRzHpUfRYNwCd5yJFH5DldNOjUyXgv60Xk7Xhc35elWze1E91sQ== 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=6aqGPc3AVf9p/5A3wFMWuPiT1WYtpurONOz/ih76q0Q=; b=E+3FS5nde46Myo5xK6Dg5tp5IwT57G0zM621qoxS6lHQHsApFwG9l7xk3E8HE6n/iRVcM0Ht3eGzFrhSWkpTYNsHYeBQMvb4VmuHSBo+aw7vNfH5TTk63OLIg6VMgt6VlGtMlr18MyLibh4tkgpLp+I6wBFnoupwt961NVv1d5z5Bis/2ay4eUs8RLsTxKLowpNsdtpfIv11onBWfH7yvMb0r72wAKBrJNGfbOwFNcglPnoe58hEr1cNXzDU0TrwbkFxObaXPLbR1s5yxyqoXhCyhwMRBdkLRlCmgIk8F0nj8FoD6Pr+s/uWdmV45WgWCmTalGYjTYrMNQTsvV4zOw== 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:04:51 +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:04:51 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:48 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [9VxTc04TpzpsHiqsl1wjVD39U3WE/fgA] 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-7-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 373e7a06-90a3-40b7-dd7c-08d9d9449a1e X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPns65ciGyfjLIyoaRjHv10ZJeX230nrzpzvCSwZszggUyzDW09pjSAEm4i2vFzaQIdaX7eABi7FrhFQXV32yPZIKTexyRsJeS6iP5WmGi1SWOrMWl/JDpPq9+h5D+oAepadvLvckf06CpsWkMzyHxQcVzMRrCs4kw6fjSBHTZU1+qsDDaFkbpPj3I4faxHmI6/OmFN/wuFADBFmvRz03+RGSRCVWbj3iknRiaYh/UzSrO8xS6IH1KW0/ixnxEzn+d95qp6qAqRc3BuFX/8HrOsmvyV2JoAdAbw1e0SzrMt6TeW+8LFLXkODQHoLNbw/ghEuIaujqLuAvHcX0SrACRbjEtjnOsL+TiSCu7bmoDxVTveg03IFhH0yqSIo6UC0yzd1x748QSvvHFS1G2t2Z29qSpCH0H/Dp9QMS/l/ybZJuWVdqpag+DMmQautO3EaeAhHnjsZVyY/XCtni2lIbrhLnXvjk9Qv+B5MbASjY7Zf6ee3ZAMDK4XsjVw94FLjjaSC0Yy0mSAQa9Do0gzTLIQPITB/1uVah9Nn7Aub6gFQqd/eQaoGWDn60VSBDwE33Wzlcmn3LIMkuQQTPfQX4gU1jJ1WtnvdjnHpAAj9VXV63rX+Z+l1CSXd/1o0F7CHhgRo9sbRmRnEGs9ZJnB1RwwublqUqoQR3w7k5Zk2c6xv7Skk9pIru9ybZtcKnsQNk+Gpng+Ad9dSHncVNM+qQrPe4ZqMBCRRGY7R5OP0luZFYo8= X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NyC8HbfuVMOKxOg61dwZ/TAWyAQbO9i2i9+k9LhtkjwxM52pnffjRaPRhYfN+OOr290Uv8y7HRH1QDSYzHVBueOb7q/rG7uwVECRo/GZmQovsWtkwqx83rcQ6vBjkPfozTZkyCCP6m7rTGPTZF4F28Y/mqCzjHl4DHQF20kPkHtdXY+z7R8UH/4LYXATXrVnhYDA0bk7FQ1Hz72sorgn4IZUgFel2GrTiNMu+kqy8WN8/m17Jkz9ImgeXpnjEwiyHtmCW2Q9/zg+OYXwr8lBIu4MG66+VuhKGbIMHjmEZTps4pEiYMdV0XsSp8ZxeYoUd4HIgZy429QBf89cvH07DVjMZmhMurtYgn3+9IfkGqCFQk3AcWoulK4pbYLJEsOMNMma6WQheoH1bBlIc0k3DK+UKVnr5cp5Itv8fGGF41P6mdnmeBB6hCmEmJ+u2gS56MtUZ3/Gn6VLEgdMfkFr85mjy0QQ/8FJfYKFw6HDflPF9vSdw0ek/wY2n2FpYjG0R0szBZZiSlYqA2lKAvzmz+GJLKquUCoaQLu8vSbg/Irn7Y5ZAqWk/6f4luKW/xR4OV2dDPtkDLlgYi9o/ChBLA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: SMaVWqJxHhi1OcDphWit97IMBRWzrM5yc3O2EENH/pLteRUsaiS29kOOxMgISh2kcK/Mk99xamMfvKH6OlYloaO1qUrqGGTeH7joPob4xCBuUnXXRa863d3wIKrv00vyHX0YhFhuZ9L+6bjmMoZqFPllU3MERqbG5FJAaO0MwnmJIaswiUsT0AZ/9bwwal+9DXRyN9X6bns0qnVswq+qAayAS+P74kDfFDCwdAU8oI47yBHLBljsgNRO44hiAHBHnfVF4wR2gmFdtmWdwiRP6JAsT6ASQ0HXOi33WKHPEFI3q2862VSFksABRMMbp+ajcWFzw70fgFx8UpoM9WMDzbH6fLv2ePtzyNCVBqCh0i54rpQEx5z5+11xcglVVoUvaJFbwdOJDYFdM4b8RU9SWEZ2VUUQE+tYtxwUxtzDpxzfcAi/pilrcbve8arSMveLzAj6a2qt5L5oCSoslsfScwfxze9Hs74ycP45FraTD7QjfHIfw4rAGLhRArq+0omVVEwj/l51bMKCRUSafJGSVdTin69uFEsm7tKl8zS9WpFeLTpTFxNf/x83EeAtoIhm2KjPNEy52E8kuu0XxIZEXjeBygDS0nSnhFoDbuBDivbiZNbvK3/lTLw5mZxkjQqCRRgCQN2cU/j7lJcPYvx50my5b7pW8glBk3j4giOkmKlwmkKwrAF5jjU6KerDr2oH4Q5MkTeNZ0eEcH5Dz0jZwC8VHcZgsIjs8lpzig7YFqbM8Dd6LHB7A6A3+dQ3/ILD6MsZzdCVaSirhbeaF0CUlzX211qQe19otivsGgUw9lUjOgQdpBRwS/Nyg7byEs/J01yjckUf85rW3ocG+JGykutimQOqh/AmL+JQk+ilvHQj7ZzS5wsdY2yQ7LuapMsk4iOXq+/EmEMMRuTuGAbtRPWMjaeU7w23cAf7Of/+3khSTR08VTAD7dWs9beef4vyyh+YyvZcrzhUNytpfLxcBw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 373e7a06-90a3-40b7-dd7c-08d9d9449a1e 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:04:51.8696 (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 08/25] avformat/matroskaenc: Don't waste bytes on Video element length fields 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: L7ejjYlh2HVl Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 233 ++++++++++-------- tests/fate/matroska.mak | 2 +- tests/ref/fate/matroska-dovi-write-config7 | 4 +- tests/ref/fate/matroska-h264-remux | 4 +- .../fate/matroska-mastering-display-metadata | 4 +- tests/ref/fate/matroska-ms-mode | 4 +- tests/ref/fate/matroska-qt-mode | 4 +- tests/ref/fate/matroska-spherical-mono-remux | 4 +- tests/ref/fate/matroska-vp8-alpha-remux | 4 +- tests/ref/fate/rgb24-mkv | 4 +- tests/ref/lavf-fate/av1.mkv | 4 +- tests/ref/lavf/mkv | 4 +- tests/ref/lavf/mkv_attachment | 4 +- tests/ref/seek/lavf-mkv | 44 ++-- 14 files changed, 175 insertions(+), 148 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 2f5f1cc56d..236dd3ae8d 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -424,6 +424,28 @@ static void ebml_writer_open_master(EbmlWriter *writer, uint32_t id) writer->current_master_element = writer->nb_elements - 1; } +static void ebml_writer_close_master(EbmlWriter *writer) +{ + EbmlElement *elem; + av_assert2(writer->current_master_element >= 0); + av_assert2(writer->current_master_element < writer->nb_elements); + elem = &writer->elements[writer->current_master_element]; + av_assert2(elem->type == EBML_MASTER); + elem->priv.master.nb_elements = writer->nb_elements - writer->current_master_element - 1; + writer->current_master_element = elem->priv.master.containing_master; +} + +static void ebml_writer_close_or_discard_master(EbmlWriter *writer) +{ + av_assert2(writer->nb_elements > 0); + if (writer->current_master_element == writer->nb_elements - 1) { + /* The master element has no children. Discard it. */ + writer->nb_elements--; + return; + } + ebml_writer_close_master(writer); +} + static void ebml_writer_add_string(EbmlWriter *writer, uint32_t id, const char *str) { @@ -1101,98 +1123,93 @@ static int mkv_write_codecprivate(AVFormatContext *s, AVIOContext *pb, return ret; } -static void mkv_write_video_color(AVIOContext *pb, const AVStream *st, +#define MAX_VIDEO_COLOR_ELEMS 20 +static void mkv_write_video_color(EbmlWriter *writer, const AVStream *st, const AVCodecParameters *par) { - /* 18 Elements with two bytes ID, one byte length field, 8 bytes payload - * a master element with two bytes ID and one byte length field - * plus another byte to stay clear of the end. */ - uint8_t colour[(2 + 1 + 8) * 18 + (2 + 1) + 1]; - FFIOContext buf; - AVIOContext *const dyn_cp = &buf.pub; - int colorinfo_size; const void *side_data; - ffio_init_context(&buf, colour, sizeof(colour), 1, NULL, NULL, NULL, NULL); + ebml_writer_open_master(writer, MATROSKA_ID_VIDEOCOLOR); if (par->color_trc != AVCOL_TRC_UNSPECIFIED && par->color_trc < AVCOL_TRC_NB) { - put_ebml_uint(dyn_cp, MATROSKA_ID_VIDEOCOLORTRANSFERCHARACTERISTICS, - par->color_trc); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOCOLORTRANSFERCHARACTERISTICS, + par->color_trc); } if (par->color_space != AVCOL_SPC_UNSPECIFIED && par->color_space < AVCOL_SPC_NB) { - put_ebml_uint(dyn_cp, MATROSKA_ID_VIDEOCOLORMATRIXCOEFF, par->color_space); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOCOLORMATRIXCOEFF, + par->color_space); } if (par->color_primaries != AVCOL_PRI_UNSPECIFIED && par->color_primaries < AVCOL_PRI_NB) { - put_ebml_uint(dyn_cp, MATROSKA_ID_VIDEOCOLORPRIMARIES, par->color_primaries); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOCOLORPRIMARIES, + par->color_primaries); } if (par->color_range != AVCOL_RANGE_UNSPECIFIED && par->color_range < AVCOL_RANGE_NB) { - put_ebml_uint(dyn_cp, MATROSKA_ID_VIDEOCOLORRANGE, par->color_range); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOCOLORRANGE, par->color_range); } if (par->chroma_location != AVCHROMA_LOC_UNSPECIFIED && par->chroma_location <= AVCHROMA_LOC_TOP) { int xpos, ypos; avcodec_enum_to_chroma_pos(&xpos, &ypos, par->chroma_location); - put_ebml_uint(dyn_cp, MATROSKA_ID_VIDEOCOLORCHROMASITINGHORZ, (xpos >> 7) + 1); - put_ebml_uint(dyn_cp, MATROSKA_ID_VIDEOCOLORCHROMASITINGVERT, (ypos >> 7) + 1); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOCOLORCHROMASITINGHORZ, + (xpos >> 7) + 1); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOCOLORCHROMASITINGVERT, + (ypos >> 7) + 1); } side_data = av_stream_get_side_data(st, AV_PKT_DATA_CONTENT_LIGHT_LEVEL, NULL); if (side_data) { const AVContentLightMetadata *metadata = side_data; - put_ebml_uint(dyn_cp, MATROSKA_ID_VIDEOCOLORMAXCLL, metadata->MaxCLL); - put_ebml_uint(dyn_cp, MATROSKA_ID_VIDEOCOLORMAXFALL, metadata->MaxFALL); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOCOLORMAXCLL, + metadata->MaxCLL); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOCOLORMAXFALL, + metadata->MaxFALL); } side_data = av_stream_get_side_data(st, AV_PKT_DATA_MASTERING_DISPLAY_METADATA, NULL); if (side_data) { - ebml_master meta_element = start_ebml_master( - dyn_cp, MATROSKA_ID_VIDEOCOLORMASTERINGMETA, 10 * (2 + 1 + 8)); const AVMasteringDisplayMetadata *metadata = side_data; + ebml_writer_open_master(writer, MATROSKA_ID_VIDEOCOLORMASTERINGMETA); if (metadata->has_primaries) { - put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_RX, - av_q2d(metadata->display_primaries[0][0])); - put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_RY, - av_q2d(metadata->display_primaries[0][1])); - put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_GX, - av_q2d(metadata->display_primaries[1][0])); - put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_GY, - av_q2d(metadata->display_primaries[1][1])); - put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_BX, - av_q2d(metadata->display_primaries[2][0])); - put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_BY, - av_q2d(metadata->display_primaries[2][1])); - put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_WHITEX, - av_q2d(metadata->white_point[0])); - put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_WHITEY, - av_q2d(metadata->white_point[1])); + ebml_writer_add_float(writer, MATROSKA_ID_VIDEOCOLOR_RX, + av_q2d(metadata->display_primaries[0][0])); + ebml_writer_add_float(writer, MATROSKA_ID_VIDEOCOLOR_RY, + av_q2d(metadata->display_primaries[0][1])); + ebml_writer_add_float(writer, MATROSKA_ID_VIDEOCOLOR_GX, + av_q2d(metadata->display_primaries[1][0])); + ebml_writer_add_float(writer, MATROSKA_ID_VIDEOCOLOR_GY, + av_q2d(metadata->display_primaries[1][1])); + ebml_writer_add_float(writer, MATROSKA_ID_VIDEOCOLOR_BX, + av_q2d(metadata->display_primaries[2][0])); + ebml_writer_add_float(writer, MATROSKA_ID_VIDEOCOLOR_BY, + av_q2d(metadata->display_primaries[2][1])); + ebml_writer_add_float(writer, MATROSKA_ID_VIDEOCOLOR_WHITEX, + av_q2d(metadata->white_point[0])); + ebml_writer_add_float(writer, MATROSKA_ID_VIDEOCOLOR_WHITEY, + av_q2d(metadata->white_point[1])); } if (metadata->has_luminance) { - put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX, - av_q2d(metadata->max_luminance)); - put_ebml_float(dyn_cp, MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN, - av_q2d(metadata->min_luminance)); + ebml_writer_add_float(writer, MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX, + av_q2d(metadata->max_luminance)); + ebml_writer_add_float(writer, MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN, + av_q2d(metadata->min_luminance)); } - end_ebml_master(dyn_cp, meta_element); + ebml_writer_close_or_discard_master(writer); } - colorinfo_size = avio_tell(dyn_cp); - if (colorinfo_size) - put_ebml_binary(pb, MATROSKA_ID_VIDEOCOLOR, colour, colorinfo_size); + ebml_writer_close_or_discard_master(writer); } -static void mkv_write_video_projection(AVFormatContext *s, AVIOContext *pb, - const AVStream *st) +#define MAX_VIDEO_PROJECTION_ELEMS 6 +static void mkv_write_video_projection(AVFormatContext *s, EbmlWriter *writer, + const AVStream *st, uint8_t private[]) { - ebml_master projection; - uint8_t private[20]; - const AVSphericalMapping *spherical = (const AVSphericalMapping *)av_stream_get_side_data(st, AV_PKT_DATA_SPHERICAL, NULL); @@ -1209,91 +1226,92 @@ static void mkv_write_video_projection(AVFormatContext *s, AVIOContext *pb, // Maximally 4 8-byte elements with id-length 2 + 1 byte length field // and the private data of the AV_SPHERICAL_EQUIRECTANGULAR_TILE case - projection = start_ebml_master(pb, MATROSKA_ID_VIDEOPROJECTION, - 4 * (2 + 1 + 8) + (2 + 1 + 20)); + ebml_writer_open_master(writer, MATROSKA_ID_VIDEOPROJECTION); switch (spherical->projection) { case AV_SPHERICAL_EQUIRECTANGULAR: - put_ebml_uint(pb, MATROSKA_ID_VIDEOPROJECTIONTYPE, - MATROSKA_VIDEO_PROJECTION_TYPE_EQUIRECTANGULAR); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOPROJECTIONTYPE, + MATROSKA_VIDEO_PROJECTION_TYPE_EQUIRECTANGULAR); break; case AV_SPHERICAL_EQUIRECTANGULAR_TILE: - put_ebml_uint(pb, MATROSKA_ID_VIDEOPROJECTIONTYPE, - MATROSKA_VIDEO_PROJECTION_TYPE_EQUIRECTANGULAR); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOPROJECTIONTYPE, + MATROSKA_VIDEO_PROJECTION_TYPE_EQUIRECTANGULAR); AV_WB32(private, 0); // version + flags AV_WB32(private + 4, spherical->bound_top); AV_WB32(private + 8, spherical->bound_bottom); AV_WB32(private + 12, spherical->bound_left); AV_WB32(private + 16, spherical->bound_right); - put_ebml_binary(pb, MATROSKA_ID_VIDEOPROJECTIONPRIVATE, - private, 20); + ebml_writer_add_bin(writer, MATROSKA_ID_VIDEOPROJECTIONPRIVATE, + private, 20); break; case AV_SPHERICAL_CUBEMAP: - put_ebml_uint(pb, MATROSKA_ID_VIDEOPROJECTIONTYPE, - MATROSKA_VIDEO_PROJECTION_TYPE_CUBEMAP); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOPROJECTIONTYPE, + MATROSKA_VIDEO_PROJECTION_TYPE_CUBEMAP); AV_WB32(private, 0); // version + flags AV_WB32(private + 4, 0); // layout AV_WB32(private + 8, spherical->padding); - put_ebml_binary(pb, MATROSKA_ID_VIDEOPROJECTIONPRIVATE, - private, 12); + ebml_writer_add_bin(writer, MATROSKA_ID_VIDEOPROJECTIONPRIVATE, + private, 12); break; default: av_assert0(0); } if (spherical->yaw) - put_ebml_float(pb, MATROSKA_ID_VIDEOPROJECTIONPOSEYAW, - (double) spherical->yaw / (1 << 16)); + ebml_writer_add_float(writer, MATROSKA_ID_VIDEOPROJECTIONPOSEYAW, + (double) spherical->yaw / (1 << 16)); if (spherical->pitch) - put_ebml_float(pb, MATROSKA_ID_VIDEOPROJECTIONPOSEPITCH, + ebml_writer_add_float(writer, MATROSKA_ID_VIDEOPROJECTIONPOSEPITCH, (double) spherical->pitch / (1 << 16)); if (spherical->roll) - put_ebml_float(pb, MATROSKA_ID_VIDEOPROJECTIONPOSEROLL, + ebml_writer_add_float(writer, MATROSKA_ID_VIDEOPROJECTIONPOSEROLL, (double) spherical->roll / (1 << 16)); - end_ebml_master(pb, projection); + ebml_writer_close_master(writer); } -static void mkv_write_field_order(AVIOContext *pb, int is_webm, +#define MAX_FIELD_ORDER_ELEMS 2 +static void mkv_write_field_order(EbmlWriter *writer, int is_webm, enum AVFieldOrder field_order) { switch (field_order) { case AV_FIELD_UNKNOWN: break; case AV_FIELD_PROGRESSIVE: - put_ebml_uint(pb, MATROSKA_ID_VIDEOFLAGINTERLACED, - MATROSKA_VIDEO_INTERLACE_FLAG_PROGRESSIVE); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOFLAGINTERLACED, + MATROSKA_VIDEO_INTERLACE_FLAG_PROGRESSIVE); break; case AV_FIELD_TT: case AV_FIELD_BB: case AV_FIELD_TB: case AV_FIELD_BT: - put_ebml_uint(pb, MATROSKA_ID_VIDEOFLAGINTERLACED, - MATROSKA_VIDEO_INTERLACE_FLAG_INTERLACED); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOFLAGINTERLACED, + MATROSKA_VIDEO_INTERLACE_FLAG_INTERLACED); if (!is_webm) { switch (field_order) { case AV_FIELD_TT: - put_ebml_uint(pb, MATROSKA_ID_VIDEOFIELDORDER, - MATROSKA_VIDEO_FIELDORDER_TT); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOFIELDORDER, + MATROSKA_VIDEO_FIELDORDER_TT); break; case AV_FIELD_BB: - put_ebml_uint(pb, MATROSKA_ID_VIDEOFIELDORDER, - MATROSKA_VIDEO_FIELDORDER_BB); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOFIELDORDER, + MATROSKA_VIDEO_FIELDORDER_BB); break; case AV_FIELD_TB: - put_ebml_uint(pb, MATROSKA_ID_VIDEOFIELDORDER, - MATROSKA_VIDEO_FIELDORDER_TB); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOFIELDORDER, + MATROSKA_VIDEO_FIELDORDER_TB); break; case AV_FIELD_BT: - put_ebml_uint(pb, MATROSKA_ID_VIDEOFIELDORDER, - MATROSKA_VIDEO_FIELDORDER_BT); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOFIELDORDER, + MATROSKA_VIDEO_FIELDORDER_BT); break; } } } } -static int mkv_write_stereo_mode(AVFormatContext *s, AVIOContext *pb, +#define MAX_STEREO_MODE_ELEMS 1 +static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer, AVStream *st, int is_webm, int *h_width, int *h_height) { @@ -1380,7 +1398,7 @@ static int mkv_write_stereo_mode(AVFormatContext *s, AVIOContext *pb, } // write StereoMode if format is valid - put_ebml_uint(pb, MATROSKA_ID_VIDEOSTEREOMODE, format); + ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOSTEREOMODE, format); return 0; } @@ -1424,19 +1442,21 @@ static int mkv_write_track_video(AVFormatContext *s, MatroskaMuxContext *mkv, { const AVDictionaryEntry *tag; int display_width_div = 1, display_height_div = 1; - ebml_master subinfo; + uint8_t color_space[4], projection_private[20]; + EBML_WRITER(MAX_FIELD_ORDER_ELEMS + MAX_STEREO_MODE_ELEMS + + MAX_VIDEO_COLOR_ELEMS + MAX_VIDEO_PROJECTION_ELEMS + 8); int ret; - subinfo = start_ebml_master(pb, MATROSKA_ID_TRACKVIDEO, 0); + ebml_writer_open_master(&writer, MATROSKA_ID_TRACKVIDEO); - put_ebml_uint (pb, MATROSKA_ID_VIDEOPIXELWIDTH , par->width); - put_ebml_uint (pb, MATROSKA_ID_VIDEOPIXELHEIGHT, par->height); + ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEOPIXELWIDTH , par->width); + ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEOPIXELHEIGHT, par->height); - mkv_write_field_order(pb, IS_WEBM(mkv), par->field_order); + mkv_write_field_order(&writer, IS_WEBM(mkv), par->field_order); // check both side data and metadata for stereo information, // write the result to the bitstream if any is found - ret = mkv_write_stereo_mode(s, pb, st, IS_WEBM(mkv), + ret = mkv_write_stereo_mode(s, &writer, st, IS_WEBM(mkv), &display_width_div, &display_height_div); if (ret < 0) @@ -1445,7 +1465,7 @@ static int mkv_write_track_video(AVFormatContext *s, MatroskaMuxContext *mkv, if (((tag = av_dict_get(st->metadata, "alpha_mode", NULL, 0)) && atoi(tag->value)) || ((tag = av_dict_get( s->metadata, "alpha_mode", NULL, 0)) && atoi(tag->value)) || (par->format == AV_PIX_FMT_YUVA420P)) { - put_ebml_uint(pb, MATROSKA_ID_VIDEOALPHAMODE, 1); + ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEOALPHAMODE, 1); } // write DisplayWidth and DisplayHeight, they contain the size of @@ -1458,35 +1478,42 @@ static int mkv_write_track_video(AVFormatContext *s, MatroskaMuxContext *mkv, } if (d_width != par->width || display_width_div != 1 || display_height_div != 1) { if (IS_WEBM(mkv) || display_width_div != 1 || display_height_div != 1) { - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYWIDTH , d_width / display_width_div); - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYHEIGHT, par->height / display_height_div); + ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEODISPLAYWIDTH, + d_width / display_width_div); + ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEODISPLAYHEIGHT, + par->height / display_height_div); } else { AVRational display_aspect_ratio; av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den, par->width * (int64_t)st->sample_aspect_ratio.num, par->height * (int64_t)st->sample_aspect_ratio.den, 1024 * 1024); - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYWIDTH, display_aspect_ratio.num); - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYHEIGHT, display_aspect_ratio.den); - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYUNIT, MATROSKA_VIDEO_DISPLAYUNIT_DAR); + ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEODISPLAYWIDTH, + display_aspect_ratio.num); + ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEODISPLAYHEIGHT, + display_aspect_ratio.den); + ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEODISPLAYUNIT, + MATROSKA_VIDEO_DISPLAYUNIT_DAR); } } } else if (display_width_div != 1 || display_height_div != 1) { - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYWIDTH , par->width / display_width_div); - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYHEIGHT, par->height / display_height_div); + ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEODISPLAYWIDTH, + par->width / display_width_div); + ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEODISPLAYHEIGHT, + par->height / display_height_div); } else if (!IS_WEBM(mkv)) - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYUNIT, MATROSKA_VIDEO_DISPLAYUNIT_UNKNOWN); + ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEODISPLAYUNIT, + MATROSKA_VIDEO_DISPLAYUNIT_UNKNOWN); if (par->codec_id == AV_CODEC_ID_RAWVIDEO) { - uint32_t color_space = av_le2ne32(par->codec_tag); - put_ebml_binary(pb, MATROSKA_ID_VIDEOCOLORSPACE, &color_space, sizeof(color_space)); + AV_WL32(color_space, par->codec_tag); + ebml_writer_add_bin(&writer, MATROSKA_ID_VIDEOCOLORSPACE, + color_space, sizeof(color_space)); } - mkv_write_video_color(pb, st, par); - mkv_write_video_projection(s, pb, st); + mkv_write_video_color(&writer, st, par); + mkv_write_video_projection(s, &writer, st, projection_private); - end_ebml_master(pb, subinfo); - - return 0; + return ebml_writer_write(&writer, pb); } static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak index 295489d2cc..2fcac34d62 100644 --- a/tests/fate/matroska.mak +++ b/tests/fate/matroska.mak @@ -12,7 +12,7 @@ fate-matroska-prores-header-insertion-bz2: CMD = framecrc -i $(TARGET_SAMPLES)/m FATE_MATROSKA-$(call DEMMUX, MATROSKA, MATROSKA) += fate-matroska-remux fate-matroska-remux: CMD = md5pipe -i $(TARGET_SAMPLES)/vp9-test-vectors/vp90-2-2pass-akiyo.webm -color_trc 4 -c:v copy -fflags +bitexact -strict -2 -f matroska fate-matroska-remux: CMP = oneline -fate-matroska-remux: REF = 26fabd90326e3de4bb6afe1b216ce232 +fate-matroska-remux: REF = b9c7b650349972c9dce42ab79b472917 FATE_MATROSKA-$(call ALLYES, MATROSKA_DEMUXER VORBIS_PARSER) += fate-matroska-xiph-lacing fate-matroska-xiph-lacing: CMD = framecrc -i $(TARGET_SAMPLES)/mkv/xiph_lacing.mka -c:a copy diff --git a/tests/ref/fate/matroska-dovi-write-config7 b/tests/ref/fate/matroska-dovi-write-config7 index b652fe411d..65c397b807 100644 --- a/tests/ref/fate/matroska-dovi-write-config7 +++ b/tests/ref/fate/matroska-dovi-write-config7 @@ -1,5 +1,5 @@ -058e95f1effefe3842b6174bba2693fc *tests/data/fate/matroska-dovi-write-config7.matroska -72707 tests/data/fate/matroska-dovi-write-config7.matroska +7981e419c77ebd4180caafc0b45ade4d *tests/data/fate/matroska-dovi-write-config7.matroska +72693 tests/data/fate/matroska-dovi-write-config7.matroska #extradata 0: 116, 0x2b8d1669 #extradata 1: 116, 0x2b8d1669 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-h264-remux b/tests/ref/fate/matroska-h264-remux index e55708ce37..4004afef9a 100644 --- a/tests/ref/fate/matroska-h264-remux +++ b/tests/ref/fate/matroska-h264-remux @@ -1,5 +1,5 @@ -ae0ccd32cc0d3bfc1eaa15c7fc985dfb *tests/data/fate/matroska-h264-remux.matroska -2036075 tests/data/fate/matroska-h264-remux.matroska +e4b0303e7bfbc8394bf47e11ab991d48 *tests/data/fate/matroska-h264-remux.matroska +2036061 tests/data/fate/matroska-h264-remux.matroska #tb 0: 1/25 #media_type 0: video #codec_id 0: rawvideo diff --git a/tests/ref/fate/matroska-mastering-display-metadata b/tests/ref/fate/matroska-mastering-display-metadata index f13d60ff2f..a3055c7bc7 100644 --- a/tests/ref/fate/matroska-mastering-display-metadata +++ b/tests/ref/fate/matroska-mastering-display-metadata @@ -1,5 +1,5 @@ -64403411e52d7ba9081ab5692e422737 *tests/data/fate/matroska-mastering-display-metadata.matroska -1669597 tests/data/fate/matroska-mastering-display-metadata.matroska +62866a79d93bbe699d6abb6592ceb50e *tests/data/fate/matroska-mastering-display-metadata.matroska +1669585 tests/data/fate/matroska-mastering-display-metadata.matroska #extradata 0: 4, 0x040901a3 #extradata 3: 200, 0x506463a8 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-ms-mode b/tests/ref/fate/matroska-ms-mode index 5fe052c39b..a38c0aa91c 100644 --- a/tests/ref/fate/matroska-ms-mode +++ b/tests/ref/fate/matroska-ms-mode @@ -1,5 +1,5 @@ -b3d928e92bc8b323793a237ce82f9437 *tests/data/fate/matroska-ms-mode.matroska -413108 tests/data/fate/matroska-ms-mode.matroska +20e86febdfa8a2d5aefd83f89d5d99a7 *tests/data/fate/matroska-ms-mode.matroska +413101 tests/data/fate/matroska-ms-mode.matroska #extradata 0: 40, 0x54290c93 #extradata 1: 114, 0xb6c80771 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-qt-mode b/tests/ref/fate/matroska-qt-mode index 770d9e7e91..f322df24c1 100644 --- a/tests/ref/fate/matroska-qt-mode +++ b/tests/ref/fate/matroska-qt-mode @@ -1,5 +1,5 @@ -1e525172caec2bf4e191a68c97bbbc51 *tests/data/fate/matroska-qt-mode.matroska -1884243 tests/data/fate/matroska-qt-mode.matroska +7f3a5c46ccb2b95074bdabc034ee71d1 *tests/data/fate/matroska-qt-mode.matroska +1884236 tests/data/fate/matroska-qt-mode.matroska #extradata 0: 90, 0x817d0185 #tb 0: 1/1000 #media_type 0: video diff --git a/tests/ref/fate/matroska-spherical-mono-remux b/tests/ref/fate/matroska-spherical-mono-remux index 24d4413a87..6b7d64f6d5 100644 --- a/tests/ref/fate/matroska-spherical-mono-remux +++ b/tests/ref/fate/matroska-spherical-mono-remux @@ -1,5 +1,5 @@ -9176856edc1ff2b401e323f422fd8e78 *tests/data/fate/matroska-spherical-mono-remux.matroska -161583 tests/data/fate/matroska-spherical-mono-remux.matroska +28d9277e1992fa362e7eac7a16261fde *tests/data/fate/matroska-spherical-mono-remux.matroska +161569 tests/data/fate/matroska-spherical-mono-remux.matroska #extradata 0: 43, 0x2b0e0d7b #extradata 1: 43, 0x2b0e0d7b #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-vp8-alpha-remux b/tests/ref/fate/matroska-vp8-alpha-remux index 165c2404e7..413961672f 100644 --- a/tests/ref/fate/matroska-vp8-alpha-remux +++ b/tests/ref/fate/matroska-vp8-alpha-remux @@ -1,5 +1,5 @@ -e3912762161bb6e7f9607c085b371676 *tests/data/fate/matroska-vp8-alpha-remux.matroska -237185 tests/data/fate/matroska-vp8-alpha-remux.matroska +89c4f6136f151f45c217ec363fe9db2b *tests/data/fate/matroska-vp8-alpha-remux.matroska +237178 tests/data/fate/matroska-vp8-alpha-remux.matroska #tb 0: 1/1000 #media_type 0: video #codec_id 0: vp8 diff --git a/tests/ref/fate/rgb24-mkv b/tests/ref/fate/rgb24-mkv index 2630265ebc..a9461dfc1b 100644 --- a/tests/ref/fate/rgb24-mkv +++ b/tests/ref/fate/rgb24-mkv @@ -1,5 +1,5 @@ -2c7192d8b62c6a11e311a09ab3bef3b8 *tests/data/fate/rgb24-mkv.matroska -58224 tests/data/fate/rgb24-mkv.matroska +afc7b59819a8d69773b04757278fccef *tests/data/fate/rgb24-mkv.matroska +58217 tests/data/fate/rgb24-mkv.matroska #tb 0: 1/10 #media_type 0: video #codec_id 0: rawvideo diff --git a/tests/ref/lavf-fate/av1.mkv b/tests/ref/lavf-fate/av1.mkv index 454aef53fb..7d7acae135 100644 --- a/tests/ref/lavf-fate/av1.mkv +++ b/tests/ref/lavf-fate/av1.mkv @@ -1,3 +1,3 @@ -61e66b67c0c38532f6c6edc8c9d32e48 *tests/data/lavf-fate/lavf.av1.mkv -55656 tests/data/lavf-fate/lavf.av1.mkv +33e58aee4132d60e7ae21ecf3ae9e35f *tests/data/lavf-fate/lavf.av1.mkv +55649 tests/data/lavf-fate/lavf.av1.mkv tests/data/lavf-fate/lavf.av1.mkv CRC=0x7c27cc15 diff --git a/tests/ref/lavf/mkv b/tests/ref/lavf/mkv index e737cdf6ac..e089bff61c 100644 --- a/tests/ref/lavf/mkv +++ b/tests/ref/lavf/mkv @@ -1,3 +1,3 @@ -3e37e53471f20f2b7169afd75cba70d2 *tests/data/lavf/lavf.mkv -320424 tests/data/lavf/lavf.mkv +c5e6db66eb81415c2a5128f4298850a8 *tests/data/lavf/lavf.mkv +320417 tests/data/lavf/lavf.mkv tests/data/lavf/lavf.mkv CRC=0xec6c3c68 diff --git a/tests/ref/lavf/mkv_attachment b/tests/ref/lavf/mkv_attachment index 4a2f9eb7f1..18dc902ca7 100644 --- a/tests/ref/lavf/mkv_attachment +++ b/tests/ref/lavf/mkv_attachment @@ -1,3 +1,3 @@ -32b24b97956f1fbcfbc1a94aac8f6202 *tests/data/lavf/lavf.mkv_attachment -472574 tests/data/lavf/lavf.mkv_attachment +a24aaf26dde6461f89acb7dd7c492015 *tests/data/lavf/lavf.mkv_attachment +472567 tests/data/lavf/lavf.mkv_attachment tests/data/lavf/lavf.mkv_attachment CRC=0xec6c3c68 diff --git a/tests/ref/seek/lavf-mkv b/tests/ref/seek/lavf-mkv index 37945246ab..cbdbe9bfd1 100644 --- a/tests/ref/seek/lavf-mkv +++ b/tests/ref/seek/lavf-mkv @@ -1,48 +1,48 @@ -ret: 0 st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos: 672 size: 208 +ret: 0 st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos: 665 size: 208 ret: 0 st:-1 flags:0 ts:-1.000000 -ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 888 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 881 size: 27837 ret: 0 st:-1 flags:1 ts: 1.894167 -ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292304 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292297 size: 27834 ret: 0 st: 0 flags:0 ts: 0.788000 -ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292304 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292297 size: 27834 ret: 0 st: 0 flags:1 ts:-0.317000 -ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 888 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 881 size: 27837 ret:-1 st: 1 flags:0 ts: 2.577000 ret: 0 st: 1 flags:1 ts: 1.471000 -ret: 0 st: 1 flags:1 dts: 0.993000 pts: 0.993000 pos: 320145 size: 209 +ret: 0 st: 1 flags:1 dts: 0.993000 pts: 0.993000 pos: 320138 size: 209 ret: 0 st:-1 flags:0 ts: 0.365002 -ret: 0 st: 0 flags:1 dts: 0.491000 pts: 0.491000 pos: 146856 size: 27925 +ret: 0 st: 0 flags:1 dts: 0.491000 pts: 0.491000 pos: 146849 size: 27925 ret: 0 st:-1 flags:1 ts:-0.740831 -ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 888 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 881 size: 27837 ret:-1 st: 0 flags:0 ts: 2.153000 ret: 0 st: 0 flags:1 ts: 1.048000 -ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292304 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292297 size: 27834 ret: 0 st: 1 flags:0 ts:-0.058000 -ret: 0 st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos: 672 size: 208 +ret: 0 st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos: 665 size: 208 ret: 0 st: 1 flags:1 ts: 2.836000 -ret: 0 st: 1 flags:1 dts: 0.993000 pts: 0.993000 pos: 320145 size: 209 +ret: 0 st: 1 flags:1 dts: 0.993000 pts: 0.993000 pos: 320138 size: 209 ret:-1 st:-1 flags:0 ts: 1.730004 ret: 0 st:-1 flags:1 ts: 0.624171 -ret: 0 st: 0 flags:1 dts: 0.491000 pts: 0.491000 pos: 146856 size: 27925 +ret: 0 st: 0 flags:1 dts: 0.491000 pts: 0.491000 pos: 146849 size: 27925 ret: 0 st: 0 flags:0 ts:-0.482000 -ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 888 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 881 size: 27837 ret: 0 st: 0 flags:1 ts: 2.413000 -ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292304 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292297 size: 27834 ret:-1 st: 1 flags:0 ts: 1.307000 ret: 0 st: 1 flags:1 ts: 0.201000 -ret: 0 st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos: 672 size: 208 +ret: 0 st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos: 665 size: 208 ret: 0 st:-1 flags:0 ts:-0.904994 -ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 888 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 881 size: 27837 ret: 0 st:-1 flags:1 ts: 1.989173 -ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292304 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292297 size: 27834 ret: 0 st: 0 flags:0 ts: 0.883000 -ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292304 size: 27834 +ret: 0 st: 0 flags:1 dts: 0.971000 pts: 0.971000 pos: 292297 size: 27834 ret: 0 st: 0 flags:1 ts:-0.222000 -ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 888 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 881 size: 27837 ret:-1 st: 1 flags:0 ts: 2.672000 ret: 0 st: 1 flags:1 ts: 1.566000 -ret: 0 st: 1 flags:1 dts: 0.993000 pts: 0.993000 pos: 320145 size: 209 +ret: 0 st: 1 flags:1 dts: 0.993000 pts: 0.993000 pos: 320138 size: 209 ret: 0 st:-1 flags:0 ts: 0.460008 -ret: 0 st: 0 flags:1 dts: 0.491000 pts: 0.491000 pos: 146856 size: 27925 +ret: 0 st: 0 flags:1 dts: 0.491000 pts: 0.491000 pos: 146849 size: 27925 ret: 0 st:-1 flags:1 ts:-0.645825 -ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 888 size: 27837 +ret: 0 st: 0 flags:1 dts: 0.011000 pts: 0.011000 pos: 881 size: 27837 From patchwork Sun Jan 16 23:03:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33621 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2272965iog; Sun, 16 Jan 2022 15:05:36 -0800 (PST) X-Google-Smtp-Source: ABdhPJyvWO73I/p/EbdTwnDZ7KViSUJJEOOIItT624zJfaCWreT/lEcPz5TqlrIppgs7F8Ld+dSm X-Received: by 2002:a05:6402:43c5:: with SMTP id p5mr15467036edc.95.1642374336042; Sun, 16 Jan 2022 15:05:36 -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 ji10si6393863ejc.471.2022.01.16.15.05.35; Sun, 16 Jan 2022 15:05:36 -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=YkMOfnsc; 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 1E2DB68AF0A; Mon, 17 Jan 2022 01:05:00 +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-oln040092073070.outbound.protection.outlook.com [40.92.73.70]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7441268AE99 for ; Mon, 17 Jan 2022 01:04:58 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l09O8kvxlzdDTqSKIRbl8hvLKetng4qt9JqBF7wDsSEodHeeKNIjyi7arApY+t4OKjayf/q/ppes1+4L/wY4ixz3ksFqBEj0GGW8yWFk0JHPP2IWMQl4VrP/ve7M3O9l/tuXNVXEFwmIOVZzIVHeHs8K08APC46hQ/7JIOF4loenClp0t5VUMiTkwfebblNtP4BYeVrOg4xHoh5WBg11DAkFV2E7jUlA8v8cn73DIBkKE0mr1qMO3yr3c4ndDvIvYmEg9MnfIg/CdO1yW/kkI7bRnienbvRrjuNN6Frf6uWR/J/FtcVRDOd0Ied8mIFNjmWVXx1krwBCbuklxUcV3w== 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=Owh9PgKIM79afO9eos4TSLk54nRZJlOzpz48TYubiNY=; b=YC10aa7ZDMqBs5bs/w8niimc8fXkYZufhLzqT7s/18rkWjBx4n3nKxY16iWPd6Afj7ruQI/HiyJQ5ZdYSi1lTGVzyOAfrl9E2fh+EFafwU3vV5NH5O28tDr14HCU4M2ch+XhfcRQxvwXDoFLKRxS+MJxNBQRtQ8tbgAY2f7x8TpHzGtpq9L25ZL8oESCMzp5TOpqcUAtjPPH8rheekXCBpLVyE/7RDySHxW+3IMC7GClO12SMiBLdj9XiuPRakzdTxdYCVliI23F9DoSINnQn9R07Gm5xxjjBbLqP2+fDbWweoEufk+v4h6wjeeibSP0urqVlWvVh3NSVomC1cevdg== 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=Owh9PgKIM79afO9eos4TSLk54nRZJlOzpz48TYubiNY=; b=YkMOfnsc0rmCFKWgQaCOAM3ce1pK8gNyMU4EWQeNdegDvyq9ImswTi4BvzhxGnuv9em//kAbACGGe+ZhCQB9+BvkHIzWkZktbb//SCXPdytmaC1jlcXr+cfgfBseUZYj4Ebh4GF/heRCdk8qbcUuab6MvvtFx5cNBaamHVugKt1YCN4ep3yAMAX0JObdUesZYSI0r2iXdkn3/Q+L963gYTx/hOg8QugRSylvSU9TeejUpoyXiCgaJtPSeIfzWqn+3Uxf3cSUtGWny6KrbjDJId4SiwDesHkzHce4VeOkKgUaEqHQ7kY9FvKzTi3Fsq/y0lDcgW1od9RbShGBfQ1tTA== 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:04:57 +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:04:57 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:49 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [b5/uxrd8YJmJblJzCQ0/92ehHJn2RsyA] 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-8-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 17313ad1-a22e-4bc4-9fca-08d9d9449d42 X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEuZvKHt/RRJ4O3wxWCrUcc4xmg+S8kYo3U2NKCdFccZBUTIu+KSE8qpl8ocuVMEnoEEsFKPTlLAJ1mValnFdmuvLLat0+tcj1uauv/fguwkkFeAFF4kFkp91rX0LxMrEVmiHiEBvJ2NyOsxw2BQRmEL3+L+VLoUHrHIbExdAInc+9onMx1Ffk5MADzh4OgVCJ+bcOiXe1MDlvx7U6TD6Sn9v1j2mKQPwLfCcUZ8BqZj+YT+zcq8C3EG8vUthmhrdKN36/IHNqkCJr+oERU56A2dwYzaR7OVUoGxRLrmbUCsD9Bq9u72Jdsy0c3b8jR8yS43X530HeVwQ/F7z2X4MkZ8AaFJo+UN8yMlTYbzacBvvBDog3O2csvR/iZKO+ptqNZFVBzcOc7PP/MznUsq+6q6h6e2n6ADnQn68tMER/olvLVz+dWvZvEtXlmPcEZFRqRksR6/P+w8Wl8YCwGyR1g++0YVG0xJLrurj/8AzSZamx5BjnQiOC4OJ5bKT124/5KMUvdkIRJI8IswVgEY++p9c2CsBsBi7Jk+nNFI/PrWoM49Hasx0ZnDe8BWcpgvwJaitAa8EFktdWZ9RdXpeQIA2M/WhTkGoUy77/1mCJKJ2t0FeN+RwsC4Da71nfEkf36q4M8y8mHtlBaq05XWTfV5Za0IuHr/0M98MRGoZf8hmmKKWHYFM0HBckpDSAcrWR4HqiB6QFLEzymBO/eBDFv7DXm0FgaRI7rdPZK8Q/rAMnySMrXwBCSZclfeyinUacWUtczTQaBC/iPstRToKp+w X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Mwyc4aUz03HPEodIc5dIAnLsAPPSht2hpmFw/yTAa7qqHyRlbgbVF9RYZ1l1JdDJ+dT8bXrnwx7BKbbBQL4S4I7RgzK+6YsN4HHbKD+v9U7Rhizv7BSablZd/m/uPBraKcYh8kXqZWLS/fx8Idf6/GXjbPO1pWWWjC40D7eq3xsox1nDWFPfrAoWXGwpNmBwJYhp2FvMcaslXDfdatUSU2EDhQ73eH8QrEkKckfiOoXJitIjMKS2MGfczSgiXUNxLo9+aVDrtglFDR7PPqCTGt5zjHrqsYdLo/7cv8HzdJRdrWyf9mceaJrgfP0iJQi8LRnRq9/VHT6BBL3qZ5Kbdcdg3fHDkSUOctNfhnTiyM40vuxMJXQNdS+bL4KhZ+5VNnFWWaHTcF5l7Si66nLUidlsbaYHEpzZEzMGGSM7xJcOfTBl0/jyuw7/155FPwVZdctY65yB692dOB4z5HMl/yy9llY6AXG7cUDTB3sjXhE9gR6I4tt+Z9aQKk4bOYdMv36neRhgE70SLCxhcuB6CStSnyxIj5TN6cHpWmyNjkvxbv0t4+RFcnxMgfNXPhJavOEgDlnhckOuzCX7/Xmxew== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Moqw52YY/leTjyf3sNpfmXPP5ZJOpOECjy6afOxruMNnolXtM37twkBENNf2+Me8EEu6CyoNZ9OHVhvLPR++wd7xXvk7KbKw6pj/ivYYkLMgMwrw9SQ3Atdqe5n3SWzN1GmDEcxIDGb/wViHOWo/DbX62c5/W8SW1B6F5iWnyjb5m/JPFxzAL4FMzqnXElSpBOoH9c4E8WcucjipxEfu4dJegaqYK1zxncnHOAt7LHq68JVkSPwbHD7SHZ0hSUcxpHiGSj4tRoLD8b0a0glVkCkIxX2r22Yw3BR1UXgmpY8oIJNRWOkjYgqZw7gdPRxo5P1+ma3vRxCFfyn7sjIxAb+dLMmIXn0FHVRPf1u4NKgqKOqL17cZ5nB2c94dftgnoKzY9K8Tioj2ca9bAIuzSLgvJraKE5eip9d4K7pDEWfsMeunbscjr2BT6ZLeP+TpIDqfgGlIliYmR5BcpSK6eZUXoz7yBKI9zydZ+tYHsWqAe0WkKlX3lbFWb90VhijETffZFnVH3cKuY2G8ZB0G7AkG40qLo86Fq/xfpgMBlIjhbgEhw2NUsYYc+/COdujW7Eiuo3WunTNDHceccdVeTCA3EWZnU04fWYtuVmpc80q8RKtZI0B/t3b5Kesimp1JquV3qDk7USMtsE6tMdZtE7FHssGIjNKNTYlnvEo+SIK5luCJe4XQj2AgagVAVFz3kzqdv4Sd8KYxDa6BjYZRZMQIEq1zHQ2RVqmjkmCfb+435u5JbFq5jBX2LZ5FdfyPINFX8IX4uzKtiasRWQqYy6lbU8tGsbeT5ET76jmtI3p3TuLRSq0tA4aMO5N5D+h0oJCvdXon7541IoXb2x/Hg30ZwyRIxFzvPWlK2UufuTMYTRAZBx4J+UdYYf6gnqmi0HoTQqbogIXJMDxlzTkBC7aeYqDNxjgs6b+6lHC9H/ZKFSK+a4vZc4Si3ZDQhW84crUhl4nOt284oJmxgmYTlw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 17313ad1-a22e-4bc4-9fca-08d9d9449d42 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:04:57.1400 (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 09/25] avformat/matroskaenc: Don't waste bytes on ChapterAtoms length fields 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: 1KbqbPsMrfEA Also check the (user-provided) metadata tags for being too long. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 22 ++++++++++++---------- tests/ref/fate/webm-dash-chapters | 4 ++-- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 236dd3ae8d..fa58f1e171 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2013,12 +2013,13 @@ static int mkv_write_chapters(AVFormatContext *s) create_new_ids = mkv_new_chapter_ids_needed(s); for (unsigned i = 0; i < s->nb_chapters; i++) { - ebml_master chapteratom, chapterdisplay; const AVChapter *c = s->chapters[i]; int64_t chapterstart = av_rescale_q(c->start, c->time_base, scale); int64_t chapterend = av_rescale_q(c->end, c->time_base, scale); const AVDictionaryEntry *t; uint64_t uid = create_new_ids ? i + 1ULL : c->id; + EBML_WRITER(7); + if (chapterstart < 0 || chapterstart > chapterend || chapterend < 0) { av_log(s, AV_LOG_ERROR, "Invalid chapter start (%"PRId64") or end (%"PRId64").\n", @@ -2027,17 +2028,18 @@ static int mkv_write_chapters(AVFormatContext *s) goto fail; } - chapteratom = start_ebml_master(dyn_cp, MATROSKA_ID_CHAPTERATOM, 0); - put_ebml_uint(dyn_cp, MATROSKA_ID_CHAPTERUID, uid); - put_ebml_uint(dyn_cp, MATROSKA_ID_CHAPTERTIMESTART, chapterstart); - put_ebml_uint(dyn_cp, MATROSKA_ID_CHAPTERTIMEEND, chapterend); + ebml_writer_open_master(&writer, MATROSKA_ID_CHAPTERATOM); + ebml_writer_add_uint(&writer, MATROSKA_ID_CHAPTERUID, uid); + ebml_writer_add_uint(&writer, MATROSKA_ID_CHAPTERTIMESTART, chapterstart); + ebml_writer_add_uint(&writer, MATROSKA_ID_CHAPTERTIMEEND, chapterend); if ((t = av_dict_get(c->metadata, "title", NULL, 0))) { - chapterdisplay = start_ebml_master(dyn_cp, MATROSKA_ID_CHAPTERDISPLAY, 0); - put_ebml_string(dyn_cp, MATROSKA_ID_CHAPSTRING, t->value); - put_ebml_string(dyn_cp, MATROSKA_ID_CHAPLANG , "und"); - end_ebml_master(dyn_cp, chapterdisplay); + ebml_writer_open_master(&writer, MATROSKA_ID_CHAPTERDISPLAY); + ebml_writer_add_string(&writer, MATROSKA_ID_CHAPSTRING, t->value); + ebml_writer_add_string(&writer, MATROSKA_ID_CHAPLANG , "und"); } - end_ebml_master(dyn_cp, chapteratom); + ret = ebml_writer_write(&writer, dyn_cp); + if (ret < 0) + goto fail; if (tags && mkv_check_tag(c->metadata, MATROSKA_ID_TAGTARGETS_CHAPTERUID)) { ret = mkv_write_tag(mkv, c->metadata, tags, NULL, diff --git a/tests/ref/fate/webm-dash-chapters b/tests/ref/fate/webm-dash-chapters index c2f87b2d7c..95114e6526 100644 --- a/tests/ref/fate/webm-dash-chapters +++ b/tests/ref/fate/webm-dash-chapters @@ -1,5 +1,5 @@ -d3a67db17fdca71b9f8cf57c341a031b *tests/data/fate/webm-dash-chapters.webm -111218 tests/data/fate/webm-dash-chapters.webm +01732642a0750de3959fd348092929a5 *tests/data/fate/webm-dash-chapters.webm +111162 tests/data/fate/webm-dash-chapters.webm #extradata 0: 3469, 0xc6769ddc #tb 0: 1/1000 #media_type 0: audio From patchwork Sun Jan 16 23:03:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33622 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2273108iog; Sun, 16 Jan 2022 15:05:45 -0800 (PST) X-Google-Smtp-Source: ABdhPJx/VGmvFiQ6lTE+qXLtkuB0YvfdsN+4mB4O1UzDTlStAqJVT1JKDluUCtIoqbvknVpfZedf X-Received: by 2002:a05:6402:26c8:: with SMTP id x8mr18223681edd.305.1642374345623; Sun, 16 Jan 2022 15:05:45 -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 e2si5367103edj.443.2022.01.16.15.05.45; Sun, 16 Jan 2022 15:05:45 -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="WHon8/ho"; 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 363DB68AF2B; Mon, 17 Jan 2022 01:05:08 +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-oln040092073103.outbound.protection.outlook.com [40.92.73.103]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EF70E68AEE9 for ; Mon, 17 Jan 2022 01:05:01 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TyKMEtUcvfOjB4Rkv97OD4bf3AXlRZl74EL1tkdEVcXVFO2NP3asR8pvNCxzuCmmRVKdFJy2dUgdftAcq32JCT2QnEu3BRH4gAuELU8rdrY8S1QwoymjFVpe/RUBgRckmbxKuZLjShWPZ1e6gbjkOddHENwaxEeQ220V6yTgw1VLDiTneVemsvgqlkdmsIem9cyIaHo1M+9I6ZnwBYJC4De38dYWw54oU6hdq3/wJXpFRWV7CVyaSbano600VptylPrOQ65gED/cCeBUkeIsUfrQYVtjXqnbbGF/Tlwmvy/AnvbpkkMz49g26+XIet1NtvIObX9o5OBpjbj1uq51Ag== 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=h74oCAJry7xX0gmhy/4OQd7FOH2p9wpQloZaF5dMgc0=; b=mUzc+IJX47/RTexNZwYFR9JBNYp2UJ+EQliVAa+R2gYTlVNRmXDeO0/UtxXnJ7uTMMsPWup9ksZP39pvz4YUVzdB2eB+09IhgsRA6hcVO/SpuG3pwLYgPLZRyFgPkIPKaAN8nn7cvGEbhu7/h4eUUREoaSUHNpZagkJg454Bl3tN8K85N51Er6+bJrfM5dK7FwjqfyQN/vAUpoC2f2ITQzPjqzunznfdOo9JI2je6ptJYrPKOFw+hEignJFE409ASfXYc4SkDSxU4vBpxgJ9Rnf5LpbhgwaCCCTjmj3xmXgmj3ahG7lih7LZDFqwrQ1jVtHbzfFLnM6uGxJIU7dTjA== 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=h74oCAJry7xX0gmhy/4OQd7FOH2p9wpQloZaF5dMgc0=; b=WHon8/hoFUsioabcwpN7ewqpadk1+Nv/eEhkg8O5ETXFHGNbdwWLFrw7TGFeJUVX2QiYG55JbyL0auZxti64dYTtYwZq1bcuQ9g9jSU8KInnHzswvbfcLLOq5j6BFQvzaLAQW9KLRS/cFMVA9qze15S0JDq3BJrOUzMjtWwTp8A+S4HWxBhGieJagC9jr207yVcmRK9Sp2TpWQj57PmsMtirjQ0viwtbJYAThRLuS/iXxLZhrc0P6HJsC5Kk57tMLrOLm7dW2n/L8H3p9ny2ghYqeWp/Rh5SWEqCWY7AHRppp2qMouwQ+dFF3VEi6v9jP3MnFwVm/cxfgPj0XoomLA== 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:00 +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:00 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:50 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [5bthLPGP4DvpaUxXwVqRZbsIUBbHErUT] 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-9-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 22863027-a6fd-4d71-c200-08d9d9449f86 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPns4Wv1yLenCemITwOL96x+u4EAEYZNUPtfpB8s7pdZZhfHUaQcAzlBtjn455zTPqpeclNB9PfxFhwQpnoUYt64rooA/Wl/OtB57lx9DJi6aWWH94kweKRCWkpJL619I0NNy8rImPOP84qjgIDmuAEwvmCLrEKL3d5oD5Z6ps+Ys2/4UwngWPvYlgkYg80SrPgBYFhn9Eq10N6LaR5PZgqetxkZ5otrgNsN5Se++ThiozSxn90p5GF4am8bA61gtQlKf6b7r47hy53KzZQdu60r8qOf2+bVBlX74hx6WKHcxseU6Wv/A5KdW5/LSsnc2d6gsx6MIHPasJPGVfA0H5OUloERunWutFWUEbcHPauc/ZRr2q9U3kCS4BNjLDX6Br+SK6SCaU3S53rUMATCbgdUg1qoSIgkQslSVnKiRbPubRLky8tVbJNgGkPOglfqmxD3h54P2tKiOYRs6Od//jPNpfFcnBsvNdBo1RyaJuwKjoVEOoVYXyVfkQcGNtNNCcEsI3LNTFIpZFpMAndLodSIonXMZeYdi9ax8Rl/QJfRNMgj/9L7f8JIH8LA6VXTr3WgCXVcjJWKLySKf6WEkj5Fbm4NcyqZrT4MUqkoy5jlks2i9UBr0n07If1sZVE7Z5rjho6J/Ng87Ie0VFuBT/YOJo+OmcXbbKtMX1Yq/tufwlF5vDXIAiNBqp3HZji/iRk6N7TAT2L+n6SHZSl29GKMxtFynxMRlZ4sxK+gbZfvzaM= X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: cC/vEiqfsfrFw5e64qvTmi36d1OotyiSVDY8XJvcMpwx8lMWH5tUhhcYINR4uBt1vPAZE+thMuDlH0hzgvRGVc/5U0M8tp+9Nvn3TaAh23UezNg16/HEZKtYdrEiTe3+Ukgy5I7bjsrD+iLw00zDGlWEhMYrSp65svoDOu6nmIsoBf+PCs9iEWdYA4Vc7ehUDVIn2FdAKMbdCNry7NJmStd8k4Gfa9ldGnmi1VcDzk9E36od0LZw1S6SBSLni1l4gHSQH9sIA3M7yGWmcD+WjVhtEUMJJY2Cvk4EjmfjcXiQjNyeCXjyhXpg/VQpb9kfR75d5gTgFh8Ufll6RVrB1GwdAvXPTprZM9ygwhm9WLjv140Cm3/+e+AOksWQFFjNCK6omr0B60/rpoqv1X4gQine8jw9G7S/ch3qNyF2jwvqYUMA612Wi3VTJUKhCwXW5vrKyhjuk8/Y2Oy8O384yqcAkLvqq/etRKb9Oxrc7SfkczsKI0YqqYnCzY4sqMArT+4ZeK0RGIIemrFhZQdwRkkaiufFsjkMPOXtcHVsjzK1lUaluNyrggVSWlEsatIvH5doN1QMdjtCkAdtTKRViw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Ly8/17AbreMprvDT7P28YN1YfN0Xuf/UNjuSPKqlKni4amQ6A/4Eg8fupVQ8nyzavG2maKDvC66MHWZCWhIY6EeqyR2GTnSOPHrD/oHtPWqOUcEHgYJoU5jP/eRG1SubOGpqw6vrPH8fd+YMYdfkMlIzsxy51hviVmvRvIQxKiA9eVp/qZjNzGNo8KXHw+AghTb+kQ/3nPWn18NGyNnjnKimM3huF1Z137dI2y8qAVhoSsvy7u1CY2J/7qI0Ri7QZ277YIuAE0plAWdXZPx7iuyvH4hGGwjaA9kOkhPT2eH2gaZlEYLIeU1VLvjlzZDjPwy+vPXwtY+QdAMdXbihkbOtUv/4fbrRGt6LVzI59nqE9MF90AtMJAyVr72lRWfnZlhUbXVkFSaAaB2YvqKsnnlrToRZa4XZtE2ln+HGTE99ZMYVdKjgssmmw0XTglytdEvX2z/CjgoXdkNAjro8q8gjSFxKzuXV/ExVd8LHO65dQ8IiTdxJdOA/dDeldZS7qjIBQKNmL8sUtKOa7g6mDk4OKBPWOG4KGOxPqfeMTg6IF9RsnWPdRSdUeZvw1eHnMX2JXvlsNgIBGv6ROJUSW7TiaDAkaIf8h0OSFpg93ab2ccMogV6wYYgJ6mQFjvMGDDU2luqD9TVOdUo9DrwkK6tAdcdDvMrPRT8d/RKNckED5IelACqUQbk9WXNVD8bRI98BJlNd1UCMKjjlSM66mkKaGHcMoe5zCNP1t37Poz+5NwuymF4bw+KEHma4cg+kc8T9pCoVUdF29HyMNq3umjhPEeyVXbA89pOguPSO8YHC7YelaqW6zlco6QnnkW3T6Qs41kllttYDU4rUaH7SdyFwkNL122cZags1FbUnUwfJcC/CMgZ49QLX+m0cEDt06y4AVS9TDjuEWdHW7DPTWlDtrPs4i6TeaVIisutT5O71uQTinjuiF06l2y+joWYH/wM+Cv1xKkADNv43vgHF5Q== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 22863027-a6fd-4d71-c200-08d9d9449f86 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:00.8777 (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 10/25] avformat/matroskaenc: Factor writing Info 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: f2TZdV+GR+Tt Avoids the surprise of using pb for the main AVIOContext at the beginning and end of mkv_write_header() and for for the dynamic buffer opened for the Info element in the middle of mkv_write_header(). Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 64 +++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 29 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index fa58f1e171..fb790ebe8b 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2175,36 +2175,13 @@ static void ebml_write_header(AVIOContext *pb, ebml_writer_write(&writer, pb); } -static int mkv_write_header(AVFormatContext *s) +static int mkv_write_info(AVFormatContext *s) { MatroskaMuxContext *mkv = s->priv_data; - AVIOContext *pb = s->pb; const AVDictionaryEntry *tag; - int ret, i, version = 2; int64_t creation_time; - - if (!IS_WEBM(mkv) || - av_dict_get(s->metadata, "stereo_mode", NULL, 0) || - av_dict_get(s->metadata, "alpha_mode", NULL, 0)) - version = 4; - - for (i = 0; i < s->nb_streams; i++) { - if (s->streams[i]->codecpar->codec_id == AV_CODEC_ID_OPUS || - av_dict_get(s->streams[i]->metadata, "stereo_mode", NULL, 0) || - av_dict_get(s->streams[i]->metadata, "alpha_mode", NULL, 0)) - version = 4; - } - - ebml_write_header(pb, s->oformat->name, version); - put_ebml_id(pb, MATROSKA_ID_SEGMENT); - put_ebml_size_unknown(pb, 8); - mkv->segment_offset = avio_tell(pb); - - // We write a SeekHead at the beginning to point to all other level - // one elements (except Clusters). - mkv_start_seekhead(mkv, pb); - - ret = start_ebml_master_crc32(&mkv->info.bc, mkv); + AVIOContext *pb; + int ret = start_ebml_master_crc32(&mkv->info.bc, mkv); if (ret < 0) return ret; pb = mkv->info.bc; @@ -2253,11 +2230,40 @@ static int mkv_write_header(AVFormatContext *s) put_ebml_void(pb, 11); // assumes double-precision float to be written } } - ret = end_ebml_master_crc32_tentatively(s->pb, &mkv->info, - mkv, MATROSKA_ID_INFO); + return end_ebml_master_crc32_tentatively(s->pb, &mkv->info, + mkv, MATROSKA_ID_INFO); +} + +static int mkv_write_header(AVFormatContext *s) +{ + MatroskaMuxContext *mkv = s->priv_data; + AVIOContext *pb = s->pb; + int ret, version = 2; + + if (!IS_WEBM(mkv) || + av_dict_get(s->metadata, "stereo_mode", NULL, 0) || + av_dict_get(s->metadata, "alpha_mode", NULL, 0)) + version = 4; + + for (unsigned i = 0; i < s->nb_streams; i++) { + if (s->streams[i]->codecpar->codec_id == AV_CODEC_ID_OPUS || + av_dict_get(s->streams[i]->metadata, "stereo_mode", NULL, 0) || + av_dict_get(s->streams[i]->metadata, "alpha_mode", NULL, 0)) + version = 4; + } + + ebml_write_header(pb, s->oformat->name, version); + put_ebml_id(pb, MATROSKA_ID_SEGMENT); + put_ebml_size_unknown(pb, 8); + mkv->segment_offset = avio_tell(pb); + + // We write a SeekHead at the beginning to point to all other level + // one elements (except Clusters). + mkv_start_seekhead(mkv, pb); + + ret = mkv_write_info(s); if (ret < 0) return ret; - pb = s->pb; ret = mkv_write_tracks(s); if (ret < 0) From patchwork Sun Jan 16 23:03:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33623 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2273201iog; Sun, 16 Jan 2022 15:05:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJw+TRWIj+dssBrEhjOkCOFa/e5QLNTw7H4WGlzImOUwZ3iUcjdD/yq8djkPV2eCDIJ3g9bv X-Received: by 2002:a50:ab1a:: with SMTP id s26mr18660949edc.182.1642374354583; Sun, 16 Jan 2022 15:05:54 -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 dd4si7027840ejc.991.2022.01.16.15.05.54; Sun, 16 Jan 2022 15:05:54 -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=DyCWZAwl; 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 353F968AF4C; Mon, 17 Jan 2022 01:05:10 +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-oln040092073103.outbound.protection.outlook.com [40.92.73.103]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 351E068AEE9 for ; Mon, 17 Jan 2022 01:05:07 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZdJsZiyfS+wckEiL1nN4GroV81b2sEVneMLwe9krbv6lkBOiuvaywLEAbRIsnOMCZ+XoazBZIuwzZPhRXJpfTJaecbcX8MhUIe3eN0W0fwAelOpuAAlI3qAQb3tmj4jxUzX4VNYdjlrS9UEy+QX63MeR8bEu+hDASKTYVzADJwKKIniV4J94ExKrGdzb28y6dByUlV+REpDYqjHOkaPzuMQZ5GVcNg+NmgH8/FPGW41D+sDtpBquLReUmX6DuGtvli7X9V1TeIy0NWwo2GEjBPbMQWG3zgWK/dZ3VdqrURvaVYv4d9ehvejTLRW/yLcbXNYKmnhemLUJH7QiBJ/p1A== 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=rav/oCb/gezUpi0iOcwoVgsiihSSQWkk8XfthHEB0sw=; b=ls3UsxfLsys2sKjQvfM36mVF+0PURoFRZSJvlMXu0VS9724pHNhdxoTo453Klz725zn3t3bJAT4xINhqrQXDuy9EbvkuxvUwdR9/axZrWRePqxPTcx0z7U0ME4SUCLzeQmCcsoroRj1zUKgXpt2jow4GKp1Be7nRCsabSw6QP9KpGbzdktD6jtOHuZfHSo92b49XE1i8waHiZhO1X66hJqF7DjXDylomje9dCjS7wGUqmuZWtUfnsue6/jXkoskPUJtUove54u0zonaalGxfNIDVDGgvutVfvxJJ9b2O4IgB9zrB7ozWbtXPriAf2kA06MXZmbfMZafNrfDUMQVTVQ== 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=rav/oCb/gezUpi0iOcwoVgsiihSSQWkk8XfthHEB0sw=; b=DyCWZAwlDCWRgWch649jLId81H/+H5SlpGdDcllO4hk0/cTvvEzXix8poSgQWC1rgTO+rOAaJ4cbPjMkKy9lAMhGXbfM6URSJoB96lWTi1/qZVvt4TtGZRihxxQXllnOkkWcjgNNPhFdR68yRFmNNJt1iSmfhrMzw8UZCKVHTMTh4QnTohGrKB+4rd2D+H1Ymn+rmHk2ry7aiQGfu5S0SHVSHuZxpFbyZ4Ty4UO5XC3IF8j9abowUtIbZiB75wlF4OfCmD9bkXUZvJASIOI6Q25gi9vh1VWa26i+phlQXls174N8eFdzJcDIlahKiRBnalNPS1UWCYzJWCtYDNPung== 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:02 +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:02 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:51 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [Y+WqiNwmOJ8SF7OhuDo5bfvTWZPODSfX] 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-10-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2b891afb-ef6f-4368-8aa6-08d9d944a0ae X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPnsyp+3q7lh4J0cWbl9Uu4Yra0gXjB7GiS6DJmuUfS2gPKCtSFeBZVj06ncXgVf7iTcDDS13T2nsHScSxs8sltlZkX0qQZY4RIyGAa8bqGln8cSEDnZ+Tgp9v2sxH8/n3y0lzXpXnESf+JCr8/9mCt+xX/HxvBULnIUOLU3lvV/2ZaRrbUEnSwTGBKU0/JmA4exNUWNbz56Z4Q8GZLmam3mc/Wrk69hiWcrQL9ASxsW2cv8sNBsgn7H/aQ0WjAIRRHuUOyG6QylBk1skf/m9UqQyjdtfeWs8IZ3Ubakc8xIKVyAF0P0eeUOWv09jR+uMXGWy5dVG9HrgaXbkviH9XOza34qiILrbuMpQfCaaersxRfhIlUmR0LX3g+M+QGDMhwjZ/fWOvBKJnd5ped9rNbjRe6f4zofFjCVTuHtv5cqSfvT1aGoy5+ElEUd+eIm2lyetk2Vd+Q2n/ek7cagVoj3CVBj6K+jMBkR72GcgcNwP4G1KnSnUWeD0NZtFm0bxqdjexYxVKAUooquMH4A8xnfpZ20gpX0tmUWrfJd2VHy/+H8POsRi7fX/bDoEicKRp/U5I3PP6oXcVy+gDFfY+RfRJV+rSdjKOFG/j1w1CYxPtIqO/NbZCeNg6n9YZ4levVMDW/XRgJbURbsFBRuzHbOGLdxxjnNXdA1oKgIHSNra55oNRmZQg+k5e9aL/FYaGtuFKObgpC4ZLdIyYPBe4cKBe+J7YgFdp6FR0lU1MmrP/k= X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dAXvRBqyK0UfTJKsht1IDo8S9fGN8Sr4m/rYyYTfgSYsInuGEwF3q4jGiS6ebKKTZGiGjjNA89rQmreqKEwCASb+f7XhG+LneBi22O38fQRlxI4KfgzVSiFeywC7EEfgY65jieVpGM0CIzNwnDikToR012nCoxbFzPM4upzMT44auxSjVmx5q9z+ZgPGH2a+HwdeOykjgGGCCY5vaFwhO/B9ED6zL1yr4ZKFMjR5HcTI1tt3miO7INpaNB4m1z74l2Dt4wI4CPCDB5iUwAOqkbc3A3OSG5oUo7dJfK2V6dFhi2D7afM5h/4wuhqmc/nyb2Nce6WU+6ucu9J0nEh+6FYhqp2lKjRkWPN2eIbIShJf8Bsoh/5NAkiuDitnoA8ZG678AQHA7ygrg/y228ckxVDWfaQklClr65cuh2YReURCk2bXArQIzSYQXCw4L9CwIe8jqVbArBm+flkaIjFJ1jeOTofSW57bmmfa+ZFHYszZCMjwYLw2QajbptYU5zhRFYuiMRFS+oAFmWiduh8HMly+kxod7ZPUyuUbhBq2hG2ANl9u7lF7bauPxMsVyvUNSpypU7be6L3jyQZzW25BMg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Gv/TLBm95q5V51SyKZxFoXs+k6lEZhFBKB6N1HSfmuXGPoqW1nIG/Y/EBAL/9iKFQUuH5FsnXNFrV0evMtBhuVfHBnzk+QfEBnh7uof3Bk+FP4xhSsD7EVauUba2Ab5RIe52EGd5paxZB0DW+NtKqD7AWoK58Z9OhbLJBkZmcrWVG6ifSLBaJsCT3bQ6GDj2pNrqWtgIHAxAtjBu9+rGW4ODZM5/0ZqzwwnqZYKTyIT8Dk9k2L6NT2MOh/LmJFqZl7QKOVUc/XcroYguhyIP7H3AmeTyOjW8+hQL/u+7BmqiZ37Hy+TcZp7HvVgLhLmT3lS1PWML6mvrdkCHM790q3cwltOSFk46uNOnVzcxxMAaDx85vy7Poz1B6voci1Rg+mcJUWyphQQcKxWM4fnaZ49xN8rjItJp3LEJJrz/OXBEgAqEFFbxRzbs0TTJpFYcoYNFT3wup6BpKQ4ltuwB5Q69K37Ca9KDe9FJB66M+SD8y3qHhQ+KWBy5jEsixCTx9stbKudzi6RaExXtlfzakcUkP0fYRyT2V5S89/ErItc4uPGGugwUzzQmcQKAkTVJYA+nqK70PFlSMlOtsIHdv/rC/qlEmCnNrdNyrDhmQAHn67XVJgFuR+TMo0un7Xi+WeHFcG/Tbr1uIIJgFgBFjETwnHqg/vl8/qGgApJDpPlM8oW30IwsNsuyqucCxTNWX143HbkT+0ZCncsMhLWK60TzOItLoL3+ExhJpiGIyg7SIRPACokk7AEeOZBBnz4nLLDHjl3ClTzFGoEx9IC1wpYpP+ynYrLBlU/du3hkzI7iCyhllRsPmojvSeKdvoFAL247Ow+ucoiIED8WH6+yCpXfhu8qNhdqPktLWnKzROCYEetr2+DGER0tsQvUY1U1oEUhLevgN/4eSvGCP11VngSiIMD1EBOfOnYHv31h5XN9RMgCqEXUJSwQuth5tsSC1cidPA1J9fv6lQi77t4Tqg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2b891afb-ef6f-4368-8aa6-08d9d944a0ae 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:02.8307 (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 11/25] avformat/matroskaenc: Allow to use custom reformatting functions 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: 0zy1TuwSF52h Matroska uses variable-length elements and in order not to waste bytes on length fields, the length of the data to write needs to be known before writing the length field. Annex B H.264/5 and WavPack need to be reformatted to know this length and this currently involves writing the data into temporary buffers; AV1 sometimes suffers from this as well. This commit aims to solve this by adding a callback that is called twice per packet: Once to get the size and once to actually write the data. In case of WavPack and AV1 (where parsing is cheap due to length fields) both calls will just parse the data with only the second function writing anything. For H.264/5, the position of the NALUs will need to be stored to be written lateron. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index fb790ebe8b..5b5e921eee 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -158,6 +158,8 @@ typedef struct mkv_cues { int num_entries; } mkv_cues; +struct MatroskaMuxContext; + typedef struct mkv_track { int write_dts; int has_cue; @@ -171,6 +173,13 @@ typedef struct mkv_track { int64_t duration_offset; int64_t codecpriv_offset; int64_t ts_offset; + /* This callback will be called twice: First with a NULL AVIOContext + * to return the size of the (Simple)Block's data via size + * and a second time with the AVIOContext set when the data + * shall be written. + * The callback shall not return an error on the second call. */ + int (*reformat)(struct MatroskaMuxContext *, AVIOContext *, + const AVPacket *, int *size); } mkv_track; typedef struct MatroskaMuxContext { @@ -2433,6 +2442,8 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, #endif if (par->codec_id == AV_CODEC_ID_AV1) { err = ff_av1_filter_obus_buf(pkt->data, &data, &size, &offset); + } else if (track->reformat) { + err = track->reformat(mkv, NULL, pkt, &size); } else data = pkt->data; @@ -2483,9 +2494,13 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, put_ebml_num(pb, track_number, track->track_num_size); avio_wb16(pb, ts - mkv->cluster_pts); avio_w8(pb, (blockid == MATROSKA_ID_SIMPLEBLOCK && keyframe) ? (1 << 7) : 0); + if (track->reformat) { + track->reformat(mkv, pb, pkt, NULL); + } else { avio_write(pb, data + offset, size); if (data != pkt->data) av_free(data); + } if (blockid == MATROSKA_ID_BLOCK && !keyframe) put_ebml_sint(pb, MATROSKA_ID_BLOCKREFERENCE, track->last_timestamp - ts); From patchwork Sun Jan 16 23:03:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33624 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2273312iog; Sun, 16 Jan 2022 15:06:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJzzJ0ke1Cu/UVVzPFHoNCUidrtgA+1zNftUg//cVrFf5YBgzopc/rsLh23V8IEK1UslclvA X-Received: by 2002:a05:6402:1d4a:: with SMTP id dz10mr3074117edb.206.1642374363628; Sun, 16 Jan 2022 15:06:03 -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 y16si6491648edu.291.2022.01.16.15.06.03; Sun, 16 Jan 2022 15:06:03 -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=LSSu6IbK; 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 3ED2468AF5C; Mon, 17 Jan 2022 01:05:11 +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-oln040092073103.outbound.protection.outlook.com [40.92.73.103]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5D35568AF11 for ; Mon, 17 Jan 2022 01:05:07 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EFx/TBtIjS6Imxy2VYTLm7jn/77o95qD7dKMw57AWxO4d8/iru4RJJzKnwkDJvU7P4xqUChmC9V4747SpkVDNu9KK5gvT/vijMYrWRGh/i69g9NoNyCXdPtkb546sTG34e18HCEAH48MniklCFUA2yCSpwvHEf/Qu2mrgQmyFTjvi5kHgu29Q0MwcDi+gW0PZkmyi5GnHmt8bxFKFj/E+dEgPKsoJX9Pzl1oH3x3nzeFDii+eI5A9kw79QIsQ14XBpqf7E8FoqnzxzI1NN5VcLOXzp23g63Fz7sekPtAbkLQIc/CHWLLnrEzr2O9z5HyeT0KmnkF8TmbaZ+RIwQ9sg== 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=tjGZtttuxeLiTsXcy19VOV4PwWmbpd4kO/SpRYLt+fQ=; b=JuWdPQ+0KLfos9uPQitsAjzSgFiTIrMwlIVnAwMi5EKSLyrZ+yPQ9mdz7UdFT+1HPN7I/kglUgWP2Tv7J4jm5WV+LkLAIlVjwwZ3RyGl/UgOdLWaJNwDbb7uu1OjQ+pwAf8FiQLNTTE1w6JBAuGVk8tO0ozdUITrbxXgNUOUA1kP7E6ICk0zONPKotyMm7gu11mv5bqN+rNeOAizAhGuWs7NpV9ZLV5fGpXVNgVbj+vSFqQVxQazQzP/MEwfikXPEu7H/yzDpaZnQZZ3nevSDBTDpO+d8BF4rJNxpl58qqqvaQahwqCQEeFBSvoEwv3RqDZ4WxAfFBIzEhe6re2JeQ== 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=tjGZtttuxeLiTsXcy19VOV4PwWmbpd4kO/SpRYLt+fQ=; b=LSSu6IbKkScBqVFGPYMLL31rTnBNEZ12fGroAFyufJNIGc9zixmlEu8awerD7j0+tkE19zKlPCa5AMPLrYVC2DKpGbym8s8VGfwty+ewsMYdJNBMH1QrHlkWR4kl58sh158nA5VK+7AenWQG3ozgapzA/XXoNPrr4VpFtbwhzP7M8IorAyPF8jNGWZwLWC2Xt6hJiRGEYUpQXs0bpv2LzCLsyC9edwlJpJYcL4JTmQ3Uc/G+V8IABoX+qom6KCDLf4NbwNpFFN4ACu/eA9WkEFNPx/ck37hdlCGDLhd6HCuskYQo8Su7vxh9Qk+1oxtOfpaKJbBA8k/+fXB/L+qs9Q== 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:05 +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:05 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:52 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [x4QrV6tB5n0m4f2MeH8wSzLhAwQO/pHj] 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-11-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0545d9fb-f6b8-4dc4-b3da-08d9d944a1f7 X-MS-Exchange-SLBlob-MailProps: sTyj/kSftou7kRWZu+p1Yy70c3quhp4i1T6Zy3lB4vqoCOR2GrCcsvN9PRvPGzeO6eYs+PmiUbDjwEg5fcfue4nkfiMK52jW+nJLfu6A6ZBDJW1Jd3KvPDvA6dWN3OtkUfmC8ux+L/NcwsoUZNhVStBaZW0au3KiH20HhG3LLE+aMjVRWKtKyz2XfRdYRcK7zjEdvraVd2XKgqSWFV+Z0KokYzoTLtt+gdFsLDlKkAOa0uvzIMHYyxHXAc/ARKpXrdQK2LF3evttEmjZfm7kmZqs9UsH1FDNqDjHsVOPwOBoTX2PtQ4fKARy7UNwb8Hzo0z4JdiveLZf9gwpReoFxoQossoha45XG2viP1LUQmB1UA7St+sBIM4Vieq1slmhqgTmUKVpyZn4AtrN4QnTjudxopsIGlPDCid1gSsGfubvEKpfAOZYRqqCmY9m5/DodFlmCxtJtv3cIvGNaLhJ5sLDrIU2loctQwi3Fy7ky7vQD89NMRvz5Wb+ZFGm/DWsDCX5XjkNTKL89OCEyvZOf2b/LhaCHmlv/7IpWPHBjzOYXGHDUb3/LPyHPvsOWLp9gTJYivcMaHuRCrwozka4dG9s6SK5Wpy1Z88kCYqAzioA8ZKciP23kjlsigd3SdU3WVJZybj2uwJr8ZpR3T090+avkimwUScLOg5TDHHoE3Zap+PR+3JSLwNSvP3/cjX0e36Cmv2YwPY8K2fD5A7SLi25k6xJC0pz3JiO7zA5foM65uJmLMBiEvICnzzZd0vTEH9caRrVf3I8F9uSsG46i6XxHsMoWEub3TFoUI8Ur/1oJWEM+jxN4cyaoF6h78pOUGsa3HQ4fjQ6fF6RClcItg== X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tT4o9iaL+TZz23bDOFXo9g1K+IyorsAg+4IJEgDWdndl8ntawLMCS8eL148YYnQDrf4navfdfwKUA0IqDiaREPwDrvGBCUAWUoyiO5uSNS3WhtYytrnoZxddojcDxcX1pv3uX1bgbFGsuj9gtyPyK2XhuRAf3A67TZ/zkixHnURYF2Yy3uuQHBxzXEDsD9004F2ktSVOOJlzwxky09ZZMnNMduRRpVsXwkaFtkOgl0eRrKuTs0/ySZgR0mFTgG5FLBcwOIq23ENVen5djJfV75mV64hZIQVRANqCLhBI8Cd6dw4lHyrS1nK9depvBk+4r/zAT+6fsIL0q2Vl1QckEzLiUgR0m488AlI6P3LDNVGpWGJfWPDw7zI1SoLAu8QjLdNIeSHUrYpza05Ndkna7hT4pu8Nx3cgS+pli2BveoiJsJvX/SDjHAikJ+msN0zDLnlFNEaT91FUSjn/c2ehKW+QZGexDYx0WBUlT5dUPjItSv8N431lr7mb6EwGJ27PniLoZ7UUXCxYu1XzPhl8Y9hyf8tQGmYc/Z+awVqyrx937z+oRspdiA2i5HHCjNhICnMq+vXBvpByX7l4S5FHYA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: QhRAYLOHUMRkh1+WldgbHt7JvuyCBMK11t0YIFDf4Vhq4YEQcoJYhlfeb8YPJRml8EMpqMxBELj6YtTWvyAjKLrUtrRJGIbA3dqx8wqxPJ75zPWpKdkxybnB+JJDNOEeJwv/Id7H7ghiNhIDxdsLOvJYYe8hGpm6nClU0Whj+vyR6zInUebdu6JydFW/m1bEmz9GfZASbXmdAVygFxeZ+xe88OyxhXAaaVzTyNndUrfFPnLSvsg81RLCRzNO6c3DhuOJljmfS3Ggtsgp3aNdy9kqNakPXr6BM2chuL3hH8ciJEpIO/LWbAeF9YQWmX7DhoJ8/Wh/GcuGFpguADUozmix3DoTGmbcDrJIsjnIm79e6SL5AKFI57J14qs8juiKMHf1nwgWcxvOYiZMfUm0N8da+EQQlXnH+yRrqn2fc+m1865/fZDwNvXP2W740FO4XeHG1aO8cldkLV7I+12ljeUOYeI0JnI7CoFm6zCOUFVphj5BDpGPrCgmzO+z9WUpLaPyNYekjCi4QCm+bJhFR5wwZGHE3BcTBmSMBSndzclXBGVWFqbhAPQ95xMvYY4ahXgeXJUFg7rELzGeguCxWslVomrNqbZJirhnIgyIkqtyIGfMOk2e0ndgcKI4zwCZjl73YsbFzqAzxavdSVy3q4YDoruf1NzPBrEunPKnvIwWaS/CAoApeA338T7w4aIkvQkbfX7t3uSF5f5KgEl3GAUy/XREH/08RYhnwGk4NzkbTjmCKo4itxbNFERRrcs+4rWvxz0g8mwEgNwvOxTzdn5WyZhySAPa4RzHm9ZqAsNJssEqjpqRwqzfLTgmcuqtoEk2Pfq4NkJTwx2+XobUyOFTKjcvMB609NAB3bbX4aNmnIlY9PsmwvxUVFzNYH5V3yD5mo9UnAoeGGzDgs52P/4FSEhI9OHBQRrHeHZJllYTnZA0DA5jASRYedsoSq/e/Q2/pXyNZdpIPNTRpK4KwA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0545d9fb-f6b8-4dc4-b3da-08d9d944a1f7 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:05.0192 (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 12/25] avformat/matroskaenc: Speed up reformatting WavPack 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: awVVzST3zsZ9 WavPack's blocks use a length field, so that parsing them is fast. Therefore it makes sense to parse the block twice, once to get the length of the output packet and once to write the actual data instead of writing the data into a temporary buffer in a single pass. This speeds up muxing from 1597092 to 761850 Decicycles per write_packet call for a 2000kb/s stereo WavPack file muxed to /dev/null with writing CRC-32 disabled. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 59 ++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 5b5e921eee..08d2d338a6 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2347,57 +2347,45 @@ static int mkv_blockgroup_size(int pkt_size, int track_num_size) } #if CONFIG_MATROSKA_MUXER -static int mkv_strip_wavpack(const uint8_t *src, uint8_t **pdst, int *size) +static int mkv_reformat_wavpack(MatroskaMuxContext *mkv, AVIOContext *pb, + const AVPacket *pkt, int *size) { - uint8_t *dst; - int srclen = *size; + const uint8_t *src = pkt->data; + int srclen = pkt->size; int offset = 0; int ret; - dst = av_malloc(srclen); - if (!dst) - return AVERROR(ENOMEM); - while (srclen >= WV_HEADER_SIZE) { WvHeader header; ret = ff_wv_parse_header(&header, src); if (ret < 0) - goto fail; + return ret; src += WV_HEADER_SIZE; srclen -= WV_HEADER_SIZE; - if (srclen < header.blocksize) { - ret = AVERROR_INVALIDDATA; - goto fail; - } + if (srclen < header.blocksize) + return AVERROR_INVALIDDATA; - if (header.initial) { - AV_WL32(dst + offset, header.samples); - offset += 4; - } - AV_WL32(dst + offset, header.flags); - AV_WL32(dst + offset + 4, header.crc); - offset += 8; + offset += 4 * !!header.initial + 8 + 4 * !(header.initial && header.final); + if (pb) { + if (header.initial) + avio_wl32(pb, header.samples); + avio_wl32(pb, header.flags); + avio_wl32(pb, header.crc); - if (!(header.initial && header.final)) { - AV_WL32(dst + offset, header.blocksize); - offset += 4; - } + if (!(header.initial && header.final)) + avio_wl32(pb, header.blocksize); - memcpy(dst + offset, src, header.blocksize); + avio_write(pb, src, header.blocksize); + } src += header.blocksize; srclen -= header.blocksize; offset += header.blocksize; } - - *pdst = dst; *size = offset; return 0; -fail: - av_freep(&dst); - return ret; } #endif @@ -2436,8 +2424,6 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, (AV_RB24(par->extradata) == 1 || AV_RB32(par->extradata) == 1)) { /* extradata is Annex B, assume the bitstream is too and convert it */ err = ff_hevc_annexb2mp4_buf(pkt->data, &data, &size, 0, NULL); - } else if (par->codec_id == AV_CODEC_ID_WAVPACK) { - err = mkv_strip_wavpack(pkt->data, &data, &size); } else #endif if (par->codec_id == AV_CODEC_ID_AV1) { @@ -2495,7 +2481,7 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, avio_wb16(pb, ts - mkv->cluster_pts); avio_w8(pb, (blockid == MATROSKA_ID_SIMPLEBLOCK && keyframe) ? (1 << 7) : 0); if (track->reformat) { - track->reformat(mkv, pb, pkt, NULL); + track->reformat(mkv, pb, pkt, &size); } else { avio_write(pb, data + offset, size); if (data != pkt->data) @@ -3111,8 +3097,17 @@ static int mkv_init(struct AVFormatContext *s) for (i = 0; i < s->nb_streams; i++) { AVStream *st = s->streams[i]; + const AVCodecParameters *const par = st->codecpar; mkv_track *track = &mkv->tracks[i]; + switch (par->codec_id) { +#if CONFIG_MATROSKA_MUXER + case AV_CODEC_ID_WAVPACK: + track->reformat = mkv_reformat_wavpack; + break; +#endif + } + if (s->flags & AVFMT_FLAG_BITEXACT) { track->uid = i + 1; } else { From patchwork Sun Jan 16 23:03:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33625 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2273402iog; Sun, 16 Jan 2022 15:06:13 -0800 (PST) X-Google-Smtp-Source: ABdhPJzOXfScNwlxJo64K1z6BwOHULiRvxezB3IJTbYQBI+yVvAzAqreZltWDLnD5ZQRG9RssbrV X-Received: by 2002:a17:906:6691:: with SMTP id z17mr14596724ejo.763.1642374373058; Sun, 16 Jan 2022 15:06:13 -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 a13si272622ejp.770.2022.01.16.15.06.12; Sun, 16 Jan 2022 15:06:13 -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=d5Ws77BY; 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 26EE268AF40; Mon, 17 Jan 2022 01:05:12 +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-oln040092073103.outbound.protection.outlook.com [40.92.73.103]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 84D2168AEE9 for ; Mon, 17 Jan 2022 01:05:07 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dAe8qE5wHFAgp0ura93y+Je//e7FPe/rJwYeftbryUEJq91DbQv5We+HZbQKnKo/iiGx3azX9iCpW8zVghJ8KvJWdGb9pgtsniHuv73YAfL4ycDd3dAuFH5ic5eyVZfyJqo36sL8L5x6NKMCVvurRmEvDCbRkIR5j6VGTa4SB9s6AtlvLHJA8HcmesH55PtyHnmJJmdj67MMfylXgfG1R3XMbGO+a89pP4A3oCymUwmodP1ZSk8osFXjfDZmEdq2OWWUXCHrR/o6C10Kyz+x1C8qkjZhf04wVKfSGBYBRwMNIyaq4OdUKj+19So2UT1kmHgxSJA48+tpAnxkS1Fu7Q== 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=wemSkgdYxanREbR6TCxSckMmdvC+sc3lUeQcY1RgD5I=; b=U3QUivzYrSaGy1NHEQIxxpoXI1jZZ7wxir939OsXwicoP0q/Wkau0lQszw8dqhmNCyI/e1M6PFZki2rdgsqZhrsrQFxQcEVCT1Tllp/pbcGbGERmOZrApkFrtgUkSpQwGDfiNvm3G1MJA5p55TMoihBZ7gq29qAegbUg8UMTAmec5COdLcORIofZFvC5mPR0RL/4jZv+8cAa8uGuAgbmcdVIGa0mtKE1WYbZ0Wp2srnKlh3ar7g4UfqaE63OtpcnASmj9RjhIwKC6i1hDlkEUq8k0Zpvd6xGcm61kHrkhRid8C9mcNgRkZPgkk5bWchQzRleu7JE1LMt8rheA3Mz+g== 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=wemSkgdYxanREbR6TCxSckMmdvC+sc3lUeQcY1RgD5I=; b=d5Ws77BYbBuhejkGOA4wUqpfbI5Wa7Xva5YuAD9UqK9d6GBKSw9dWuTQEUJVDVkKCxgHvRkuC7BJsOD5V94fJ5FP0ExpLO4WzQlEzQ1tm9WXUU4lCZINIeik1Ntpeyf2PVFOWnqP0dYYYGeuPcm2vAXqwv012P0sCqQAepulikoeSkKenuln3gCcJ+42UhPAxDJjPc+RefFlFRMkno7yhMP00oVfuY1BD2O3j7zwAMfL29L3rGRh7XJzeOphWHQuOH4daaP+CfBTz4X20W6fvuls7U+rXti2EzXk18NjBzfUbuNrkeK0zFUIyvF9uY6WxQyt7u1bS3+ShBlkGzD/0Q== 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:06 +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:06 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:53 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [ogtI+oJOIfHe96l1V4TjgywKhKZI2V7c] 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-12-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c8e09747-a417-4a61-f90b-08d9d944a2b8 X-MS-Exchange-SLBlob-MailProps: q+fD6XS3/UJ6Z3qDqpu+gS/vjEZs5EpAEGLDbr+d922WWc1zFW69Oq0tKktE+eJsOSBavlhUCnvwP9WpTsfefS3EDOjqeVIjwpZbSvLKLpuIHNh2IxB4d0wIkBaPGmt9oX3om9tZqjxWDQVpvktuVH+6UDf3LvVyIFdIdZOxt/UDlqpaFC1nNivv+nmr8UXNsfvA4MpS0VD5TNAN6yeqKCtHqUe+wHwjPOj3YgwHof4qO27Psmnet7KY9Vz6kZpegBFMkwig+vRQ4KvavlPdoS9PNzxVA+XgKQwQZb8aFiqn+e7lPQ8HmR5jG90wqH9nVOsHUlvWDkmJaeYbmWrr7kgYVVAMaFmEny+mhJ1NE4h9Ogq3S0bYe0lQRtp+xBeRWnwf0CykLt4nIesSVc7tm5rVANWU4hImvP2R/NJZPRliaIH2YlheTTN7ojmbfnnNtxsvepC6uUipRC3Ny9d4RkKqZ6CzPp9xrMM9tELsCgTy+MSdQYhLRiQZI3h+4mQWoEy+6GxOf6a0gHKgAVUFoB/7ONfrN/G8sYbHr6oK3jpQgzr/U2KMS/RDoMxjSDIsw54I/cTLLNBh+WkDv+53Zvei2e/HEXXVpkpRs8Ysl4+VItIO9THHh3LFVuBKIZcuA8Sl03a2Q2KDT9DUO+sohjUafdCgAM6Zvh0XKBJVmr6PVIN7KYDuf5G+w8RL6DY+8dmuyJ/i7oDN4YHAcnorYw== X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6sLec8Z7IiOGjN1p9p/lT6amdjXShXK9TKvHLsmjQcUSFhrar9E14fY7eBaO2vhE0MvlFgyS4wT3jdLi2iqbzEdXT/xbZ4qWLoXnhxouCOdF+hrEOa0GepsXmCanqrp5j2RkhRAipSL5yNItWjdTVE8gwAM2gFOg1OSPYFxB9pwn3dSb6Va22dlbzeVFeFj7XDuz7HqSS5nuHIume/xdaxwnt8CzJoHw8buDUw/kwT6VJnehJgnQLrpJXifDH+wPVxMnHMcp6Xo20CaNE1INvmjMO/USNQ9loMw5WO3s+LXqFda87EBIUjRiFDbiI9XvnFmWXjlUTbflolpjh1xBXFn0V1S+ZByN1qWc+fuaD3av7ueaq+xwf9AMlhoc+AlFOwZ4tuyS4oWbe/3KqTHGCYt9MQqeekAdBuZhusatFdpmM/NkvprJfKeSjJHPHR+vGK0+QtRf9dGnp/OQ4KjXwwlVb2z0MuyET3MVfgfHi3/m0z27X1jjTXgbzFmTtV6vQu2NiitsRTVzc5JSuqceZyY13/FqOafnrEL1z9KzyDF0rMDFF5mFUzIkAtu8dcKc9P49NDwo+tXQIa5p0MUA2w== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 4FuN7PpU7Blr2DYkQjOXuWm0aaRyH+Y5a3E2jr+71Mttwy1WZVCobhLt9SsuMVLY0arnOJm1KZfZeD9m2sZ2PDNdo2IAUcQa6ugWf2ruU2bt2mKV38nBSdv5/amPEVIxtUFNj743PoS+7FA5+rBuA83gYUZkGdmD6ru+O2Vx/ZVelDq7g/hSlqcFioKSjBeaEWqYESaGPs/Lg29y5p9Ff5N/J/qFQLH7pwnb8o5OeqCUX/r6yTeAWSzOryOTXe1yVlD9i9uWrhjLm7a+HjqBpdImyTJPPWjg0o/iYUYk5yXfQStUL+WglpNDbLgZO9Ni5iBATyVkStRLwGUxCs2MQOa91Aeze9oBQPR2Zohqvjx+HcrauqByJRZlwa3jETO0oKsQsHRVKTjdsYNwPjw4Ar1RA3yN6yDCySonC2Uu/eJdytyqbOVcSD0E0jHQ8qBHCHX/Fq9tYgjqVKEkpiYBFRrEBcEJu494xH2oftJiI+AI+dLTx3qzT/N4a/afevtUoLPeeauRfczSmAG4sEFgLFi7Rj+emcGvX6YRSSi4TlXjhXB5NyVNXRWEi0BiH+ZJCQp25V9D95r3WitHlEjZNX3hbzYceTwta3eJvrFMEgammH74+b4pIkKsTJt99S5zCLDAcw0UoYuDX0SOUB8N7/zs55lqYdNIcKjgYrKL7CC6sRyhw3osKw/U0hekBO+rNlh2/3U9PezfDzVao3mfNIQI03PtgDi9qSGWL6AqiCQTgQfZascdmi6F841dltTU6bqhZNRaygFOqPAEC6NpzTID1hu4tHdRShzSU7+6sYio4a7FSIRQlOPcNlMsdEsxmvyEymrYe3NrZTuh5T3KLmFJejjNSvFitzZ9H92GHqVQt1esD6Wj9C8+ZLVjub1Vo33EDs7GLdcNA9Nnrtjeq9xmA7R57iOWRzO/tPPrjVj25Qr9BLEqzSRZye2i9RWKondGbMicPsGvCUORjJoCcw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c8e09747-a417-4a61-f90b-08d9d944a2b8 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:06.2701 (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 13/25] avformat/av1: Document actual behaviour of ff_av1_filter_obus() 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: x2tzqsnaKdJd Document that it can be used with a NULL AVIOContext to get the output size in a first pass. Signed-off-by: Andreas Rheinhardt --- libavformat/av1.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libavformat/av1.h b/libavformat/av1.h index dd5b47dc25..f57dabe986 100644 --- a/libavformat/av1.h +++ b/libavformat/av1.h @@ -46,12 +46,14 @@ typedef struct AV1SequenceParameters { * the resulting bitstream to the provided AVIOContext. * * @param pb pointer to the AVIOContext where the filtered bitstream shall be - * written + * written; may be NULL, in which case nothing is written. * @param buf input data buffer * @param size size of the input data buffer * - * @return the amount of bytes written in case of success, a negative AVERROR + * @return the amount of bytes written (or would have been written in case + * pb had been supplied) in case of success, a negative AVERROR * code in case of failure + * @note One can use NULL for pb to just get the output size. */ int ff_av1_filter_obus(AVIOContext *pb, const uint8_t *buf, int size); From patchwork Sun Jan 16 23:03:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33626 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2273474iog; Sun, 16 Jan 2022 15:06:22 -0800 (PST) X-Google-Smtp-Source: ABdhPJy5wlQD2NwodQ7iB8iCqEodmGUIOjiSHAm8Lw/XC36QQsUfyLCyPK3S61LdWpvqcCAaXuvv X-Received: by 2002:aa7:cf14:: with SMTP id a20mr11635260edy.324.1642374382538; Sun, 16 Jan 2022 15:06:22 -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 di1si6472329ejc.252.2022.01.16.15.06.22; Sun, 16 Jan 2022 15:06:22 -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=bzk3J+3x; 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 125C468AF26; Mon, 17 Jan 2022 01:05:13 +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-oln040092073024.outbound.protection.outlook.com [40.92.73.24]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C541E68AF40 for ; Mon, 17 Jan 2022 01:05:08 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GFLc9W6yxnxzur8+GMWjGosZ6SdJ7v/8n+xMhD5tAwPVAx9zArtQACdkztYwZ4kuuSCTZZjew4+sjYbnr91ryTJuCAsCWlyBkaI1uFpLYe1h880Z/plkPp/b2l/x+uCZl16Ip0xpWj37SomELoMnqb0mZz212o5z18bFzqyclG5cBZcLdn1JEg1MYuQ0DypyYmCfWql5dOya9DaYxIPMzhDz2fc6caKqlkkka8gEW98p4IuqS8qOF9jzu5lSKKyYOEhmYn2mHOT+u4bq02ySi+KHEZE62xiIZtA0gcZR+ocJXyrHTXbPHrAj+7Ps5csByeQ4N5cNVe10OePIKX0Hlw== 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=Yt1Bfv+TswrrE8piShsAMdCctR2iyQqW4SkMOc0LXok=; b=leijkFt18BGbmhNjm01rSOOy2wA9/QSf51QGJTahEuRpT9xwpPuEdVqEPlBWG1Y/rb8UQQ7n8F4y74Nlrl2QthS1MHUbR6JZJ5C9v6i8qoLEOa8hHkd3rXdS7lWmj2R7ZZF8VfyeDiJhpx2QJFD2UmRoX0ivXlGQfdTGSwQg906bXhYMB2R6QyoxynqT6I51C1zaxkx2gQY7AewdSs/T55b7kPnxvVPJX1JMnsKmWof5x+iRu0iJnwYRivWC2GLns2uDV6ECW1E2z3wU8J/GB/B/YUdsULF9Aravh2q8Z/QEw/NnHMkej7uQkGe+dph6jYIAS1uvk1+m1dvAJaF0JA== 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=Yt1Bfv+TswrrE8piShsAMdCctR2iyQqW4SkMOc0LXok=; b=bzk3J+3x8omOJdNWBqfvAaqKyzm30b7xpbl8pnxwwwy5kdvRYryP+CShV+gkFFJMW+7q731gGfEhjwaq9yhtMaeIK2JqUYBOxLwnWE3TGi+QqOHroU1XvepM4xMIsPWo4Bqs1n/1xEXjVtYrEYGZSL4LLG7ymqXKifKacbeFabXgaUAApVY0z83jLeM2TDA6dmQGTbuSFBbnU/DOhFQlbeLqLk0O4xLjvMqnkicN0ChAmFCuMsCEh8JBfD6DJo5LPtYaNXl2PXX5SkScFdI762+mrWnvrN9RmPQgfynVXRJZGwSzN/fmt+pd3nReX0JgqD295EklWTZ6y7JV/Zr6cA== 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:07 +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:07 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:54 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [4X8lGRrnaXiWUY4IQvnuF8G/YQCqfCcT] 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-13-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 632e477a-8c47-45b5-bd19-08d9d944a372 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPns9LgUjRDeAFdPzY/9HRUYDf1bKSecXcB699IXjeJEI+yzpZNXlONju9JBTjkStdkMAeQhtqZM59uA/sO7qnBdbtjhK5nnWAp06hHOqlSJlpSnSl5EiIZbnynP9Xazc4LSLFVGIr33jXnb2FQZsArFwf11IUkkZ7T2H16XqNIP8WmZlUSPbW38iQeqfok/HTeMHgADoRPU7s+DuBZ1uLIpV672CkSF2uuFuzABtbVMvPODS+Vs9QUX0P4Uw7haoeQCF0UpyQ4tmOEl1kMOl10L27ph0kNjERX24JeipNBMhwmXXHdOPG/1aXuiKLNBwOuS2aWKT7BTM4UyR1RvDf23rstskgS3B0/EswhCd6BjWq4Qcrq4mLBJlHw0qJJKQo/dcDeB7r4QwgOgv8jZ5mOfryJXQVDqrkrhRzfcU7AnakwyW1L9D5xVH8t79bCGuF9A5/TaASI243Kv38J2dsrzm0MvdNJO8r8G1OQ5Cwetf8h6Gve7q1WCVfS9qjvfVGGug45oAF7NhrNWQC6EobyU15F6WRS1oPJowLsHjn4FOO9AbzEGoy0Gi6oHM2mtzq675K0xAFgFeN4sPNKOvaDaowoqroN5BWvNwm4D6+bNRIHLYhZXsw+4L22cBFrhYjft/K0BkWV1yolxJyaZvh6srWQxSYuoGpCk0v6yhsWXiKi++PbNGu5PxOu2micEnxNLIb2Hp2REr49xee83Xh+GwJUJLavTdgbYA/vMntmsnJs= X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6JJHptl+u/Hq7KJe7Zm2NrZ8b3VwKT9CKvNIVOLeTdHoxXLEEBPn8XF34UaOHIx9QCggbuBxEy3WIgVf7pGsUupmExAqesfBS0TDGtSVtcFpqe/pmM8vziukkrEfBqoLWZoQ6nJLUKOalk97WzaFO76sNlt9QPcBmz7kTR/uosNKShMKNzcgMK20l/KGx74ppCs5St4yhdo+0ljWP0WY2sltQdAJXe5JP5eanTugZCLOk1HQt3dnycePtkvrQjU5RAkdKnJ/VQOl3R503ICVF9TsAuubdxmqviMWf+b8Cef7yCCp3ADREcDK6zYKsNjpTAHRQ1w7q+6sdp+wyNDBXN/puXA8b+/EymiaQ/ybG0LQj7tt8OxG9nys82lMaWcSLPPSPar2wL7qW/V7Xse26skKwKj2Jewq6YHE1yvEtm45QkfYvwsm01mxaSg7QiSBD8DapfC/YlLqYyWL5AQKCsgmKuAZXxTPLVlVEeHqPz8lus/XVc/9o1dwGrSvCPp3A1xZsPiLhBF+0Qrblm/RZcjqZK0mexA6Ptf8tYmKFUUYz3KcWTIqpKfc/4gSEfmLWVkZTSyrqg+6i6rZVnrU8Q== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: GTy7ngrNCpX8EbBXtmyRhIBBDWXAox51+OTl49fdHBNOvsbu4QB4jqaLL0ftUrW5s1IDwyBAZDIH3j4xLgCCYxNZcu61sal3uFFQMdcf8MvhNeHn7qxwy0aN3QOwZRL1nnh/QgZyNOF8y7LDAA5Xo649sl8lPwe6p39nHrsvIapKYjSR8e8dpG9jy8Jm180Mw+Z3yzTg+N8Em4NLY6htLh8Du2XUskX7CpFHqc5jRO5U8+GipuBuiOwlOAvZwvBGU7KPKpIxrN8zW8mmSgt6p2P0FHEwi1x4yL+N8sPCUvncG7vGYtz/7QCh48ALuAdWNrJQJRiF064L0v9erpbxQriDzbtTNd6Cfaw7LUqARccMeomo/jJnkqP8HW0ueVwRxDUtTsU2L994Vld1PWS0jdakwITyoEBeig9ahilx0JZMOB9kWTm5MuXYCy6ZDpJTjKTuvOh6CXZurieXJYT7Ky6tErRBgGOlQjVqxVBJkrjfTw7anmqe19lRxwW5FP639B/ld5jIKVbOpBuJmZr308o5D9cPn9VLdo/HKrn0ZnkUCjqJSRrj0YCxO0M6anc+ZkYz46+tlkHlEXbrs2B4xca30w4Ue2iuRckeK+t1cqVvuHfaHAEp5ZpSy2o1gO2n08mpXiMl6q6E4hxMX/q77Zrm2hmnALdavvyJBPF0KEKlOqWDqPD8Z04Of4WfActdKKsM/XTOuuGv38SOlQ8CEg9rFclx0kz5T4pJdFuZrJ3HRWBdNmNYqFJ/mX8RNxJBOi04IoRgVV0s07E22jtSLswiBOyKXe5V2lHH5y07Rveb9CnaGhYQ0BvVbVR/FFDyeJhgZ1EhlnnVrzzE1agulAU4/5QcP70osNO6E/p+xYdE2tPgPnx4265JDi79qLr5H39Pn6c6JJC1GoLmCNZv6jrEE6bKs7UARxt3+9/zmQRAUroNjyQ/s0LzVB8yG5S01ExUUei/FQkh8YF9Qk2KKQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 632e477a-8c47-45b5-bd19-08d9d944a372 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:07.4733 (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 14/25] avformat/matroskaenc: Redo reformatting AV1 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: 3IopYC0ojKm5 This avoids allocations+copies in all cases, not only those in which the desired OBUs are contiguous in the input buffer. Signed-off-by: Andreas Rheinhardt --- ff_av1_filter_obus_buf() now has only one user left: movenc.c Maybe movenc.c should be modified accordingly to remove it? libavformat/matroskaenc.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 08d2d338a6..d275d6cd6c 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2389,6 +2389,16 @@ static int mkv_reformat_wavpack(MatroskaMuxContext *mkv, AVIOContext *pb, } #endif +static int mkv_reformat_av1(MatroskaMuxContext *mkv, AVIOContext *pb, + const AVPacket *pkt, int *size) +{ + int ret = ff_av1_filter_obus(pb, pkt->data, pkt->size); + if (ret < 0) + return ret; + *size = ret; + return 0; +} + static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, uint32_t blockid, const AVPacket *pkt, int keyframe) { @@ -2426,9 +2436,7 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, err = ff_hevc_annexb2mp4_buf(pkt->data, &data, &size, 0, NULL); } else #endif - if (par->codec_id == AV_CODEC_ID_AV1) { - err = ff_av1_filter_obus_buf(pkt->data, &data, &size, &offset); - } else if (track->reformat) { + if (track->reformat) { err = track->reformat(mkv, NULL, pkt, &size); } else data = pkt->data; @@ -3106,6 +3114,9 @@ static int mkv_init(struct AVFormatContext *s) track->reformat = mkv_reformat_wavpack; break; #endif + case AV_CODEC_ID_AV1: + track->reformat = mkv_reformat_av1; + break; } if (s->flags & AVFMT_FLAG_BITEXACT) { From patchwork Sun Jan 16 23:03:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33627 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2273556iog; Sun, 16 Jan 2022 15:06:31 -0800 (PST) X-Google-Smtp-Source: ABdhPJz2OWYVGScBow/9Vkcm6EX0gyzFYegC4nn00PrrU4+12g7AwF7BMUAdMUbp0r4BU0O8r0Hr X-Received: by 2002:a05:6402:1e93:: with SMTP id f19mr2824336edf.343.1642374391785; Sun, 16 Jan 2022 15:06:31 -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 t2si5735423ejf.487.2022.01.16.15.06.31; Sun, 16 Jan 2022 15:06:31 -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=DhBS4mVq; 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 E3F5768AF7B; Mon, 17 Jan 2022 01:05:13 +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-oln040092073024.outbound.protection.outlook.com [40.92.73.24]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EC8F068AF0D for ; Mon, 17 Jan 2022 01:05:08 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S+ibp0j2OQPpsqpFPCLSyjE7i5s0zM1oWg/uGncYaDbUoRH883sHBbfhb7uwRE0bfMnJNCIpLluG+TFfKd2/j2SOOECl/JuXFWdrZE1GZcCitmK0jbZQjprjB5S15D9L7L3C3/wc0MBLgZPoDBY+ERY49zuZufnpMGUPkovpfyJPeayk38mA5o6NGoY32kK2BV4gTEhyhO3AxX5GbxqGJDxV/pSqPkIZSSAujiALulTVA6sTGig+z12wjEs2nu0RGm4kXe20S4KxNqdiYtD336vSG3dpsL69Ax5utK+sRORiEXtSjIm/4YRa4oaBRb+0FAcyfgLDyKgRftBLLLt3Pg== 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=sTFjb1xqYLScH2Cl3Jilo4PcxO58PlCrueghTSDQ2ns=; b=mt7z612oXP25P6/Xb9W0+ZSDfFQ6ubCqcUlEtOhldTr6+Em13KgCTJt2uEWRL16dCBXwCWr35ZnHybvoGP89aYT/286zUfbv6aDN7JfkBlvUGuhNA9iNHxlTiGTvEt4cuFKiyzuAtOuUrq8bLO52eEChkp8bHjyPkcf5LwnCPTEJHJ/RWE6LwMrXtrVnkqymNzw1G2CGDBs7tYs5YdbZQLLLrYrVPhcJiKi4RWXMLe0gaPFrrEV8Zl2mCf99nWiaPhx7PZU8N9U8/fvi8w88a7/Vi/JkxZnwdoBuFiVHo424LGc8U/t/kyCVJ0FyM0Ca64DMYYgjUc+YjmgzJidSWA== 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=sTFjb1xqYLScH2Cl3Jilo4PcxO58PlCrueghTSDQ2ns=; b=DhBS4mVqZDLczlweZ6c4z4XIAuE2cGFKwJMag4HbIXSVd8LJOxgj7zs7X3Rrh2sMdlYGg3bXDtcrg0USo2clalwbKK3kBeQ5Lmli4h9P5yGklInj4QcGEjudlStZJML7vRr3dDA2xft0P49+0R8VISjXF69u5paP0hhVNd3aKFLIiIg47IkLbZ0aU5wER7H6wn8PO7xcpg/hV8Ol32AFFQPftE/STr2AEz7BlPodSXn2JuZMI6rpnO4pMwBoNRApM5Qqh1PXblYvha+phA3mvasW5pd4otcGVfDs7TFOkkqld1IILPCvBCeJ4W+FWQapA2dz5MakRAFB2CI/JaTNjg== 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:08 +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:08 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:55 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [c7UEuJ7nNmmYdOQSFvbyVsJgWE3e/ca+] 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-14-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 09b0bf63-f5e4-497b-256a-08d9d944a421 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPnsaR+dBYBcj/vB85awgDIRf7Mc9F5/WwArUnEi6HYmXBrS3TyHaPFjDCKYUAC3wbl682lEu3QbzEwr/1aSGhxSzmGIeKNfaiynVVvJ5tZVgMRjNJgR69JazYbVXFRpIOyhtl+vO0qaE28l6J4kpGKVfMKGJK3uOFWPQNRWHIDBLJ2fb0GQksbU0uMAwk5Tt+6CsNeABoMDSlyCjUsfhMQk8fbYccN2d/LMlwxVh1hk11HEdL2c+CAx5CtexAc2TPeVHtqSlfEf6HKtznhT51R5owrwQXdZnYtsn2BNT5t6PdOPzY0nkrV2/ux9cMo/IUnsxlX3s9lPBgn+lAGLxNiQRtbwzpG8wdeA88EWaJZ739VnSfMf1rPEwI9lY+FY4Gn22kgEdlPmuQVDTMJMM9qdwrIq79QSpWz3FGGEsz4cJJrJh12xeEVM0coFjLjEjcDgGZqOald27YS7PaHyvwgmf+qYH3zGkKN4f8QLymHlaedObN+3+N6Yhbu5Bbst52wB0ED0wFuafuHJaXQR7ekAJpWwAz/Fq6gOeO5l26k/BU6QT/38MX1VI5aG39Ibe87iEkULYaVxyZmpgmUXWhMRymFreCRCH+wvZkSv3TkoNvsz0iz46UzilfalxhaYufPnTtx1azn8mun3593jOcRZnsgl9FJMkC9UurJg/TKhXavEIkKOEe8/zj89SGgUv3DTLVZqHu0WXC3gFtRLSno5kh3Tndoua1n3tq/aNg1Rwyo= X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LJFkKIb3Wh2dyvFvvDvAp5df+HkTVqYBsT6uK2VssRrTQD4kUH5lG5U6MCo+UQiERDif2QPAn/5tXOnXk9JDWbr0t06lX9EWqeEjL+GnvbKAOcTmkjDKmuc7mgyJlEKTlVYVL+G3ghqTJDsQqNXRm9TwV2PfeDzdsVawIvDqflPtGzbS/adrPX8FUDlKVHVYFu1YuEneCrMg+njtpiPR9cJacgCdDsCetefuUFB6k6N/q7v2YyPfQussrpcbcimOewWCp/qJSEm0K6hE7schUHoJbzsVWWbtxOpDksXmyrEiUv+XINj5LjP+sHomRgkfk7+Ida1rjyPD42ilcJF0R/oeqsHUq6UCx8g7ZtEkfRYaqmtpAGxcP47Np/u+5qWPkICpjps5qtw7fDX/rX+t4vS6mesR9mykpmrH8OcGhp5SResloUfxdKSOvVW/934jPExXh7ChYStoTNg2TBfN6sJr5ecWNaGepVQ9Gfi6LZ0MC4Pqmjxz8ivcqKG8YcuHqB+0bYquCse5J/3fbPq+V8n0Zrp9g0zkHnpSuZqCvu3P2jWCkXOij8ORZEk2B2YJcovV7BPftbSzNmw2pXZvDA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: WUJcYO8+TuaEVbEP9gX9cK70QqlSW4B/+3Va35f3M7LlF0u+E1o6bsW4ETIHOpoB3CaKL8fb3aNdad7s8M2v7Tl2Kg4H7h87780UzTXifulIGl+olMNodmoSF/K1pX5WiaOZdMHcWNs3Liki26t3vQYA1ag3a67GxjhOFvhQvHLyirvm2p6mjkbdlhjIWpteDLHo4KiN7z55qhxAR00BHjAY5UNSlwHJMVJmialeI+JMDmUqNeAMC0RFQogDB34MiKkEUzKvMs3pwofZ74vtVeYw5vJfCUN30+RD4bwvbn1RusWNa4GeLuvTQLmj9fhmE0vMyrbWTEJBqYix3K+LGB9tE74026sPTjEwRbPuKp/u2ZdIvxV+lDz91Ay0dmEa39Fc6BHSp6g01VWSSINMLkDy/8ecLcK2cAqhs1rpeaCGa+RMdZ6d4A7frxEhvqM4WyJ6SkHmv0FLvxCxIEteSAK2q0DFgD71z00Nh4EOCQb6bVgIODuETb1V9q7fLpVoMzm6ka8jJJ3I8/q5LiXTINczYfcqeoNJVyO4bfyoZ9b4XIDthcUkLr+5LMYb05NwYr8TyboeOvwHFI6dja8/YriWr9kHV7hJ1NDGPkk4mX0zticVjgdwoq+BnY6klDQKL9x/iGXTvyE1B6sW5fISSZasZ+QHwua/QAhJSpv9k7IgcKw6SYbegchzhBXi55UnBrU4H6eRBwkY1wLfUT0gj89RIA0TlIn/vtJ36mwuSbR8PRI59yBZbjt9rwRyDMSsiQYo36/5BVRw6ztxltPCshMHn1weKB4UYZjzRS/U6Y/q0KHDW4O01KzssOYniuZ2vlrMisa9r/sNQVbGQfv21kaJwXoJWm8ZAtEnNy7UDWJwQ2w99NxKYSG/AyUMCy6diR8762bEC9YQxxf9uNMGPA5O2nWu6BW59aXAeQsTPbrCT65PCa3S80+/NQ/YgkAcQR51Gl6TB9wh+Jc7vCQahQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 09b0bf63-f5e4-497b-256a-08d9d944a421 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:08.6150 (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 15/25] avformat/matroskaenc: Use common function for H.2645 annex B->mp4 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: Scj7PYq0BOee Matroska does not have different profiles that allow or disallow in-band extradata, so one can just use the ordinary H.264 function for H.265, too. (Both use ff_avc_parse_nal_units() internally anyway.) Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index d275d6cd6c..0446cd6ca9 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2427,13 +2427,10 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, mkv->cluster_pos, track_number, keyframe != 0); #if CONFIG_MATROSKA_MUXER - if (par->codec_id == AV_CODEC_ID_H264 && par->extradata_size > 0 && + 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 if (par->codec_id == AV_CODEC_ID_HEVC && par->extradata_size > 6 && - (AV_RB24(par->extradata) == 1 || AV_RB32(par->extradata) == 1)) { - /* extradata is Annex B, assume the bitstream is too and convert it */ - err = ff_hevc_annexb2mp4_buf(pkt->data, &data, &size, 0, NULL); } else #endif if (track->reformat) { From patchwork Sun Jan 16 23:03:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33628 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2273626iog; Sun, 16 Jan 2022 15:06:40 -0800 (PST) X-Google-Smtp-Source: ABdhPJxTBCBqJbhxqo7mL+2jZl4S7n1ImUOw64BLzwKORzBrNHAcKL2wjurmJ++8yIqSCiF2p4ad X-Received: by 2002:a17:907:3e8b:: with SMTP id hs11mr14658490ejc.461.1642374400227; Sun, 16 Jan 2022 15:06:40 -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 n9si8159311edx.526.2022.01.16.15.06.39; Sun, 16 Jan 2022 15:06:40 -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=HMXzZjJv; 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 BFC5768AF86; Mon, 17 Jan 2022 01:05:14 +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-oln040092073065.outbound.protection.outlook.com [40.92.73.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E5A5D68AF5C for ; Mon, 17 Jan 2022 01:05:10 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MUG6HCXRstQmEb4Xa8iqo4OEEv1nSMWtFt1bPEqgtPHF9QbUJkcTqUTX/jiHFMwiMq+NbKtVUxjcZP3PjaRLw/RsNc6ScEHp4k/x7Bqy/9k6Q7ni6m5DS6RXa3ww08tTCKlSXiZIMfDp0tCzWtw1ozJxi+QGSIIi+v8jQwu76sJyPkvSXIY/16doofcKAtiD7HA9SeGIDmkUkDR5lBijYivvsiM+27rkXiCORXC1EFlvkYUh2WV6a6EjHkMwECvOgScImMpO/7Bg+2TZ5VVThq5mZ8RjGAtMsvaKU9uPEPf3NEQJPuNbJKdfILqB0q6f9sW/whU8V6u0HtC2LOtnHw== 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=Y8Ze710JvHupgtJoWl6Wj1ljCH4hDZDgblM+x3YCaEQ=; b=ZwD7hnsgQfROBdzfH1T07Mp2ymYNEhLbGcdw5VrDKVsMTYWe7F8Fs40ET6xiDip5ms8nlRcW1yKQdja4vXLDY/WzvpIndvaqcP48t6wkpkEtcRhH61EW3bhV8wvjZCHnr8/DLoXFt1UWtrK8bUMum5Z0I9FkYaKYpFno+RdLy5+rTHd0lhtoePneEFyh0sNE6BH73JH9XZsPjbglHVbiX1bI6sXF0kZIoItHgUFuN2vqBihG0XOXrw1FGXV4YMGvdXl2OM1xdi5U1vgw4cYV3z9bIdDIWP0yBd4rY+ppTs9tyhvJ/8RQ/eNAep3tS/WVd1CnmxUARQJQs7Ugp3A4hg== 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=Y8Ze710JvHupgtJoWl6Wj1ljCH4hDZDgblM+x3YCaEQ=; b=HMXzZjJvglTgWy5/fL9PJbduDynLFfxtATkXst2jtexng5coIwzCSYWJEfIfrbSDnCaWHAr81RKGVpxMyNEHb0Jf0GBkfA1HkrD/JczjxWuXVx4a4Zf2VQMiZ0SjxfO14e2CzS4QbiVbNWyUKFsWO+Buhso+naO3JQUNZuAtl6Tpo6g8aifK1dkJoudpqlFzFVpOnRr9+lrgetTI+1SA8G9LcpUtV2F00XxpGpqUWhL4G3wU57ZkYZVihDvu94lCRUvrFFymuoRo1MXHQCWMtyUElRjtt2WvevNDIV4RwMOT5ShYvLGdAH0ByXRd5Ot4V2TKfSGVPZRzyE8es6E7QQ== 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:09 +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:09 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:56 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [d1eDHsF6/G/Hi0F9Dtv5ZbpeAWmD85Bv] 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-15-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c83f24bc-eb05-4924-f0db-08d9d944a4b4 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPnsMk3DQ7gjIN67IdoxSs6dDztI0m168njPumeUMTe48wkMqKmRJ3cZXDVorSoxnRIbKmWZhJM2qubyEFvgxV4itXIvth55knDZeczGB2/4Izy4+hGXZT5cudvwI87ss8cPFbHfm9hjKLsm+bp2w1g7Peb7e53qHInW+WIwaXFU7hbLQHzNfp1RXZ1BrQHqv11MNQAxLdNBEQgY+KQ493Qppgt159laqPPz205iVk1hmYE5u6+X61lRLRLq57dPbBih/9InbdgD2M3ahnfyqTZebRj78M7SnTyP8eysruJq9tAsACzR4Kig1U7rZVOXiiK7Cz9p1PB2sHUdz09wLapC+TZ13G+oxL6oKMPk4zgEpUEjBqwb4qvrsWzULI5mI7HGSMKg8rtKVRDWtrW7wd5dFB5pAbdUoCihnxOVVW4eUUlajc5tvDt90oeDZ7qwuHTunSVpTRfMqqxVtVeb4UyiH/XxntXYIsGfTkvt5005eomsgvDBs4ws05wxt6OUESu4Cs9vMnKNNJGdFjNU4Y6oVg92q1NUL1HynkFFusxeIGVDXhREIvk2uEBe6BexXRiNZzR9DGFgG/e/xrfhn3qptxaSx7wM1ngpOs58QM/zSSIZCo+sBGxN74Qc+vnGHAstnkLd9fKdXz1CfoNEVlVegL2O/WijVyx2BLivW2qsAC3LOEccU4UEVI6xXLcxIs2C3a0vR84UljrWXWoYHrmloXsnWSS5xr9D6KRy5jaoa70= X-MS-TrafficTypeDiagnostic: AS8PR03MB7704:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ljSUs40VY24kDBA9VXeF5NGay5WbZtQXNk97nKgdjcAab6Ojno+vFzjof9MJfdwXfyr2S8C/SoT8GfnuaQO7KuG+cBh01dEE+81pZJ/ookkr/bMKH7Tm9C3Eezx+DJoIggoMwa1ryOUQDVmV0ez+CzfBRfwWJW6wCQ0aiROAw4dZYDomVYrXAYO17RHoIoyRWhqsqmPBIllGF6psY5oZrcwnjorHPql6t+PMG1/bhK+zmZ3k/Jn4e9fRL9VoEp9FlQtyftYKZ2Z+9xV5XFnktAwsiusu25Wawy993laZGJf9oIJSp8nVWplLiWR2LNmqh/lWCvIslZeNzQlTHZ6O7ZuLsUK38x8RizUWNrHNK0Bc/WDGz8e28AIZaOa1N82JzPAOl26hryY7lgE78HJ0bCjhyKPbGfNhIp2IjHUqP0Ik3xbMKyF7eyvVmiY/4N4M9icbzEZ8iFCurpxeioS49Sc0c2CX7nnelo8ebDdOBK9FjnVE2yAyaUyXeIyJB6KKLfbTyS4zFzTferTYAvmahDE/3tYfD4emMzvwVNmVAL4IOLSJ71xHTYgqS6c4kwSQ3wu1GKg7klhPsknxbMbIsw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 3dSXNRng/zgHd//dktlmWx2qMA1BrhQ937yRMQQuDG4JSSm27+t06kJmOOUJsvThbR5hda4XjnHuwyPvzOhw+TvUfWtUJ5p24D1Fxto6bGGAI8FvHnp6E8OK3xLdoHgKD9TQ5jGH45GqySmTylivWTCcdv6we/92kiYD54JgL2ffi2OEbkiid5S1tuU36wH1k7hIXzvXCBta3jG44TfJxNYbJdVA7A3wblaD7dtYkPhlG7vLmMNCzso89jryGcAq1maRlnPacNeJtwwuLL6QwdA8DJT7kkDkv97elIjWkyCL8/qVwq/K3tJrgPyNsI2lO3QcrX2/NHKjgEo3EZzmzYTXZeUfhhc9JWcdAXtD1Fr/khoKreOdxkvN7G7VfRsHlW6S7yO0wOKtV7Ldp890VMvbgDMinCwAtaDqwKWzkaBY55FexVI8H5e65Mg6eNeXItokYCHMNJ+iAuybn20fY5dFXRYvIbcPPfdmWrr4rF+sEaULphnbZnOfICjSYU70yK987CtbxmfTYIoq1vTlHKS8u7b6ktgFXU+bBG4DkR58z6e6tgJvqjjtEJeY3Ca/r80wfxhtY8ccpO+LMlv3wZ1jh4JZqqPq3+bRCT+RrvAVU+ghILDxTyPzWvmxS5/EYFG8XdTnZi528qPDlFsEpPHf4PD9cBWvNOfzIlVTYdNuvjyXn/2L7NEc/cmpXa62JZ1MLattMt1MyAI+o17qBTyVbp/yAjLpxTKkdOmI3gTYW6LdS9qiE63gfZI1+Z3U8nVZUVo6LpeVxJqWLqqaGLUOf+wPzLNB5qia6MoBZYpqNLSg0bN6Fw8z744ySzMrdDCuz0UGn98b0OgNnaBIGfyI86sVolTnVJle7qyzINPKC3iaPVWP5bGZ9Rz/7Szk1svfTYaDEh9MxWWq4JWt6qinvERTPL8b2esn9WTvfFWWQgHIiBrcAiw9jkrDoPUgEjhPPy6AG5/TnVWVARg2Sg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c83f24bc-eb05-4924-f0db-08d9d944a4b4 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:09.5679 (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 16/25] avformat/avc: Add functions to split access unit into list of NALUs 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: YqpVGImCwyXe This will allow to avoid the temporary buffer and memcpys when repacketing annex B to mp4-style H.264/H.265 without searching twice for start codes. Signed-off-by: Andreas Rheinhardt --- libavformat/avc.c | 40 +++++++++++++++++++++++++++++++++++++--- libavformat/avc.h | 29 +++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 3 deletions(-) diff --git a/libavformat/avc.c b/libavformat/avc.c index b5e2921388..b0ceb1d2d8 100644 --- a/libavformat/avc.c +++ b/libavformat/avc.c @@ -70,7 +70,8 @@ const uint8_t *ff_avc_find_startcode(const uint8_t *p, const uint8_t *end){ return out; } -int ff_avc_parse_nal_units(AVIOContext *pb, const uint8_t *buf_in, int size) +static int avc_parse_nal_units(AVIOContext *pb, NALUList *list, + const uint8_t *buf_in, int size) { const uint8_t *p = buf_in; const uint8_t *end = p + size; @@ -79,19 +80,52 @@ int ff_avc_parse_nal_units(AVIOContext *pb, const uint8_t *buf_in, int size) size = 0; nal_start = ff_avc_find_startcode(p, end); for (;;) { + const size_t nalu_limit = SIZE_MAX / sizeof(*list->nalus); while (nal_start < end && !*(nal_start++)); if (nal_start == end) break; nal_end = ff_avc_find_startcode(nal_start, end); - avio_wb32(pb, nal_end - nal_start); - avio_write(pb, nal_start, nal_end - nal_start); + if (pb) { + avio_wb32(pb, nal_end - nal_start); + avio_write(pb, nal_start, nal_end - nal_start); + } else if (list->nb_nalus >= nalu_limit) { + return AVERROR(ERANGE); + } else { + NALU *tmp = av_fast_realloc(list->nalus, &list->nalus_array_size, + (list->nb_nalus + 1) * sizeof(*list->nalus)); + if (!tmp) + return AVERROR(ENOMEM); + list->nalus = tmp; + tmp[list->nb_nalus++] = (NALU){ .offset = nal_start - p, + .size = nal_end - nal_start }; + } size += 4 + nal_end - nal_start; nal_start = nal_end; } return size; } +int ff_avc_parse_nal_units(AVIOContext *pb, const uint8_t *buf_in, int size) +{ + return avc_parse_nal_units(pb, NULL, buf_in, size); +} + +int ff_nal_units_create_list(NALUList *list, const uint8_t *buf, int size) +{ + list->nb_nalus = 0; + return avc_parse_nal_units(NULL, list, buf, size); +} + +void ff_nal_units_write_list(const NALUList *list, AVIOContext *pb, + const uint8_t *buf) +{ + for (unsigned i = 0; i < list->nb_nalus; i++) { + avio_wb32(pb, list->nalus[i].size); + avio_write(pb, buf + list->nalus[i].offset, list->nalus[i].size); + } +} + int ff_avc_parse_nal_units_buf(const uint8_t *buf_in, uint8_t **buf, int *size) { AVIOContext *pb; diff --git a/libavformat/avc.h b/libavformat/avc.h index 9792b77913..aced285c7a 100644 --- a/libavformat/avc.h +++ b/libavformat/avc.h @@ -25,6 +25,35 @@ #include #include "avio.h" +typedef struct NALU { + int offset; + uint32_t size; +} NALU; + +typedef struct NALUList { + NALU *nalus; + unsigned nalus_array_size; + unsigned nb_nalus; ///< valid entries in nalus +} NALUList; + +/* This function will parse the given annex B buffer and create + * a NALUList from it. This list can be passed to ff_nal_units_write_list() + * to write the access unit reformatted to mp4. + * + * @param list A NALUList. The list->nalus and list->nalus_array_size + * must be valid when calling this function and may be updated. + * nb_nalus is set by this function on success. + * @param buf buffer containing annex B H.264 or H.265. Must be padded. + * @param size size of buf, excluding padding. + * @return < 0 on error, the size of the mp4-style packet on success. + */ +int ff_nal_units_create_list(NALUList *list, const uint8_t *buf, int size); + +/* Writes a NALUList to the specified AVIOContext. The list must originate + * from ff_nal_units_create_list() with the same buf. */ +void ff_nal_units_write_list(const NALUList *list, AVIOContext *pb, + const uint8_t *buf); + int ff_avc_parse_nal_units(AVIOContext *s, const uint8_t *buf, int size); int ff_avc_parse_nal_units_buf(const uint8_t *buf_in, uint8_t **buf, int *size); int ff_isom_write_avcc(AVIOContext *pb, const uint8_t *data, int len); 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; From patchwork Sun Jan 16 23:03:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33630 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2273898iog; Sun, 16 Jan 2022 15:07:07 -0800 (PST) X-Google-Smtp-Source: ABdhPJyGiZMjPHAeM2yDle2VM7+rqqpxsLGUomayf6rEOu7vpNAOFwE9SozWIMXBCAFuNK/CWCuV X-Received: by 2002:a17:907:60d6:: with SMTP id hv22mr15574181ejc.438.1642374427630; Sun, 16 Jan 2022 15:07:07 -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 u2si6668071ejy.858.2022.01.16.15.07.07; Sun, 16 Jan 2022 15:07:07 -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=etcZQNVm; 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 8D41D68AF9F; Mon, 17 Jan 2022 01:05:28 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-oln040092074080.outbound.protection.outlook.com [40.92.74.80]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 91B5768AF8B for ; Mon, 17 Jan 2022 01:05:26 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ml2ZBAaiw51CgaDdYG4uQo0NBB88zGdh0MdoT6+DTw6W7WmjTlw+Z7/T73FTQiPUPVh+ZakN53oB7t6R/MwAEeqQ+sfzJxj/siN9FNVvcb3JEQQ0WM7oIXQh0niKCZL5Q+t+EMy+w5p3hRgtDHX55iNAwe2YenIJriEdaXJ2GOWEAknCGiMCkliTe6Xr3aOX5sWFrFxwZE7OV2L6Y57YaNtb7nvHr9R468vKaoEZuUqN/HuqmfOD9ZJKJ+oAbWqhy35dv0ZVkR4EMXKbNZoLT4kPZRQJTtOK1eTTYLcv/QNqtFddOcpfgwtsyD/yOgyS07L1TcW8oLEISTEL8EjDsg== 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=q+7PFHggiRfu3hKblBHtRex3MkL/GAuCpAoJbBFBNP4=; b=mLoJinhL3dSmAu6h5QzocicKoKUzTpwAxzqHkv7tHl4M/P4/Ewo4Anrd594cxfJ8fZ7EB0slMTCaT290a7oyhjnWPcBzKkdE55MLZwwEQWEIMjCBfWGmAjhLOnvoxNycloPz0Db0Y4qSipvFoWJBUucThktM8W2GHPMYvPVCw3rQZLE1hAnBtt46flAVCzJ774T+hYjMyGv/9s+IRWCU96bmbQRQfupjKCi/ixmutujEkwoj+H5Md9AxmQ56g6lgjmr4EJaUSh/tHXDMLWm12duh6H83GD0Z2lCVM+INz/RhaLXjbWuJ5f5G4/JF8DOFKwTIY9ZxQ/ebiQrHZZPLRA== 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=q+7PFHggiRfu3hKblBHtRex3MkL/GAuCpAoJbBFBNP4=; b=etcZQNVmm/g5XRINGib0U3uMcTqhNmwr57ne0R2AJV3SlGIN4cebT6Qa5R/vbx4R9x51GGQmBvQ6T6ZpUTQPUa0ocWEVlrg6fkIK970LehsdjSLdfSsaBBUFibMFD6tfVIbP2nsNqpC7ekra4JOg7ZzV3lvgxAos3vZKfwF0pfZDES4NmWDl9aA5LzaB/NHgDa9AuPjJmjbBfQi6M5HPOJgxXyJxrwvjJC4XoUFYgQgjlekzmqU5Vq3ZE9I70tUCciZ/yJ8qJ+63SeZ0ykARFDV1bjwtCmyexI12OvPV3FdFtzhm6n7RzpR7bVoiCYqJZku9s1/1bhcOm467SxMJJQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR0301MB2560.eurprd03.prod.outlook.com (2603:10a6:800:68::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Sun, 16 Jan 2022 23:05:24 +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:24 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:58 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [0WHGthKqGc1j6pR8dDjVbEn8BUVAOdvl] 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-17-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ac8e3345-ce08-4a97-4abd-08d9d944ad6f X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPnsJ2TXWru2y+0GyChdbKekiuIZ3645IREbUVndyYory9Qs2wrVP8mq/j2N+jrvcCDUWAW5hLmLH9Az8ngmA1IkbIeqTFyH1XTkH93EGGJxs8kUhuXL12BE76dvEKU6JgbbC8+5gB1Wm6SZWCBry0e1qWF+tdLDxWhxmo7dpeiMpXRzlj1UI6Aq1KUVtUwzIBSrCp1MbmIPel3qhxtFMkGOC+cePk9T8jEdZMC8DePjNOd7c/TDqyyBUtnNV1LWQyv3QwKEKW7psl64dXDJFqIARfyJ8ouRwykCGUMaJOR+OYHMcZE+wcSvs+178WDQDaIUbTg+gwFKYn2dUa0TcwLtkxjw677ZeO7DTBvZBZ3SsegjpMVYZM+Nkj1tFgXr3LPBm0GS+saMx/aQ4xu1mGJDtuBNXGBMC2eogJUmGydmITAQEcvpu/F8exXJHypQJWS9h9vpby2RYXa5cGex+E88O4bQrWOcLvdBFLCDCGuHiSZ/XwWJw7ymIU9DxVS2tlDAGiwdHL0ymNxabTffhwVAFy/AjBTLDlhvzO5UESXvhQVKEA8+VnEHKc0uV7+LpSAvQpgcfdNJCO5nkkAg0zugeyvFHI6oD7lE3xB3z3bkr1I/6ezjh+t7epdIEjXt0iWtoHW2NO6tYn8Owxk5slqTIJA3NNJyzxaeAY6ba55FKtYfNyQ8wSd4d+OHgH7MfSd+0iZJ+jMofjGzvUR9NyqB+hR4C7zu5bcx3nmTz/6IhJo= X-MS-TrafficTypeDiagnostic: VI1PR0301MB2560:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WZoSdr81AeroDnzou5DuyCT1bhhSn/XrBJNCYjV+U7IU2rhlUkXzAAiBItaXv2gafAZbYlyNKpfjGbpXrFQLGFTv6FF/HBccMPOtlnQ8Zl7SoZgRliuNlFsSq7oR2OiT/YMz3QN2laBzsGOrsSwdUDiiOzWhLw7GVfZSCMqa4aili3FaE998l7htq3AGedESGEQimdIIML/I0tYt6if1ZtdreFXL9cARaMUEI9HQIS0zemnIb4xaBsDdcmr+akm1tI+tPpeVbapHaTLJs3pLsr5i3cyfaWjW9UoB0+KiUKsm2FMtxKV3UyGS5q4Z1TvRetZqvvvQUA95cD5de882OfLvIWsmVqFu70usesmsXzuNUzRcAlMwy56fy+s2xvVdH78tGecGCT++aCtxW/uwqPkmZ8HSjq98bXtZ+PiFwCHT1OxX+/S+qfFlqenNlP+D9atTG4wtHBLMFJQAsc0nVyWNtOHynjAlcAYM8oeDmYQ6yeWSPXp0rtvL20YoWIfou+0Nji8x5gU1fNqEENLjsJINLQeJ4L5TZIq4BKWWpGzl+/CkkwGQnYtgAv/ov2nOWufZg68RuYr4WEhUyIeCXQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: j+UeB+lwq9UzVFaJYqraU9yjnAeL5nceLhFEx8sVb/Kaai5EYXfqTcmupds2drMwstW02fl9DYkuKXe7/zxNVSFHYXkk8gJU8E4Sd+hXijHvICLbC/Q9hzkBHmeIi0JUTxBhRhrZidGx2WHLYveepUlb1/q/K5ZgWYJu+cWPK0HBN9LKAr1fSLMqugv5lkh+kEowL+/qGqVcRDvWhqcd7XgQNnwUD4BlGXV0IBYZ1wrv+UTkAJAs9usqtgMf+x+dF4OYDZp53qhR3qGQUm8WnGeCASRgA5TkkadIwF3t1whnylRNaBsCmva2oUMf/0GwSfskw06OBrEyceboIOCx3LIcvLRz0iwOgkKjETEbGWjEJILo71adzOFCYt27CDm6DCgk+8z+jAHi7qA6iSQ5zuej57pi5iGcZk1eqLDWaUhHUfvX3yOz+9SYeGq17+/6B5UUyxcXWUKUyW+pnkFwqreaC8DmmyM/ZqG3v1LbMrnNVXyjFL/c3kfB6WVrUwgyArs8RPDLK2n1aZS7DqI71BLtt+nJygj6Fu/9ujOGTNfVLV7hxK90+HrcdZHNf84RZRumi0a0AnFkrxOA5j6fD3VyPRlVAa2KHAle4q2NrZNVEP/h8Jw96Rqv3mnu/PaUzxLxnbRcWuH9H2AXKAYwpeBcICfS0VsM4MRGt8iU9CAgAl+hJFujWDkUtmmHuK86s6FWJOKp9aC8rLSmWrhZGq9OQMYgm1NdX20bc31LoKn51brmGABiRqpr8WmnP1Nw3SOIyarMVnI1LMbgZqqULes7l7m8UYWE2k4mvPf0rE2qQAjtzv61atcweUu9iCfvFMC0/hFguzPV5PH5e6q0XHYhHLfqLLzlG/QbYUIKyA5fzMO27IWD2WWFa8t/2f5C8jk23ykAtO9UuPnNvhg9FTsx5oL+6PQyhbBk4b35VfhYELxHg3sF1xJygA2k34awSp1t255x/Qmu55xBgzcGzQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ac8e3345-ce08-4a97-4abd-08d9d944ad6f 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:24.2110 (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: VI1PR0301MB2560 Subject: [FFmpeg-devel] [PATCH 18/25] avformat/matroskaenc: Remove special code for writing subtitles 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: Y9sKTW7/Sb1P Once upon a time, mkv_write_block() only wrote a (Simple)Block, not a BlockGroup which is needed for subtitles to convey the duration. But with the introduction of support for writing BlockAdditions and DiscardPadding (both of which require a BlockGroup), mkv_write_block() can also open and close a BlockGroup of its own. This naturally led to some code duplication which is removed in this commit. This new code leads to one regression: It always uses eight bytes for the BlockGroup's length field, whereas the earlier code usually used the lowest amount of bytes needed. This will be fixed in a future commit. This temporary regression is also the reason for changes to the binsub-mksenc and matroska-zero-length-block fate tests. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 40 ++++++++++------------- tests/ref/fate/binsub-mksenc | 2 +- tests/ref/fate/matroska-zero-length-block | 4 +-- 3 files changed, 20 insertions(+), 26 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index e247f1029c..4e921e3d6d 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2418,7 +2418,7 @@ static int mkv_reformat_av1(MatroskaMuxContext *mkv, AVIOContext *pb, } static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, - uint32_t blockid, const AVPacket *pkt, int keyframe) + const AVPacket *pkt, int keyframe, uint64_t duration) { MatroskaMuxContext *mkv = s->priv_data; AVCodecParameters *par = s->streams[pkt->stream_index]->codecpar; @@ -2428,10 +2428,10 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, int err = 0, offset = 0, size = pkt->size; int64_t ts = track->write_dts ? pkt->dts : pkt->pts; uint64_t additional_id; + uint32_t blockid = MATROSKA_ID_SIMPLEBLOCK; int64_t discard_padding = 0; unsigned track_number = track->track_num; ebml_master block_group, block_additions, block_more; - int blockgroup_already_opened = blockid == MATROSKA_ID_BLOCK; ts += track->ts_offset; @@ -2466,7 +2466,7 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_SKIP_SAMPLES, &side_data_size); - if (side_data && side_data_size >= 10 && !blockgroup_already_opened) { + if (side_data && side_data_size >= 10) { discard_padding = av_rescale_q(AV_RL32(side_data + 4), (AVRational){1, par->sample_rate}, (AVRational){1, 1000000000}); @@ -2477,8 +2477,7 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, &side_data_size); if (side_data) { // Only the Codec-specific BlockMore (id == 1) is currently supported. - if (side_data_size < 8 || (additional_id = AV_RB64(side_data)) != 1 || - blockgroup_already_opened) { + if (side_data_size < 8 || (additional_id = AV_RB64(side_data)) != 1) { side_data_size = 0; } else { side_data += 8; @@ -2486,7 +2485,7 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, } } - if (side_data_size || discard_padding) { + if (side_data_size || discard_padding || duration) { block_group = start_ebml_master(pb, MATROSKA_ID_BLOCKGROUP, 0); blockid = MATROSKA_ID_BLOCK; } @@ -2502,6 +2501,9 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, avio_write(pb, data + offset, size); } + if (duration) + put_ebml_uint(pb, MATROSKA_ID_BLOCKDURATION, duration); + if (blockid == MATROSKA_ID_BLOCK && !keyframe) put_ebml_sint(pb, MATROSKA_ID_BLOCKREFERENCE, track->last_timestamp - ts); track->last_timestamp = ts; @@ -2520,7 +2522,7 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, end_ebml_master(pb, block_more); end_ebml_master(pb, block_additions); } - if (side_data_size || discard_padding) + if (blockid == MATROSKA_ID_BLOCK) end_ebml_master(pb, block_group); return 0; @@ -2697,8 +2699,11 @@ static int mkv_write_packet_internal(AVFormatContext *s, const AVPacket *pkt) AVIOContext *pb; AVCodecParameters *par = s->streams[pkt->stream_index]->codecpar; mkv_track *track = &mkv->tracks[pkt->stream_index]; - int keyframe = !!(pkt->flags & AV_PKT_FLAG_KEY); + int is_sub = par->codec_type == AVMEDIA_TYPE_SUBTITLE; + /* All subtitle blocks are considered to be keyframes. */ + int keyframe = is_sub || !!(pkt->flags & AV_PKT_FLAG_KEY); int64_t duration = pkt->duration; + int64_t write_duration = is_sub ? FFMAX(duration, 0) : 0; int ret; int64_t ts = track->write_dts ? pkt->dts : pkt->pts; int64_t relative_packet_pos; @@ -2735,9 +2740,8 @@ static int mkv_write_packet_internal(AVFormatContext *s, const AVPacket *pkt) relative_packet_pos = avio_tell(pb); - if (par->codec_type != AVMEDIA_TYPE_SUBTITLE || - (par->codec_id != AV_CODEC_ID_WEBVTT && duration <= 0)) { - ret = mkv_write_block(s, pb, MATROSKA_ID_SIMPLEBLOCK, pkt, keyframe); + if (par->codec_id != AV_CODEC_ID_WEBVTT) { + ret = mkv_write_block(s, pb, pkt, keyframe, write_duration); if (ret < 0) return ret; if (keyframe && IS_SEEKABLE(s->pb, mkv) && @@ -2745,26 +2749,16 @@ static int mkv_write_packet_internal(AVFormatContext *s, const AVPacket *pkt) par->codec_type == AVMEDIA_TYPE_SUBTITLE || !mkv->have_video && !track->has_cue)) { ret = mkv_add_cuepoint(mkv, pkt->stream_index, ts, - mkv->cluster_pos, relative_packet_pos, 0); + mkv->cluster_pos, relative_packet_pos, + write_duration); if (ret < 0) return ret; track->has_cue = 1; } } else { - if (par->codec_id == AV_CODEC_ID_WEBVTT) { ret = mkv_write_vtt_blocks(s, pb, pkt); if (ret < 0) return ret; - } else { - ebml_master blockgroup = start_ebml_master(pb, MATROSKA_ID_BLOCKGROUP, - mkv_blockgroup_size(pkt->size, - track->track_num_size)); - - /* All subtitle blocks are considered to be keyframes. */ - mkv_write_block(s, pb, MATROSKA_ID_BLOCK, pkt, 1); - put_ebml_uint(pb, MATROSKA_ID_BLOCKDURATION, duration); - end_ebml_master(pb, blockgroup); - } if (IS_SEEKABLE(s->pb, mkv)) { ret = mkv_add_cuepoint(mkv, pkt->stream_index, ts, diff --git a/tests/ref/fate/binsub-mksenc b/tests/ref/fate/binsub-mksenc index 184661a3f0..01e7db64f2 100644 --- a/tests/ref/fate/binsub-mksenc +++ b/tests/ref/fate/binsub-mksenc @@ -1 +1 @@ -490b1b4beb4a614c06004609039ce779 +9dd2ff92a3da9fb50405db3d05e41042 diff --git a/tests/ref/fate/matroska-zero-length-block b/tests/ref/fate/matroska-zero-length-block index 924cec1e3f..edee36a4ab 100644 --- a/tests/ref/fate/matroska-zero-length-block +++ b/tests/ref/fate/matroska-zero-length-block @@ -1,5 +1,5 @@ -f37ba7e8a30eaa33c1fd0ef77447fb41 *tests/data/fate/matroska-zero-length-block.matroska -636 tests/data/fate/matroska-zero-length-block.matroska +c09d3b89ed0795817d671deb041fca1b *tests/data/fate/matroska-zero-length-block.matroska +650 tests/data/fate/matroska-zero-length-block.matroska #tb 0: 1/1000 #media_type 0: subtitle #codec_id 0: subrip From patchwork Sun Jan 16 23:03:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33631 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2273992iog; Sun, 16 Jan 2022 15:07:17 -0800 (PST) X-Google-Smtp-Source: ABdhPJyl8eI5+TBHBFaLeze4wCaRuEhtozgggud8kmnvJjvUugJQnrK+zS4RrqmTwlBuWQMOxN8c X-Received: by 2002:a05:6402:8c6:: with SMTP id d6mr9484388edz.316.1642374437074; Sun, 16 Jan 2022 15:07:17 -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 gn40si6217569ejc.205.2022.01.16.15.07.16; Sun, 16 Jan 2022 15:07:17 -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=ugYCk4y0; 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 9A6D568AFB1; Mon, 17 Jan 2022 01:05:30 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-oln040092074032.outbound.protection.outlook.com [40.92.74.32]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 14D2668AFA8 for ; Mon, 17 Jan 2022 01:05:28 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TiJuA3kBihB4KWv6Rqei2V3GfoOqUIEfZ+eMylCLpgCc/N/zaExQgeg4lEaDv0kKZ4V19nownfHwqYkagT/TEgQrl0HuWlUBV9m2oL5By9ssY6o28oxR84kb/tJLsVE6uSkAnFSUJgmB6G/X7txiM7Pv0uuL+KPchX/uSAuF0M+XuHT5FRRMiYMuB1YTOujgOtJuOaA0YFLy2mZ60ilSQiPgbAFxMhgbSjkZA1/msigNWSDn4vEJGvLK9S4C9BdaUcvYO2MVfTh9Fs03o54FOVKJBEiypTuEcULDKWlPDhfymVsDNEh/+sGuBgqisECdVUHAWC7t/GNjXIMmpseVHA== 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=HAXPOxSXyo7fBO/37e792j42DBbyr0mNHTIbzPnLGnM=; b=LO2R6yXqbZOg3DxjrJewf5Nupy9yIr66/zvDwSeKOcygt49WInfL7qx2xSvO0J9ySTxsQgH0xqx0Sf7eGslYh4rXY5W0e5+mdvRlyU2weKnsBq0Hqg8NmG41MA66khTseidQicvQiP54HNa417kJyduu4Dxptv4yPuwE1X/dbFAJezoNV64dp4/aN1O1RQoZ5xHJKeC7Q4qKI2tHrdOQDGBYdSGGapBcEVP4fMEweAzk1SU2RSr57dAhjAd02Glv0Lsf8Hiu3nSOzmFj7DYkKbQ13kxKKovcWykdIzpWZCXjgcAu7os2dwKyz2Fa6+1pZgQeR+VxZHCkfcAQYKelBg== 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=HAXPOxSXyo7fBO/37e792j42DBbyr0mNHTIbzPnLGnM=; b=ugYCk4y072zj48I3xENndgxd1GwXewBeDx7UeDWcqz5ZzELmZ5nmUQuk+Dnfywpzkh6ZLjjpwKDjC9YFyXUkoxFZQ8tXtbSH3kdGPA1oxse0OTDwTgqXj9Fi10jN5L+jJFsYjSmAj65hEVK/PuHnBEU8zuwvG5RudPECvDGrbkfsLZwE0K6LHSNo1OwZEkQULlNwqMErS9j9ldyTYGN6sCM5e4bNbYWYQaSK2aJM7c1GxRoT8Rhsrb+tgB49JOtBvhiLyatDBcNhbGhWiQcdyEmG+J0qEaJ7LTUr8cU9IYS/RFwWZUZwIDC9530SUIQrhS1FbjYa4ZITpslrrRkWNA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR0301MB2560.eurprd03.prod.outlook.com (2603:10a6:800:68::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Sun, 16 Jan 2022 23:05:27 +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:27 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:03:59 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [7UNGhNHFP4kYoT8IlqtKSs6KcfBCMMH8] 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-18-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b41b9fc4-7671-4e68-8f54-08d9d944af42 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPns91W7IGbbnn244NMHxr+3h/ASTMRzawjjHjmktYTuejikSmGuNvhLWDL/LtKUFEXXrgCg+EXgW8NLtq78TQpDSiCQt3ZbijScYD0B/9OnILOlEeZIflqXidDdRestmQvETU3zP3Wi+2sIuG7yAX6D3/xBJeguTmeIP3bpWNEapelOKs8yqFahTF042uveMqZZsWxXsMqJ3Gi4vS6XNwhjDrEgEsl/dd16O1iqHbcUptk29k8q9ywoenoKAOugRy4mPJTOxsyVxme6vPOXKC8gQcVypRi6MrIAeSZqyhX1aAPMVdM4rSa1KAMkI7I+K4wWUsf2xAoAESUeHSlbAXbJpuoBEHFHENzcmprzLqJMTiKS0Tw4Z8XqBmcIGuxHnnp6KRBe1VLTnupY3pfkKnj1NwkRBRKR+LkjVEJ6DxJgokOJrfh/gogXnBtcwV2JB3yms9NWPDrot0FIZ/rnxE1ORjQ79NHOLv6naEJVNX6CKGX7Pa9P7ImbvOLULIy6ubl0h9PgGi1u0e+tO8K4tF2ev7Gp2ZNEkoN9gp5iH3EUrVDU//jQIX7S3Q63We7F7cO3I7FU93vf2bx3zhqOAkmn2ThivRxGBORwM3/AGfTz3CITq6w7UwKVu+e1FSUKrJZ8FnyyRzPBRu5Frj8X3uPEF6aTbD+3dVqgMIaenn3aao+qXw8Tw5NW1TLoS4jWUWsAKE/GwfZDKIpUr0m7Rc8iewOXsn1CSqM+zMFXzjjtbUM= X-MS-TrafficTypeDiagnostic: VI1PR0301MB2560:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qrQj+dgtrxqs+qBhB+tHRrjGSGyc3+ccXQr5HW7kIMUSkymONoiYB1LYkvRV8foR9Voxl1ikiA0DIBEgHR7BVPo5dBvvR9tLvCRC/bvJ8edemK0DaQjZ/8cD8rgAruWGMXuRROo564zax+OyGmro9GM84DgZyjQpZO6amwAgTzYbpDvXJwxvaF7sfD+eqAbAEjT14U+zdU/P0ZoERF/H3AbUoR4VFOkEiud2W7ouzhnQjTWTr2gOW4dq3WuxXFIU0vshLwfNMVo+0F5IDejCz5qfm177MhJys87Ddb+a6kmGGqkIoshq3WRTC7B13k1gQSOM7foxXOCGHEvI4FIODWpL2DZCb7qzpJZ9inKXLBB07AWZBCiCXoPr2qDxjYeIleUFPieiMVhJjl4E3KjHpk+eRCQvZwh/BTXkO5OQ9P5gl3UTOi8/123bMI+m8X3IohQlGn72vEVtmklswFW4y2piO3IB3YlW4AjbWwy4ijkaXmxABBO2Y4zo6usUni4CweDeMhxedldXJpbYZpjC48atjrTQr6TNuaGFLC88ztBcLsMLHumR4a3qH/HV/bWleFqnSsnUwtRka6iV5p5zkw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: gvH2fW4Qq3P/O0csPfRr5YVE6EkAVYqeLu4Zn+ZuBiEmydU39xikmm3qEebtsLDPTARc4hZ0hKDiX+hM3gZ5hVflC8QnQRHpBGeIWJqXzIZgW2a/WWNvwdHD3+VlzYVVc00TQL6D+05sEi+6E8+AYxc6eqaxWz6U1tRvwOf1VPKq1ehViQ148x8qgyDqy7IbO3jt23I8dJsu3SBXL8tuJDgJxAdW9AJnRWJt7WgBRONlRgi1tCtL4BPdEGrNboY3mOk5e0YmKwITFIObKwzrhyiocLfK2zaCBaIDYhGgxD67YXlw4DtQjb9DNnGCaRPquqWSXN1DyMDwlFgYOkz7dl/7vT73g9g7TPxAl3o3kRUphQPorXls42V43mo7qHsr1OewYX33Hn+TmvkbfKHn7UdxDYyfGkfM+SD1XVrzXs5R6YtRxtU6I1lWobDE58fnnUT6liMIOkN8xCdY2n8Pm8do5lXacFeIa8ThojlrjZpeQd5jgty08y3e3na0agrPBZ51tpok2FNU/JQVcN6nryDoZ6aZ9f2ciEo9tpxmsxemoiQCtBBPEPoEGpchkoiENbzDQGqOtqot+N+CTxkiOCv2MB5mQG3gLyijzrfM3xgDty1pK4tZ9J+gi6lNDqKNUEcXtloWzye1SoDHMExzcaT5HjsVyqoLZEYe0YhatGD8D+EfZTQNSFA4QQFfVebfDNzatHj7bs4XTblhhdLuF9PcegAID2O7pwXCldejoL0+tC107LzlzTlanHpZTlWHsijooATe8aYrcepm11ScWJNT2sJ49NPsdwfW5saGb7Uftt6E0Ka1zUFzkqwpHopJKKay5b3cPcYWEp//wH4CAIkXejAIHDcBJpKQDNpmdHSECdchmc9vZ5mVKjV5cGBWE6WaskBCwSWtv6Is91QzuQouxM+ljjZStEtxytZhpYcwgrjvSkX4ygNV62PmP995C7OFyZQG/8zRF+PTJ6Qb+w== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b41b9fc4-7671-4e68-8f54-08d9d944af42 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:27.2888 (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: VI1PR0301MB2560 Subject: [FFmpeg-devel] [PATCH 19/25] avformat/matroskaenc: Pass more parameters explicitly to mkv_write_block 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: 1/ejJKc+e4AR This e.g. stops recalculating ts again. Also pass the AVFormatContext as pointer to void as it is only used for logging. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 4e921e3d6d..be1b3711e4 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2417,27 +2417,23 @@ static int mkv_reformat_av1(MatroskaMuxContext *mkv, AVIOContext *pb, return 0; } -static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, - const AVPacket *pkt, int keyframe, uint64_t duration) +static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, + AVIOContext *pb, const AVCodecParameters *par, + mkv_track *track, const AVPacket *pkt, + int keyframe, int64_t ts, uint64_t duration) { - MatroskaMuxContext *mkv = s->priv_data; - AVCodecParameters *par = s->streams[pkt->stream_index]->codecpar; - mkv_track *track = &mkv->tracks[pkt->stream_index]; uint8_t *data = NULL, *side_data = NULL; size_t side_data_size; int err = 0, offset = 0, size = pkt->size; - int64_t ts = track->write_dts ? pkt->dts : pkt->pts; uint64_t additional_id; uint32_t blockid = MATROSKA_ID_SIMPLEBLOCK; int64_t discard_padding = 0; unsigned track_number = track->track_num; ebml_master block_group, block_additions, block_more; - ts += track->ts_offset; - /* The following string is identical to the one in mkv_write_vtt_blocks * so that only one copy needs to exist in binaries. */ - av_log(s, AV_LOG_DEBUG, + av_log(logctx, AV_LOG_DEBUG, "Writing block of size %d with pts %" PRId64 ", dts %" PRId64 ", " "duration %" PRId64 " at relative offset %" PRId64 " in cluster " "at offset %" PRId64 ". TrackNumber %u, keyframe %d\n", @@ -2450,7 +2446,7 @@ static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, data = pkt->data; if (err < 0) { - av_log(s, AV_LOG_ERROR, "Error when reformatting data of " + av_log(logctx, AV_LOG_ERROR, "Error when reformatting data of " "a packet from stream %d.\n", pkt->stream_index); return err; } @@ -2741,7 +2737,8 @@ static int mkv_write_packet_internal(AVFormatContext *s, const AVPacket *pkt) relative_packet_pos = avio_tell(pb); if (par->codec_id != AV_CODEC_ID_WEBVTT) { - ret = mkv_write_block(s, pb, pkt, keyframe, write_duration); + ret = mkv_write_block(s, mkv, pb, par, track, pkt, + keyframe, ts, write_duration); if (ret < 0) return ret; if (keyframe && IS_SEEKABLE(s->pb, mkv) && From patchwork Sun Jan 16 23:04:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33632 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2274072iog; Sun, 16 Jan 2022 15:07:26 -0800 (PST) X-Google-Smtp-Source: ABdhPJz1JtMN33PjzunfyGDut8mgpdEOODp0o9QTNlgkO1fuTnIdL1KTP2xctEV2x0lQohavkqhD X-Received: by 2002:a17:906:6148:: with SMTP id p8mr14475487ejl.254.1642374446409; Sun, 16 Jan 2022 15:07:26 -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 c73si6658753edf.241.2022.01.16.15.07.26; Sun, 16 Jan 2022 15:07:26 -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=VvZb7ppG; 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 9D53168807F; Mon, 17 Jan 2022 01:05:36 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-oln040092074045.outbound.protection.outlook.com [40.92.74.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6A7C368AFAD for ; Mon, 17 Jan 2022 01:05:30 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bVnd7xC7MqNpM0XMP+SWY6/BZA3tZpTy3nLeKKsGb1Ck1/5Cwt0UyqHC5FyPuMN0yn+zKe7CwxXF+iL/8VUzQmngIq+oe1HY2rjB8KusgGpUa6BsK5qaGeSd1wYtp1QMPC3wtXiGK/k08nwzADv0pb/AUL2vqXrqChUZStJKDi+nHBTEGNSJJ2ZD/0Z13rNaH57UWa9KsXU4d5hw47WSyVirRj8BTnVlwO1+3o9W38MDPdZoOBOlpjYuE+qGiRxjMKD9hHVXJ23nJ6nMQ+GcvU95geGHS+j6G5MLJnn1x9tAKd9i+Fg6d+Zkp7pVU8V7HMZyCSzB/GLefxdnr+hi+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=R4Wb26DaEOLRixRzwSrf+B5LsgEXb5yh/kaeK8EfQMo=; b=hLFgp061kD81/bkq0Q/Kg4U5VAKoyYGUvdTJq84vE9LGTw3qcrmCgfhmGAgRuaDer887floMV0lxw3qxkjzvl8PE20+iln81rvrWbzAqNbWL1fsj95ZFHSvUMcNstz1qsHaPnVEdXqzuahP17WZS9xLSB8zi8DQY/6XYn3QgvVirRqZhDUean5NzfX4LbCVWbc03X6LqVveL/tVpYNYDB447H/8ZoSdS1pq9B4EAJPhguULsaHe0ZcIvGyn9tIvFoy9gW1CPiwqdUePbeO285S6o5UbQZVmhpl4G5Bp0rwEWdbCIXXVYlCu2ieJsusAUEmq8d1StYHpDiOUIcnB77g== 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=R4Wb26DaEOLRixRzwSrf+B5LsgEXb5yh/kaeK8EfQMo=; b=VvZb7ppGy0fNkm80S+O5prZ/bfMTr1gHjLzMXATpHulwpYHcNVaJnW/GCCY9iHIYNiV/gIrkDVnQ/CpN6udFCgxMQxV+XMhC29j6n6Bn1EGLqbV5Vje1QIgvCVFfKiowqkKbv9IoKGRg9gtJ6ioXYrj0SMP4WAm4JAfKTV8pG6MpIlQg0jKf4ymqyUMsMglGbPPghezSVfv74IgiMuigU+KQgRVW88Os2uYFAoyGcNFfrk3uwiP4pGmpyhKuGuVNBbAJEhwgJv/gTNvW4bzAll7R/9VezTa5NWm/r1T31HHK1E2GJg45Yqe4PYsqk9/ipkQAVnSVJEH/bQ5F2ZZHCw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR0301MB2560.eurprd03.prod.outlook.com (2603:10a6:800:68::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Sun, 16 Jan 2022 23:05:29 +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:28 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:04:00 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [loSOd6EUSEqmG4Omk43OQHDMHXetfQvj] 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-19-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4e645622-1093-4a87-0ec9-08d9d944b03b X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEuZvKHt/RRJ4O3wxWCrUcc47No6wZQHnOgfcjCAk/HEwqWfSU/iE2vgLq2UM+DUs0blXfARYbKTbGK/kU8yHoMt+d7i9ESvIkT3uGKOYnR1C/jL3OnxSFAdS7RZv6h8e727Gmqm5zrm66BFNd6Rv0MjxMcSjvFp1blc1ezZ/h8YcncKjghybtMa3iOU/vfsYtZV7CbBM6t08l/Emu/HthA7DF5xjZQR4/O4BKRBUI0OXS9iiu0JYuzWg4Dk6DsQqjWsQEDXUc24yV/Sf5gcLKDFdeTvtQmvxrpnkVRR2l2buW005BhHSgy6yGkpNkrivTRKYrW08QkB+RX6IHh5NX93iRmvj1JxG4HZooeAzlk0/mKU6KaZOJP913tSSSaOufEqQADu75Xhe3aFZ4fFOw2OUii202BTr6PejrsOfYfq0PSWHpD0TqR1cyOYUo3d18FLt+m0sgl8sfenfF2RI0c00On840SvuTDnpxMPuU+QeEtCfPWgE3kNyURo2SufewQYGBYFyx7PGA9g6MwN0Ujns5R2/v7e6PLJoPtSZPrKYJM46oteSEoP01D78O/MYKJgzH8LknUu0MryYuUBey5bdSmBW9f9sHNex687wDut1uUkwOmqGrwqdJ/h7jIqwj580UO7sR7XOckfFTmKh36yewkdIoHurIOX7d6f2HLGVwLguDb08/47e1Rkw2XAMh2189l3zdvVblu9WLfGb8iMUydayJFDn9rQzYWRj6UW5eIG7UT1pKipYOzCTV3twjJTMb6vH8oKIQOcOWQb+/0a X-MS-TrafficTypeDiagnostic: VI1PR0301MB2560:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tDhELvT2EPpq2yvwtda4bHrQ1oRUUqySYPJov/FBvl5UJHitBIgG7YyF2J34L3FOXJ39J9A5h55NbUGo9fJhpNf7ltNrSNDsY1wojpyC6lcdH1NURSMPm1mCi7smsm4X1IlDuRv2fKS1adgLBU16tL51+/nCTO05/5VsyNcxIuYhf0SXzh7gf4xsjocP59EXAesYaR/hWDcOknKuuErVrfpaih7SKOCh25UNvXW681DRzGbig+o1cKFppXcOoE5bQejS8Md2qQH++uQ71mmPBbQyXnimN7fr9apuiIKnFSgrczpG7Sb77bzLku9LvUdU4e4UWCMavq+bdQGHYLZrHqnqswlezVxSNaovsqZCPdejoKdy7zhEhVLTfsVCZCAaROjaXr+Tu5p73YC+X17d2Xcu5H1Pl98l+cx2JTER9dMx6al8SvgnIPKK75Kt/2Y1vazA8/NkjdvcRbY+ZtXjx3Yf1F3d0UH7WGl4aqGnGqljVKFKvnl4ufyxMb1fFBpyHVblmmk+12yOzP9x6J5vy+lZK1H7nIpg1offP5kYvBzNF5FbfdvxEAnwA+Xc2IfaSEFuJHi/zZPxR7mRaX9o0w== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: gCttqN8FaUbEUNq+7s3Qi4suGEXfl6kqc/REDtuxwkvwSXWHw5HpAYps5fx0amvdrKPyKStENFmiHMVQW4ZsBoJT7ALb6lm1a9UfmrKCWCESUtCO767ZBF/Zm+H9Nc+b45jGxd0gqsLmKbBk6MxXMOIg4r356nDH+d1jlihZ/2nZpHPXlEa7xYATMqGwufMwZ5ckSsHbaYFKzUr0tnEi5PVlmyOzyRYaKHO+LRn2s0JuDYobH0MIG12v5dGQEaq5Jfp3Dk932WB+FGHfzH/aQeNeLONNF/fU3fHjOqn+gYXSEtp8QCyWyC/24ajflcJdCxSl7xUZed/ZG1mSKX47ST6gxtub0VwWUSyJVe3nlrf8nggIJR3CbOgFLRIkOIYgM2fm3iTiaFadXCCriEg+M00Qqd+xrlTYMafGLN2wJkA8M3AkzREN8pYCGp3pWTOc+famFsZonJC9baV2uFxrGl/xrCamAjQwUKFoiJxsDwh6WwYJ7IxvzVqWvPpm2X5bnChbykBaPw0TcEMyqeVVD4dMvPDqAPpg9SkFJ6oRRaxdNZk9vYpyr+br1itanOkJLvg7//9tin981gSSbWe1pilU/FgRDXQnLS3FPHrzGP+r6IdYSdjSfb1bmklbi9BsgmrM/RB3+wfsuKgZAMPkTqKB/hpA4e7tXDnCbzll3C2XneYcA/Hzx41x1LarcCtMpQtggbWp9msX5PurkBFaR23BoiIkNh2qsJZGn32yq0Q8pWkD783DpKa1UfQbSY+L/R3ME9l1XV714t5V3yyVE/I9qaaxEmTDK8zGkti16S1zt/yhJIQkoUzT7QY4176Ut9QKe3HcCH5+zes1bTDPxWIrEJsb3UwI07wUCitYe43WU8MY8OjqzeU7a3KpZkIJCJHHG7qYvVCeOD1QhXEZGqF+uCFq2X87hw9mYRy4L4sq8puDwdcvW+TiqLQuYZ+aWS9tX8XA/8O2dOwDzgxflw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4e645622-1093-4a87-0ec9-08d9d944b03b 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:28.9174 (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: VI1PR0301MB2560 Subject: [FFmpeg-devel] [PATCH 20/25] avformat/matroskaenc: Redo applying ProRes offset 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: ul1nMllZmx1S Add a field to mkv_track that is set to the offset instead of checking for whether the track is ProRes when writing the Block. This makes writing the Block independent of the AVCodecParameters. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index be1b3711e4..fdce3fad49 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -167,6 +167,7 @@ typedef struct mkv_track { unsigned track_num; int track_num_size; int sample_rate; + unsigned offset; int64_t sample_rate_offset; int64_t last_timestamp; int64_t duration; @@ -2451,12 +2452,9 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, return err; } - if (CONFIG_MATROSKA_MUXER && - par->codec_id == AV_CODEC_ID_PRORES && size >= 8) { - /* Matroska specification requires to remove the first QuickTime atom - */ - size -= 8; - offset = 8; + if (track->offset <= size) { + size -= track->offset; + offset = track->offset; } side_data = av_packet_get_side_data(pkt, @@ -3117,6 +3115,11 @@ static int mkv_init(struct AVFormatContext *s) (AV_RB24(par->extradata) == 1 || AV_RB32(par->extradata) == 1)) track->reformat = mkv_reformat_h2645; break; + case AV_CODEC_ID_PRORES: + /* Matroska specification requires to remove + * the first QuickTime atom. */ + track->offset = 8; + break; #endif case AV_CODEC_ID_AV1: track->reformat = mkv_reformat_av1; From patchwork Sun Jan 16 23:04:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33633 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2274168iog; Sun, 16 Jan 2022 15:07:36 -0800 (PST) X-Google-Smtp-Source: ABdhPJx3xVSfxs5cfzi1SQnqv2slknTNBxNFmdR2t916HnXaTs+ooDadKe+v06v8BgacGZfRN/1s X-Received: by 2002:a05:6402:f16:: with SMTP id i22mr17955129eda.165.1642374456019; Sun, 16 Jan 2022 15:07:36 -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 w6si6807866edc.624.2022.01.16.15.07.35; Sun, 16 Jan 2022 15:07:36 -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=XUsKGwor; 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 91DA368AFD1; Mon, 17 Jan 2022 01:05:37 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-oln040092074045.outbound.protection.outlook.com [40.92.74.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A853868AEC8 for ; Mon, 17 Jan 2022 01:05:35 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UK1krH4j3+Mqq8yioTiQ3axjxF6DU+E9Cnc9c/rtVWhKZxra8IcsoP29NOwLrlrxtKSU4RPw1QFzlAawpNDSor4736meStv0QmYWpi47QBTtc/NmmO+MeM/PrhTKFW/VjJ3gM60X25Gk1mKrVJuVASkGSzneNovIARL0UVITMmWUCS9tvm0C12IQMKFrN+oh1LAtyOspYzvi6TleFf0oJfNi/Fn7dS1pmIZTpml2L1wk9NNX2j41dQJBGufxEo3sTcDqxfTpyCk4dK8GB3kmI9ZGmqAWMHSBESKkg2VfWK579rTLmPMjfgJwX8ctS+IvmodB8uDV5sh0shtkeQ9O3Q== 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=0n0A6GStp6/oqYHXALkVZ8DDNdvOjYcJHDFysqcifJs=; b=RcQPQMTWjG4PUWA/fcRPW33CcmtcSx+qAfdZNkKjy23SShR2W5mEXxg1Sc413YwXZ16gTLBRuyUFb2XrXKnYPaOMhKZp4B/F3WFE22qPqvWbyed91a/Av70B2ir+9YpZbR0txyvP9ka/TlYfX+RYiD2bIuFwjk83cXSoO6xl0EGJwl3eS20hHkcisQnKN0CyE6j9JAxgbb7bLlp307vzBNYsXdKR2YMd2JOqugRvTHSraMvL+acKIphKFA8fHTcSRLePmiiz/QpUSXsfkpT2lrAyHZ6YlBFhN7Yod6A+HMsY/Mwqxq6eFYsVKhO2Dw8N/sl6JCmNc67OSU7KY+ZwoQ== 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=0n0A6GStp6/oqYHXALkVZ8DDNdvOjYcJHDFysqcifJs=; b=XUsKGworBzSz4S9DHI3xy/g2luUfk/TbCA8YzT9mGwG7PuEUMl/pyQMq1ptZHp/9BXRzpzeVQa6uCn70OcTmhSC855WO07bzymenqgcwdbw2McJr0CcvNX4W6D6Jmt6COpBlkxRcNbIeckSW/m50vDrs24YVAlA7m4ARZP4LML3ODaJxgBH8aaKGxbxxXi2N5yya2hPyAzjGD4YrF5wO1lxWE8ke0Sv7pQS4fhGTH6uAg92zgttlccLDkDGtqziJiHeu5lmMWv4U7FQm97aKeo/FxXNFcHW+zW+ZxIPpCvvjEIgbDLQ/fzD23N9nCa+EoHWczaRG/11kxeO+OSrMdw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR0301MB2560.eurprd03.prod.outlook.com (2603:10a6:800:68::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Sun, 16 Jan 2022 23:05:30 +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:30 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:04:01 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [apEPjoPsZUg0SfT6nAQJOsVJZpeDLKiX] 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-20-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d916ddb8-6fad-42e7-5150-08d9d944b13a X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEuZvKHt/RRJ4O3wxWCrUcc4nfNgvZzzzWJSNaK3vnCJ+Imsa2HWJUXCymt2f/yTUBZ+hIY3Vo+p2nk5EDEXkp/O193HbRq9AtyzHyEfPig1ELmWL2lsYL3uShL5FBHcrxRq0+Uv+oJyhk6K6ZV6Qqi3y4EMNHdxiK1Jx7mcUv0hyLavOfEZCqyOuTVaq0VRZ1cmQaiLc4WOSRdCx+zb24WLUR10dFyxnm7Q6WYj3LREK167iV9NsiUk5QAuXc1L9VILVkQ9XQjQZ/C6XaeClB5HpCAYKr/LwbEgMF5/0zXaoJOAB7zP5JY1dGJtHKi21aFaYzgZSzjT5AT+o3+K+/gZlu34yZXajV53x9NbBjnQLrp9sjCqtWE09v+QChEyYxWMt6ZQffmeF3ta9YJLsJEJURqLw6kd7GISS3n5kQ7KjXfxvdUNeLkF/XE1r0YcgMPl/BaY+DVsHbwB2HZ7l6BTdFSk1oZwJPmlo/sp0ltJjNqCvcN8WtLI222UG2/pO742SPVj1iwhEBSrZ78Km8u6T7x/eBRBHjCwnnOJFBxm8V1q6WrRcZr60mU0yCPCDQNzFTzaa9f8uY1JBAtrn1Zcu34RJpLu1cM8k3ppPVCzcDZuad38QmFjTqeTAeceiAY0VQxbBrH5yTa+WVIh0b8/0h2t2Ap15rtwh5ciEX7AZnq08DAYwBbg/UyF/HadEFxbVdqciIE5JfTuimAECnrk1dxBZkDrkmNDiFEtDlh3a8Sb30Yly+pRWakYPSEYA9p6MQm9nyqB5VQLRqnF58q+ X-MS-TrafficTypeDiagnostic: VI1PR0301MB2560:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rdO8Z8EpO19gBm6PfSUFZ9g0Fn8WeB5hvAr6uBjgSC3wbdvsopATctGen1xaRuaP1lpnsGv7knxM5+ii/df2bEdCxH7Nr7psspta7nIgtomECPeVw9FAdfnZ3RDYF1tDzPAOEZqMQNBd9rGBdnq53vXsMT4qSa9d5TuHOQJzQGgRPWCEbFrFwKXWsNBwJXMKxX1xdowa7lNKghtCUMUZJCQWtB/lBFByqgd2ViggaGGvn98EqmnfYfTQMkZNVNHFtO+B9i1p84DD/YFcvL/ZB04GTMMFLOwct+6z3wAEIlduDRWEOatgl0qOu931eiwxpYh9NExTUzxn54a940HfoggYUg3L32p31GkjXsoY+uB9fYOYdsPFU7rI6/AUUAmadRSGYRAbZX1tyWsnWaMe2XK2QAPIn2I4wFmtqAYwDIdryjnRHLWb7yz8Pw9TWj68QFrELqcNw2VYdiNBrDQ2Ol8Mg10Boe0v0QeNmRwZiQkWtsAVuGrCfFHrIqlbB6M73kXSRf/MclxQRSIsnC3dyoZSyaVw+GuEKWihXNkncjKDdYS7fkQlnN4tbA+MYKKVGWYGRnhGbk0ZNQdOa1OaGA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: KUMfP81RoIL4R5868YMYRf5AOkxKtAqt+81AMvOIrjMHFL1QMjI8kzaHwx2KyRkpbIKyK27z8cFb/d1EExBbkNTTKEGHtm4lDhNgS6JeHgXV0UdnKdwfeDPNujqj/ALdw11AsDsK1WVsS7NThfvgaspjBcAgeu3PFNmI916VyBu614Ex9cKi8Gz6cMN+7Fy/dewx6JkVEbHKy2nkxxoFrEKjO475rk2uREWYKDhzR5l90Mw86XMO44ezpFoz6PPU8c7g7uJFTqmHoFniEf/NUFQBxg5Cw8jADGGgeS3CGmW7LA5Y/cCfJy+2F4qI4XtnB9CPX1p6TVs3/m81TcsVGgu8JUwzlIzsFM3JyOGtZwmeE9DN+DPb9yc/NuZByhZ0oLDjsa7NFMXxMbjwS/9MlmS5BXd8ec5ioM1q8gerbC2AKHeL/XQk335v/PU1Nyft4RNCNKRdjROLAY9OsKBWwMdod+4rexcqbSxUnQzWjKae/wn6SUqWXTW6wogBMJLA+2jt9m4p6z/yh4N9Z3aC+v6IuFbOiMI+thc2Er3aVR5rWcNbbhDoewz1ViYlHnA6uWShzyPA99Jc4nqvUv8ExSEn1H0dlBaTXupsbVcnSlTvzJrNkxh8f6y2BPziRjAeBywra5vWdVOyNPMG4vIsqznK+XcH+wAsJQkKiclBgjyKerDGg9U1VPiDxYB7qVMiWtO+7mO3WaSrj7PSHNsfTfQr2qgxaGHkp53AybRgeAunOvJUq55PwJy9iHW4ji8LrYZnuKSU+Lotx+s+mqTvpuOAg/NMxtxIODOAhjYy/tdvMV+qfU53CssQzbdinTJNB1akkjVJemM9jFqdSnN+VCV2aYu9LEelMVTbSTpbTptyAWFHJJXU4sZVWo+1MNyVU5+fh0Qv7SGkmNfPJCR0NwdIjsaFUC2pajsut3B7VkuR28fiQKqgzWuGL7MRUrVoHTbPiks6lnTg04kjB5ApaQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d916ddb8-6fad-42e7-5150-08d9d944b13a 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:30.5903 (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: VI1PR0301MB2560 Subject: [FFmpeg-devel] [PATCH 21/25] avformat/matroskaenc: Don't waste bytes on BlockGroup length fields 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: y7TWhf+wpNdS This commit uses the new EbmlWriter API to write the length fields of the BlockGroup and its descendants that are themselves Master elements (namely BlockAdditions and BlockMore) on the least amount of bytes. This fixes regressions introduced when the special code for writing general subtitles was removed. Accordingly, the binsub-mksenc and matroska-zero-length-block FATE-tests have now been reverted back to their old state again; the advantages of this approach are evident with the matroska-vp8-alpha-remux test which up until now wrote all the length fields of all BlockGroups, BlockAdditions and BlockMore on eight bytes. Using the EbmlWriter API also allowed to improve locality in mkv_write_block(): E.g. both DiscardPadding as well as the BlockAdditional side-data are now directly used to add elements to the writer whereas the earlier code had to first check for whether a BlockGroup should be used and then check again (after the place where a BlockGroup would be opened if one were used) for whether there is DiscardPadding or BlockAdditional side-data to write. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 208 +++++++++++++--------- tests/ref/fate/binsub-mksenc | 2 +- tests/ref/fate/matroska-vp8-alpha-remux | 4 +- tests/ref/fate/matroska-zero-length-block | 4 +- tests/ref/fate/webm-dash-chapters | 4 +- 5 files changed, 130 insertions(+), 92 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index fdce3fad49..a3c84eb63b 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -99,9 +99,18 @@ typedef enum EbmlType { EBML_STR, EBML_UTF8 = EBML_STR, EBML_BIN, + EBML_BLOCK, ///< pseudo-type for writing BlockGroups/SimpleBlocks EBML_MASTER, } EbmlType; +typedef struct BlockContext { + struct mkv_track *track; + const AVPacket *pkt; + int16_t rel_ts; + uint8_t flags; + NALUList h2645_nalu_list; +} BlockContext; + typedef struct EbmlMaster { int nb_elements; ///< -1 if not finished int containing_master; ///< -1 if no parent exists @@ -118,6 +127,7 @@ typedef struct EbmlElement { double f; const char *str; const uint8_t *bin; + struct MatroskaMuxContext *mkv; ///< used by EBML_BLOCK EbmlMaster master; } priv; } EbmlElement; @@ -185,6 +195,8 @@ typedef struct mkv_track { typedef struct MatroskaMuxContext { const AVClass *class; + AVFormatContext *ctx; + int mode; ebml_stored_master info; ebml_stored_master track; @@ -200,7 +212,7 @@ typedef struct MatroskaMuxContext { mkv_cues cues; int64_t cues_pos; - NALUList h2645_nalu_list; + BlockContext cur_block; AVPacket *cur_audio_pkt; @@ -339,20 +351,6 @@ static void put_ebml_uint(AVIOContext *pb, uint32_t elementid, uint64_t val) avio_w8(pb, (uint8_t)(val >> i * 8)); } -static void put_ebml_sint(AVIOContext *pb, uint32_t elementid, int64_t val) -{ - int i, bytes = 1; - uint64_t tmp = 2 * (uint64_t)(val < 0 ? val^-1 : val); - - while (tmp >>= 8) - bytes++; - - put_ebml_id(pb, elementid); - put_ebml_length(pb, bytes, 0); - for (i = bytes - 1; i >= 0; i--) - avio_w8(pb, (uint8_t)(val >> i * 8)); -} - static void put_ebml_float(AVIOContext *pb, uint32_t elementid, double val) { put_ebml_id(pb, elementid); @@ -500,6 +498,19 @@ static void ebml_writer_add_uint(EbmlWriter *writer, uint32_t id, elem->priv.uint = val; } +static void ebml_writer_add_sint(EbmlWriter *writer, uint32_t id, + int64_t val) +{ + EbmlElement *elem = ebml_writer_add(writer, id, EBML_SINT); + elem->priv.sint = val; +} + +static void ebml_writer_add_block(EbmlWriter *writer, MatroskaMuxContext *mkv) +{ + EbmlElement *elem = ebml_writer_add(writer, MATROSKA_ID_BLOCK, EBML_BLOCK); + elem->priv.mkv = mkv; +} + static int ebml_writer_str_len(EbmlElement *elem) { size_t len = strlen(elem->priv.str); @@ -566,6 +577,52 @@ static int ebml_writer_master_len(EbmlWriter *writer, EbmlElement *elem, return master->priv.master.nb_elements; } +static int ebml_writer_block_len(EbmlElement *elem) +{ + MatroskaMuxContext *const mkv = elem->priv.mkv; + BlockContext *const block = &mkv->cur_block; + mkv_track *const track = block->track; + const AVPacket *const pkt = block->pkt; + int err, size; + + if (track->reformat) { + err = track->reformat(mkv, NULL, pkt, &size); + if (err < 0) { + av_log(mkv->ctx, AV_LOG_ERROR, "Error when reformatting data of " + "a packet from stream %d.\n", pkt->stream_index); + return err; + } + } else { + size = pkt->size; + if (track->offset <= size) + size -= track->offset; + } + elem->size = track->track_num_size + 3U + size; + + return 0; +} + +static void ebml_writer_write_block(const EbmlElement *elem, AVIOContext *pb) +{ + MatroskaMuxContext *const mkv = elem->priv.mkv; + BlockContext *const block = &mkv->cur_block; + mkv_track *const track = block->track; + const AVPacket *const pkt = block->pkt; + + put_ebml_num(pb, track->track_num, track->track_num_size); + avio_wb16(pb, block->rel_ts); + avio_w8(pb, block->flags); + + if (track->reformat) { + int size; + track->reformat(mkv, pb, pkt, &size); + } else { + const uint8_t *data = pkt->data; + unsigned offset = track->offset <= pkt->size ? track->offset : 0; + avio_write(pb, data + offset, pkt->size - offset); + } +} + static int ebml_writer_elem_len(EbmlWriter *writer, EbmlElement *elem, int remaining_elems) { @@ -585,6 +642,9 @@ static int ebml_writer_elem_len(EbmlWriter *writer, EbmlElement *elem, case EBML_SINT: ret = ebml_writer_sint_len(elem); break; + case EBML_BLOCK: + ret = ebml_writer_block_len(elem); + break; case EBML_MASTER: ret = ebml_writer_master_len(writer, elem, remaining_elems); break; @@ -624,6 +684,9 @@ static int ebml_writer_elem_write(const EbmlElement *elem, AVIOContext *pb) avio_write(pb, data, elem->size); break; } + case EBML_BLOCK: + ebml_writer_write_block(elem, pb); + break; case EBML_MASTER: { int nb_elems = elem->priv.master.nb_elements; @@ -749,7 +812,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->cur_block.h2645_nalu_list.nalus); av_freep(&mkv->cues.entries); av_freep(&mkv->tracks); } @@ -2356,9 +2419,9 @@ static int mkv_reformat_h2645(MatroskaMuxContext *mkv, AVIOContext *pb, { int ret; if (pb) { - ff_nal_units_write_list(&mkv->h2645_nalu_list, pb, pkt->data); + ff_nal_units_write_list(&mkv->cur_block.h2645_nalu_list, pb, pkt->data); } else { - ret = ff_nal_units_create_list(&mkv->h2645_nalu_list, pkt->data, pkt->size); + ret = ff_nal_units_create_list(&mkv->cur_block.h2645_nalu_list, pkt->data, pkt->size); if (ret < 0) return ret; *size = ret; @@ -2423,14 +2486,25 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, mkv_track *track, const AVPacket *pkt, int keyframe, int64_t ts, uint64_t duration) { - uint8_t *data = NULL, *side_data = NULL; + uint8_t *side_data; size_t side_data_size; - int err = 0, offset = 0, size = pkt->size; uint64_t additional_id; - uint32_t blockid = MATROSKA_ID_SIMPLEBLOCK; int64_t discard_padding = 0; unsigned track_number = track->track_num; - ebml_master block_group, block_additions, block_more; + EBML_WRITER(9); + + mkv->cur_block.track = track; + mkv->cur_block.pkt = pkt; + mkv->cur_block.rel_ts = ts - mkv->cluster_pts; + mkv->cur_block.flags = 0; + + /* Open a BlockGroup with a Block now; it will later be converted + * to a SimpleBlock if possible. */ + ebml_writer_open_master(&writer, MATROSKA_ID_BLOCKGROUP); + ebml_writer_add_block(&writer, mkv); + + if (duration) + ebml_writer_add_uint(&writer, MATROSKA_ID_BLOCKDURATION, duration); /* The following string is identical to the one in mkv_write_vtt_blocks * so that only one copy needs to exist in binaries. */ @@ -2441,22 +2515,6 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, pkt->size, pkt->pts, pkt->dts, pkt->duration, avio_tell(pb), mkv->cluster_pos, track_number, keyframe != 0); - if (track->reformat) { - err = track->reformat(mkv, NULL, pkt, &size); - } else - data = pkt->data; - - if (err < 0) { - av_log(logctx, AV_LOG_ERROR, "Error when reformatting data of " - "a packet from stream %d.\n", pkt->stream_index); - return err; - } - - if (track->offset <= size) { - size -= track->offset; - offset = track->offset; - } - side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_SKIP_SAMPLES, &side_data_size); @@ -2464,62 +2522,39 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, discard_padding = av_rescale_q(AV_RL32(side_data + 4), (AVRational){1, par->sample_rate}, (AVRational){1, 1000000000}); + ebml_writer_add_sint(&writer, MATROSKA_ID_DISCARDPADDING, discard_padding); } side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, &side_data_size); - if (side_data) { + if (side_data && side_data_size >= 8 && // Only the Codec-specific BlockMore (id == 1) is currently supported. - if (side_data_size < 8 || (additional_id = AV_RB64(side_data)) != 1) { - side_data_size = 0; - } else { - side_data += 8; - side_data_size -= 8; - } - } - - if (side_data_size || discard_padding || duration) { - block_group = start_ebml_master(pb, MATROSKA_ID_BLOCKGROUP, 0); - blockid = MATROSKA_ID_BLOCK; - } - - put_ebml_id(pb, blockid); - put_ebml_length(pb, size + track->track_num_size + 3, 0); - put_ebml_num(pb, track_number, track->track_num_size); - avio_wb16(pb, ts - mkv->cluster_pts); - avio_w8(pb, (blockid == MATROSKA_ID_SIMPLEBLOCK && keyframe) ? (1 << 7) : 0); - if (track->reformat) { - track->reformat(mkv, pb, pkt, &size); - } else { - avio_write(pb, data + offset, size); - } - - if (duration) - put_ebml_uint(pb, MATROSKA_ID_BLOCKDURATION, duration); - - if (blockid == MATROSKA_ID_BLOCK && !keyframe) - put_ebml_sint(pb, MATROSKA_ID_BLOCKREFERENCE, track->last_timestamp - ts); - track->last_timestamp = ts; - - if (discard_padding) - put_ebml_sint(pb, MATROSKA_ID_DISCARDPADDING, discard_padding); - - if (side_data_size) { - block_additions = start_ebml_master(pb, MATROSKA_ID_BLOCKADDITIONS, 0); - block_more = start_ebml_master(pb, MATROSKA_ID_BLOCKMORE, 0); + (additional_id = AV_RB64(side_data)) == 1) { + ebml_writer_open_master(&writer, MATROSKA_ID_BLOCKADDITIONS); + ebml_writer_open_master(&writer, MATROSKA_ID_BLOCKMORE); /* Until dbc50f8a our demuxer used a wrong default value * of BlockAddID, so we write it unconditionally. */ - put_ebml_uint (pb, MATROSKA_ID_BLOCKADDID, additional_id); - put_ebml_binary(pb, MATROSKA_ID_BLOCKADDITIONAL, - side_data, side_data_size); - end_ebml_master(pb, block_more); - end_ebml_master(pb, block_additions); - } - if (blockid == MATROSKA_ID_BLOCK) - end_ebml_master(pb, block_group); + ebml_writer_add_uint(&writer, MATROSKA_ID_BLOCKADDID, additional_id); + ebml_writer_add_bin (&writer, MATROSKA_ID_BLOCKADDITIONAL, + side_data + 8, side_data_size - 8); + ebml_writer_close_master(&writer); + ebml_writer_close_master(&writer); + } + + if (writer.nb_elements == 2) { + /* Nothing except the BlockGroup + Block. Can use a SimpleBlock. */ + writer.elements++; // Skip the BlockGroup. + writer.nb_elements--; + av_assert2(writer.elements[0].id == MATROSKA_ID_BLOCK); + writer.elements[0].id = MATROSKA_ID_SIMPLEBLOCK; + if (keyframe) + mkv->cur_block.flags |= 1 << 7; + } else if (!keyframe) + ebml_writer_add_sint(&writer, MATROSKA_ID_BLOCKREFERENCE, + track->last_timestamp - ts); - return 0; + return ebml_writer_write(&writer, pb); } static int mkv_write_vtt_blocks(AVFormatContext *s, AVIOContext *pb, const AVPacket *pkt) @@ -2763,6 +2798,7 @@ static int mkv_write_packet_internal(AVFormatContext *s, const AVPacket *pkt) } } + track->last_timestamp = ts; mkv->duration = FFMAX(mkv->duration, ts + duration); track->duration = FFMAX(track->duration, ts + duration); @@ -3058,6 +3094,8 @@ static int mkv_init(struct AVFormatContext *s) unsigned nb_tracks = 0; int i; + mkv->ctx = s; + for (i = 0; i < s->nb_streams; i++) { if (s->streams[i]->codecpar->codec_id == AV_CODEC_ID_ATRAC3 || s->streams[i]->codecpar->codec_id == AV_CODEC_ID_COOK || diff --git a/tests/ref/fate/binsub-mksenc b/tests/ref/fate/binsub-mksenc index 01e7db64f2..184661a3f0 100644 --- a/tests/ref/fate/binsub-mksenc +++ b/tests/ref/fate/binsub-mksenc @@ -1 +1 @@ -9dd2ff92a3da9fb50405db3d05e41042 +490b1b4beb4a614c06004609039ce779 diff --git a/tests/ref/fate/matroska-vp8-alpha-remux b/tests/ref/fate/matroska-vp8-alpha-remux index 413961672f..c17e8d0587 100644 --- a/tests/ref/fate/matroska-vp8-alpha-remux +++ b/tests/ref/fate/matroska-vp8-alpha-remux @@ -1,5 +1,5 @@ -89c4f6136f151f45c217ec363fe9db2b *tests/data/fate/matroska-vp8-alpha-remux.matroska -237178 tests/data/fate/matroska-vp8-alpha-remux.matroska +58147987d42f32d105d96b24b0755257 *tests/data/fate/matroska-vp8-alpha-remux.matroska +235018 tests/data/fate/matroska-vp8-alpha-remux.matroska #tb 0: 1/1000 #media_type 0: video #codec_id 0: vp8 diff --git a/tests/ref/fate/matroska-zero-length-block b/tests/ref/fate/matroska-zero-length-block index edee36a4ab..924cec1e3f 100644 --- a/tests/ref/fate/matroska-zero-length-block +++ b/tests/ref/fate/matroska-zero-length-block @@ -1,5 +1,5 @@ -c09d3b89ed0795817d671deb041fca1b *tests/data/fate/matroska-zero-length-block.matroska -650 tests/data/fate/matroska-zero-length-block.matroska +f37ba7e8a30eaa33c1fd0ef77447fb41 *tests/data/fate/matroska-zero-length-block.matroska +636 tests/data/fate/matroska-zero-length-block.matroska #tb 0: 1/1000 #media_type 0: subtitle #codec_id 0: subrip diff --git a/tests/ref/fate/webm-dash-chapters b/tests/ref/fate/webm-dash-chapters index 95114e6526..af8110ed1a 100644 --- a/tests/ref/fate/webm-dash-chapters +++ b/tests/ref/fate/webm-dash-chapters @@ -1,5 +1,5 @@ -01732642a0750de3959fd348092929a5 *tests/data/fate/webm-dash-chapters.webm -111162 tests/data/fate/webm-dash-chapters.webm +f97445ba73e182c888fa077348384083 *tests/data/fate/webm-dash-chapters.webm +111156 tests/data/fate/webm-dash-chapters.webm #extradata 0: 3469, 0xc6769ddc #tb 0: 1/1000 #media_type 0: audio From patchwork Sun Jan 16 23:04:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33616 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2274248iog; Sun, 16 Jan 2022 15:07:45 -0800 (PST) X-Google-Smtp-Source: ABdhPJzr3BGRci5hW7VDc8F3kVJ6jLVDYxWw74ljTcErYOwvs++LyPKR8B3lq/1rY+gr3kS8Ahjt X-Received: by 2002:aa7:cf14:: with SMTP id a20mr11638715edy.324.1642374465468; Sun, 16 Jan 2022 15:07:45 -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 w11si7433379edd.387.2022.01.16.15.07.45; Sun, 16 Jan 2022 15:07:45 -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=sDydtito; 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 A19D268AFDC; Mon, 17 Jan 2022 01:05:38 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-oln040092074045.outbound.protection.outlook.com [40.92.74.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D3C8B68AEC5 for ; Mon, 17 Jan 2022 01:05:35 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gXu/CH+3uo2/lZT4/02Y0IJmgJwsBnS/sQoQFvpIGnxfImjS0kexCn4c9MeBm7n4k+q/qmh0OW/FToYziaEytYS3gQH6l9mS5o2QDxUvlQiZRXzn/V/yiVs5aBSlJGBW6wzMynMYzNQ9RcUhVICbm0mbpf+RQLtNvqyjYxhM+V+oX6khtMQahvymubEqNgJbTwnWtvw0pXq0h+5Bm5ntXMFkq/sVEfH2JmlKD0Br5+uPqqkNnk8Eb9m+eMgU8kf25EG4JHqG2nhIY7susliTc1xdPD+5SzJSlbN3mb3WhBIIceltAYOmVdQmuCunXM5XkRu4IZoFHqQRjRtl+8zwhA== 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=FTyVpOtZsa3sMmHheOzwqLJqpt49Vd64DSvSPyAQoOo=; b=mZTpeMGdWlM3divaPPrTs2Wg/CoiY78+HyGql8HQAW5+ZrktVYHy/Lj45Tk/+IPLFAjMclqfd+zL0WBMGs5/g5VEQvf4lur8+M3ln7HKo8zKsuHpDUPcvMg9aOb23MkKAcHG8ymQNnGfl3VKR2JfRjtFUtIfFLc1Nq/6akOzJMJ79pDtf3XVfWJQDORZ9ualalkKmD4rWjoBhVn1274YGXbieJNC3n1jrrMtJupsyNpOwn+NyBI7xHrcCuTljZ4Q+zXNQ61uFm2QWLNdfFJgQGRvGVntVVbR0IXvHPww9CAcDDufpVrY2lkdu9ZK92EYj1ZcUGmA3i4fUoxcfC4xkQ== 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=FTyVpOtZsa3sMmHheOzwqLJqpt49Vd64DSvSPyAQoOo=; b=sDydtitopjhJIld98sWsUqMBi1/AYUqMois0VoUyO+EE9E1e1UwhwRFeT/QsvwJHCKlUdjb8/IUHfDntt1qZrvALiX1Nubu6OKvpthjdT7Dlo+RCjr2FhBbR6Mm1oUbvnNVcYFDO5+naC5cJxFG0kB6wYBkmK6vstlLLTL0YdGV8bH+E6DzVqYjEV/tNQ3IwI2fgedyu9aqiYdl4GBh/84mxRb6psSV/t0pEyUA7zVDOmitnqRPrS7KVO5ibkpzQhPYDufmn1IJXnb/pax7vI0yHA96TIKSkTWozjDwbTRF8gXM6SlYSW1Dsc2oCsHBz59/5DLfBl+2LK4l1dU0FmQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR0301MB2560.eurprd03.prod.outlook.com (2603:10a6:800:68::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Sun, 16 Jan 2022 23:05:32 +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:32 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:04:02 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [dWE2mQG4KF12TJzCrHWzYkAj/JMpfPN9] 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-21-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f2f72e5f-79d7-4bf8-f097-08d9d944b261 X-MS-Exchange-SLBlob-MailProps: sTyj/kSftou7kRWZu+p1Yy70c3quhp4iiGEUUKuzaKkT5OyQPytVsSb8jssy8Uo8vwDEK0OQzHHidTZl6JuKSNgrMnXmlCUAMcNh/PllCuD7fuHvZMnvgleesMR6U0oyYrMcMU9lbg7byjTIsYYqnizLWdBZKwmOvDzOPNy6iNhspx7YgVCO893P50G9Gn8pSmYSoh314iId6bOhi6qumCzfl/yYFpIBxRnK/aKRFm+jZoAyJSGhVkR5eqbWyJZxF8d6fSGMcKO9rwwM8UR74pMuVXpL8fjpTVo2HE7fwWl5CozJzvDPTua6ldp20hoo59chJSWGdfoWRxjFbONEeVBRLIEthHsOGbCRdwihQlX0tWkte9TjCa/QdfFQU+GQGMcPQocVQrRLuRs4489+LmPSHO35rK2KM+17lP/7HvDQSbG/GoFkJsWmKIGUdarKN8D6rQErvGXyuaXlxc3UHAZ6sknC/L9vsqAQA29Nm0nKpJdUwWQ+hl4auqN/caQjeex9lAkuIegy7TfKpW/5jIkOMZqJ7Lt/47SjeVtTUMWiI/sEC2jsQArfY75mQV6CHUo726qdCFXLcmiNABjWyxpiq4lt60nVzapGwFtLyFSfWWcutd+C3S19rNmPe7EyC8H8oWNH312/I1K/DAbqMrBbsGKRW53EOOnF5BR0qJET7f/E2ybCE69sVfxfKovLPOaWmTSt4vx1kJ0S+bz6tA4TiUhpg5NhfJuFYWLhoGyaK1ynKeDvY/jmubkD3bEds6lQ8yiSIWmRTgrHWEP2fRKIgPxq2opPuy5bDdZY7ju1knYKC4QclDVq+aa/DJa3ujiQfhx2wohU9SvUY7tFnA== X-MS-TrafficTypeDiagnostic: VI1PR0301MB2560:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: OzMDEYq/nkIqlAhn4LGFbfagnrlUsynnXmODi0kXfRuWEPlzxkFg2rlw9DsidGxj1SwfhT6QkHgbBdsYe0rjt5A6Y0b2zL/89uI7SgUmfhTNB9ieMf8zkLjW968+VhKDgtagnpvpVwAUVRueI9qg3OXYTG5WQy9y4CZ8wnVrcfchUyrLD7rabUV+x7522x39QsEIc8WRwkoD9YPB0J1zCy6pxddWs4ndoYMRI7IR3eEKNJC24xNWNgeDxqHVVs/InW5K9NS1zCvkDNwSlEujTBgQMrQH0bRAK7GwM5i9eOvVrBhVe7ZPoAgCDNV8d81/txlmU3Opf8eK2Q2/1hzYkipZf/+j5h+DGR9E+Evt/3pRA/j4E9kAEXSlZDEt5vnFKgm/lPcZfRnduaf7/rQsv5grdaXumwgxUROE18gCV8BPgB/IDzwu7Aw3ImKPyA6iJbzfsfWxZ28hJlIlXOLVPn//9v2lMy08T81FJnpAM73Pc1NMVS5QJaseNH6WWelG8TIvb0nvE5yhHkZPa+hWfSqd8e3xvbprOfOtkerw1IpJcPNN6m+PlYY0QguV+iST85U+w4a4fDS+WTVzueBW4+xGIrKBILGq4zqfHXnb5fcCqQ9BxW6S0NcbaVA9tP4b X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: m5mVYvlOa7Aep5yfiXdn0YmD0c7AlPIBhdzyjytR+YCTteb9dso/ssdtytfotKIePdWTxGQvPPCbzQmXM9Yg6xzvN6uIrFM7lBv5MR4XFmhvl3nPeaWW1bFckchZqOWx98LcA0XGMJbWuXeFh4GTJZSYEAtINkL4q+07BMEPcyX/uZT8N6MUe17CrPN2krmC9kDZzhWTJLSmZdZHw+mflh2yxN/lSIx5mO0BrmNFPFROxWDwxBbIazIcBTmGFKENVqX89acVuvuwvzpTdNUeBrEnzDQssyxNO8+zK5Av7uEN+hhu+Mc8pEcbSNKAaA3ZXC+AKS6Rms5Rrg6GPPFp4Q2Hq2T6GfgQaIGuYfOxYaEMbEmNZaZn8AE13Uk/dADiiuLyYlHWdbHzdyhSciH5OTLmFmoQYdz7xitHrrT+rrbr6naYnWB0Q3WT2Ke2wNlrH1j/+QZ5vdqQSIl8MJ4SsJ4y6Bi6vBSu9fLGZPAiPEb4fWxjV+mDrg+tJ4JTDLsQS1FqevI5RbSb3926FxKX+JGtykfLpzTPvU3rZHGHOxshnQYzQlgj70Z22HHa27BcN/TlQ0F1bdcp5ih/ebcvnrBQPsyam1YGynJ5/pWqm0C7ZYSMeLCd9oZCwcHrQwl59kRfp1rozu0EJOwr3zd5899a1nYsxwLmBQqQ1UoQXGewwHoA6GQmjTlWIbAxqyUmgb8kl6AN5aqeUFy5nhMyIn3/VpoOEmfkPEkbA6U5HuCud3tMpjmpHKPAPce2jw+14EP7VBDzgpAfvZUsXyPUFpGErSqbpnEt+lSv0JN8rAGw/bENz5mpbyCAoQnJfIK0/uvRdyJtmHxpVfoOepBr+0ESxRMQ2+AqneOhKmZHZnb3HMWSebc6RUNG509u+jhuJ3/qiB5UZeXsgwK27JRxCGZVIKjOJoYbwK0fQ8IiMJf7CBvyTxwJY19IMU4ftjiIulTGU4rRJb19h/MlzwrX6g== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f2f72e5f-79d7-4bf8-f097-08d9d944b261 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:32.5589 (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: VI1PR0301MB2560 Subject: [FFmpeg-devel] [PATCH 22/25] avformat/matroskaenc: Remove duplicated code for writing WebVTT subs 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: L76YuhM3OWHu Up until now, the WebM variant of WebVTT subtitles has been handled specially: It had its own function to write it, because the data had to be reformatted before writing. But given that other codecs also need reformatting, this is no good reason to also duplicate the generic stuff for writing Block(Group)s. This commit therefore uses an ordinary reformatting function for this task; writing WebVTT subtitles now uses the generic code and therefore automatically uses the least amount of bytes for its BlockGroup length fields whereas the earlier code used an overestimation for the length of the Duration element. This is the reason for the changes to the webm-webvtt-remux FATE-test. (This commit does not implement support for Matroska's way of muxing WebVTT; it also does not add checks to ensure that WebM-style subtitles don't get muxed in Matroska. But the function for reformatting gets a webm prefix to indicate that this is for WebM.) Signed-off-by: Andreas Rheinhardt --- Finally! Removing this has been on my list for ages; see https://ffmpeg.org/pipermail/ffmpeg-devel/2019-April/243012.html libavformat/matroskaenc.c | 117 ++++++++++--------------------- tests/ref/fate/webm-webvtt-remux | 4 +- 2 files changed, 39 insertions(+), 82 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index a3c84eb63b..e2f2dd7dae 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2404,15 +2404,6 @@ static int mkv_write_header(AVFormatContext *s) return 0; } -static int mkv_blockgroup_size(int pkt_size, int track_num_size) -{ - int size = pkt_size + track_num_size + 3; - size += ebml_length_size(size); - size += 2; // EBML ID for block and block duration - size += 9; // max size of block duration incl. length field - return size; -} - #if CONFIG_MATROSKA_MUXER static int mkv_reformat_h2645(MatroskaMuxContext *mkv, AVIOContext *pb, const AVPacket *pkt, int *size) @@ -2481,10 +2472,38 @@ static int mkv_reformat_av1(MatroskaMuxContext *mkv, AVIOContext *pb, return 0; } +static int webm_reformat_vtt(MatroskaMuxContext *mkv, AVIOContext *pb, + const AVPacket *pkt, int *size) +{ + const uint8_t *id, *settings; + size_t id_size, settings_size; + unsigned total = pkt->size + 2U; + + if (total > INT_MAX) + return AVERROR(ERANGE); + + id = av_packet_get_side_data(pkt, AV_PKT_DATA_WEBVTT_IDENTIFIER, + &id_size); + settings = av_packet_get_side_data(pkt, AV_PKT_DATA_WEBVTT_SETTINGS, + &settings_size); + if (id_size > INT_MAX - total || settings_size > INT_MAX - (total += id_size)) + return AVERROR(ERANGE); + *size = total += settings_size; + if (pb) { + avio_write(pb, id, id_size); + avio_w8(pb, '\n'); + avio_write(pb, settings, settings_size); + avio_w8(pb, '\n'); + avio_write(pb, pkt->data, pkt->size); + } + return 0; +} + static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, AVIOContext *pb, const AVCodecParameters *par, mkv_track *track, const AVPacket *pkt, - int keyframe, int64_t ts, uint64_t duration) + int keyframe, int64_t ts, uint64_t duration, + int force_blockgroup) { uint8_t *side_data; size_t side_data_size; @@ -2506,8 +2525,6 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, if (duration) ebml_writer_add_uint(&writer, MATROSKA_ID_BLOCKDURATION, duration); - /* The following string is identical to the one in mkv_write_vtt_blocks - * so that only one copy needs to exist in binaries. */ av_log(logctx, AV_LOG_DEBUG, "Writing block of size %d with pts %" PRId64 ", dts %" PRId64 ", " "duration %" PRId64 " at relative offset %" PRId64 " in cluster " @@ -2542,7 +2559,7 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, ebml_writer_close_master(&writer); } - if (writer.nb_elements == 2) { + if (!force_blockgroup && writer.nb_elements == 2) { /* Nothing except the BlockGroup + Block. Can use a SimpleBlock. */ writer.elements++; // Skip the BlockGroup. writer.nb_elements--; @@ -2557,59 +2574,6 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, return ebml_writer_write(&writer, pb); } -static int mkv_write_vtt_blocks(AVFormatContext *s, AVIOContext *pb, const AVPacket *pkt) -{ - MatroskaMuxContext *mkv = s->priv_data; - mkv_track *track = &mkv->tracks[pkt->stream_index]; - ebml_master blockgroup; - size_t id_size, settings_size; - int size, id_size_int, settings_size_int; - const char *id, *settings; - int64_t ts = track->write_dts ? pkt->dts : pkt->pts; - const int flags = 0; - - id = av_packet_get_side_data(pkt, AV_PKT_DATA_WEBVTT_IDENTIFIER, - &id_size); - id = id ? id : ""; - - settings = av_packet_get_side_data(pkt, AV_PKT_DATA_WEBVTT_SETTINGS, - &settings_size); - settings = settings ? settings : ""; - - if (id_size > INT_MAX - 2 || settings_size > INT_MAX - id_size - 2 || - pkt->size > INT_MAX - settings_size - id_size - 2) - return AVERROR(EINVAL); - - size = id_size + 1 + settings_size + 1 + pkt->size; - - /* The following string is identical to the one in mkv_write_block so that - * only one copy needs to exist in binaries. */ - av_log(s, AV_LOG_DEBUG, - "Writing block of size %d with pts %" PRId64 ", dts %" PRId64 ", " - "duration %" PRId64 " at relative offset %" PRId64 " in cluster " - "at offset %" PRId64 ". TrackNumber %u, keyframe %d\n", - size, pkt->pts, pkt->dts, pkt->duration, avio_tell(pb), - mkv->cluster_pos, track->track_num, 1); - - blockgroup = start_ebml_master(pb, MATROSKA_ID_BLOCKGROUP, - mkv_blockgroup_size(size, track->track_num_size)); - - put_ebml_id(pb, MATROSKA_ID_BLOCK); - put_ebml_length(pb, size + track->track_num_size + 3, 0); - put_ebml_num(pb, track->track_num, track->track_num_size); - avio_wb16(pb, ts - mkv->cluster_pts); - avio_w8(pb, flags); - - id_size_int = id_size; - settings_size_int = settings_size; - avio_printf(pb, "%.*s\n%.*s\n%.*s", id_size_int, id, settings_size_int, settings, pkt->size, pkt->data); - - put_ebml_uint(pb, MATROSKA_ID_BLOCKDURATION, pkt->duration); - end_ebml_master(pb, blockgroup); - - return 0; -} - static int mkv_end_cluster(AVFormatContext *s) { MatroskaMuxContext *mkv = s->priv_data; @@ -2769,9 +2733,11 @@ static int mkv_write_packet_internal(AVFormatContext *s, const AVPacket *pkt) relative_packet_pos = avio_tell(pb); - if (par->codec_id != AV_CODEC_ID_WEBVTT) { + /* The WebM spec requires WebVTT to be muxed in BlockGroups; + * so we force it even for packets without duration. */ ret = mkv_write_block(s, mkv, pb, par, track, pkt, - keyframe, ts, write_duration); + keyframe, ts, write_duration, + par->codec_id == AV_CODEC_ID_WEBVTT); if (ret < 0) return ret; if (keyframe && IS_SEEKABLE(s->pb, mkv) && @@ -2785,18 +2751,6 @@ static int mkv_write_packet_internal(AVFormatContext *s, const AVPacket *pkt) return ret; track->has_cue = 1; } - } else { - ret = mkv_write_vtt_blocks(s, pb, pkt); - if (ret < 0) - return ret; - - if (IS_SEEKABLE(s->pb, mkv)) { - ret = mkv_add_cuepoint(mkv, pkt->stream_index, ts, - mkv->cluster_pos, relative_packet_pos, duration); - if (ret < 0) - return ret; - } - } track->last_timestamp = ts; mkv->duration = FFMAX(mkv->duration, ts + duration); @@ -3162,6 +3116,9 @@ static int mkv_init(struct AVFormatContext *s) case AV_CODEC_ID_AV1: track->reformat = mkv_reformat_av1; break; + case AV_CODEC_ID_WEBVTT: + track->reformat = webm_reformat_vtt; + break; } if (s->flags & AVFMT_FLAG_BITEXACT) { diff --git a/tests/ref/fate/webm-webvtt-remux b/tests/ref/fate/webm-webvtt-remux index 15e919d74b..d847bbee2b 100644 --- a/tests/ref/fate/webm-webvtt-remux +++ b/tests/ref/fate/webm-webvtt-remux @@ -1,5 +1,5 @@ -c5625f28e6968e12d91f125edef5f16c *tests/data/fate/webm-webvtt-remux.webm -6560 tests/data/fate/webm-webvtt-remux.webm +8620a6614f149fc49ab7f4552373943e *tests/data/fate/webm-webvtt-remux.webm +6556 tests/data/fate/webm-webvtt-remux.webm #tb 0: 1/1000 #media_type 0: subtitle #codec_id 0: webvtt From patchwork Sun Jan 16 23:04:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33634 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2274330iog; Sun, 16 Jan 2022 15:07:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJz4P7CaYEZRRsz9grNADVlxYSOkNRccyCT9cfvyjmXaNu3aOR93VYS4TBp2el0DziubPimI X-Received: by 2002:a05:6402:51c6:: with SMTP id r6mr18183510edd.129.1642374474322; Sun, 16 Jan 2022 15:07:54 -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 gk21si1163722ejb.813.2022.01.16.15.07.54; Sun, 16 Jan 2022 15:07:54 -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="F/N5HbFl"; 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 ACE1168AFBD; Mon, 17 Jan 2022 01:05:39 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-oln040092074045.outbound.protection.outlook.com [40.92.74.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 28DE468AEC5 for ; Mon, 17 Jan 2022 01:05:36 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IvLVPTYhoAxKg7On6iG6CvS7QMGgZiPrstBdw/av3+7wkWEYcfs1jY5/ksg38/9fb2R8VIXimGLNmEHBzE+E3AV/50qL19pwDfP6nt/zu5n2XL9lBlq/Pr6U6hCgebJvZbUlE5//LSjJ9EVNLT39NgCugi+8W3PNYheeO3AELWfh5zfOL7hU82NvR7R8FA2pci1wXJqWnEfLOHPM5aZzTxKEKEceaR7Pnhn0uZ8nHc5xQGWtGjf8YC7MYagl2wsPeUXAVwuezeBxjUABamfopBTjzabvh2oExhiUzAq0ajiRFgPMx3BqxvvXVOE8YzF2UqW7UYU5ElCsNGJ1E196cQ== 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=f+U72Qu+GqNYYvmkRMpy60ZMfrzdgHk9UeRrBCMwOzI=; b=WihppBrd1/wMVOmQzQJp26eP7zlPWFTvs3zu3OuHc1dcj6Yu9dxgc/PqLTqEIMc3uduz5ziGkyq0XW4bBiQxKMVVFBMdNvtTg/KaI6Fy6RQdLZXelf2YpRnYNgDOUlMkcmJ9oInD/HgLAJwFx4uY2xzF4ViMKb+HkTKLOvin4tg/QD+ZSZSEErGdjCQHWOi0WdxJj8oxRNRtjsO4tUZi5jjiLkrXFeK7khKv9R2CEQTrteRgj4FtxiQFNcJgph2TCIYt8JEG2JchuPaXgvwz6VzJKVYeMpxKRljqwi+RVIz0S99hcmh2pz/GMd/yy2UuNWiEVMYCPbHgtu8CudltVA== 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=f+U72Qu+GqNYYvmkRMpy60ZMfrzdgHk9UeRrBCMwOzI=; b=F/N5HbFlg0Lf9HtZZcNtkhEjtIohvoOZYAL/2I4HFo+CwS+CmI4bcudOLOK3NUrq1COSvdgoO+0YElkh/JhDB1Qa6wLCJ8kY0qBzUUIv/W/o0OdScGsjFypzKu6m0GhnvbJ37x1ZGsbiSKzIDcmaWCYBU7PeHpurGunjYekx4uvOalnx00DYY4hib1Y3bv4U1K8q3Gn39D28s1lB1AN/mu6ZP14hMfmSrIwoEv2A64bdbAJweMwkuTKdTHrWBcqhm+1IhrjTqlpw8L8A93QYGgvBZ0qGDYdLSKNkbdQFudmka+yCkArO6H5DoPKbRsqzpXIIwhG2Oaqoart2XKzPHg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR0301MB2560.eurprd03.prod.outlook.com (2603:10a6:800:68::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Sun, 16 Jan 2022 23:05:34 +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:34 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:04:03 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [yHR2dOy/6vlFpvM05kcxj3p4GY9uiSbA] 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-22-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: dcab43dd-31da-4349-3c07-08d9d944b393 X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNX1vi4Zzd+e+QPZzdfbP84rM9U0WtbhDJduYWkyBM0ZSm912a5xJ5pHGv4LPnks42bG+xwRUeF6PUBXSP4K3MzcymeNlM1sAtGkP+Otq+VfmdkC8UU3PErRSemHFcGJwSLepaosVYfhtyXV4VwohuIAJQlFGqf7qnShXSsthYW9SFupFn6VymaF8lmSvikylXE3WiiUUExcrzLFvSBjjoivBtcZkNVoz/NX0nq6DeH1EA45juu9Pep2MEc+a/ZOL10DBE2bsw/XhkelDzonvuOEjnaD2jXUw+URoMs6mk1IADNqNpOZnw3E+HrUBqUYyEnIZ5EA95UxgL9g8U+2Z+m0EYhacsuISiUUILsO7xHzSpIYAkvBByqWgYRUXyPok/WYcne2dvj2J7GDi9pSgToYKt2kuCoBmXXGVPV/YIASGs/Gv/NnDl4JxMCAzd8zFjwa36JIJX1iv5N8PR8H9Jf2rF6K4CPnYScNPJb5BEZnD/2APh4sqVr4poqSdI4zwGPfw9PytvJ2N6m+XHVVNTUB+ne5zQax0DGq35LzS3VNoub1XdN8pfEksx71PPH0CwP3od+qcYxVwX6My+BjRW0WIwu0QqKvoJ7zDQmqr7Ujhze8ThW4IuY2Y+SLhULdyPKco6Kf4kx0uZjFSaPEyBLh3xgFUFA0n/+LVwJ+XyAN67spyvNVKV3Th+Z3+XAJQ7fIO7MMINX/u8ijVQMebZa72iwT+HEYzjc= X-MS-TrafficTypeDiagnostic: VI1PR0301MB2560:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WRpHo/R8KKmN9IdE/3YLNvL8ERMMmNMdvrbRJU62qidmYeAXInlt+OHQa+a7Asj4gET8AW4Jq/mBhxOY68V2dqsYHIokGq83TPKNBOr1v6rYRUNeSmWpSIdjdJo81FgjEDQolB21DrcvzsfxTidHRoW9YDrOk23N6AHJ4doj7elqDTbt51LrXyMH3GMdpKFUMZYFlDq/ebCoq+H8zHFU39Ry3C8IMUHHEKS1erXlKrSSIWIACe9U0N8qTOIBbDzHlsfVWG7IMCkRcvukNJIcQNYOurmsv0YCKdDYoiXi0l+bKV3mVDUuQVp/nAaRMx8Ko7irjtc3DK9c6xEgEoLnFTHWA9uysoUaFPbK+Rogb92G4PQTfsDx3RoE3h88rBMzf7Uz6xGevnivUAticFI77vDdYDiL3d0mRrlzCJ9zMq53c+NyYjesl6M/slJ/1y5JSlGM0nQYIuiP+dTtOLKyqJnT+FmF8enU48rUHK7WDVEoQxHtcurQKDjBtLux9ToZRUnP4THfj9QdZ+EQkpOGDPmvCsAhOBnorOIzGBC1i8JnaaHW0GBbkyat2I98aPPeQInJ1fLu01uSav1gHIHOYg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: M4g5K0UDcIiNjb2MCwxZ0K0yfMBquKTnhaPsQFGIVHyfwM1kcl4s2ULZITgqJdnZMssbSDnNOJWoMZvOz+PdgfMZxbZxyMiGlPVYBZR0RYtP9EUJil4NqO80PiZ1UU1LvtRBMn8nkRIuc4LAwhVa9lT1LGNBsiDdI6nHXZ0sZCrnLRNWeOgVHfob6J5dp+w8vUy+dyrWmzU7d9NscMiy4uuBC2nidTt8GAtgCjYSnLVVHtRcEQvu4TkNmbSIeD7ZgWyF4ymJ9KQbKYaEqlXlp6Bnzo1tTmj8E985dWaZoBIHscu43hQUruSE21OnFm49V5FUtMDrZP9By2SbQ+eEYZIY6EQNZ7zyRrr2Q4sV53CM6Y38C9SeC50spc7GABl9DQ3ree71lcwEsgTfZPkV2sRWc6F6nIr7vW3gYMrbQ/NYuNaVSlG5ydEHLVZjyJajAtWoPCObENPooH9TAlh3w23ZYlDG7iivaJH1RVowcV15xPp5J1eb6AeE/GeEyXbZh4r5IMuipVEUFo7n3L85aEs8CuSmAOUqFtC6qapZq0QjZUZPUZdjIC1QJqzXMC1Sv7G7fyo/nxjMIMY1NedaBQwZyjw+nSmF/JzVBCDelgNCih/Gnl0z0P29X7sVZhun8po/mXx9rhGrHX1SsEByNd105Zotxo1ubcHvXf3qboFgHd1J5qgQqlaYZjNRNUqDOXxUKH5g18s717sWUW2jnaF0X051i6Ite7+6YKFGXt0/YyrHn2gwZmY5gIFuqIOmcPMAvregOBSj/z7dEQn+ypZQg8WYfyf2N/5eOvn1RJdCO/6Ri8WrVlNTD0qm6CyAoU/ABhSyULTzPi4mPMVL4khDn3F1VjJXH8TZmQ/FpXu2E0B9a1/mCezFgNZQh1yc9OS2FolQRAGMhhBD1S443EFjzI3FzLBwQEbBfCjqNNVqLF0LS86q6JkGdPfUNduy1ijtdmdGSvi4+b6cdvLJNA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: dcab43dd-31da-4349-3c07-08d9d944b393 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:34.5129 (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: VI1PR0301MB2560 Subject: [FFmpeg-devel] [PATCH 23/25] avformat/matroskaenc: Reindentation 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: JFG+YUoGCOoo Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index e2f2dd7dae..28c7dee9b5 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2735,22 +2735,22 @@ static int mkv_write_packet_internal(AVFormatContext *s, const AVPacket *pkt) /* The WebM spec requires WebVTT to be muxed in BlockGroups; * so we force it even for packets without duration. */ - ret = mkv_write_block(s, mkv, pb, par, track, pkt, - keyframe, ts, write_duration, - par->codec_id == AV_CODEC_ID_WEBVTT); + ret = mkv_write_block(s, mkv, pb, par, track, pkt, + keyframe, ts, write_duration, + par->codec_id == AV_CODEC_ID_WEBVTT); + if (ret < 0) + return ret; + if (keyframe && IS_SEEKABLE(s->pb, mkv) && + (par->codec_type == AVMEDIA_TYPE_VIDEO || + par->codec_type == AVMEDIA_TYPE_SUBTITLE || + !mkv->have_video && !track->has_cue)) { + ret = mkv_add_cuepoint(mkv, pkt->stream_index, ts, + mkv->cluster_pos, relative_packet_pos, + write_duration); if (ret < 0) return ret; - if (keyframe && IS_SEEKABLE(s->pb, mkv) && - (par->codec_type == AVMEDIA_TYPE_VIDEO || - par->codec_type == AVMEDIA_TYPE_SUBTITLE || - !mkv->have_video && !track->has_cue)) { - ret = mkv_add_cuepoint(mkv, pkt->stream_index, ts, - mkv->cluster_pos, relative_packet_pos, - write_duration); - if (ret < 0) - return ret; - track->has_cue = 1; - } + track->has_cue = 1; + } track->last_timestamp = ts; mkv->duration = FFMAX(mkv->duration, ts + duration); From patchwork Sun Jan 16 23:04:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33635 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2274397iog; Sun, 16 Jan 2022 15:08:02 -0800 (PST) X-Google-Smtp-Source: ABdhPJzwra5TXy391eqZJpXaiGFjdpUeSR7+x4NNCpqvICB+TQpLME2aM4UTOnrWAd0NU0QYXEyN X-Received: by 2002:aa7:d689:: with SMTP id d9mr10784849edr.257.1642374482723; Sun, 16 Jan 2022 15:08:02 -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 ga3si5931996ejb.11.2022.01.16.15.08.02; Sun, 16 Jan 2022 15:08:02 -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=nORaUYJ3; 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 9F34A68AFD8; Mon, 17 Jan 2022 01:05:41 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-oln040092074023.outbound.protection.outlook.com [40.92.74.23]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 06F7368AFD2 for ; Mon, 17 Jan 2022 01:05:37 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kZMWXTk1jkY2mOV2n+t1e9Cxl6Bvjmkbt7jZwfN+03dpE48VK8HbPL4LqEzt6b1n5gKWaSt8824oTyVFGwf6EJYTTGlnVaHxIGdhxC9thTIaW70OaZDCinQcOWT77UpuvgEb3f9eFlYVWSPOY81jdU2JYkvShA7J/CdJpqCds3Dwrn/cuHOh7nHNtM4CluXT6jxjHEaSgmZZXwzKJ268xKEMZMWL53v4iA35eMzVM/X1+hfLWKJhJKSgezhcGtNHiY6ZqMluezC/erZIDL27imT67jKc7Zm9LxKqT4SGMEqvja+HUY1KhESRQ9Pqhd4UeUhC4984CmjDaOF8PqP9ng== 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=+SAhxOhNRkpOseZlCPM/5jPuogSxrzH+13SW1Rm38a8=; b=L/0IcfTxRXFAO26MTSXmnU7gPIVoWjuiuwZsBfTZubpRmSBOiyWB4Q2lyLt6/N1NH37izB+kkzXXt+WsT60f1UgLmHWe/YSrIOwq81LH9jmlYPQyvG1S+CRueDDaezXHDILAEhAny1lJDtVLEShI0DHl5zz2HtpqrL7D2EbkEebdxg/AKmAHD5OSn6u1s08dhymgiNpL++QE904IXk4lOBH5VWq7+HYxFFXfBgVa4QgQT3bIGFNLdPI7gXzVeSBJdkvc3dgjPIbmM9/J+EPp21Vqs7bZ1sf8DRTyxM+Nb84/uIgWPFsdgTZyAOYQDhmRi1p3XzQx5JllzmtUp3V2vQ== 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=+SAhxOhNRkpOseZlCPM/5jPuogSxrzH+13SW1Rm38a8=; b=nORaUYJ3FRS2vID5rZyJ24VvEnkjS4obSjw9jxpnLfbrCw1NLMqU54gYJjK556+c0c/tiOtujQQ22xmvohM2qpED2ZZt9Vx1n39aL4EbeuOWqQV2OTyDaZuGcs18Dpku8rDZ7na5FTY4/Udz+wSoY2wGTMVrnCJduxga5a7SiRLj0L0eTNg8NJzk1uDGDOs8YcPudWayAHD7q+4siTH3XY4InvTmfH/OvQ8Bfj72MMNai5howLucH4erkn/Wnb8a0WvmyS5KfnR7LWHRt1ELjGKNi9J+0YgMtwjZMIDjR7EomM61z+UmsUFSQ/tJwRq4YjBnwT3CT0hTPF2++3NO4A== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR0301MB2560.eurprd03.prod.outlook.com (2603:10a6:800:68::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Sun, 16 Jan 2022 23:05:35 +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:35 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:04:04 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [/wYAK8XGRpJvP78gnEl+AFtvjyDjTz17] 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-23-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f9f12857-3c53-4e5c-c673-08d9d944b469 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPnsxfTkbzGwzUOv+ZH33vJ6221zjztWZkgTbapIZ1vRBV2agD9fsVtg5TUfACuxnOH/VIzDFm/oFlzwB2/4FbcPZtuZ/CV3vPp1E/T16IbW+jJGvxfCaNzMMJhX4YnJnkd3t3bH1j8Wvw8I6Gik1Bw4uSMt1zB/2kBKV7PXhHoY89hvGfF0xigU1vU5LdVXbWEZWZCLYGhPDxvTLsETgYuUAqFXhggr6atypV4nZhUF4ecp5p1WvZto0pgbyDr/YzjQSEtRj5Oc1HzKj/p6LYdRBAXispAmE6zPuWhFEfQf7ZctIfr+t2M/+XaO8A6ggEogp5xY+BUHNAZa03U/NP2eNKEVvYor+cHPj+ZCsSHWN+++r6jSo/AJyaYgXSY5qGwDEtn2nhlFPTWXQlSY2c037ZJZdFjtM8S+3kSlgZU7k35W5I82kZSUX00veKQs8/ulrSQyCKhDXhqj/d+FDcEmmF2CNgcjblpFzAPJMNgOXkccMq9fCr/uMST+BkVABP5B+a6bGeepswe8izEN+Giws5F7/toFVn1V9ND9NWLtqkGpi4MlD3vf0rWpkNoZawrnL5m7drKqMxXlgRTUPVPYFk26iHUEKsEiihh9QZlv7//mB16vh8k/Eqf1HqC6kLV1C64EYXht4hLaXhoW6GkHIpH9hKTetunkZdkwxNg31Yk3aKPNl4Ik12W7oZ0KulB1gdvg8gVltaVkZcYXUbC6XDv2hb+N3fkV/Rw0kc/AIro= X-MS-TrafficTypeDiagnostic: VI1PR0301MB2560:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 74xPsT1d5fPwzA9gvYjBAXuPTKJx2amGEmRV3+5+oLa+bmWUyQhc8Ey3mjbdl3rH71W2n7NFe4Q8bEHR5rJP9TJwvrssDMeXB0r6Ip42S9LtVQPeutDEwJywaHpY88x8rdkU5FFyXXn99q0a/0FX+Qh45s1IJirTTBBoIixsi06rc4v3IifZVgi9m9keIAxsGy4YZYKy9L80juWRNyHS56Vi33RK469wdnZTqMcKy6YxijKzfixZlcdCXi0KUAvvUoh6tSgjFeiUTerXACniHxhmMqcZxVsFBpOfgZb07ecVrn3SjjKMIP+kCBJtAMhWb9MnHbwr7Mzw2tFf6VTLI2aBjlHkZAqET5CONOP+lxuoOsKNVVDL8HnI8c5LriDL7tPU94kHXfbEMe0gs+xWtL8tBpnLOipCF+3Zu7EIQu9RrLJtv1UOIs6iDnm3cW/C4Jo6SZyovGwrqaDfaHYjsZUoaFUyqqXPHsaHXeXk9U5BRPlgmL5XD1r9FDKi7W8fkvWDr2MC7r2tBrav9VhT64hXpgDY8keN5ptrXuUKOip9KsLeFMNlHO29rxY3C2Qny2hqxySLauCyEQJrHntPkw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: RQnLkqYdk6YkEonuUntve0eqWmFD9IjWYBHIQopHdQGftAsItHTVv1WhLVy40yegyjZRWHfBE9f6UXaWCJ2FNMFxgdNUpUL2S0JaC52IO6vlWvo5zeNRs6hRNlMNVQSGKRVzanpT/Pdbo0uUzEq/zyag+KXUzrjnqghwIcZPMaHwPI4DldPq56l44/mAuhHAOMsc+vn5U3WV5dIJYCaJ0hLoU4LogAtMbpi/hEQtX5AxKi1vDqoKe5qXL6NAEqMJoplI5G+KdXu8up3FB5J5fhrlhAmgL5pz16E5h8GoF71OBiu8Bi5bILj0cnvElwM7NlGFEjtqp04ENnX8X95dPEW07gv85QO4ZtH0JcuZ5VtHarCpQhIK5jyqU3+LoUeKuzbefUCnyn89BmzV6mMBVqqK8tsTVFBcUqh/OTpPrHeF5OUyXKvLP2JZ1qGPVZt/T5QD6tG9+KK0zeGOu1fWN5p6ntkvp6j9TK42i5tVA1rQXTwTJa488JbEQFz8TO5DJ3cgBVx/uZOIAzSsAPeSLrkfYI+LscLfS4qph70Di8SX85GD5y35kcLOvoiUPUMScbPxcLzqBJPeP1fKTytlQBSZNmPA7Nq1SVoXHJV30GiiDrWrZjfc8CNSmUUXRV3G59Pre2uc6ojSBXh7kli43FyjOmwanrLKBDY8uF81qhJ9wZ4S8NB4sEE+syxWWeoIhPnNZD4IPC7MY3hDhgbG2wkIUG75N3CzaJxpjPLcDHjWebK0/Kei4o3gEFqWw3yPxNKnP6Ugzz9+E98nYso7m11Ar/e9AWY42PsHIULb1z2+Y39IhE6N2cbzzgTM+m+uQxfuuv4YRsudTWdoVDSh5/6Ei4K/z+15/vNN0GekRv33uVPK4iwq/TSSlNXd84l02/XdaWSiJX7KKlVWnGN4KmhWLKJzit+W0KpnL67tDeD22WF1ghx6JrhLLPc4A4G/GF0NKoMoQ0BKXW1xhPj55Q== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f9f12857-3c53-4e5c-c673-08d9d944b469 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:35.9189 (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: VI1PR0301MB2560 Subject: [FFmpeg-devel] [PATCH 24/25] avformat/matroskaenc: Avoid repeated avio_tell() 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: FHzzSlx5T3oZ Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 28c7dee9b5..230bbf4a2c 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2503,7 +2503,7 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, AVIOContext *pb, const AVCodecParameters *par, mkv_track *track, const AVPacket *pkt, int keyframe, int64_t ts, uint64_t duration, - int force_blockgroup) + int force_blockgroup, int64_t relative_packet_pos) { uint8_t *side_data; size_t side_data_size; @@ -2529,7 +2529,7 @@ static int mkv_write_block(void *logctx, MatroskaMuxContext *mkv, "Writing block of size %d with pts %" PRId64 ", dts %" PRId64 ", " "duration %" PRId64 " at relative offset %" PRId64 " in cluster " "at offset %" PRId64 ". TrackNumber %u, keyframe %d\n", - pkt->size, pkt->pts, pkt->dts, pkt->duration, avio_tell(pb), + pkt->size, pkt->pts, pkt->dts, pkt->duration, relative_packet_pos, mkv->cluster_pos, track_number, keyframe != 0); side_data = av_packet_get_side_data(pkt, @@ -2737,7 +2737,8 @@ static int mkv_write_packet_internal(AVFormatContext *s, const AVPacket *pkt) * so we force it even for packets without duration. */ ret = mkv_write_block(s, mkv, pb, par, track, pkt, keyframe, ts, write_duration, - par->codec_id == AV_CODEC_ID_WEBVTT); + par->codec_id == AV_CODEC_ID_WEBVTT, + relative_packet_pos); if (ret < 0) return ret; if (keyframe && IS_SEEKABLE(s->pb, mkv) && From patchwork Sun Jan 16 23:04:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33636 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2274476iog; Sun, 16 Jan 2022 15:08:11 -0800 (PST) X-Google-Smtp-Source: ABdhPJxK55BqXoqyDpVEyJl7A0wPYdsKdI3d78gZ55UL0KlOl+2R9qYHYddbHKePPt1oGVu6uEPA X-Received: by 2002:a50:eb9a:: with SMTP id y26mr7147144edr.125.1642374491173; Sun, 16 Jan 2022 15:08:11 -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 sd39si1176194ejc.545.2022.01.16.15.08.10; Sun, 16 Jan 2022 15:08:11 -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=o3D9HJsx; 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 8C51068AFEC; Mon, 17 Jan 2022 01:05:42 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-oln040092074023.outbound.protection.outlook.com [40.92.74.23]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 42B6068AFD9 for ; Mon, 17 Jan 2022 01:05:38 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VGPsnsvh1/KyvHs0SGxBMFvvjt7OLsGfTF8PxqdPo5TVorUolea0D60L3zrqJAqAKEdS5xhiInvwYaxrGYdgo9htpDYhoR01UKJn/eZVxQzksTVTePp6/0kQEJkJ1eIG1tYuB6OapCMOngnrFSPHGIt0gl+AQlZN9K8/SzuZ/cCNVwT9Cq+AASqm4ceGoDuTWvadf3XWNWpop9dQtxZmA9USM+BKJf0sNe0KXkssyjwLTrZNGiBEKfhLzYI4i4vx4kzUHs7jjDfMlgbliQzbErNVZIeYEwbO4fSc/l93oTvKCKSIanjeCP92tGbI28nwNqN1jLYF7jxTXknBx0Ab9A== 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=daM+rryHxbqQJ7ROwjfHD+0m+RLz9+XmjTGe8LTt0ss=; b=XRbjYyqOCz6KymQ0Fn3PFkuKz4/gGpWnUMlwsf7f/lwZ9uLz2LHC7FgwVbV16vZ0oxECy6Fd6rpw9x6LswGVqLv7lgr/u3Mfz+1s3tQX9OMB+koUWT7FQku/gPK0fNF2FoAsCAzIdJGUZ6a8So63FoWbSEySfsOkNy+VixBvs+PjBtEFa3eBXojBA20ag1Bp2Q/bpOhUY8aX40vOKmJ41JSZn5//UFRbqokJOoohWviFjQfwH7YlykxGwRdyB4/BxJburFFLTrv7yzis0oCCddWdR3asrBIAMqEMflgDVrsppAWObxQ24rWx1+0aRleo1fZWgO7ydFN6JW/M9abgUg== 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=daM+rryHxbqQJ7ROwjfHD+0m+RLz9+XmjTGe8LTt0ss=; b=o3D9HJsxp6HqA06jFJ6nM6GNyKYIsljO4COB/9n9liY32RCEZu7sMEarc5Yuuqu4hYGr5LsUWlgIY2XVI6e5qJGlJrhlSZYuvE63RG/k903daEHsn8WuvzSLlkQ/KPBi6x6cXRoSL1WyAZBMJMlLjK1rBAKKn3rW5dmWeixEdr/tY9IoZADkDjSGN8c36Oc/8gLYYAczrZIyee90V7NtKP3MAPEvGOS+bf0GJgD0TyzVzp/eeQBcnCDqnY2Leu/1xmfztPRJTA/FfMg0fbifEbGNLQdZtuqAKToWLIo/f2AcR2T3RwnODa3E9wJUEt/kBGF/tMIJp0YvYDWvKTb7Sw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by VI1PR0301MB2560.eurprd03.prod.outlook.com (2603:10a6:800:68::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Sun, 16 Jan 2022 23:05:37 +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:37 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jan 2022 00:04:05 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [lPjz5fLpCRpFfYvcxd4J1V3R7/V7/eUN] 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-24-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 937db5eb-e825-4f17-a4ae-08d9d944b52f X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQ2WpFcKeHQajRkhOqduPnsyp+3q7lh4J0wNvzK6ob71j0iy9pyrvh1DNQ1rZOeZUGdVnsiMxv5dOHN/0Q0gW/MKBR9buji3HdN1hrZ1VvzP+p1xqMymD9B0DZj/LhC3GlNNOPVXyWKaxEc6wKpY93OEF7UKipfegGIzg/F/X57/nO1oTpjlV5MNHs6PveXCddeQa60wpQE82bgMskJdhwXaQx+3M73fuDwp/VYdU64LnzrIyIWX0YHFwuQ4SC8CDc9WpGafmQqN3dKYI5xJzxo0MkRlUP4YEY1PMfkXwtE6imEKx5Ir4HGQ5Tm8xxDPRrH1Bp0DiqOg9F9x28HYLrzWwk9QkQPlHM5nsTpvwBuLoSIOTy9FlB/DgAt5l0uWoicP2ECgm6WtL6cJPNWD6CyP9bMGi34gLjFlg2ldJSDZ2PN++EryS7Zin6KdDlcEG7X6Tn5grRHbeyGRG17103vgIz8V1CFrHTaEHwaGvLNZ7DQsUSec1V7V6PvBmh0WFqGpl6T09uGpYcQlco1dx3KyQ/gy2m80ID4Aioh+MgC/xieI/jc7UFmJD1917iwmije2rEI1/a6ITZfPVvkisoOQLQZdo0e531kENAseeoedVj5OyBMzaPaGqCWd2Y9XZCYLue2J6T6/1p4MQSEk43DWQl3u1CGX5i2rOwz2zORS37yYt4452pJMAdRuZDIyl/eszxDyq+kRf5kwBX1VqXVf8RVUNDoh3fRtshZPD75pIF9ugRi3wpZ9W/HH5ilgTU= X-MS-TrafficTypeDiagnostic: VI1PR0301MB2560:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zbC5qR1hRzB4Hp0JRnz1LFscwjH+/4KwFyPiFRnzUoUktGcswHOsWSpnC9U2y5hJuxDTv671MBm3iOnMsm7uMllz9aYXYQGY/XeVLS+fkgcv2TTiiS4sEveW+PQENSpFhFClWtO/hfVC5CjTw4lOKGkdfClyrbz+96CCcw7HrJiLmDn0AhoDmrymWl74efJ/ZgvF7ltGllb0KAJirmRSCbLtNlisS+TNEdyK8Jv6JtHkcqwSoxAzj7ArRIrfZQYIYrtARXLqLTSppmii233T4YKrnOxXvxQGqhoXnlDIfJSxwMH8Wd/5z/P654Q4TIrCw9lMUzKuN4ksgbWLD3eCFosEOfimTiyWNxyjOkm1Y9bupS/eA82ImXYDU4UZQBhCJ9l5s5MXfK0tfHpS50w8EvgZSqU8SJEFooLNtydMekoAalXXa0kfXSkkLahEOhIy1QjwIhZ0UebnR5pM2fuuORFWEjzgcJnhP3e5ZUCmP/06GMeR6WFaYIP6jaEtLs3P6VIuw1s38jwZOMZJdAvvYUemcU+b2YyvlZ2hnfrt1XBb4xYCNfwndD4hA0pi1dCjPKFc1jVQhkl45cubPD6mOg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NlfFChKNz/A0KGyurttSIdDuqkX3yeeT6eUtxX8iQKn14ZqcGzOB+dRlbqtht/o7eY/OWvMdly2PxgHyX6vumaL++GEEhx5VitQs4WQNVnmzNsRppTzsWRdiEEimq7UXLwzW8w1rSdgBQr49mb7y8NhMu4w3L2w0KDiMhaTfbXKR13agWxN5ZcndM/mSFAhgLts4MPY9KTgd2pp8/yQR50tq7Fi8cKlWrrGd63vwqXnOcaDXVlZjTuH3asB9Hanol3+Vw3kQjfpT/u1RgNz29p9GnnhlO2rANcr1NoWF3SjRZUUPAgj/Ad8UmRsGjymS7iuxZKpR80xqMXm9MxFgP4tFs5HAnA0247zhc1dVC4G87VKEiAtPR36Kep4TDbvXV/CBvLrvkMqB1pdi/tK95FMFLN2JE0R106BKIqGPJ3M66wKYe/jXJlc68elW8NCL7cRrh/TsxKNhDDiioUf0ClCso45TADrsz7Ki5kOx5LrXL39amGKyx+XnZybhlVMYCakkEhyzFybbvbFApD1strNpHSWJWsVLrSXNTdj/JdrBP/KeG/jbZHypBwxql3Khys/leZlwUhFehfDIGy6XqAneoJ8uVOtwBjxcQwVyN2x51sbXN8h/v3OqORZGrndKGIVL/vg42c/GbxCLv80THGdE09Wv6Ru+bYQoBpXS0soo2UmHGVsB/JHgK/DWCX826e9V7T1jtLTanHPIkmIPuYGNEnZZNBkESgoFTNKGJajXBN/qshkzqvppUOkBaCYaw9kPOLWbKnbaEImgOiE0+UjJnGVYm5eRw/Y6c+SH2hGMHf2epecoA7J7GAAA9ZgZx3jjJR839m2T0QS2z8Xbds/2wFsuo4EDSgkWOU2bwrXWxJjjdQzN6bjIqJnY9YXmNkfuQH/B9q71VCuAXmRN9sFP++ARYQXR6ofconpTXgDjFNEbqRS4fRc0qLNgdB2lhl8DvQPp8AmPg9BmU92m/A== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 937db5eb-e825-4f17-a4ae-08d9d944b52f 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:37.2156 (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: VI1PR0301MB2560 Subject: [FFmpeg-devel] [PATCH 25/25] avformat/matroskaenc: Write data directly into dynamic buffers 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: elBGzQBlfzIQ This avoids copying the data in small chunks (1024B) into the dynamic buffer's small buffer before finally writing them into the "big" buffer. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 230bbf4a2c..82aab8b633 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2721,6 +2721,7 @@ static int mkv_write_packet_internal(AVFormatContext *s, const AVPacket *pkt) ret = start_ebml_master_crc32(&mkv->cluster_bc, mkv); if (ret < 0) return ret; + mkv->cluster_bc->direct = 1; mkv->cluster_pos = avio_tell(s->pb); put_ebml_uint(mkv->cluster_bc, MATROSKA_ID_CLUSTERTIMECODE, FFMAX(0, ts)); mkv->cluster_pts = FFMAX(0, ts); From patchwork Tue Jan 18 23:32:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33649 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp4236170iog; Tue, 18 Jan 2022 15:32:53 -0800 (PST) X-Google-Smtp-Source: ABdhPJzUip2hbwtZzGN4qIriQbWHxmEVHZzHiYYnXjWiJPrOvzuhRwrbqUWyY+dU66IGxiDUUBV5 X-Received: by 2002:a17:907:728a:: with SMTP id dt10mr3410414ejc.78.1642548773387; Tue, 18 Jan 2022 15:32:53 -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 sc33si10669194ejc.767.2022.01.18.15.32.52; Tue, 18 Jan 2022 15:32:53 -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=JeLuVxfA; 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 79AD668B157; Wed, 19 Jan 2022 01:32:48 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-oln040092067045.outbound.protection.outlook.com [40.92.67.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3FD6268AF9C for ; Wed, 19 Jan 2022 01:32:42 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jJbAJhes+3v3jY0tmUk+AT0kpomYpUWbr1ZyO6unODkXRDDcmbZZnX3lQ4yOrsnQySL4/aGcsee5wHz293UiWytYY0vD2U3LHflHxyfmA4TMVRP/7Dy+IdDYkTmu2rUc6DNl1zMNmB8b/a2rCAPq9N1t6ygIETYXqNFSut6tTpT++uqmKMYuWPpIeDAZSDey5sSAvFWI/NH1XiWrrBvRf1WQVnQn5lmfKzHBNkcmjp6St9mHnwZDH+yUY4qyTHIfMh2xPKpPBJvKUEqPyKYidK6p87zpPtpIRDX/RFkPfaToIfVS6yUhB60qUICHI5BnNSv5QR3sOcjRlTxWH2oiPA== 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=roDDi7nxxcFKo1ds6mJOMS4cflg0KcZblyfk/A4/uhs=; b=S3DTO6rTjDj1TqaB68mBg1RCZMoarQr1GhL3fXmOjPNVf5xiMsv7sAmQQPNAhbkJ9TyrurjO5+aqBJ6ggyuL929KGhw2F+muC887mYdN7SLu8HQrrWItf3ILcAebf35t1MEHQOvWexuksTeLkBAFtxmhPDXC40A7AaM87zPbrLGt2sZtmK4lagFgSfBdZj8TnCh4He5DwiaNqIqbfPoWrwsUENBQFg2ZdweZ8RyZdJt8XbQYz00g1p0DYmGlFOzYGS3CmoPAHOGjf6BOb2gx+nWY2JxyonM1bDx349gTJJ1+k2Fbo7YkDZA/OMH4naUXH4l0z3epGIAw8itUAHJvYg== 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=roDDi7nxxcFKo1ds6mJOMS4cflg0KcZblyfk/A4/uhs=; b=JeLuVxfAxbiBuYT1qh+SwZ9UDTPcH8wfap68Epi+Sb9WMHQjJbJPkWo2JFNb6qc5iob+rdPtscf+mMId2MMBqpTwNdTXCX2JufvhglgBm1k5A6StpA+kU+8B/HXTGhrFue6aUK2DWmzdwRR9SIQTSLEghU8sXtao6xo1dzsZYWXC1jvhqoD/Hpt6f8A01ua8C5MjS19JHBrRwj9gzPKesC9KxlJXPa1s15mF8IYekPr9nVzXMgZ/y8ShnJd7bAVSYXiMEGp7kADgBIVoHTlwe1h/wHQhdzDcbXyTa/dIKRmkzYl2MPNDDfzy9JYKxDUIAPDE99C3ekVbXU8D6Q/d7A== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM0PR03MB4529.eurprd03.prod.outlook.com (2603:10a6:208:c4::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Tue, 18 Jan 2022 23:32:40 +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.4909.007; Tue, 18 Jan 2022 23:32:39 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 Jan 2022 00:32:25 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [Z5JsudyR7hVfY+0AVNA8WBSgWsH6Pgni] X-ClientProxiedBy: FR3P281CA0044.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::7) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220118233230.743570-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3e3e9b7b-d09d-4f5b-e876-08d9dadad108 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiTy/gRYuf0ZoZ8SwmTovZBiXlSYvC0BKXun99P1S4ffpNkDFf6hAS/4pBjc103qG/TcZ6GSJHqZ48dYFoMjTCmk845Uu6fuq/ptXs8dDfCfE9qdP+nd23pXAHqg0evSlowDK6PjZaffwH82MMci+rV7fnxXC7SGGXWtxdyAKn773NKkA2QAzzpkYmxJVYEZNE8SX3PeQMBrC4J6wQdu8VhAPZIbBvo54meuNBcxJuEYEwaob3T/iXK/518IcChqLNir8PvgKMYJc31Z/XnabObTkK+BOhVbwT2QmTcEbjoKPic6JF3AJPzndJBhUvZ0Di19b4KsOiFH0Fwb55X9e/1rLHSWhzopSdExpNXg5Om+lQMedBe4eEdn2epuP0+HX2QWiCWUsFMMDLXOefYbGyPEdHgnIqkw0bTplQJz5KzENILSNbQv86urFrS1KMFOProYPIbllBxZ4VtWLJeHso0Cs/9R3N1EyZCrcSH9Sj8Jvk9EMMRbIudnXb0LcHqZd+4ylew0fTWFdNU1c1IbNqhMLaS4mdOM6kAQ25evNYH11CBh1sfPgcOMFSbrV52GeiDFO2O6ufXJuyIXW6L4wCfqKO5Dj7S3DDh8o71HGRXC/g+4pZxgZCR+iqJspVPpConOUQC1cuVFEbSRiz/Sz0Fxw9FECjiKMQtZKZs9a8+qnbL8gWJEQ9r7BI2I+VorKsmPXIGX7CmvAnAkRXUYqr6i3YNdLAK4DZyVwoTxORQLHPieyKYgmeVKejgivrZAwXI= X-MS-TrafficTypeDiagnostic: AM0PR03MB4529:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: G61TO6b/Fe7iQ/zO0EDuiMdaM40c5Vd8CzB2Y+so+PMUBcVWLUp1SInjCqvrGr4uA9wWCfFmIgn9iBc7kL/xCE7Cee5AVqNwg6guvRp2PbULAoncKpnWC+7YIKr5vw8QNZysgKcaex652cPmrw/o1eWkguh6M7yQP+2wVPEwNdsXgKJXPF1ZjpVu1VlDstKP5oWoxdPv8O/l+o9KFxzOwedvl6spj6kOjA/ji8/PWmVObZ71VgmCZZlTvBMhGMMJzsqMYIFVcyIdpex334rhfi45SUx27rVTB7FsuO6pTQzFLA5+FPyaN9pVSjT1SxptAO9nFLZSxnN4Yr3DE36IH6DIumxV8zAvpLO2fmQAHclnkniL2sVmrhGlbolCgDPHS/J6N+yIaxRAS0B9wG6VmzA6/Je/WesQjDVVBnl33IP2nmgY1xYGzGKgdqQMxQf9ck9Kf/ixRpnNtd/r/FkoNL3NDAKTZpoxr8+3l7gV7yEvckT59YzIk4ucsuHZyHdR6oyPLJskDfu0b3SUIpeat8tgKYvO8xYRKdlaC8xSf/0nN4zvkP4JqK4c/EKY/akunhwGEQz4kfi3C8hNolUODg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: x2uaXuIrqMgN2cluRbFsvB8CyO3YhCzCmIJ4xs4+331bYzvy3PVcJLJfOroq51nFpcaPIrTuZioQkhPRr4q4cCHjPyG9xLzTOrBnaB4owEDfi8QbUpwyYvFFepTgT1aRJyKy+IoPx2jbOAaVAHtmXz8g9kGVPbyFu5BT9S0Ykn06sebSDpis/7h2kKM/M29BOS70ueSuXwBYkT7RwPjbgpwInyTamRNLCUigbPF+sJkTlIfl0LWsCzhIBJ+t+770zWi88Fola3Q/YEuNAKb+DrUouWtpy87i9+dySo7Vqdk9Hr4jUtZbdn6KGSihfU8ZWaSmlDw/UUC1haPl/cSQNrbgaeubK9fIeusFZTp3r8t9Ae0QMSOCtzVlRi38w5t5KHGyA8pEG73v1Xzdxl1WKqUZRotZChzRqrby0AQbv5YB6Z0ZLL+lEVMUr+xTQmTLsJx+tr14Mr561CaJr8jrTU0YJM2eMwRvjSfVdBZeIu8X4+e3LJ1Tq9OOQkiHrKGOKs0Iyaw1Gu06e5VEZakZoSQEWtcZA+eFHhfIUb9/YTruO+UalIJSBCBvFMjYpzSiLvFtmk/jsQzKGKIMSTYyHA7W99SEPCOhw7mkhiXKIBGI8bvVO6DhYPeAMWon/K4YpTbZy1V09c+jhtpuVff1GVvF/ZHy4nZUU9dzjb8oKbPtH1hzZlrLYQE+fBTK10BOhy+nmvKB/965pW3X5BWyfVmw3HzZh+5nZpMaclLXD9W4lIvbXN3uYa/dLPDSYi+QAahgR/CCYILxvxwqijUTavEdIa/maZWbgA5ml4ZEIZdiLnbr51Fi8I4kJ35qIStt86K15IMdlSGtrTdQgW0AOBwTEMx7X+DevqD7YhYo+5V+ttrVDhxzTtrsyVJ9DOEjVCgUXLv7hfNoLq1E/N0jNdiknzV+YGBXp9uFF5gtlgz+Zmt7xld2nZK9/jjyyeRF5qemyiqtG4lNrvnPpPxOww== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3e3e9b7b-d09d-4f5b-e876-08d9dadad108 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2022 23:32:39.8757 (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: AM0PR03MB4529 Subject: [FFmpeg-devel] [PATCH 26/31] avformat/mux: Remove assert based on faulty assumptions 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: FU2Vlg9dOxb5 This assert is based upon the wrong assumption that the noninterleaved codepath is never used; if it is used, max_interleave_delta is irrelevant. It furthermore ignores audio_preload. Signed-off-by: Andreas Rheinhardt --- libavformat/mux.c | 1 - 1 file changed, 1 deletion(-) diff --git a/libavformat/mux.c b/libavformat/mux.c index c387f8ec6e..e34fd88f05 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -697,7 +697,6 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) ); } } else { - av_assert2(pkt->dts == AV_NOPTS_VALUE || pkt->dts >= 0 || s->max_interleave_delta > 0); if (pkt->dts != AV_NOPTS_VALUE && pkt->dts < 0) { av_log(s, AV_LOG_WARNING, "Packets poorly interleaved, failed to avoid negative " From patchwork Tue Jan 18 23:32:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33650 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp4236352iog; Tue, 18 Jan 2022 15:33:09 -0800 (PST) X-Google-Smtp-Source: ABdhPJzprBcxxKiCswG7X3eNL08xzPtrBQhkceiBqfQVvdb/UjyU8lAn536cw/CcyD2AQW0zKhup X-Received: by 2002:a17:906:dc8f:: with SMTP id cs15mr18866417ejc.147.1642548789280; Tue, 18 Jan 2022 15:33:09 -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 sh31si8801932ejc.725.2022.01.18.15.33.08; Tue, 18 Jan 2022 15:33:09 -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=lcAZNf9M; 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 9721468B15D; Wed, 19 Jan 2022 01:33:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-oln040092067031.outbound.protection.outlook.com [40.92.67.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0404468B148 for ; Wed, 19 Jan 2022 01:33:00 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NbU5oiiH6p5SqHNtFJzaI4VMFq8LakmESFcMAClUntcugZxQ1u9eW3hJWPtOKKwvHcsl6qGJpkiaR4U5ajhP3wFTL18j22XXlLTXJRo/LYgtXMxqGXPCPNUDIe5HWi4x1MgQnM7KBpug4T5bhOmeEOT/CUgJ+GDXIHyxrUqbT7aPn1QG/JcNonHoV1LJHgjWoSyzCs7wvoVLSptci2o3FNC6JrKaoNWOmzVjP4iyvJk53I8yFHIPccL0a1wt29FEaWZpnPtDEUrxaMmBJ4QHKqB2NUmAo3QtqzgxWHuPe6JuxM/ghtv7WcG+iu53aBfHdwWKdlcgmt7LKshM9DCkhQ== 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=uVYTYM7EuTMb+maN5u12CZee4R8uH7c+iH6qdAii2bY=; b=CsMzK5ShneEbf60tvEASqXgduOpJko31NKVTTiJVQGLBDZMQ9G5Ej3PDnWK+BxQmN+6hBu69O66guMH/tHFKpjD4vJQzxGUVZpDfXC/eFqf/amN7iOlIXuDC7RYzY9y6Ir1FZ/4mP86BPieV/VKgA/StepxRflz9UoGR3MmnvoCq9zN5Hoy/atqt3g5IT6K9hzEqmW6VYpkQAn1mopV+AFv7ek1LIdNPusYYFW1SvJMOZY/a3Ki9i3psyEHpCAUjzFqOQ9lX3UWmzUiiZOj7LBpbY7/BFD6VkyWsvT6AEU/7qTcRHI9JEAAxxAyjV6xJgiTbpiNapjG1XNz6YcfiQA== 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=uVYTYM7EuTMb+maN5u12CZee4R8uH7c+iH6qdAii2bY=; b=lcAZNf9MqVlVvhL7jvL5oiHSWfkXQql1PAriP4E4sW9VD+fTyUYsAeb/e3+C4d2OSwk1C1L+mSFwMskhMXOpbKZqnUJfZc4EQ5dlkmKHqs5FA0xsqOK0DtXVsgoqA7KSI/vdzuKhRXCIZ2WV8aKAQdqJp5eK/6B6zeTgFUluCrIxbgVzN6SVsje8X4ylsbprP4KKv3fTzglR2L9LbTx7tX4aP8ibmWgDpr9ieqEUULfWXrDbsXz804rip+vDATatSqhjKcR9PDf+ZylLTa3hpSEeoeBMNvq+fXCb3pLkjnXfZtzuUddDC5f4YhczbfbXthp6OUmw30kQtjtVYMTZZA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM0PR03MB4529.eurprd03.prod.outlook.com (2603:10a6:208:c4::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Tue, 18 Jan 2022 23:32:59 +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.4909.007; Tue, 18 Jan 2022 23:32:58 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 Jan 2022 00:32:26 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [DOq8XNTEggymAPFP4IVlu+Ov1aSbNWb1] X-ClientProxiedBy: FR3P281CA0044.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::7) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220118233230.743570-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1a7e0e35-b392-4982-8601-08d9dadadc8c X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiTy/gRYuf0ZoZ8SwmTovZBiHS5igjedW2/Veu5H0gHsVl7E9/QCF/Z0nnYr9q0SIJfVf6vSlF8t0ZH623b3GvAdWWWEpvItC7602H0FeJp7011JBIkPbGnTJxqTx4fEBPrpqk7txswL/31u+thEVk//gC8/2ANlv0DVG9LiGI8Kjl+1zWYwjTjQR7oNVzbN0hGAIlstubT9IHGKTi8Jq4o5zKMuS3QxYQyhXrLvRQAKjdwZFY8hQ1giA473GCdAz+p2AIeDX9roFFLaIV/yDvFpRkzpqkwr8TlOC2yiDRzDGBF29hJOmey0VMe9UqTXodYS5ExtoFh8oiYu0aLBjaZCsenxyJhFygemCIaINdjheYwWvRExoiPluVP/+X95lu4l7IBDNvKbT/14YXu1pRpNMs6B4ItZU/++ymINX3ZvuUqbONkxBRciB+RtaFYqQYu7Wcj7QI/OBW8Fz0SsuzBJ2j8NrzVaZIV6oTNhwJj9L5CWsaPxqxXOFVwNhXEX0qqc630R0lncdfqTlPsXfNfCV5oBdta9+9+RaTWGJ4HgTx8L3JdQxdToK8OuV8I4U7rkG0k8i2fAgR5U+wqkqExo2utFo2h3yC/GliaaL58o6ESEY6VWxsTQI6XyvfqjtEB+MBwZsz23NWtLOGL7pInqnv0P8XHINa6VwRjvKaHsTDXpbDECtKXcSnAvbVd4AowT94KhTdxQkyz80NC3SW0kWPAUya3dMTpemWIzG5cWGLKhnDwNuvtInZmtp3RumTw= X-MS-TrafficTypeDiagnostic: AM0PR03MB4529:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2LXmlhJgMh9HoA0Efq9TRp5K+elXF9o0e8xzkJ1IG9fmtSe8Hz344karUvptE5KbXuXWjeszFb/m9Vj0GyD6S1B4jm5bwggiF0qtlR6JfNYAXOVUBUltvww2hwZe0VsGEs7Y0/2aNQZTpVjJE7/hE4lYhUs/k2oAUPpFqeGgcv0eEsnWJimIS0HxOP4ZY4yyGQXiEpkQ2v2XsXLtyyljl6mv4PgJTdot65B9Xnxg+3+tIQkAjW/RTkab35CZKo2p1cYoQR7Oupu2x5Yzh512tZ66Im6QEz8juKjqHehJSREZzvL/b0OVFe1KO1V/7chDNQ1TIQjvYOcm2ZzmxCcYwVUADFzn4kbS0WlKcKDjan+5gZwZ3/9k5t+Na5mn5NaNvwTN4yQatNjV41dquVyZE9rGb2ZqTZs7+r+tcTU/A11GTWqpoHfFvwUpuxBtFexHl3Db6g/5s69MkMWLMjiLHo8RG6x9IG/05N7EE+VMzSZTY/nevD2vQxSVjUy+ba8FjoZz9rs/DG5uO0bcIKC3MwAZbnxeTwQoQOW++ga8NyvrDDGRIFetbU9uvCalNCcb44KD2zSfiQMIwPB3696Tbg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 5QrEQGG9aBD8ZHGlvCt3TCgYsJFlHVlV8a20Rd6+/RQt0nCD3ga/94XlWKrNNh2CjKKVn5+1qv6wW/ybh+ITyS9qDjZp7vHDVvAOFUL1r+V5Al2Je6Q3AQd8lddGvUIMv6QaY1u53vaqNLdnCdv3HzJx7VMELaVze236AmnRnRRyQ06vrywgAmvVyukeYqt1FVUAPr9qh4ZOg/4hHNetsesCdBwTeCaDyOqDOn0thVeJxNypgSOveOuG0tIui+TaFVNofX3bmIBNO4SeRQBldKTfH0uWk4/UvnJDOquXKTw1ONF4Ovp+IDP4Erzzv4jE+KCmLv6YDWSgByItfadMnpRrbCjviy8Q6UWJUjPWdUnzEJ9vewIRb0HWLZIKoi0Q+zGly3TINi2VYRFTjewqK1hImeckCo5v9uQ6kD+tEvB2ekbQHb1sffFxCskRIYTILy2nWh07AL49dENRptNJ9jYY+rFga6+aroZoegbXOZEz/jpB4+OdO9UaHno3S/FzgjLxkXuv0odAka6E1TfSF/2EWgg+Zt8/lhVDXSWl6XoPA/tL2i7Cnq4R4e6bqkmZnGHz8eH81IDdEDzAEEK+I8Le+SiWqkC2PT5qZTsQrkSFiJV6sStJ3QpAWjHK2LJ9kSZO7b5QjVbPiTxnjIE/f4h1KPj0ePyufhYlBfXfJifwXqxaAJPxj5e2ZOKAGpj5RkQMesXmaJE5Htmu2n/VQAPscpsfYVXfIv1HanT6+Al+DDDLWR7vFMwdkfYcJiGBBiAPRGZnSu3aXebd5hNvDPzNx5mOPn6q9W1mnaNss28rs+zHEbZwivdRr9NSHH3kU522s36t+3Bz9gnadN9jO62SerqhsRH/Y2G8zt2R8jvWbKJiBvReaBqA9vYmCBO0+9XXHcT+NnGcFRlT411F3M5jLe5FUMtTTCDBOQpEkwqslT7BQjPHjUXh5XW+atE2hYhatvw1Kbv98n/7XLY5pA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1a7e0e35-b392-4982-8601-08d9dadadc8c X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2022 23:32:58.9589 (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: AM0PR03MB4529 Subject: [FFmpeg-devel] [PATCH 27/31] fate/matroska: Add test for avoiding negative timestamps 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: q2hwknlPTGAL This tests the issue from tickets #4536, #5784; the output of this test is currently broken. Signed-off-by: Andreas Rheinhardt --- tests/fate/matroska.mak | 15 +++++++ tests/ref/fate/matroska-avoid-negative-ts | 55 +++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 tests/ref/fate/matroska-avoid-negative-ts diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak index 2fcac34d62..3bc35d0f4c 100644 --- a/tests/fate/matroska.mak +++ b/tests/fate/matroska.mak @@ -90,6 +90,21 @@ FATE_MATROSKA_FFMPEG_FFPROBE-$(call ALLYES, FILE_PROTOCOL MOV_DEMUXER \ += fate-matroska-dovi-write-config7 fate-matroska-dovi-write-config7: CMD = transcode mov $(TARGET_SAMPLES)/mov/dovi-p7.mp4 matroska "-map 0 -c copy -cues_to_front yes -reserve_index_space 40 -metadata_header_padding 64339" "-map 0 -c copy" "" "-show_entries stream_side_data_list" +# This tests the scenario like tickets #4536, #5784 where +# the first packet (with the overall lowest dts) is a video packet, +# whereas an audio packet to be muxed later has the overall lowest pts +# which happens to be negative and therefore needs to be shifted. +# This is currently buggy (the timestamps of the video frames muxed +# before the first audio frame are not shifted). +# Also tests muxing DOVI. +FATE_MATROSKA_FFMPEG_FFPROBE-$(call ALLYES, FILE_PROTOCOL MOV_DEMUXER \ + AAC_FIXED_DECODER HEVC_DECODER \ + AC3_FIXED_ENCODER MATROSKA_MUXER \ + MATROSKA_DEMUXER FRAMECRC_MUXER \ + PIPE_PROTOCOL) \ + += fate-matroska-avoid-negative-ts +fate-matroska-avoid-negative-ts: CMD = transcode "mov -c:a aac_fixed" $(TARGET_SAMPLES)/hevc/dv84.mov matroska "-map 0:v -map 0:a -c:v copy -c:a ac3_fixed" "-c copy -t 0.4" "" "-show_entries stream_side_data_list" + # This tests writing the MS-compatibility modes V_MS/VFW/FOURCC and A_MS/ACM. # It furthermore tests writing the Cues at the front if the cues_to_front # option is set and more than enough space has been reserved in advance. diff --git a/tests/ref/fate/matroska-avoid-negative-ts b/tests/ref/fate/matroska-avoid-negative-ts new file mode 100644 index 0000000000..9c23f4721c --- /dev/null +++ b/tests/ref/fate/matroska-avoid-negative-ts @@ -0,0 +1,55 @@ +6048ff1b45660eb544c1f0db450afff5 *tests/data/fate/matroska-avoid-negative-ts.matroska +3618353 tests/data/fate/matroska-avoid-negative-ts.matroska +#extradata 0: 551, 0xa18acf66 +#tb 0: 1/1000 +#media_type 0: video +#codec_id 0: hevc +#dimensions 0: 1920x1080 +#sar 0: 0/1 +#tb 1: 1/1000 +#media_type 1: audio +#codec_id 1: ac3 +#sample_rate 1: 44100 +#channel_layout 1: 3 +#channel_layout_name 1: stereo +0, -67, 0, 33, 63375, 0xc76606ab, S=1, 8 +0, -34, 133, 33, 46706, 0x0e08a7e5, F=0x0 +0, 0, 73, 33, 29766, 0x753c031a, F=0x0 +1, 0, 0, 34, 834, 0x7e7776bd +1, 35, 35, 34, 836, 0x14a3a0ff +0, 39, 39, 33, 19409, 0x4b948b6c, F=0x0 +1, 70, 70, 34, 836, 0xf55e9a61 +0, 73, 106, 33, 21086, 0x1b9412ce, F=0x0 +1, 105, 105, 34, 836, 0x415591f1 +0, 106, 273, 33, 62043, 0xc2356b56, F=0x0 +0, 133, 206, 33, 36175, 0x0a7df38c, F=0x0 +1, 140, 140, 34, 836, 0xe26c9bad +0, 173, 173, 33, 16028, 0xa57fcbe9, F=0x0 +1, 174, 174, 34, 836, 0xbc8c9b66 +0, 206, 239, 33, 15428, 0x9a91f357, F=0x0 +1, 209, 209, 34, 836, 0xddeb9643 +0, 239, 406, 33, 66072, 0xa542b6d7, F=0x0 +1, 244, 244, 34, 836, 0x08a494eb +0, 273, 339, 33, 34985, 0xbfd8ff45, F=0x0 +1, 279, 279, 34, 836, 0x94f09bb4 +0, 306, 306, 33, 16036, 0xfc39c6ea, F=0x0 +1, 314, 314, 34, 836, 0xd6358a3a +0, 339, 373, 33, 19893, 0x7e746f4e, F=0x0 +1, 348, 348, 34, 836, 0x76ac91f1 +0, 373, 539, 33, 77576, 0xeba2e5c8, F=0x0 +1, 383, 383, 34, 836, 0xb32a86ac +[STREAM] +[SIDE_DATA] +side_data_type=DOVI configuration record +dv_version_major=1 +dv_version_minor=0 +dv_profile=8 +dv_level=4 +rpu_present_flag=1 +el_present_flag=0 +bl_present_flag=1 +dv_bl_signal_compatibility_id=4 +[/SIDE_DATA] +[/STREAM] +[STREAM] +[/STREAM] From patchwork Tue Jan 18 23:32:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33651 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp4236462iog; Tue, 18 Jan 2022 15:33:19 -0800 (PST) X-Google-Smtp-Source: ABdhPJxvBPFpOZXJBhTcg8Fe+GUVzEwKna688wKK/7eKz68AY/IdckyTt1yI+BRXhIKSr+/Fbf2Q X-Received: by 2002:a17:906:7307:: with SMTP id di7mr6836006ejc.65.1642548799147; Tue, 18 Jan 2022 15:33:19 -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 ga23si9524441ejc.40.2022.01.18.15.33.18; Tue, 18 Jan 2022 15:33:19 -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=HTkND1eB; 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 AF7B868B163; Wed, 19 Jan 2022 01:33:11 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-oln040092067031.outbound.protection.outlook.com [40.92.67.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1ACD368B148 for ; Wed, 19 Jan 2022 01:33:05 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lNZpQ7z54Wy9MVeUsDrABra4sdByK6Rmc5kzvlvbz5ljKvLvb5zaOpu5dKE8a76+/xjwNItup5bKy5gzaY4BUta54aceAGd1TysAdf390eB2neBpCFoZC34OS992ivCJxKAXpa35vYU99Xih+ki2orcueWjpqcTsNgAeeJ22u/hnUn0dgrJiZ8qVsoPsLfcrbR2HXNMXNIjSQyzZQL55cOnzCpUn3lT/rqm9Nw4A06sLbaAaHQ7I8HCOyuugXTD9I4lNxuLe5mQwDdvvBze/lND5FyvzFVrBlcNKbo6ABIBn6kjh1jRX7s37wRfCcClntZNOXsftjQQAye7HKL43SQ== 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=fJv2AiDTbEBcWuzdc7t8HgX/sCkC7JXPYetzyusDJOc=; b=isMOxpZKrQBw7831vE3MOSwwndFPtohzRMUfSjGFmC4O3OoRXOrsyJ5hJB2k1GT3Zsi49eD5R1KfwBwWxM40dEp2C+r0Yc6Uyb8XhHiyVzU5TQHQKCofJrgj7r1fMdi20tF9NgKJSSUj9oUpZVyloQV8xDIqhVrdo3ZB2Nl588lBvRq5k/OSbStTWRFUP46JkUdeFYYK51K6IjNrBSGA8bdOSpU0hGnxC3ZD5q5JfqbMyoAGsOzbZjOaeqS0P0XTCNvS/ZohD48ktJe0winPPVL22WNmWjvAdRDTQM+xfj8F/4pyGZCRHnzkzWE1XC6lHAWppwFGXwhLliOxEmik4g== 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=fJv2AiDTbEBcWuzdc7t8HgX/sCkC7JXPYetzyusDJOc=; b=HTkND1eBlrcrM1b6JYdkhJA0upE94mr18pekZLAxxYcgPUQ6M/EOOUD2fMWOj5PQUYc1qWfiIehrcc66g18OzmpRjMrqjcFcwsgv6SDtHCak16rNB6hZ6BwuEeKDpTratCuDl0UuWf9+ioj20CWiaSyaKrBefnxdvVk8nXqYW1hcQLJFUb97aaI2uheBm7nNlk213g/2OMmDdsnqR8oIvE/5m0nR7f9CKaBTmef4IZQUVW0rEJwFGhprEfK4z0sdng60CZBQeCAJCeNMQBplaKzse+DVjbR4ldrBlG1VmvEsTqqDcnZ1DqQQuFIwCvYWmW1mfcScs6BihoIIn6+vJg== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM0PR03MB4529.eurprd03.prod.outlook.com (2603:10a6:208:c4::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Tue, 18 Jan 2022 23:33:00 +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.4909.007; Tue, 18 Jan 2022 23:33:00 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 Jan 2022 00:32:27 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [aKPdZEz0jrO9q3gXNvm5DSSmywLpnFLr] X-ClientProxiedBy: FR3P281CA0044.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::7) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220118233230.743570-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 54230551-811d-4dd0-3156-08d9dadadda8 X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEugsGLGn4w/4Os1SUPxX6CvG5gBLmvUBSDroU1apO5t/H/puUGOvj9FHVD6UeVw+pRQ/pC+fOzGfUidX5CrRHkiJwyV16+ZkP0nntvMWL8leRU0uBk1IOetPLfwEaWewOep7kUbZFgBbb928V4Dg0t1xkwpIe+OR8uthDxGCebs9e3n0UbLdLaAKGrq31ZRD/PpMjOR4N2L/Nz6U4eO7xsnEhp/xpe+c9rtoIpLZqC2Ns3iBUmBAYlSp/qWenGGExUCEMVi25hdFy1lFqdqDFYhDwiYe8Iqd47NEoyCYW8ou5gyKgoOka6Fiz1xejUEhiff4e2VxGhH0Q1X8W5VzT35WmKWJGHHBtEMk+LjVFnQoR4DJ29oRk/cfKR1sKnI4jS8Exh08sWUa0jQTE4IZVxWpdviDSG0z0ESgpg+o5Oh0/v9EXS9hF4hjY0ucqPa1lzv/oorbhUvI6O/H1qM9xOsFSNKUAnEbeClYkkLnbpbindJINEhkc8ef4U8S+bXTLdFPx+xLh8WkvQ59lK7rxIRZs3q4lNIirICs/AZs+jCYmSq/GGPuwZBPhqLPnObmXXdFXcP4n4TvWDf9MvR7PorgTyFNAoZHkNtYuxzxcnkzEKuTOsYhXVFs92b8BaQ0OTO2AZjCWxt93RWMAa1onJ+nHu5oq/Xkwnu1IGwnVx9FR5+Fb561Xmj5O+w3db54vUY6up2YejD5Nagb9ZhJMc2aqvDbDFvGxMkmZ70H9+qV5YkioWPOdyND5cqhob/eHVWPG3Xzc9t7ugrrK00mmdg X-MS-TrafficTypeDiagnostic: AM0PR03MB4529:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: is3KeInKkDcJX1IK+pbB20UiZN+Ar8dbYh5XGqEZvLnklEkcwbuPlD2dA5IwMkMqxVDcwCFcQIXxS9oSLrgkrzDCYYYanfD9h7Jwyi+01zreOchJYV5JZlm4YQm0j2LEpCCKt8jPy/YWO6pTw7kHv48CRYqufh9Xas8eqpyNlf6dGZo4tRTL+kV9dT+/FVgF+nJNtDDCJ/fKEBmzElk34CHZKHvKYnadrgxjr8t3tctLwYZ9xwooIWv8Yepcg0j/Lo6wxwhVCRHjz1I4DZdv3Im178nityASAg3rN7o9HqBtlAVZSKFTujKYyWTjgcLGWiykFPB0+4eSJDMVetvd0BtWRTNlFaw3szprC2xLwPKrX9F6QrUoDFFlcMp1rzkGmrPK7foKIgbWInFBVcdLS5QrnOEn2czcbGECw3k+loxNRjH49wOT9aie5qulDG8oOPHbqYf5W1lM5a4UIjM5p31n/jHZ5S9imYzCXV/tbB07BKfc/sAMMUz6OABD7cqzBumF2enZg9AE0FW5ZIo8pqe+FVWWG7eAOAlvVhNDhidSik5DifEzX/OC8fsnKwQyeWxNxCNt7Lmw0D6FthivXw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NSvbwPbGwg0pOs9Me7rbBT9Qkw6VtvgLvsxQdD2robyEl+YrbNXN9nW/DYepkLroCU/UXdGrOgX4L4SPFIbbyKJEvcn2RC2nom9Zc5tf6mTifAW/a32vuPAthb0Aqcq/EgJ/PqwkgXny2RuHWpiTUz1i3FWxKqkOVJT+NiDTNaJwYuBxtwVMCUaxWeo8Ha+SfHuaAd2LBlEnL7dYFiUUFRnamP9+5wLT2GPfmCAUzwCEgmwJYfmJiMCL2Le5QqL96kclfMUvv6iBb+xtUIvp1Msous0VLqV9gg5PVQ17c3TNji/GUmp8qUdQvs9WrBu2WJfIegVeJ9BH1eQ+FyT4n/CpdEiBs76R263hzH6ld/GARQ5GpkLI7Ny5eRnP38PHbrq44U9M1TyjpEzICJXJdxkScW+zTfPHMPz7nwbNVJeC6KQ0pJIU9vNuQOUhSbBv2GEpEiEYswaBrAIzBdlVLS7GbHZnuyXUdugS19W19aI8PPCaSIG1/B//q+7j0rAyuqhz5xtY7pPajljbPWyvzzABdLf2QC+ZiDAwtFbR9HThgIHSh7Ui2NMvYzKZmyuth+suIOvjmdbTQj9ZfykVE6EXnVInqq5UlpSPXXqFoSBQEiUZNKeZAvpqOxdhi72UtXZ5s/rf/IEwiY563ejUy2LY1l8o8fj89pTUp0biC86Qo7DRd1rmh1eT41lSUXc01HIq/jZ4y6uxtxTHTufwLEkq4qn6xdfft+DVLLih9uxAo7hYQMoGyHhEED4lTzj0ulXo6Ogac0p3pcRIADFxPzQweK5lPJ7oqpOoiA7WZ3nknc1TQA/ik5ePdwTfZFJqOfz7YEQwqqjdeNiPNIMhXUppi/25zyoli5/9t9bvj6zq2IleNZ/wfcDSA59tQLcjSwf9wVpCypA5ndXgLkHTMt3OolMHM7/NENZJMp6GKxM53DwLjGn9lRa/ZtIKZIhiaheQZuAJDoSMnNUtQowfyw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 54230551-811d-4dd0-3156-08d9dadadda8 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2022 23:33:00.8192 (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: AM0PR03MB4529 Subject: [FFmpeg-devel] [PATCH 28/31] avformat/avformat: Add AVFMT_AVOID_NEG_TS_DISABLED 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: 16TYtDvzEK6S And also don't use explicit constants in the movenc test. Signed-off-by: Andreas Rheinhardt --- Missing version bump and APIchanges entry. libavformat/avformat.h | 1 + libavformat/mux.c | 2 +- libavformat/options_table.h | 2 +- libavformat/tests/movenc.c | 4 ++-- libavformat/webm_chunk.c | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 6ce367e854..cd253fb28e 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1533,6 +1533,7 @@ typedef struct AVFormatContext { */ int avoid_negative_ts; #define AVFMT_AVOID_NEG_TS_AUTO -1 ///< Enabled when required by target format +#define AVFMT_AVOID_NEG_TS_DISABLED 0 ///< Do not shift timestamps even when they are negative. #define AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE 1 ///< Shift timestamps so they are non negative #define AVFMT_AVOID_NEG_TS_MAKE_ZERO 2 ///< Shift timestamps so that they start at 0 diff --git a/libavformat/mux.c b/libavformat/mux.c index e34fd88f05..a1917878a5 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -421,7 +421,7 @@ static int init_pts(AVFormatContext *s) if (s->avoid_negative_ts < 0) { av_assert2(s->avoid_negative_ts == AVFMT_AVOID_NEG_TS_AUTO); if (s->oformat->flags & (AVFMT_TS_NEGATIVE | AVFMT_NOTIMESTAMPS)) { - s->avoid_negative_ts = 0; + s->avoid_negative_ts = AVFMT_AVOID_NEG_TS_DISABLED; } else s->avoid_negative_ts = AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE; } diff --git a/libavformat/options_table.h b/libavformat/options_table.h index 62c5bb40a3..86d836cfeb 100644 --- a/libavformat/options_table.h +++ b/libavformat/options_table.h @@ -95,7 +95,7 @@ static const AVOption avformat_options[] = { {"max_ts_probe", "maximum number of packets to read while waiting for the first timestamp", OFFSET(max_ts_probe), AV_OPT_TYPE_INT, { .i64 = 50 }, 0, INT_MAX, D }, {"avoid_negative_ts", "shift timestamps so they start at 0", OFFSET(avoid_negative_ts), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 2, E, "avoid_negative_ts"}, {"auto", "enabled when required by target format", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_AVOID_NEG_TS_AUTO }, INT_MIN, INT_MAX, E, "avoid_negative_ts"}, -{"disabled", "do not change timestamps", 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, INT_MIN, INT_MAX, E, "avoid_negative_ts"}, +{"disabled", "do not change timestamps", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_AVOID_NEG_TS_DISABLED }, INT_MIN, INT_MAX, E, "avoid_negative_ts"}, {"make_non_negative", "shift timestamps so they are non negative", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE }, INT_MIN, INT_MAX, E, "avoid_negative_ts"}, {"make_zero", "shift timestamps so they start at 0", 0, AV_OPT_TYPE_CONST, {.i64 = AVFMT_AVOID_NEG_TS_MAKE_ZERO }, INT_MIN, INT_MAX, E, "avoid_negative_ts"}, {"dump_separator", "set information dump field separator", OFFSET(dump_separator), AV_OPT_TYPE_STRING, {.str = ", "}, 0, 0, D|E}, diff --git a/libavformat/tests/movenc.c b/libavformat/tests/movenc.c index 2af72f11c7..ddcb053bf2 100644 --- a/libavformat/tests/movenc.c +++ b/libavformat/tests/movenc.c @@ -455,7 +455,7 @@ int main(int argc, char **argv) init_count_warnings(); init_out("empty-moov-no-elst-no-adjust"); av_dict_set(&opts, "movflags", "frag_keyframe+empty_moov", 0); - av_dict_set(&opts, "avoid_negative_ts", "0", 0); + av_dict_set(&opts, "avoid_negative_ts", "disabled", 0); init(1, 0); mux_gops(2); finish(); @@ -578,7 +578,7 @@ int main(int argc, char **argv) // one before. av_dict_set(&opts, "movflags", "frag_custom+empty_moov+dash+frag_discont", 0); av_dict_set(&opts, "fragment_index", "2", 0); - av_dict_set(&opts, "avoid_negative_ts", "0", 0); + av_dict_set(&opts, "avoid_negative_ts", "disabled", 0); av_dict_set(&opts, "use_editlist", "0", 0); init(0, 0); skip_gops(1); diff --git a/libavformat/webm_chunk.c b/libavformat/webm_chunk.c index 24390e8e74..9348e6680a 100644 --- a/libavformat/webm_chunk.c +++ b/libavformat/webm_chunk.c @@ -127,7 +127,7 @@ fail: s->avoid_negative_ts = oc->avoid_negative_ts; ffformatcontext(s)->avoid_negative_ts_use_pts = ffformatcontext(oc)->avoid_negative_ts_use_pts; - oc->avoid_negative_ts = 0; + oc->avoid_negative_ts = AVFMT_AVOID_NEG_TS_DISABLED; return 0; } From patchwork Tue Jan 18 23:32:28 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33652 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp4236583iog; Tue, 18 Jan 2022 15:33:29 -0800 (PST) X-Google-Smtp-Source: ABdhPJxQgnnafIwcoPhaBgAgO0uEUrZF/dS3hY2P7nw4013IWBAvGDaWBNHqJ/j7Uy7C8mIByW3v X-Received: by 2002:a05:6402:50d3:: with SMTP id h19mr13339342edb.346.1642548809662; Tue, 18 Jan 2022 15:33:29 -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 h8si4021063ejj.762.2022.01.18.15.33.29; Tue, 18 Jan 2022 15:33:29 -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="f57k/Bil"; 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 A4CFD68B168; Wed, 19 Jan 2022 01:33:16 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-oln040092067031.outbound.protection.outlook.com [40.92.67.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 31CF968B124 for ; Wed, 19 Jan 2022 01:33:10 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BrfuopW+QMHN6dcQ8O77LFgm570vTU64OvNmGPqO+U2rsM3/5UZbcRQgGykWAXaw8OHrH66JSurjEsJjclkE+LoK8L7R4zTX5Um/xkBkwQljPZjkRrWtgwIAK9YA8llXbuZAQOgHLiyaS2MsspSK/zlKOtlT4SpluW3maSaFA0dZPooSmD6YIRsn/l7xmsWFWVMEXsWOxKFTJwfqwM+uJlG2as5jCxpjlD6sd79CcgBJKsmamMgPN9yAg1Rf2sU7BKZW7E1o38tWr+tHtUuCAtIwb2TeGzrB+cMIIhegUBqX4VhSwRgzFJrJhr1nsv68TobxdaPJYblSRjkSsZuiWQ== 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=udNGc7r1grgcX84P8DKy++hR9PvD1BkTbuE2ssZ0nIc=; b=GLxNIoGY/RgiQ6foA2TVy4OvDBMm8eo5loI/yvqmIkAvsPsyjbG4ghkMTEYINEI+FE3ujSJcf8MX85KwSaj8pNQGGtoYVN/VrTqNVlsv0hVXtnqF2KQYAmuPe39nfFV/dpmvBwmGiZTAOOdiTTpz7bGoOVwC+xBFq5pcd3+nMbe0uYfzb3aqShg3M2XTqH/7c+TlowP7MFRNDb15t08ysEmfS+zgQT1QLUkeI1rx4W3c5XKismKzSenHWEUHEoR9p8gILYZB4adGIY9NFpSnO81sNnwj5CwKSXRs4jqRq1ueyYVDe1cjpr0tejeIn5455KhZMcqcScOzsP1jLGXFqw== 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=udNGc7r1grgcX84P8DKy++hR9PvD1BkTbuE2ssZ0nIc=; b=f57k/BilGPa/o9OI/Ydr10cWJYvzBCtpRZM3dSU/vudiBHvLlUDcVBaZOOzlJMUGeYWmSo8Fv2yBocMEZ7Acqa3HiGcEyFhZf3GIUhg17kb9WKBj4y+FsDCYtufZnb5bKqfoa7Uq7kuSuHSVIkkkvDqh88oNTUzp6tlc/2C1Tfy/4FGQW8rZbGp4+bgVGJ279cNs+t3lQENXOpUx9etF8pFZZ+IvHJpIjJeTI7x6Q5aNXLG1SKefMh2IGwUdVP36Zwz9UB3BRY6XDMdKCjKLk9s3vGZzaCLjw5sBCsguDn4rQiY+wGjM/1s2Qk72lmq7PP1yVEEIEsrfOA1bYR3kMA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM0PR03MB4529.eurprd03.prod.outlook.com (2603:10a6:208:c4::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Tue, 18 Jan 2022 23:33:04 +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.4909.007; Tue, 18 Jan 2022 23:33:04 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 Jan 2022 00:32:28 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [0WbKcANMsWV+kqFS/t8ha1pfjgmgUqKM] X-ClientProxiedBy: FR3P281CA0044.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::7) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220118233230.743570-4-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e27b2c09-2ae5-4789-9a7a-08d9dadae00f X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiTy/gRYuf0ZoZ8SwmTovZBiVXAz8MK2D+PXvk1kVGwht3rDlC0wWyOWtpbUOCNSheIHGCuxqVjd+ykk3Z1KFlMryYHISCSWjKlYNPLG3S7pSCQm6nxJ1TRCUfgSd1b6JhoV8bPRqWWkBKHr3byeJH3gQ4WGR8MLER9Kww1tg+Xp2jv2EsE1p3/A53GnSzFl3nzZZhH6XZ4I1tbtHIfL8ZloqtaV8VeYkAEa7877X18EH4+lvmLYY/vePqSvXKc7vFeHWIvquVVIWYwNsRLSe04LA8qtGG41P65q3UzvXv+cSmjAffFYhCwV6UuNltDwFYDrIT+2GnD064eiFOalstB+17PU7/ntRf4ZfuMg6R2/9Lgs1co0DbSvz5iafwsotH3/rqzCj4AJkE0y5wgD3kHlw5ew5xjG91Le0dJX+hkNA22SOWwM8J/zYvExmFN0qoIi8/YurbJq4utzN8OggGEZA3eD3sepViU0hkL/HmIljS75ufTx82/LVZymYUYNabzV0IUZKwkGZ+N9q8jzYG6pWVKCzf8kYQXmEOFqme1eT2HmOqmiiDuXagc98IvMb+KiACjcANhifhCYi9RWgRITRgAtRYERv5xs3fM7brCrEZeXM86vwhPDTedx0Uh66rhZ77w+8MojifQySSHK4uarbWZAn2Jc1PSkC4EgOXJxGWFEWv2Mbk4CgCebt2Qf34nb42A8hfXnCMxKKmIjwNo5qNWsPWsIzYBk8IKqdGtw/TUo65bfPbikMwCbnSt4tYE= X-MS-TrafficTypeDiagnostic: AM0PR03MB4529:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4QvZCj3zR2Sn9HEY8UZqJIlWslYwjJ1x+xo5Q1U9dZs8+Sn0cNMlkcFCJufUVU+0KjND7H1ge0HDIZenfVFR+u3L1XomRJYG5d04aeeyzkaEusG3j1Xo5WdePq4Sn/MDSlXrjrtbll0+jlAVcgQs+9eaiHbMfT/dTM4AvQWgB0geNbN/prInK5O6MS+yBnNiwChO43vJ9g3Yczcjle01gym2neggO5vFAxf3BcFNToBNZGAkzn1q+LtbEUzfbZ1x2utjrG90SEiWBjRnkqEP9UvgbysObJLQ7L11TA9nvhifigx7ZFKHe6l+iCcMRc32P3Jtw/i266ywRAA5wbCpRa2b8xJHBirzBExSsQwZ4ZKY3o82hrs6x6P3ZA5synca2Z+Nf8gejFY2Ebc4ZVbXPrnxdfzgZpH3U9FDJ7/J6xIEwV4qmxMb6dgM1TsY8wHAI/4AnlLHTlttuCv06Ra8WRxjaMV2BeQ2A3qL9+GA9B5NV2c2p2MzrQ9bR0CCdKSvlQ2FEDCyCt9dOHO1KidRJNIUNjjIim2z/034gW0CmECWTk+LxeICMnZLoO44aRGJVeZYHTmjQrSm/DFN+u7KZw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: uCrmfq5Koeuyuv0/NPFHKJjtt8r9PQKtiq7zm7ZlR+s0CK04qCSvBSJ0jaPy64ONEb0LJ/YZ61hIZDad+LbUOke52Kojl1I8tw2XsWzrII+51DABZo6wkWGb2NDmJPP/K5GOm3hh2NVtytG0N1P01MwNeQKd3oYIiITMCfhIZHyHrUy1jyKU6yo4DxqD1Y3E8aKSoYafvTSpFSKDsg5IvYmauUfV0i4trTliYFnoU//ZVNtHxoo/tTbJ71n3pQYvfm5g5CweXoswqNHXmxTHh+JynTpS13Nj4aFztrEaXTSlxOazcydMFtPSssAWFOBG5eaxWjOd3/AN6B3Qq20wQOW/FGuvwU4O+0F1EbpxWw5gVxIguC2pvED9Jmp600HYtbmjsDMx3BEQdCi6HoBg+DI1/PfpN8F+OpVcfsWa15PTaneMEfqQJAlokVF28pAxph8e9MFsr2kdhsy7Ck7/6A/JGsGRtVd58Ayq53McNfQVpUTsDLEBY6n6CStezDySb78t1aMacgJY5hrFd5auaweFdWjqK/I+Dyx47XSeYta1iqll+oPhB+BEE7Sd43jHtiJ/VczKbzQw+h8rsjKJJyrfjQfNXTErhlskCPfoRG1OjUW7RFa9JpzPQI06nTNOoj7Igp0V0aZGuw29ZrGNOKhjYx0LB9ubUOMyUG1Yxbs3gHsAqDnEDQnX0kmxZH1ciE6307z5A3OimrRe1tawAHUwlLOM+npmqh+yiYhWYoCO+T7VLKUoM0lmviarDfViKB2Go7I3JC4+ib0OAGaBvaOP9eTvF/dCrbXmh3HOtV77Rjld867ujNLbuIrK328AIfiDDGUqHPmSeZK99NvA4YCNDVxsFMMDbXez9Wq2em8wxv8iEUn+Xw/jtfkzHknbY9XvIj0Ycv96GOTaHlaN4FK2zxifp2skWlBcPRNvFdfCsGIvFPpV2gcrfvGIvx3HWCeStAH6v/CIEmWR0Lzr/A== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e27b2c09-2ae5-4789-9a7a-08d9dadae00f X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2022 23:33:04.8055 (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: AM0PR03MB4529 Subject: [FFmpeg-devel] [PATCH 29/31] avformat/mux: Preserve sync even if later packet has negative ts 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: eyZ41PRjnkox write_packet() has code to shift the packets timestamps to make them nonnegative or even make them start at ts zero; this code inspects every packet that is written and if a packet with negative timestamp (whether this is dts or pts depends upon another flag; basically: Matroska uses pts, everyone else dts) is encountered, this is offset to make the timestamp zero. All further packets will be offset accordingly (with the offset converted according to the streams' timebases). This is based around an assumption, namely that the timestamps are indeed non-decreasing, so that the first packet with negative timestamps is the first packet with timestamps. This assumption is often fulfilled given that the default interleavement function by default interleaves per dts; yet there are scenarios in which it may not be fulfilled: a) av_write_frame() instead of av_interleaved_write_frame() is used. b) The audio_preload option is used. c) When the timestamps that are made nonnegative/zero are pts (i.e. with Matroska), because the packet with the smallest dts is not necessarily the packet with the smallest pts. d) Possibly with custom interleavement functions. In these cases the relative sync of the first few packet(s) is offset relative to the later packets. This contradicts the documentation ("When shifting is enabled, all output timestamps are shifted by the same amount"). Therefore this commit changes this: As soon as the first packet with valid timestamps is output, it is checked and recorded whether the timestamps need to be shifted. Further packets are no longer checked for needing to be offset; instead they are simply offset. In the cases above this leads to packets with negative timestamps (and the appropriate warnings) instead of desync. This will mostly be fixed in the next commit. This commit also factors handling the avoid_negative_ts stuff out of write_packet() in order to be able to return immediately. Tickets #4536 and #5784 as well as the matroska-avoid-negative-ts-test are examples of c); as has been said, some timestamps are now negative, yet the ref file update does not show it because ffmpeg.c sanitizes the timestamps (-copyts disables it; ffprobe and mkvinfo also show the original timestamps). Signed-off-by: Andreas Rheinhardt --- libavformat/internal.h | 23 +++-- libavformat/mux.c | 111 +++++++++++++--------- libavformat/options.c | 1 - tests/fate/matroska.mak | 4 +- tests/ref/fate/matroska-avoid-negative-ts | 52 +++++----- 5 files changed, 104 insertions(+), 87 deletions(-) diff --git a/libavformat/internal.h b/libavformat/internal.h index bffb8e66ff..f24c68703f 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -82,6 +82,17 @@ typedef struct FFFormatContext { */ int nb_interleaved_streams; + /** + * Whether the timestamp shift offset has already been determined. + * -1: disabled, 0: not yet determined, 1: determined. + */ + enum { + AVOID_NEGATIVE_TS_DISABLED = -1, + AVOID_NEGATIVE_TS_UNKNOWN = 0, + AVOID_NEGATIVE_TS_KNOWN = 1, + } avoid_negative_ts_status; +#define AVOID_NEGATIVE_TS_ENABLED(status) ((status) >= 0) + /** * The interleavement function in use. Always set for muxers. */ @@ -135,18 +146,6 @@ typedef struct FFFormatContext { */ int raw_packet_buffer_size; - /** - * Offset to remap timestamps to be non-negative. - * Expressed in timebase units. - * @see AVStream.mux_ts_offset - */ - int64_t offset; - - /** - * Timebase for the timestamp offset. - */ - AVRational offset_timebase; - #if FF_API_COMPUTE_PKT_FIELDS2 int missing_ts_warning; #endif diff --git a/libavformat/mux.c b/libavformat/mux.c index a1917878a5..0810b674a7 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -388,6 +388,8 @@ fail: static int init_pts(AVFormatContext *s) { + FFFormatContext *const si = ffformatcontext(s); + /* init PTS generation */ for (unsigned i = 0; i < s->nb_streams; i++) { AVStream *const st = s->streams[i]; @@ -418,13 +420,16 @@ static int init_pts(AVFormatContext *s) } } + si->avoid_negative_ts_status = AVOID_NEGATIVE_TS_UNKNOWN; if (s->avoid_negative_ts < 0) { av_assert2(s->avoid_negative_ts == AVFMT_AVOID_NEG_TS_AUTO); if (s->oformat->flags & (AVFMT_TS_NEGATIVE | AVFMT_NOTIMESTAMPS)) { s->avoid_negative_ts = AVFMT_AVOID_NEG_TS_DISABLED; + si->avoid_negative_ts_status = AVOID_NEGATIVE_TS_DISABLED; } else s->avoid_negative_ts = AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE; - } + } else if (s->avoid_negative_ts == AVFMT_AVOID_NEG_TS_DISABLED) + si->avoid_negative_ts_status = AVOID_NEGATIVE_TS_DISABLED; return 0; } @@ -638,6 +643,64 @@ static void guess_pkt_duration(AVFormatContext *s, AVStream *st, AVPacket *pkt) } } +static void handle_avoid_negative_ts(FFFormatContext *si, FFStream *sti, + AVPacket *pkt) +{ + AVFormatContext *const s = &si->pub; + int64_t offset; + + if (!AVOID_NEGATIVE_TS_ENABLED(si->avoid_negative_ts_status)) + return; + + if (si->avoid_negative_ts_status == AVOID_NEGATIVE_TS_UNKNOWN) { + int use_pts = si->avoid_negative_ts_use_pts; + int64_t ts = use_pts ? pkt->pts : pkt->dts; + + if (ts == AV_NOPTS_VALUE) + return; + if (ts < 0 || + ts > 0 && s->avoid_negative_ts == AVFMT_AVOID_NEG_TS_MAKE_ZERO) { + for (unsigned i = 0; i < s->nb_streams; i++) { + AVStream *const st2 = s->streams[i]; + FFStream *const sti2 = ffstream(st2); + sti2->mux_ts_offset = av_rescale_q_rnd(-ts, + sti->pub.time_base, + st2->time_base, + AV_ROUND_UP); + } + } + si->avoid_negative_ts_status = AVOID_NEGATIVE_TS_KNOWN; + } + + offset = sti->mux_ts_offset; + + if (pkt->dts != AV_NOPTS_VALUE) + pkt->dts += offset; + if (pkt->pts != AV_NOPTS_VALUE) + pkt->pts += offset; + + if (si->avoid_negative_ts_use_pts) { + if (pkt->pts != AV_NOPTS_VALUE && pkt->pts < 0) { + av_log(s, AV_LOG_WARNING, "failed to avoid negative " + "pts %s in stream %d.\n" + "Try -avoid_negative_ts 1 as a possible workaround.\n", + av_ts2str(pkt->pts), + pkt->stream_index + ); + } + } else { + if (pkt->dts != AV_NOPTS_VALUE && pkt->dts < 0) { + av_log(s, AV_LOG_WARNING, + "Packets poorly interleaved, failed to avoid negative " + "timestamp %s in stream %d.\n" + "Try -max_interleave_delta 0 as a possible workaround.\n", + av_ts2str(pkt->dts), + pkt->stream_index + ); + } + } +} + /** * Shift timestamps and call muxer; the original pts/dts are not kept. * @@ -663,51 +726,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) if (pkt->pts != AV_NOPTS_VALUE) pkt->pts += offset; } - - if (s->avoid_negative_ts > 0) { - int64_t offset = sti->mux_ts_offset; - int64_t ts = si->avoid_negative_ts_use_pts ? pkt->pts : pkt->dts; - - if (si->offset == AV_NOPTS_VALUE && ts != AV_NOPTS_VALUE && - (ts < 0 || s->avoid_negative_ts == AVFMT_AVOID_NEG_TS_MAKE_ZERO)) { - si->offset = -ts; - si->offset_timebase = st->time_base; - } - - if (si->offset != AV_NOPTS_VALUE && !offset) { - offset = sti->mux_ts_offset = - av_rescale_q_rnd(si->offset, - si->offset_timebase, - st->time_base, - AV_ROUND_UP); - } - - if (pkt->dts != AV_NOPTS_VALUE) - pkt->dts += offset; - if (pkt->pts != AV_NOPTS_VALUE) - pkt->pts += offset; - - if (si->avoid_negative_ts_use_pts) { - if (pkt->pts != AV_NOPTS_VALUE && pkt->pts < 0) { - av_log(s, AV_LOG_WARNING, "failed to avoid negative " - "pts %s in stream %d.\n" - "Try -avoid_negative_ts 1 as a possible workaround.\n", - av_ts2str(pkt->pts), - pkt->stream_index - ); - } - } else { - if (pkt->dts != AV_NOPTS_VALUE && pkt->dts < 0) { - av_log(s, AV_LOG_WARNING, - "Packets poorly interleaved, failed to avoid negative " - "timestamp %s in stream %d.\n" - "Try -max_interleave_delta 0 as a possible workaround.\n", - av_ts2str(pkt->dts), - pkt->stream_index - ); - } - } - } + handle_avoid_negative_ts(si, sti, pkt); if ((pkt->flags & AV_PKT_FLAG_UNCODED_FRAME)) { AVFrame **frame = (AVFrame **)pkt->data; diff --git a/libavformat/options.c b/libavformat/options.c index 1634388acb..2d55d3ad6e 100644 --- a/libavformat/options.c +++ b/libavformat/options.c @@ -174,7 +174,6 @@ AVFormatContext *avformat_alloc_context(void) return NULL; } - si->offset = AV_NOPTS_VALUE; si->shortest_end = AV_NOPTS_VALUE; return s; diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak index 3bc35d0f4c..3d8110a434 100644 --- a/tests/fate/matroska.mak +++ b/tests/fate/matroska.mak @@ -94,8 +94,8 @@ fate-matroska-dovi-write-config7: CMD = transcode mov $(TARGET_SAMPLES)/mov/dovi # the first packet (with the overall lowest dts) is a video packet, # whereas an audio packet to be muxed later has the overall lowest pts # which happens to be negative and therefore needs to be shifted. -# This is currently buggy (the timestamps of the video frames muxed -# before the first audio frame are not shifted). +# This is currently buggy (the timestamps are not shifted properly: +# the first audio packet has negative timestamps). # Also tests muxing DOVI. FATE_MATROSKA_FFMPEG_FFPROBE-$(call ALLYES, FILE_PROTOCOL MOV_DEMUXER \ AAC_FIXED_DECODER HEVC_DECODER \ diff --git a/tests/ref/fate/matroska-avoid-negative-ts b/tests/ref/fate/matroska-avoid-negative-ts index 9c23f4721c..5bc71c76f7 100644 --- a/tests/ref/fate/matroska-avoid-negative-ts +++ b/tests/ref/fate/matroska-avoid-negative-ts @@ -1,4 +1,4 @@ -6048ff1b45660eb544c1f0db450afff5 *tests/data/fate/matroska-avoid-negative-ts.matroska +e31928477981a8ffad351379f6d5f14a *tests/data/fate/matroska-avoid-negative-ts.matroska 3618353 tests/data/fate/matroska-avoid-negative-ts.matroska #extradata 0: 551, 0xa18acf66 #tb 0: 1/1000 @@ -12,32 +12,32 @@ #sample_rate 1: 44100 #channel_layout 1: 3 #channel_layout_name 1: stereo -0, -67, 0, 33, 63375, 0xc76606ab, S=1, 8 -0, -34, 133, 33, 46706, 0x0e08a7e5, F=0x0 -0, 0, 73, 33, 29766, 0x753c031a, F=0x0 +0, -62, 5, 33, 63375, 0xc76606ab, S=1, 8 +0, -29, 138, 33, 46706, 0x0e08a7e5, F=0x0 1, 0, 0, 34, 834, 0x7e7776bd -1, 35, 35, 34, 836, 0x14a3a0ff -0, 39, 39, 33, 19409, 0x4b948b6c, F=0x0 -1, 70, 70, 34, 836, 0xf55e9a61 -0, 73, 106, 33, 21086, 0x1b9412ce, F=0x0 -1, 105, 105, 34, 836, 0x415591f1 -0, 106, 273, 33, 62043, 0xc2356b56, F=0x0 -0, 133, 206, 33, 36175, 0x0a7df38c, F=0x0 -1, 140, 140, 34, 836, 0xe26c9bad -0, 173, 173, 33, 16028, 0xa57fcbe9, F=0x0 -1, 174, 174, 34, 836, 0xbc8c9b66 -0, 206, 239, 33, 15428, 0x9a91f357, F=0x0 -1, 209, 209, 34, 836, 0xddeb9643 -0, 239, 406, 33, 66072, 0xa542b6d7, F=0x0 -1, 244, 244, 34, 836, 0x08a494eb -0, 273, 339, 33, 34985, 0xbfd8ff45, F=0x0 -1, 279, 279, 34, 836, 0x94f09bb4 -0, 306, 306, 33, 16036, 0xfc39c6ea, F=0x0 -1, 314, 314, 34, 836, 0xd6358a3a -0, 339, 373, 33, 19893, 0x7e746f4e, F=0x0 -1, 348, 348, 34, 836, 0x76ac91f1 -0, 373, 539, 33, 77576, 0xeba2e5c8, F=0x0 -1, 383, 383, 34, 836, 0xb32a86ac +0, 5, 72, 33, 29766, 0x753c031a, F=0x0 +1, 34, 34, 34, 836, 0x14a3a0ff +0, 38, 38, 33, 19409, 0x4b948b6c, F=0x0 +1, 69, 69, 34, 836, 0xf55e9a61 +0, 72, 105, 33, 21086, 0x1b9412ce, F=0x0 +1, 104, 104, 34, 836, 0x415591f1 +0, 105, 272, 33, 62043, 0xc2356b56, F=0x0 +0, 138, 205, 33, 36175, 0x0a7df38c, F=0x0 +1, 139, 139, 34, 836, 0xe26c9bad +0, 172, 172, 33, 16028, 0xa57fcbe9, F=0x0 +1, 173, 173, 34, 836, 0xbc8c9b66 +0, 205, 238, 33, 15428, 0x9a91f357, F=0x0 +1, 208, 208, 34, 836, 0xddeb9643 +0, 238, 405, 33, 66072, 0xa542b6d7, F=0x0 +1, 243, 243, 34, 836, 0x08a494eb +0, 272, 338, 33, 34985, 0xbfd8ff45, F=0x0 +1, 278, 278, 34, 836, 0x94f09bb4 +0, 305, 305, 33, 16036, 0xfc39c6ea, F=0x0 +1, 313, 313, 34, 836, 0xd6358a3a +0, 338, 372, 33, 19893, 0x7e746f4e, F=0x0 +1, 347, 347, 34, 836, 0x76ac91f1 +0, 372, 538, 33, 77576, 0xeba2e5c8, F=0x0 +1, 382, 382, 34, 836, 0xb32a86ac [STREAM] [SIDE_DATA] side_data_type=DOVI configuration record From patchwork Tue Jan 18 23:32:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33653 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp4236715iog; Tue, 18 Jan 2022 15:33:41 -0800 (PST) X-Google-Smtp-Source: ABdhPJxh7UNo5WlSeq1UeKh+B5LRcx7ZQ2WFZN0a4I8gTIcg5ZRvV9SfwBslKk0ibunlnylmBHkZ X-Received: by 2002:a05:6402:51c8:: with SMTP id r8mr7570200edd.128.1642548821514; Tue, 18 Jan 2022 15:33:41 -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 hp40si11002751ejc.415.2022.01.18.15.33.41; Tue, 18 Jan 2022 15:33:41 -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=Bew46Cek; 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 B16A968B172; Wed, 19 Jan 2022 01:33:21 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-oln040092067031.outbound.protection.outlook.com [40.92.67.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4935568B164 for ; Wed, 19 Jan 2022 01:33:15 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DuHTpZ0/sLtUBkT+S0G/eYiNy8vPWemKdzsmMRg2J+e1QfK685hXtqSUfDi4Z6SJRKvVARl8EJz6gdOU1fYMeU7XQGR1TFZHUrsHD7066hbBvWjdKoGr12MMMPVLz4tfUaZPp/c4sO6H+mfT34985aGLmCsrqNJUocFIauQNZkPO8q6wh3rjuYOueJNn63LOmWSaTD+2Ad/ENSRZ54ZAL1jMc5GCqpbHbIdKiyNilu1Ma4wb9y+xjwmTy55ewH85vC/ieD3yBaDwXPKJg2UhNfB0Gf1MkGhjVsCuXrg1WoZXsYsMehtmg+5XyJHy3SFitFF8HEGJluIS3OXzBkB0zg== 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=5mLQXCWiHDp6VVN4lk9bbyo/h7UcALTTaoqXa6zxauE=; b=GjkyH3kg+VC6KZdjf0sT3yCvVmf6F7vnsgjCvadMIMwnXOUN4HArpnHHDZEsf+PuaHioMmkLeROYJi84Xj8lqWiuQaMSrLtEjo47kK7S/RZERisKG966y2qDsXbaU2kTV03mwNZ/7DsT8NBYVxNW7MOe02sWaHP5TZobw8wphr0xBafKQTKWqvN5fDSm11lWWk8yEgjt6qz7qNYiNoBtGJpBZezk2tuLudUTDYXkPk3CPhxFjvxfU1QUgKfUKujBTmqEKY0VLZQnGLtZfaolvyXyp4foVTQXsWT5RGuXVdJN2+epJY81A0uDVQnthxew2KCO1hBw24xyLB14jKvVVw== 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=5mLQXCWiHDp6VVN4lk9bbyo/h7UcALTTaoqXa6zxauE=; b=Bew46Cek3sYh5zjQBMFXkeEn0b4qsZq02BbYfK5Feb+YvQe/W4vMtcynz6CnqUSgWlscqMPYjFXwJE87sI6Qw58VuEMQvUUnZSd8mHlgWwNzfMwsFWm3lBtTfcuxlBFp8WJW2FjNaoim3kXUJT9L0F5rjKAt0k2wuWOoH+2uzZwa435CWncbb8NMe+BYqzZ8vqmmyBa0Aq1nmqKi3hHAWE87urvUtc5qpOzD6spVGuP8/FaijNzCF0K8upJdSSy+r3iEZK3OvWGs6oqR6MFuVmY9zMIPZECNJ1gxzgumkUQ+VPXjVP11WTOycDmHBYpWN1ubv+KaxZXIDqCpR/wn7w== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM0PR03MB4529.eurprd03.prod.outlook.com (2603:10a6:208:c4::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Tue, 18 Jan 2022 23:33:06 +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.4909.007; Tue, 18 Jan 2022 23:33:06 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 Jan 2022 00:32:29 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [0v3+AkUat5AtHecUXTBNspT06b/PkBec] X-ClientProxiedBy: FR3P281CA0044.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::7) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220118233230.743570-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: abdaac7d-24eb-4601-03f8-08d9dadae116 X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNWUr2JHLiAqclFUc+Fcp085+FJe88bajKtuN9GAKBsRE1AkSLEB2iY621dGjGiRZK3ZsclDBYz6VEctXHddRhp8LHYeOfXWehxhaEX9PUP6csnyIrYCtGiPWBhQFhiqX4gZgsXQwnPW/X9+AaDqF8eVNaLlWcYonjRxw83IIWUPxCA/+hD+sEEHPsPSjCDvpbwUW4By41JPQl5XFEL13OYJYhlOYIOnR/ejW+i0/IYrlaP1vzcVE00By0ic2F8Tx5Gv2Ehs7xKdvQboU2kjFJx5Vz+eXJzNxRlRmQccJ82XBtnQ6WGUfQ8eLftCsCgm609c0/T0Okuz67ZsgPv5nOF8YxPAPyzJj0YghObp5KPTRTIRbNw8LCJQPZ2B3gb/WkK7VmFUAVaNV9Pq5XDCtVZeo115cRv7LpTPFKWY1FxBotnf+vOpWlJNjn9HTzd9Ueke6rsnplZQPJUTv0XNcHdivi8t5GTtJ5fTDgTrM2Avb8Oyxq8xnvqxIQqTQ7d+IJX0bZoydg3PzgW3y14z2JTZcov1J28dJyewVJQJZ9rMbtH1c/5jUOiJNBpqkKqm3239DrNdS939lvQ5aInUXfAiVIM6kl6WxOb8z4OzdqtmK1sRImQKAnEp/Vq/rrJvukTCiw5Zk1KAimiJoRff/hcZmVKlqc0roM1Rr2DXF/K1DpMEQEMaXHCAH08/O7yQoBtH+2C0us4BVHFDpATp1EVzvdGH873x19w= X-MS-TrafficTypeDiagnostic: AM0PR03MB4529:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Kk/krJAr7uVmKfBJ2h/1h2OEW80pgDULLH4MMPWW+AG9CpxpUEByAnXJ0iMPwLmRweSHprvveyANoj6m9OI4cHR5JIP9Wn1b60jJo7jcFGAc0LvgogGjwfFPSokqe/HgEs1DglxMdOvHgcvI77pzl3a315FXFd6NWQIkozLykKPwwnLfmCeFQnmfFSk16NUjAh+74Nadb4eNQz7mxU+UDTHgk+P8DLtKduRNLTJC8biRQMxSMLGMozprK04NiQxyTXVUKj4hJNVAoyFDquBdpCBk3t/gnvljpmS3gKItxowqwdGFLvB2zaLUYA+ZY551adNdf+tol+1ysYV/K3xT7+/8cjzh1MVYWKqU6agfMNIMw0MalFEobBVgUPxO4rYGfEt3+LFOT4r4HHuk1OvRPLtDWvh6yFcwhTwf2PJYFZ/a2C35e1oF/V1Ui6/NZdJA3aA9GV4CkIHdAXUvahQzAayMz9VZE/NaNK8yP9wLp7rG96wGCJI4Lu1ZbIesU1ejBY0v3ZaT8y4Wpi3HQ/F4fJ62FgcpvDWPgMF6IEkk+sa7uutQiAD/0fyl9Fj0kny1jgq/Zt7Q1Kzo6vflK4agug== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Hi5rc+1nl6SnYlHfXQiNYHrlDMF2MPv6A2E6Mkqs4tj/qnt8bcjSxWXPV9vQ3vSfCfLSgaQf62gANjpCa9TGfHe5mdMhVaGNWKSXY6tNowGHBBqiiYrmFmV3y2sDUeV2jJ2GnNVa5yyT7rD4LoEk/bjgmCn+urtTPqFPis6F8VlCi+B5nNJMJKK3KUq5tF0ddAV6K6GGPKA+schNFsVJdNgq49V3V0QvY7kHMbNsW4y7wGzcebiUPEUXBWhTdQ32Kq4ky+RbevnH6GQTzHp3Nx1yN19YgkfRojyqO6h4fqwJN406Z7fWbL+K1lkA+gp1nwXVQGRx9CKtx5JhnoIlHeQ/8AkFi620+kz0L48I9eB41MrWe8gvH2S7U5kdVZzZpIh2x093aWjYp0frMF5+z0Y+BeHmMdyymyRTqoF6wKNaQJd0fqX7eM3sXjuoCsp8VvEHIDtuFz0mgbbIa7DVJuyMLEPG1dLGaqP+fqq/+Ok7Iyh1eMaZawre5tNbKS1H2WH8cqccN75BI9FsUM2U9rCzXHx7wK81XxSgrzflhSHJePOPU8V9fxTL93U9BfeINeTXiTPHJyymlXTuZ7eTWkX7jHOi1AVyrQuXBSq0EvwbeIgeOhedFDw/agkLSJPU9hMbCzbZNgABzXLZigujVEz8Y/tLn5EUoVk3UjjlqVoqIc89drM/xZdUJGi8wXVqVuwbQ3jCFlgq2Txw5sRLUnnyttt7+RaHigBZHlJ1C6gU1tXOd9yO143PwhE/r0EDv2vWirt8KahgwEvtl3ofK+GW0o3DqSSokU0+3vTYNKeDHIgCeOtmVuOb7MAk8tnYudQ7Wnb9qEFj8hpwcsXrOxTc/y8/14JfrtxMomyVwYy3XjVkUjBYcX1tdOEdQlIiuqlJ2Hh90LIUkd/5GMaiILezXS2/h1uAllfINmcT+DD2KaukqpIM9nw3NCy4CtVFsJdARSpzP21Z5Tm139Ucqw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: abdaac7d-24eb-4601-03f8-08d9dadae116 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2022 23:33:06.5396 (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: AM0PR03MB4529 Subject: [FFmpeg-devel] [PATCH 30/31] avformat/mux: Peek into the muxing queue for avoid_negative_ts 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: oWf2BTS0Ml4j Peeking into the muxing queue can improve the estimate of the lowest timestamp needed for avoid_negative_ts in case the lowest timestamp is in a packet other than the first packet to be muxed. This fixes tickets #4536 and #5784 as well as the output from the matroska-avoid-negative-ts FATE-test. Signed-off-by: Andreas Rheinhardt --- libavformat/mux.c | 21 ++++++++- tests/fate/matroska.mak | 2 - tests/ref/fate/matroska-avoid-negative-ts | 52 +++++++++++------------ 3 files changed, 45 insertions(+), 30 deletions(-) diff --git a/libavformat/mux.c b/libavformat/mux.c index 0810b674a7..53eb56f0af 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -655,16 +655,33 @@ static void handle_avoid_negative_ts(FFFormatContext *si, FFStream *sti, if (si->avoid_negative_ts_status == AVOID_NEGATIVE_TS_UNKNOWN) { int use_pts = si->avoid_negative_ts_use_pts; int64_t ts = use_pts ? pkt->pts : pkt->dts; + AVRational tb = sti->pub.time_base; if (ts == AV_NOPTS_VALUE) return; + + /* Peek into the muxing queue to improve our estimate + * of the lowest timestamp if av_interleaved_write_frame() is used. */ + for (const PacketListEntry *pktl = si->packet_buffer.head; + pktl; pktl = pktl->next) { + AVRational cmp_tb = s->streams[pktl->pkt.stream_index]->time_base; + int64_t cmp_ts = use_pts ? pktl->pkt.pts : pktl->pkt.dts; + if (cmp_ts == AV_NOPTS_VALUE) + continue; + if (s->output_ts_offset) + cmp_ts += av_rescale_q(s->output_ts_offset, AV_TIME_BASE_Q, cmp_tb); + if (av_compare_ts(cmp_ts, cmp_tb, ts, tb) < 0) { + ts = cmp_ts; + tb = cmp_tb; + } + } + if (ts < 0 || ts > 0 && s->avoid_negative_ts == AVFMT_AVOID_NEG_TS_MAKE_ZERO) { for (unsigned i = 0; i < s->nb_streams; i++) { AVStream *const st2 = s->streams[i]; FFStream *const sti2 = ffstream(st2); - sti2->mux_ts_offset = av_rescale_q_rnd(-ts, - sti->pub.time_base, + sti2->mux_ts_offset = av_rescale_q_rnd(-ts, tb, st2->time_base, AV_ROUND_UP); } diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak index 3d8110a434..e31ce39eda 100644 --- a/tests/fate/matroska.mak +++ b/tests/fate/matroska.mak @@ -94,8 +94,6 @@ fate-matroska-dovi-write-config7: CMD = transcode mov $(TARGET_SAMPLES)/mov/dovi # the first packet (with the overall lowest dts) is a video packet, # whereas an audio packet to be muxed later has the overall lowest pts # which happens to be negative and therefore needs to be shifted. -# This is currently buggy (the timestamps are not shifted properly: -# the first audio packet has negative timestamps). # Also tests muxing DOVI. FATE_MATROSKA_FFMPEG_FFPROBE-$(call ALLYES, FILE_PROTOCOL MOV_DEMUXER \ AAC_FIXED_DECODER HEVC_DECODER \ diff --git a/tests/ref/fate/matroska-avoid-negative-ts b/tests/ref/fate/matroska-avoid-negative-ts index 5bc71c76f7..8266a4491f 100644 --- a/tests/ref/fate/matroska-avoid-negative-ts +++ b/tests/ref/fate/matroska-avoid-negative-ts @@ -1,4 +1,4 @@ -e31928477981a8ffad351379f6d5f14a *tests/data/fate/matroska-avoid-negative-ts.matroska +e18a45c95db97f7cdfae28bd002786b6 *tests/data/fate/matroska-avoid-negative-ts.matroska 3618353 tests/data/fate/matroska-avoid-negative-ts.matroska #extradata 0: 551, 0xa18acf66 #tb 0: 1/1000 @@ -12,32 +12,32 @@ e31928477981a8ffad351379f6d5f14a *tests/data/fate/matroska-avoid-negative-ts.mat #sample_rate 1: 44100 #channel_layout 1: 3 #channel_layout_name 1: stereo -0, -62, 5, 33, 63375, 0xc76606ab, S=1, 8 -0, -29, 138, 33, 46706, 0x0e08a7e5, F=0x0 +0, -61, 6, 33, 63375, 0xc76606ab, S=1, 8 +0, -28, 139, 33, 46706, 0x0e08a7e5, F=0x0 1, 0, 0, 34, 834, 0x7e7776bd -0, 5, 72, 33, 29766, 0x753c031a, F=0x0 -1, 34, 34, 34, 836, 0x14a3a0ff -0, 38, 38, 33, 19409, 0x4b948b6c, F=0x0 -1, 69, 69, 34, 836, 0xf55e9a61 -0, 72, 105, 33, 21086, 0x1b9412ce, F=0x0 -1, 104, 104, 34, 836, 0x415591f1 -0, 105, 272, 33, 62043, 0xc2356b56, F=0x0 -0, 138, 205, 33, 36175, 0x0a7df38c, F=0x0 -1, 139, 139, 34, 836, 0xe26c9bad -0, 172, 172, 33, 16028, 0xa57fcbe9, F=0x0 -1, 173, 173, 34, 836, 0xbc8c9b66 -0, 205, 238, 33, 15428, 0x9a91f357, F=0x0 -1, 208, 208, 34, 836, 0xddeb9643 -0, 238, 405, 33, 66072, 0xa542b6d7, F=0x0 -1, 243, 243, 34, 836, 0x08a494eb -0, 272, 338, 33, 34985, 0xbfd8ff45, F=0x0 -1, 278, 278, 34, 836, 0x94f09bb4 -0, 305, 305, 33, 16036, 0xfc39c6ea, F=0x0 -1, 313, 313, 34, 836, 0xd6358a3a -0, 338, 372, 33, 19893, 0x7e746f4e, F=0x0 -1, 347, 347, 34, 836, 0x76ac91f1 -0, 372, 538, 33, 77576, 0xeba2e5c8, F=0x0 -1, 382, 382, 34, 836, 0xb32a86ac +0, 6, 73, 33, 29766, 0x753c031a, F=0x0 +1, 35, 35, 34, 836, 0x14a3a0ff +0, 39, 39, 33, 19409, 0x4b948b6c, F=0x0 +1, 70, 70, 34, 836, 0xf55e9a61 +0, 73, 106, 33, 21086, 0x1b9412ce, F=0x0 +1, 105, 105, 34, 836, 0x415591f1 +0, 106, 273, 33, 62043, 0xc2356b56, F=0x0 +0, 139, 206, 33, 36175, 0x0a7df38c, F=0x0 +1, 140, 140, 34, 836, 0xe26c9bad +0, 173, 173, 33, 16028, 0xa57fcbe9, F=0x0 +1, 174, 174, 34, 836, 0xbc8c9b66 +0, 206, 239, 33, 15428, 0x9a91f357, F=0x0 +1, 209, 209, 34, 836, 0xddeb9643 +0, 239, 406, 33, 66072, 0xa542b6d7, F=0x0 +1, 244, 244, 34, 836, 0x08a494eb +0, 273, 339, 33, 34985, 0xbfd8ff45, F=0x0 +1, 279, 279, 34, 836, 0x94f09bb4 +0, 306, 306, 33, 16036, 0xfc39c6ea, F=0x0 +1, 314, 314, 34, 836, 0xd6358a3a +0, 339, 373, 33, 19893, 0x7e746f4e, F=0x0 +1, 348, 348, 34, 836, 0x76ac91f1 +0, 373, 539, 33, 77576, 0xeba2e5c8, F=0x0 +1, 383, 383, 34, 836, 0xb32a86ac [STREAM] [SIDE_DATA] side_data_type=DOVI configuration record From patchwork Tue Jan 18 23:32:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 33654 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp4236859iog; Tue, 18 Jan 2022 15:33:51 -0800 (PST) X-Google-Smtp-Source: ABdhPJx2WIEUGCMcvliyKXU61K5LctNQZ4JMdc7LwdFC8Sn+D3hdFLmVpELx/xUq6t37AUH4CBIn X-Received: by 2002:a17:906:6156:: with SMTP id p22mr22136370ejl.323.1642548831520; Tue, 18 Jan 2022 15:33:51 -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 gb6si9407193ejc.201.2022.01.18.15.33.51; Tue, 18 Jan 2022 15:33:51 -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=YNmPcepT; 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 C51B768B177; Wed, 19 Jan 2022 01:33:22 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-oln040092067031.outbound.protection.outlook.com [40.92.67.31]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 72BB968B164 for ; Wed, 19 Jan 2022 01:33:20 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N2mk2RY5aRiLB4HT507VhMPozn5QRaMmsGYtcaIIBmE02gchUsPWIUFfI6a6V3eJkM+cylnFPbG+r5iFYxYWGE279Sy5x16acS1JNfqaEBowu1JsSZ38av+GbxqhHf5DonErylg/Y/aRPhNTZF4DlfzFMfPHq4/gcji3h7dHLq/h96lfePYrxGHOGzV4YZPEXr1kzYYXfM5EypC+1N0zZQ/EVvHPOvgnxFIxKCqvPXVjvD7tr1JE9+KP0taCK/0xkalZXTwJnps/syw7ZcMbsu9taxRhxqXwKJcDhsSbauq+bk5hW7+8eMF1yEpNdDk4jHoekfzbrdQsC1wcEfxuWQ== 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=rSk5NMXxjhfQZfv1As+uXde0COrt5s4t6PiWjiKdTOA=; b=RN6fHJiV7gngq+QGZEA31gxoJk5gYg/RJ8giY61irZlwV+N2vGMt4OzzWvb56gQlcYo2MUVQswOgfdlrSc6UUcXsZnAS54F0lE1++nuec0NVtql9C0p6mVGkfqt96GUcqiwfqJ47FuzGQlQv4kmPXOJ8I9hjNYOnRAa/31ziOu5Bfhvgab0IThJq1M/C2fRNgvKWUDZFWRICl7e9sq2WessNhaU3ElsPY9hKq+EC94JI4OQdqyegDHPQ9PObmoQNHYv4aVa79FbmuQjOasd+/IOB82w+0ufa9q2JKkk/C3Uk0snjHXbAJVEsxS0ZOMZZNkER5Javc87qIHujEkaLHw== 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=rSk5NMXxjhfQZfv1As+uXde0COrt5s4t6PiWjiKdTOA=; b=YNmPcepTb3WeUW9WnZZ/MeT71nIxKwtUso+DXjWuypX9TR6e88V59lf4gLagXyix8kNod5RH3ULCahVTupVo5PkS5V0YZ+ygf9q7A9q83FpI4CHK3QRCDT2sBe8RTAriDA/0LWwaet+4rzU/vQG5UYWMuP2ic1YAhur2o9h3L4/Ajkazea0UJ3F2tHL4YG4Y/jQ+PEQ28hOTNWIlJ8X7Nsr0jaSbpXhLxAh6hMtdvrbUmQF+8PM0BZTpIGQFbEX7S1gq/VHeYS3YNyHEj6uCJQ/AL+KjspJj8Yu5Mm5YpcotJwo4Gj/0Vc4EsFpUDxPouFkzy2Uqc/iGHn7RhgkrGw== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM0PR03MB4529.eurprd03.prod.outlook.com (2603:10a6:208:c4::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4888.11; Tue, 18 Jan 2022 23:33:08 +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.4909.007; Tue, 18 Jan 2022 23:33:08 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 Jan 2022 00:32:30 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [U6kKm4OiK/pxN9WwBQmzk0EtsbxChdnf] X-ClientProxiedBy: FR3P281CA0044.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::7) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220118233230.743570-6-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 991a3cf3-f667-4f68-3d5c-08d9dadae23b X-MS-Exchange-SLBlob-MailProps: q+fD6XS3/UKDSr/w16Yq9LPkK+UFOIgJkKmZxROhBt2DoZo6u6gcthDejHvkYqTIixumCmiUdGbCHrkwX2n/N001jhILgPTCdYM7PFnl2Lp433J8tflKI+Zpv1O/GMOzOpGDHisl0TTe/5eHHMqdQBhNwqrll8dLH2j6U/d+EF6Wot3eLgqWbFEKSHnm+NUu5b1S1WASrf3Grulv083S+Rt3K9c8MOyF0wtuFUYWrOHR/8x1mpG3EKvRaZ27y8pXcbiT+JxTpSv2rY1jGDrUxU+u68LiPS0QOlGQmqMZS8DMjUvSNA6ep4u6zAb4ZpsA8TU1Jlb6N7eHDQqEtHVy+2ILzXacYLy2zaP093NpxngKgO9OyvyM66m1QFfCcgLZ5jcmemUon2FspiOjAaddMvoBRVNIte4cy3WLzBUhkE6mrXurf1RgQE5HaFzv2xovvWq+e0kadVxW5k1yrgVf4zrFhUWVCoWfkOx1D6JDczclNs/AuxzXmkamkj9FcKLfrd4O9PQ0o8CUxrgRYA/kvhzVr8f+VLPJt2q3bjxfx2ukogIf6RR56mwLzqGa1ZFjgW7RKyB62nsxiXH14ikZpiv/5K7QepDDA1fxA/f+1T3WS+wHKAnG2C2/J9/kHKNoewk5DCO52yrB7z3oPy17dCluHlRzjz3hd5Nt49HJ5YXzT/LjpUf0Pun/OraLYC5TcuU5dqucSsfelSwnusa2DA== X-MS-TrafficTypeDiagnostic: AM0PR03MB4529:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: U8dPAxRPl2r45v6K4v2L0913cP7H+xKV+zZWrMBOlah73KeDu/3BVT1oJYS7Kmps+uaYQOQ6EXyjIW2wW+7I1Qdn3wBgq/VjbvI8alA45B2AW1zYXG2VPVVmgfn0orwjjjfKIkeWPfHT1OWksu5WBf0I9xCK22qPATB+7+Kd7BdwxOBzYmDpjIwaOJYoOPPTkuQpHr9/rGN7JVw3Jdzdp21a7FaYPfM84MYoGzcoon3egd4KMLW1qFjQcv4AG4MnVYVjV4Q7RUl36NufFTFmI5Fz/xcKmBYEV8mZG2XyVSaIYARR+SpiD7R+ZAFt9DCWQKMrJL9birZ6nyRTVR+i1YD8WF+vk5lD5q2CKchfo8iLfXPG8DsKcG5Pb/DWV5Vjw9ElWJJEGk0CA8l/AvZj0jKIpGv1GrBzM2PzT4GmimeUoCzvFTj/jysvS6b5B+l5oHpXl5svj5U4l7O6np2lAYC5q74NsYF3kQYOPJdWV9hfXorooa/GD53/y/zvfx4Eg/Hs2BlW4fYD+1D/0C4XyeDMpDVH9+NldIYhHnJUWVSaIvvfnJNqbhdyZJaS8WfBxnJiR1wvH1UIuVfF9YWwjA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: c3o7U/gf0u3ow05lGzMN5MnWWsRuA8p6xKdOPi96KB3FKRbYZnKaBfox9xeyyoEiMpFfTT9qVxpXW6htqTTGKE2URckv5b58FXo60NCJDNY9WuVzNSTnLho/R2TKGXZMbsvWeMT/HTC43t3qga4gTtVYA86A+nlhIn1bxSnKJPEAo5gILjjEp0z7Jrw3jSVAR/g0OkWRdbczZyPRQrryLTdqit+2ojbGXnm3mI7nCVn3UjLT+6WOgatntDoynDaqRqbzdCp8AwZOlfesy+zxesPT0cxoswBzIh6JQYoiwPwazFnVeQniNplxB46Bha54dWw8Y5cFrhBdsPZ5HZKeOENqJjOeZTXwJbyiTxq9riKVeW8SGwTwiZJTlwkJfTNC4Hbc/ouUp7YN5ia8MuLCmzijOhK4Uv2o6VVRoeepzitEHRscP3zrmnSCNKbl2p7ae0onrrYYXVTvbbqKvUQsPS1pC2ysolDx3YcSudDOIu0quGbGIsg41UjJ/HzHujEjFh4THlbb/qFBJxGg9YN7ZwEzglQpG4sEifJF1/b+zMZoeRRkAop+pv9ISs6SwYPH8Pe4OkQKC1LhOhFnh/jRxNmsfKSm1fiMtyBLspaptL8KNNrYHE1ln4tE+pi43ZKG/h4coG4TTghGoQgUpJYNgE5eFb80399ZpqsQkIkI0lTZ3z+80sxekjm75Eo5BJNIiwAzkSmT4+UoCML/IDIqfOWdb0o2NBIf8bTLMpFC1SyNh5GhfXrq/Gly/YjiCpRh5JLYBp/IuocoKkzf9g5FeVgWRLteQjYHwws+TWDWUYV257QqalCYjvKnMSJbBJVzsHBvangs2DTe0YXXsP2UFplRpKcPWw/LJTwIVzHNwj/nD/XIAUJAWQXxzxSqxjyUAScArP+zKI5TW8tBkwNMfV7vtRyC+65liYpx14ud25GacgAB+aElc+VEuwHvy0XeiXJbTdhgDzUpPrsnkNjzfQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 991a3cf3-f667-4f68-3d5c-08d9dadae23b X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2022 23:33:08.4925 (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: AM0PR03MB4529 Subject: [FFmpeg-devel] [PATCH 31/31] avformat/hls: Remove redundant cast 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: +YrYlUT6+AaR Signed-off-by: Andreas Rheinhardt --- libavformat/hls.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/hls.c b/libavformat/hls.c index 8c526f748f..4568e72cb2 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -2024,7 +2024,7 @@ static int hls_read_header(AVFormatContext *s) if (seg && seg->key_type == KEY_SAMPLE_AES && pls->is_id3_timestamped && pls->audio_setup_info.codec_id != AV_CODEC_ID_NONE) { void *iter = NULL; - while ((in_fmt = (const AVInputFormat *)av_demuxer_iterate(&iter))) + while ((in_fmt = av_demuxer_iterate(&iter))) if (in_fmt->raw_codec_id == pls->audio_setup_info.codec_id) break; } else {