From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id E9B2740417 for ; Wed, 19 Jan 2022 21:30:26 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CE15E68B1AA; Wed, 19 Jan 2022 23:30:02 +0200 (EET) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075047.outbound.protection.outlook.com [40.92.75.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7149D68B192 for ; Wed, 19 Jan 2022 23:30:00 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LDQpMIVMOynhCzMWyjj+De0mo+kTG9g2UtmsfMqKKEg+sWT+VI1vClZu26/kHEtbi3rJaIJSP/4OWez8zlZ2GMhrVKwhE4g0UJiGoNv0yw0kfjpESJiY8qVsfcXRiFwvw6u3gbPY2bWIhWSrcb49dxXlSWCqvTq/BqMqNtig2Z21ky6fj2w/j0U8OpRbpREqyywuXXEtJL7IPkT/WFaZPoMytDU70EYZtdNxylrcwsU2qclWBs1g2uw63IrEEY8tGo+A7k/UlgWKgBBm1Emsez9M/lx9F5frgNH01yCUWTvXMpvP89ItQYKkJmkcp496w1DA5OeR0d7zLobIoRs5Kw== 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=0Xw0jHmpENJjN4f6a0BLjZdKs2jKmiXrj+7JAR3Y1ZE=; b=GfkZFvpx4NLr7b+Oo+0HitwpCUaOe1GNdIuMGVsmN1J54M0O++kOgusXLtmOTgn6lwpg3bGv3f6Z/t0FnRQYvmLwS3tPgx9uEwFZTtj2YHLFQHAkHzyWosj3doW6giR9ZRlnv7m70pYfTVZQR3cnTKMTzMOtjULgY+cRmK9u0tji/Bt3ns58a0hIB2gV7EnD2NM3gzZEoPrbBO01f22WSHOcH4tlaHaosPk5C/3f/YPdcZYm80EeThGN4nfIgGYfPp3JcKSfodrMf9xbDnCeLY7CW2WzZW7QjeOAuXwYXyqCEEieHRDXpe/8edqUl0r5kQws55S6bior6ReBIP3QYQ== 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=0Xw0jHmpENJjN4f6a0BLjZdKs2jKmiXrj+7JAR3Y1ZE=; b=sDJ0+7QZJUFGqtCyzs97BWh00uPUWzBt0NhS9Y4xRGLXntl8+ONADomVmsdi59lj8anKVSXz50gPbQEFAdnXmPkyupHSXNk6nsKwr8fyiIs9pV+Ix8Z0izDhCz2z1ccHPenj4jTt946qp0fReA0l/8tn5rbyPpICZC/tznoEG/sUu2a/+jYKA0LWIpH60Cq6vCiHzySqo03/ckddj7XFVy8Rs8Jz/IPzwakh8VsjaNQdrkMYURCXhpGfIP6gmeUfwLRnyC2gLRIyLW8z+XtRL6qOwaHaXnFx8BEjt9WQ2sl6mc9+C572hUvk5FknPbTFOZRcQvF8lxbHgXDdyGx9GQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by DBBPR03MB6796.eurprd03.prod.outlook.com (2603:10a6:10:207::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.7; Wed, 19 Jan 2022 21:29:58 +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.008; Wed, 19 Jan 2022 21:29:56 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 Jan 2022 22:29:39 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220119212940.1071477-1-andreas.rheinhardt@outlook.com> References: <20220119212940.1071477-1-andreas.rheinhardt@outlook.com> X-TMN: [12q8DxsQRL7rlOkzQ8euk28vOcMbuIOd] X-ClientProxiedBy: AM8P191CA0030.EURP191.PROD.OUTLOOK.COM (2603:10a6:20b:21a::35) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20220119212940.1071477-4-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 28ec0f0e-cea3-4965-c48e-08d9db92d6df X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNWEWN7T2ifwOOBerboM6zGymGJr9DniNZjWeCgkFf3ITtHCdx1b3IKMmof9kTveunq0cFT7Q/Ij8U2PGDDHXv4KT3EOAuw0gLXXS7ehG2OefAKok7Edh3s+n/5MoEAu3N+BsBpATEMf+xyfZnF+mT29xUBU3zlCmQaQX5u1FFbvunVnnp94cE8SBApv/TYjzdwIx3mi3ZT3BvSx8XrG2YBKO5AgPOeZKsT7fb2XWkRgVHtcI7t3aD9lSsRy6JcGNLORuUEQYKmoUKJi8h4XF+LDea8+eguFnPNnjpPHYPz0PFYXVibNlt0/7RS1mNdi0ZIa3lED3RsuxifjED4571J83rVRI2C6dcn2hZWCxk46Vte/uLbdswAogfYb5EatpCl7YfX/zcdnVl6D3FKmcKetAsAifFx6sB4c3smMuMo4oicZAm8Dr+oNTmDqdHYM57C3+ZWuBWTJH23QZiHaNSdQDUpJyaK6OgAN5Y5/YZzS5BJbQjwc/UyRjL+VkqDOPF2vRO4DE2O2AHFh6QJPJgz8qaeiPFj68CCNJSIqF3IuqH89gFuT6tRbzkQsBhBh0zp3FIzHlYwVNX5v6Sln1W6z00TuqVY2MXxf2+DGdbCbC/+dhaL4mJsHbmWl+wAlBAJtVLnEGSEU8Ijq562r2hXlgijrcKDV3YotY1u8Yb0sEnvmZoK+bIMmzgdTpdUudwlIYD0NDCjBqjXss9c+YM9VyUD+9+J06qs= X-MS-TrafficTypeDiagnostic: DBBPR03MB6796:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4bVqZj+nKUNoPllfzA6ZPQ5lBOq2uKvvh9DCV0wIbCe2zg34D5D1WyGU/mq0ujqzImDAExIWBwMHDEgs5HcLVu6cgELr9wV+HE3e8hbD8YhIGC53OOwwQnNN5QDTTsVv8/OWm6TZZfXSKchV8bu6VfAb8U15txwb5J7Lb9F2FXgVe7ft5HfiBateJVcslniPF3PH+K7ksD5CmvNKhO/yhAS851HrEiDzEuSA1ZX38uAMKPZpkPLkIsH0OkP0oTaBRwOL/EPu3ZbiUPkA+LI8RnVata/tEYdB/OzYnEG0BXV7Iofg/1dusWDVg5YXY1UoRLAGmCPiSJqMaQMqsIxBmVv/mPd9PUdCtY8yrNZboPgrCJmwzv3Wcvm5X1t65Y8Z2+DK9inNSvv/o7ghpGwTvtCarIoYcjlMYbPwU9W3LKtJ/KzPmnlRBL3gbYdphgxJM+HOaIeiBt7yUoqMrSNUaQh2tUVdRAALM0R/syEOUl7tgRzrVNEyXYmLVdbZ8cF4tZ/6kGYibDqx19nUgd/+jHPskHOWnAyhlX6b8f2IamZ4G9fB7g/x6EILVjeJ31LE6rwj0SgTRYgxnhFfhLrcQw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QKijWQpx7JOzxeeLoO2y7d6Rrmd1LAmrUDl42ANX0I0rVIhWKIr7AengyQhi?= =?us-ascii?Q?s6EJtjZcXLgSQTZh6UKqhMXmjm+k6JuTdkYJckD3RhqakTlP0PBdOOSYChEf?= =?us-ascii?Q?Nh4p+WM4l3hQYwrU8Nh4EyCiyoy8CIh+gI3Kn/kfbtUXBcJ+0QQEogv1Qpyu?= =?us-ascii?Q?m1BOp8OSpTHMrvr5MLD8TTlZrYUcqk2J92++ea3BIQ3YYdZbI2svaW8PVvJk?= =?us-ascii?Q?KVH7TW6OcttWyOKfvcNWT6+tGBcGNKPGkCqFjLVjwdneXvpESQEPcIt2VsAb?= =?us-ascii?Q?uwYAuOCrpquXe7iytQzB8YjRmZkvp1UggRi/AwGcw1RxH6dwmcysGLUYiLga?= =?us-ascii?Q?luetzF592jhLJL+93nhMDp0UYGfA0iP0kdbyn/WBPejjBl7lgq4c1s7RPI6O?= =?us-ascii?Q?LV3q2Hh/+T+9KtjZ+s/Qz419sU/L/KXt++mjAEuCHCcMVDBuaRDyVamGqLQ8?= =?us-ascii?Q?dAUrqAhRJbbPnusKpDBc4qrR4TAfck/Oirntmo8jsrbsBNcMi8Ezt3HFAVWw?= =?us-ascii?Q?CILXbuHbSKqnDaG/SSNqD2OnTUexJ0wF6zDbe3xcFDYu0IoWMXGNa6xF0INF?= =?us-ascii?Q?2LBaAz1wA20a0jyMs39DH7TJnBV0h6mQw5N/MnO31YS7higxjds4Y3uQfqEO?= =?us-ascii?Q?kf1PCZdb2YcKV0nTxHpNAPSyItqnPEOUh9NMdGp9AiZwGqFlnBeFQ8/9AC1d?= =?us-ascii?Q?6cENC8F0ng4rl9p1s8+9dAKe9Sry09dugDVFR4kLIQryuIubKjAIWvBsf2qh?= =?us-ascii?Q?K14ivA6BT6RfOiE2MnkPM1uoobB4kg7qmx0wNBmq5mcqAo1agMlk0LxkB2x8?= =?us-ascii?Q?pamn3EvK3BCP7nts8HMZZQnc7+nfibg3zFOWKXV7BNLVPtUnzKWKar3paCZD?= =?us-ascii?Q?2ug3sSqu8m7wRaWYEzLQDcWLyica+07Uwn7U3SWqW6FfyaRCO9Xgk/U7xsmQ?= =?us-ascii?Q?j6Q5UgjxjYZpHAPkoh1Rng=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 28ec0f0e-cea3-4965-c48e-08d9db92d6df X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jan 2022 21:29:56.8676 (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: DBBPR03MB6796 Subject: [FFmpeg-devel] [PATCH v2 5/6] 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: 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/avformat.h | 2 +- libavformat/mux.c | 21 +++++++++++++++++++-- tests/fate/matroska.mak | 2 -- tests/ref/fate/matroska-avoid-negative-ts | 2 +- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index cd253fb28e..b4b8075ae6 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1527,7 +1527,7 @@ typedef struct AVFormatContext { /** * Avoid negative timestamps during muxing. * Any value of the AVFMT_AVOID_NEG_TS_* constants. - * Note, this only works when using av_interleaved_write_frame. (interleave_packet_per_dts is in use) + * Note, this works better when using av_interleaved_write_frame(). * - muxing: Set by user * - demuxing: unused */ 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 da1fdbd5ea..784b55f6e0 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 pts). # (-ss 1.09 ensures that a video frame has the lowest dts of all packets; # yet there is an audio packet with the overall lowest pts. output_ts_offset # makes the pts of the audio packet, but not the leading video packet negative diff --git a/tests/ref/fate/matroska-avoid-negative-ts b/tests/ref/fate/matroska-avoid-negative-ts index 1b9b2f2786..02790a3985 100644 --- a/tests/ref/fate/matroska-avoid-negative-ts +++ b/tests/ref/fate/matroska-avoid-negative-ts @@ -1,4 +1,4 @@ -90cf5a330659140d47ec11208f525908 *tests/data/fate/matroska-avoid-negative-ts.matroska +804842437b2be0a1604ce33c6b08c800 *tests/data/fate/matroska-avoid-negative-ts.matroska 973070 tests/data/fate/matroska-avoid-negative-ts.matroska #extradata 0: 22, 0x2885037c #tb 0: 1/1000 -- 2.32.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".