From patchwork Sat Nov 27 15:16:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 31761 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:d206:0:0:0:0:0 with SMTP id q6csp3763933iob; Sat, 27 Nov 2021 07:17:26 -0800 (PST) X-Google-Smtp-Source: ABdhPJzq97qrg5mW4Vu8hHvMJ2KwJMHL+DqQ7JTAOGzmXkWM++CAIZn3Smqg8wIEQq4FYv6mBM2i X-Received: by 2002:a05:6402:2790:: with SMTP id b16mr57504750ede.24.1638026246772; Sat, 27 Nov 2021 07:17: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 dt13si20763613ejc.475.2021.11.27.07.17.25; Sat, 27 Nov 2021 07:17: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=QD5dTncN; 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 C94B468A927; Sat, 27 Nov 2021 17:17:21 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-oln040092066083.outbound.protection.outlook.com [40.92.66.83]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C8E0368A3B9 for ; Sat, 27 Nov 2021 17:17:14 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kTT2WcQ9YOxMiQG5QxeM7EuOGKMVe6zvjKDYyo1mX+d/ofub76EYQltWkQBgWG4fs+sp3SkpWxupG9jL7HunpwoOr+UzvyNATE8d+MeDeO1VXVXSubFW3X3OUeUOc9fz9Imu/+fvTHSiRx3xTK303tqpLpJ5VG3X+wvgp0XUdQWreiOpzr54ImK70OjJjc99nEDWPSGnUYlSkBDNaCZ7cyZmk2gcWLdgOlp7bdy8MU2r1200HSkScQ+0WzRvaRrYgQSD6H8Y6Q1UlF9yc7gfF6xPns7JfzztIPLAvQvPbo5IhRGeZgGZKVbWjNKZGmIFz4HIMBa5TKGPrePACbGIyA== 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=fOs/UCXtlC+dJgCHO5RwMiv3Wn6GBdyLRVODJSFeh/M=; b=MNk180Zcz+tbYwZBE5OmogLk20vLGh7Sh2TKE4NnoMYIJL57qssd/taq3ElQuAsDGzQ3ddPO8fy78Oui4MlbR6AO3pFiHHXALW0xgzanyYFcdHT54iFroep+JwIfnUzURuIzW5nT2XmfwvwW2Gfq58xdb/aV8+EcUjOBcJK84TLSpg+tezNXqHpqpqVvYZimPGmH2sw8H1ysn1okHUFpKGQnJD3EFn/PUXJGgOA7x8QwivKlAiPe6u7ShdtyjXcjg4xi7zaaFEY6PUBrageJBlyurGAW9lkJUoqLL35p7ZP8u+IuA2frpGw/1Uct/KWiBzMUcRTTjOFQ0saYxPe6dg== 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=fOs/UCXtlC+dJgCHO5RwMiv3Wn6GBdyLRVODJSFeh/M=; b=QD5dTncNfqAKaw42ZlDoWURRxy4lIMQ7dwJ8azcoyxHQq4X0J5sFGdGikK7RarZsxS6TzSoqSMm7dq3hSdBZFyIsjX1CGQparIFrk4qM96wZP5FkSExnhAPAMVEfsN9xPOpUKzVNGuJ70XNMpe7p8J1TWznCDgOw5ThaCvPzbqXNKqr2KyjoH0bPRn+Vue5gW3IW9kUDjPv4r9j7g+ZPb5Bj083nHOLs+3phISy71jOsx5/3kujTp4LCamlVQOUTdXEScdOnuCpD5u8D7JfnfOKruZo4Bgqq2JDLPiH7fx6R2Kmpi/Mh+a0ywHG087adtrXyzxlM7f4A2M2k9C2I1A== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM5PR03MB2849.eurprd03.prod.outlook.com (2603:10a6:206:18::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4713.22; Sat, 27 Nov 2021 15:17:12 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::700f:d70b:3bb8:4d51]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::700f:d70b:3bb8:4d51%9]) with mapi id 15.20.4734.023; Sat, 27 Nov 2021 15:17:11 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 27 Nov 2021 16:16:59 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 X-TMN: [rOgCg1Bo0oV5e98kSsRSC5WXNHXB7n0C] X-ClientProxiedBy: AM6PR08CA0037.eurprd08.prod.outlook.com (2603:10a6:20b:c0::25) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20211127151659.417522-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.192.248.74) by AM6PR08CA0037.eurprd08.prod.outlook.com (2603:10a6:20b:c0::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.21 via Frontend Transport; Sat, 27 Nov 2021 15:17:11 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1a7dbe9f-a158-4650-9566-08d9b1b8fc58 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiRXtZoZrmtOG4tyXYnBII9eTlC/LCYDFlREqJeQ90SK+FI05zdD2/lbcfTW75GQNCDRj34GV83AVUYLu60xvq5+pANGc96GyjhVrVkHLQl2ncxvto7Vl4INdzSVrcwMKCI9MuTRa4rwKm1I/5V3TTZA9kX+OqJW+wRATtkJsvEL6Bjbvv6HEeaWDRRjukGlVrXPUgoZiA7gCs2bk9xz/C4YE7q+mxJwcWBEWH5YnFHTz2NlCt3XCc5z5mN1TCUIYMKYVkOMDO5BIhD9V1887qy+FYd2NlaJwuCAtntEdTKI7hgP9Ko6sLik0XCX0vVg2eOU89f2fyc3+5kWd5yNsRx37/mGR/9n8bEbHDOXzjaqHKOAhXi2l9Jo9rVsnRvHpoH7/ZbijctTFX4acQ7MyE3joClzXOIdI4jYY2e38RcwKTBx+tALRagQY9ostkMq170DflcbjLqYamk6E6cxpo112X+66loHQ5/Wo87mL62qZXAMLf+8UMAwwsgIflAjXY2v+UPkhY9DueHXK/IM7qJCePu7x0DYQ+6V5TucVE2R6UQtgkwoEbSQ952rUX9HS74cYx3zV5DO+oVx8HoM2dmhcmnJk5/m3ESd6J72+orIAXcXZ4irUXxfluA7W0UKk05KaXx8C03820U8OCQAO+ahQ4OyUR9CYEOSEwXE0LJZgPLblwAepX7wwSe7Q3TNe/W29Q7KnHO4/sx+MCYpeQIqGrROi+oVjKy18Fizd0gHfmt6jgx9scGRlHvKfpnZBdQ= X-MS-TrafficTypeDiagnostic: AM5PR03MB2849: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +iWagi6QQ2y3ERJfWbqpwzTmREl/+x7j8buGJ1f8t7KJrGxQEF/jt+zUSFO/Z5/Hu6uX7gqkKHWJETuQAH/8qHbucF3C+ZijtbRsfulN9T43PuXvURcNtkvKtr/duBRGsN/WSX7OGYSg6YRWK9QyO1YGKVKGk1GhKvrMThoDgaYUm7wXVuCAybMuQcLmdqTF/rnQdBUvbCwRJDA4zuPCaLyBEV45QzytaJAkcVrYE97QznwDTIbBDUkCuZMQwOcxs40V18HixzzaFy/x2FmxR75YqYgIwzcvYSbO/D7uMHxRwJaDKdKcqz/Cd28S8OC/doiZGvxtTJFIV3SnbCadGCUbCusR7+9pfmGFL7Q6oFwPr8sWhk9Qb1dfBBewV/dUP9qvgjqW2QJ53D47ikkp7IIfqHzsGcfFr7X7pqiF6IlSHETyyJKLuFUuhr1zFr1ngbqPojazuL6ni1rJNI1pJx5eqB1Yn55HXbmlFOHfUUBKC78eTZiSoKoTfitZ7/Lx+j1GjCev4iGPprxz3fxdi7nbQwfLMy0/9Ovji8WVs+aRISOy7apiIaiN3wFm5s6d0jCPZLpXjJoKXrhy/+ftQg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 7UwzbHHi+DRcUYXwpcV5o7uienL3ZoVM8PnIyIh7/8U88H3YfxjewljAgtTDdrvKS+I0/V0LFXlUovLnn7qlH9RAA9nKYFkchg2hjHMgPpEBssmSbaQlenF1+uCIkqFzriBw/NieHKZQMGiyiNdWvnqcGqpvzw5vqbkP8GmNLlNPadG8ql0awhlgCzgCEkNNOLPd2bo3S4M6THMc8NOPyuhK+p9ABxqVRNZtitaGZmOY9c6Bgjrj5GhTmVuJAdAP0bgBTKHcB56qgadVyeWRbhDI99urGJUAK9nnZ3EL5jL4ncE3UnbzdWta2e0r4DaqAODU4HKP2yOy6sNTVLRwNDYucvXNBbYr6mkx4onO6XfB0VRqH4mrQV1hAw85qJZX7KKVVPbfMiIEJdY19OPkWioAuXbAJ8dgJ7DbKatBwcsX/DWUYq014LEtbR4SQ8rPhOPk65X91PjqCZYJA6PWIJzdHjnu1penCSqhB7rtoZ5FTY9Jm7MnmXv71T0jNnsJAG3/GQXMJrqhVsPpVJB7aQC1/wXoSJxUubWKC8UvJG5tMvooZsPZNigLUOb2ikxIEVM8WqPowrk+k1UFrx/RPXPRJp7r+5cqz6HRYjuAQ/pj5ag9uh2XpqghCR5JIFFA1rtH9Sne3NqqRFS59nyi1awaCY2rA9yuaYpmMNTsOgrYDhI7rT8Mh/tH+YEDi4VdCbeAhG0Jxl2YR9vZPjxVgP2kUrLIhMNlidO+fj+myXV1JYUIwx5nVP7/5VnjzkBFiVplzuWsPOWcLFEyHZibRndrgtNmLO7NhMhkoOvtyX8OsMRVg8y4K1U9ExhNNT0QWfSrkF6qgwAFynCh+rkTDJ4D6HZdf763ynnFgI7D6xYfQjvScXOpHjwL8meYYUY6U9TZLM/z3h40wVxiI8da8yCpxESf7pYXGswm9id2rPC3kbSGdVWhSR8SZmCZ9G0ePMqak1GrOGPCrQ+w850+uA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1a7dbe9f-a158-4650-9566-08d9b1b8fc58 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2021 15:17:11.8017 (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: AM5PR03MB2849 Subject: [FFmpeg-devel] [PATCH] avformat/matroskaenc: Sort cues entries by pts 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: 76tv+WIgNM2X Currently they are ordered as-written (i.e. by increasing position); in case av_interleaved_write_frame() is used, this is (mostly) the same as ordered by increasing dts. Yet the Matroska specification strongly recommends (SHOULD) that the CuePoints be sorted by CueTime. mkvalidator warns when they are not. Therefore this commit sorts them accordingly. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index f08ead0a96..8c4cf4024a 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -533,6 +533,7 @@ static int mkv_add_cuepoint(MatroskaMuxContext *mkv, int stream, int64_t ts, { mkv_cues *cues = &mkv->cues; mkv_cuepoint *entries = cues->entries; + unsigned idx = cues->num_entries; if (ts < 0) return 0; @@ -542,11 +543,19 @@ static int mkv_add_cuepoint(MatroskaMuxContext *mkv, int stream, int64_t ts, return AVERROR(ENOMEM); cues->entries = entries; - cues->entries[cues->num_entries].pts = ts; - cues->entries[cues->num_entries].stream_idx = stream; - cues->entries[cues->num_entries].cluster_pos = cluster_pos - mkv->segment_offset; - cues->entries[cues->num_entries].relative_pos = relative_pos; - cues->entries[cues->num_entries++].duration = duration; + /* Make sure the cues entries are sorted by pts. */ + while (idx > 0 && entries[idx - 1].pts > ts) + idx--; + memmove(&entries[idx + 1], &entries[idx], + (cues->num_entries - idx) * sizeof(entries[0])); + + entries[idx].pts = ts; + entries[idx].stream_idx = stream; + entries[idx].cluster_pos = cluster_pos - mkv->segment_offset; + entries[idx].relative_pos = relative_pos; + entries[idx].duration = duration; + + cues->num_entries++; return 0; }