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