From patchwork Thu Sep 1 21:24: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: 37606 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp545443pzh; Thu, 1 Sep 2022 14:25:01 -0700 (PDT) X-Google-Smtp-Source: AA6agR5vI95gx7zIfnO4JXTLvyDxSFZcXBepzC9+ZAtLBNSujmUJYRgZgxP0ypB9z12VA+TdAVbY X-Received: by 2002:a17:907:1688:b0:730:b3ae:347 with SMTP id hc8-20020a170907168800b00730b3ae0347mr25166611ejc.756.1662067501273; Thu, 01 Sep 2022 14:25:01 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id u25-20020aa7d0d9000000b0043e8b2ed68esi128909edo.605.2022.09.01.14.25.01; Thu, 01 Sep 2022 14:25:01 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=Ctm2MRJQ; 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 D054768BA0E; Fri, 2 Sep 2022 00:24:40 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2098.outbound.protection.outlook.com [40.92.89.98]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 96EA668B9CE for ; Fri, 2 Sep 2022 00:24:38 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LgW1EUJTIYj978OpqhFcLjXfyYt1BNj5PAHfIIQv4rce6sAVDeKyQj/w3V1Oqrrw8h73mMW2ptbjUu7gLFYiVb4AgNxOBnWMUNvqGhlCcMHCI9Q5cM9zXnTcyyhfbfBfmb4b9iOn1wqFgy3F72A0vkyGsC/hQfe1GptqhWtKznAAE1FvJx+khDTFlqC2uSj++zX4vLBIjw4c3jNB4CXDclkgJnUWZLzYMteNvQn5HRJY1j4PrNUz9s8r969BUEzsLxd4JszN14jxQzjU3/cq/K0e4a55ciMb/7PbEFliLxxY8dpQtfCVve0vZfVQAQ47yYuppj1XMN0HHH9HFhOfww== 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=WAEvngIjyFZAGF39gFz4xHmBXq58MUW6AHekTNoHRH0=; b=SzJPRLR2tUfKT0hHK/6bUPAXKWfTb1FU6RBCIckKjxYNAch4xqBgKzaB018yDsuVX5ozyeB8ncS4SGE+a0ESd8bKIgH5N4ab7LH/+gQgME9KFHR7dAW8jSb5XfQ+Vn6U4ZRL4z09ZfOXV8O/7XzM0XYEW3YU0fb9S3+uyKR62OGPMg6xgTRxNf7JjRkkILZ3Dzu14rO5l46LAxDxm4DzoEkMCRuvjgR5NycKZU0D+GV7s0PndNyo6Bz8UM0XZvs5Al5DVCZYgo5nteraANd2YSr+/X830Q3uccV3/McznbkEUY1vVCfIJJV1TPvcYqkCY/IvkXIVU5Dgtr+atwQy+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=WAEvngIjyFZAGF39gFz4xHmBXq58MUW6AHekTNoHRH0=; b=Ctm2MRJQVVYoKE4qEcKO6HwiVj5D90RSOWv/kUgKmXFnWIAwvd8/A9m/UbFXRoBLaV3WaARnbnpuZQszh3u9rFKJMqGvYJZYqXR/P8Cta+OzmvECEgSB9VnRM43BK93tM1LlT31fnzpA4YXcdfsnQB9QVQ07D+naBwf3d5PDHeqx4N6IM2My2SfqZI6ujmVoFJcH/7m7vLpVXbshlzeAyaZOLINldcQcsNjlblleW2mZX/Lj652P/n6f+tcjNJp05Ge7PwSDVr3uAWCIRJnDFcOue2jjSJIMxsmI8OqGN8htFZ9SmqB8AhtrfAvXa3qjnmA331VMFtgKH7ujP3PvFg== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by PAXP250MB0424.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:287::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.12; Thu, 1 Sep 2022 21:24:28 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::90cc:8832:55f1:c7d6]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::90cc:8832:55f1:c7d6%7]) with mapi id 15.20.5588.010; Thu, 1 Sep 2022 21:24:28 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 1 Sep 2022 23:24:01 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [JHQVHIxwRrAWaJLyBA2bhrnNAF6EALXc] X-ClientProxiedBy: ZR0P278CA0185.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:44::18) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20220901212403.2622789-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 16ffe1a9-71d1-4544-cec8-08da8c605a36 X-MS-Exchange-SLBlob-MailProps: AZnQBsB9XmqZFoN70z2NlsBDiuHIk4Y3ZEfARnOOryo1X1ye+O0WDOc99iphgZbbWGRDkN/FqDY11dZrnQ0QrpnBCM+r0kvX8oms7wOpbzykAevf/Bf6kBXT6wb+ktW1qCjR4QUe1I3m0zxsRtUW95DGosyvLW+i2eF+qeNUbXs1WqkKE+r/bH39WpIZdwn6L/8+ew2WtVchx4ucibcLGW/lc9edqjf6HQjc8DfIXmjT/9DT7Sup42JMfyQS+yYN/Aid5VpiLKwmsW1Y0vw66EJzHnNzs4NXb8N8mXoZBdJTOK/6Tuzg4QDtni7HrXDoHLgRS0sbOjPOKTbcoo/xzgY9dUnz22yzjXR/e79oRujaYv4R58aLLZHohT48pXG94DAgiKyHVYEfZBgLvUaDYcVnJWUDjZF627dIHqu0GQLxxHwLbar0MKUVxa2R8OMTnZYyyGqx5iKcc54PI9H0rN808w2fLk/EbX6L/oFYpx9AuExzrM48raGCcZfNhMdhR8tGfRlNqfuqtJhW4ohp/nJPeUzeGIbB7H/PZ4y2oU8rsQklJvH3ufcabV9nXlpn/2mtBWA9mtYVyVQ6OYGARM5XEPlGKrhx1sEyYiOD8Gd/5hNvSxRXhEMt+e5afmJcUA4b86FWcVW6npBPskpmYN98WXwFpVlZmU1Ry7aydSeQ3FYxXy9NGVJPR48EDhXonZ4l595qptojqv0EvCPU1/BEPoaNqCDmvK3S/BhKkNO7OUhA9JilipzkfJ+pNYrHFcR2aXaeDWg= X-MS-TrafficTypeDiagnostic: PAXP250MB0424:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VBP+cZWVkAdvhurSOLniX9aN8kuNW6too533VzDhyCHQMLEr5LQ45OKStQ0hXg5y162YTjyLkqxcjJLa8ET4aP+j7kecKznn0Vs+8+47LnBHBf2FRf/7Wj32TOeLwcacsAN0TNGcUDgH7XhMUQJP5G6Jwm2ToxFms9j3Bz2ihku0WY746LGpoKhGtdTNdM7czrAcP+f6i6lVG8NiuAFayE3fYUMqZotBpny5U0GluM3EiBNjdufy6Re9BrJXPKb6iM16K0sgPgR3m63qZjYWbu31RQ6qLgcjm8s4tytofxpE8UHsTS0W4x0h7xRORULSAj7ZeVfPIe1N5UhJ9xVtrWEVselEMq4d2ey2Gxu/+WLm8kmiBH84+7rC+lH5gbFjaklFRKJwnJCN/wQlFoxqC23R6MIaz/xJbNQuNDVUZDRKvKs/zmFKjC3kDB9fNosYPgfLYwsCR30x7tyKPqOI2W3npSF/L9HYLhLhBRreua0sSS3+PVx0LUae0uW69bC3ykzgfNlU+voDrnXsbg5NjNDNdicN6s0a/xsJ+bTN1IqXBWljxM71gG22rkpfLgUNH9tQ1VYFZZzXxFNtTfanmRToEjN7c3jYrMddTlMshZlIU6PBkRwg/6zj8NWKxRdRp9bFw7eG5QQqzcoGXZz0qA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /iZqhGvry3nQDbGSVyRDm8bL0q53NGlCL1X1ZB8H6nKv6fHxRrbBIwry0yZNs+0aoPERoB6Xw8Qu+a6Iha7C/51djflteOAVEhB8E/1yOEsLwqx7fI6HatajVtLZIXcTcNXzsLvCW1Qc5F2sbyGJYIyzWISDGMatx/86TfFStn7xKY+h4OxG8A35rJkbBTqDtqJFE23067DpOI6dNzXhYVGLDBtrDem5evIHqffqi+yJzHERh7GAgfXnQ3muFY8DZCF/n+0nZVehCsUPe3j7aIZggihzSBGxr7dWQTaeumesrnTpFP1ZxMPVzlut4IysatKNRkG0yPBoklj9O6enUZa5oKKoz9cOwsfRUSUPuBBcUSbsxENQiCjSzs0grtTbijioK05XlX1asTJvGg6G/YD9aiXlu3wlhybC7Nifz6S1uAt1362VHyF26AHqFfGzFBzn4xbfYKG262JCao1FnbOL/FvFiMpulAUktkp4oBvBbNSJkhecfMGCcVdQ8hHc7p9VEBtYt9L7NsBvB3TEPYRoMmyzyCAyvk7AETyrosv/btfOb5lp+0jJ458mQ6shbgyyoKPOp4chGG0UbVbVspQtw3z1baeE1A3RtWlXu38cM7YYryS+FRKY4PdTZFN5P1gxKf2qZQ/wGSsxpzpS5nI6Z7Otyui4xfErV48kS5T0511dk7aW1+Ec6fQAzwJUC8kgAa2aWbiu36c2KpNw0JSJIhGRTtE90GEyHud64CogtNQDChWbvcPYQ5CYyOUFftwkQX7Tbh5PNBZD4nr+7qCLBlIkTbXI4HUlGWdGvTrz0gd2OJz1ieH+2eIPDZYN0ic93h256SY+PLStz6d2aQvEEhY3NKHnrpN++Q/RMM9X4xY8TBUpemb9iARTceLbkTanIyees2fhqhvPUQxQ6s09SaY41vD88gV4P5FQOS01nOLa7AB4GJQjtyG+DF6eJ9jQ0FKsinw21xIf6IFPymkXaW7RrdtGgLA/GOto5mVvnc7tgDwDPpMc76QTqmlcktP77g/u84zsfh7bEeT3KEXHxHj6YGZOaIKFM3CQpxhXgx79IZlE0GIjR4uP+WR1uQ0jZZNtu6kYldhxewRPESPNQEOcf4pAdozvJ+PAd/7W3TQzEZw4GpCGsudUiV9bz1kcU5rICXI35nH7vhdSZ+cKOClnXKrdtgnH8XdObnG73/PvVkZajS3c2WmDovzqNCljsUd7vD7DVWlGT5wng92S2Ncs77yxO1+0kgqBJCK/qP20Hkeb74HWjJCO5170P0e0ZhPc+Ori06MuxhF9kyf2Oa9QNf1Z0kUgSdKUwTk= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 16ffe1a9-71d1-4544-cec8-08da8c605a36 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Sep 2022 21:24:28.6512 (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: PAXP250MB0424 Subject: [FFmpeg-devel] [PATCH 6/8] avformat/mux: Allow muxers to set custom min timestamp 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: 2JEVHEshUPck Matroska requires pts to be >= 0 with a slight exception: It has a mechanism to deal with codec delay, i.e. with the data added at the beginning that does not correspond to actual input data and should be discarded by the player. Only the audio actually intended to be output needs to have a timestamp >= 0. In order to avoid unnecessary timestamp shifting, this patch allows muxers to inform the shifting code about this so that it can take it into account. Signed-off-by: Andreas Rheinhardt --- libavformat/internal.h | 7 +++++++ libavformat/mux.c | 7 +++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/libavformat/internal.h b/libavformat/internal.h index 9b07cfb271..23757dc4fc 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -310,6 +310,13 @@ typedef struct FFStream { */ int64_t mux_ts_offset; + /** + * This is the lowest ts allowed in this track; it may be set by the muxer + * during init or write_header and influences the automatic timestamp + * shifting code. + */ + int64_t lowest_ts_allowed; + /** * Internal data to check for wrapping of the time stamp */ diff --git a/libavformat/mux.c b/libavformat/mux.c index a3b50dadb6..5d89458f82 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -632,6 +632,8 @@ static void handle_avoid_negative_ts(FFFormatContext *si, FFStream *sti, if (ts == AV_NOPTS_VALUE) return; + ts -= sti->lowest_ts_allowed; + /* 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; @@ -640,6 +642,7 @@ static void handle_avoid_negative_ts(FFFormatContext *si, FFStream *sti, int64_t cmp_ts = use_pts ? pktl->pkt.pts : pktl->pkt.dts; if (cmp_ts == AV_NOPTS_VALUE) continue; + cmp_ts -= ffstream(s->streams[pktl->pkt.stream_index])->lowest_ts_allowed; 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) { @@ -669,7 +672,7 @@ static void handle_avoid_negative_ts(FFFormatContext *si, FFStream *sti, pkt->pts += offset; if (si->avoid_negative_ts_use_pts) { - if (pkt->pts != AV_NOPTS_VALUE && pkt->pts < 0) { + if (pkt->pts != AV_NOPTS_VALUE && pkt->pts < sti->lowest_ts_allowed) { 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", @@ -678,7 +681,7 @@ static void handle_avoid_negative_ts(FFFormatContext *si, FFStream *sti, ); } } else { - if (pkt->dts != AV_NOPTS_VALUE && pkt->dts < 0) { + if (pkt->dts != AV_NOPTS_VALUE && pkt->dts < sti->lowest_ts_allowed) { av_log(s, AV_LOG_WARNING, "Packets poorly interleaved, failed to avoid negative " "timestamp %s in stream %d.\n"