PR #20868 opened by toots URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20868 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20868.patch
This fixes PTS/DTS discontinuity on sequentialized ogg streams. >From 9656eb8a9a0f10b28b95ca35f98ad165e5e3c41a Mon Sep 17 00:00:00 2001 From: Romain Beauxis <[email protected]> Date: Tue, 30 Sep 2025 20:23:04 -0500 Subject: [PATCH] Don't reset last{pts,dts} on new sequentialized ogg streams. This fixes PTS/DTS discontinuity on sequentialized ogg streams. --- libavformat/oggdec.c | 7 +++++++ libavformat/oggdec.h | 1 + tests/ref/fate/ogg-flac-chained-meta.txt | 8 ++++---- tests/ref/fate/ogg-opus-chained-meta.txt | 24 +++++++++++----------- tests/ref/fate/ogg-vorbis-chained-meta.txt | 12 +++++------ 5 files changed, 30 insertions(+), 22 deletions(-) diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c index 9f3a92a5ea..18ca3a6f68 100644 --- a/libavformat/oggdec.c +++ b/libavformat/oggdec.c @@ -237,8 +237,10 @@ static int ogg_replace_stream(AVFormatContext *s, uint32_t serial, char *magic, os->serial = serial; os->lastpts = 0; os->lastdts = 0; + os->flags = 0; os->start_trimming = 0; os->end_trimming = 0; + os->replace = 1; return i; } @@ -879,6 +881,11 @@ retry: os->end_trimming = 0; } + if (os->replace) { + os->replace = 0; + pkt->dts = pkt->pts = AV_NOPTS_VALUE; + } + if (os->new_metadata) { ret = av_packet_add_side_data(pkt, AV_PKT_DATA_STRINGS_METADATA, os->new_metadata, os->new_metadata_size); diff --git a/libavformat/oggdec.h b/libavformat/oggdec.h index b051b651e3..f29912bca8 100644 --- a/libavformat/oggdec.h +++ b/libavformat/oggdec.h @@ -92,6 +92,7 @@ struct ogg_stream { int nb_header; ///< set to the number of parsed headers int start_trimming; ///< set the number of packets to drop from the start int end_trimming; ///< set the number of packets to drop from the end + int replace; // < set to 1 after initializing a new chained stream uint8_t *new_metadata; size_t new_metadata_size; uint8_t *new_extradata; diff --git a/tests/ref/fate/ogg-flac-chained-meta.txt b/tests/ref/fate/ogg-flac-chained-meta.txt index 5abf37dcee..877b3f3173 100644 --- a/tests/ref/fate/ogg-flac-chained-meta.txt +++ b/tests/ref/fate/ogg-flac-chained-meta.txt @@ -4,8 +4,8 @@ Stream ID: 0, new metadata: encoder=Lavc61.19.100 flac:title=First Stream Stream ID: 0, frame PTS: 0, metadata: N/A Stream ID: 0, packet PTS: 4608, packet DTS: 4608 Stream ID: 0, frame PTS: 4608, metadata: N/A -Stream ID: 0, packet PTS: 0, packet DTS: 0 +Stream ID: 0, packet PTS: 8820, packet DTS: 8820 Stream ID: 0, new metadata: encoder=Lavc61.19.100 flac:title=Second Stream -Stream ID: 0, frame PTS: 0, metadata: encoder=Lavc61.19.100 flac:title=Second Stream -Stream ID: 0, packet PTS: 4608, packet DTS: 4608 -Stream ID: 0, frame PTS: 4608, metadata: N/A +Stream ID: 0, frame PTS: 8820, metadata: encoder=Lavc61.19.100 flac:title=Second Stream +Stream ID: 0, packet PTS: 13428, packet DTS: 13428 +Stream ID: 0, frame PTS: 13428, metadata: N/A diff --git a/tests/ref/fate/ogg-opus-chained-meta.txt b/tests/ref/fate/ogg-opus-chained-meta.txt index aad9b83700..5c2b9d0d44 100644 --- a/tests/ref/fate/ogg-opus-chained-meta.txt +++ b/tests/ref/fate/ogg-opus-chained-meta.txt @@ -12,16 +12,16 @@ Stream ID: 0, packet PTS: 3528, packet DTS: 3528 Stream ID: 0, frame PTS: 3528, metadata: N/A Stream ID: 0, packet PTS: 4488, packet DTS: 4488 Stream ID: 0, frame PTS: 4488, metadata: N/A -Stream ID: 0, packet PTS: -312, packet DTS: -312 +Stream ID: 0, packet PTS: 4800, packet DTS: 4800 Stream ID: 0, new metadata: encoder=Lavc61.19.100 libopus:title=Second Stream -Stream ID: 0, frame PTS: -312, metadata: encoder=Lavc61.19.100 libopus:title=Second Stream -Stream ID: 0, packet PTS: 648, packet DTS: 648 -Stream ID: 0, frame PTS: 648, metadata: N/A -Stream ID: 0, packet PTS: 1608, packet DTS: 1608 -Stream ID: 0, frame PTS: 1608, metadata: N/A -Stream ID: 0, packet PTS: 2568, packet DTS: 2568 -Stream ID: 0, frame PTS: 2568, metadata: N/A -Stream ID: 0, packet PTS: 3528, packet DTS: 3528 -Stream ID: 0, frame PTS: 3528, metadata: N/A -Stream ID: 0, packet PTS: 4488, packet DTS: 4488 -Stream ID: 0, frame PTS: 4488, metadata: N/A +Stream ID: 0, frame PTS: 4800, metadata: encoder=Lavc61.19.100 libopus:title=Second Stream +Stream ID: 0, packet PTS: 5760, packet DTS: 5760 +Stream ID: 0, frame PTS: 5760, metadata: N/A +Stream ID: 0, packet PTS: 6720, packet DTS: 6720 +Stream ID: 0, frame PTS: 6720, metadata: N/A +Stream ID: 0, packet PTS: 7680, packet DTS: 7680 +Stream ID: 0, frame PTS: 7680, metadata: N/A +Stream ID: 0, packet PTS: 8640, packet DTS: 8640 +Stream ID: 0, frame PTS: 8640, metadata: N/A +Stream ID: 0, packet PTS: 9600, packet DTS: 9600 +Stream ID: 0, frame PTS: 9600, metadata: N/A diff --git a/tests/ref/fate/ogg-vorbis-chained-meta.txt b/tests/ref/fate/ogg-vorbis-chained-meta.txt index 60d9aeb9fa..5ec756663d 100644 --- a/tests/ref/fate/ogg-vorbis-chained-meta.txt +++ b/tests/ref/fate/ogg-vorbis-chained-meta.txt @@ -5,10 +5,10 @@ Stream ID: 0, packet PTS: 128, packet DTS: 128 Stream ID: 0, frame PTS: 128, metadata: N/A Stream ID: 0, packet PTS: 704, packet DTS: 704 Stream ID: 0, frame PTS: 704, metadata: N/A -Stream ID: 0, packet PTS: 0, packet DTS: 0 +Stream ID: 0, packet PTS: 1323, packet DTS: 1323 Stream ID: 0, new metadata: encoder=Lavc61.19.100 libvorbis:title=Second Stream -Stream ID: 0, frame PTS: 0, metadata: encoder=Lavc61.19.100 libvorbis:title=Second Stream -Stream ID: 0, packet PTS: 128, packet DTS: 128 -Stream ID: 0, frame PTS: 128, metadata: N/A -Stream ID: 0, packet PTS: 704, packet DTS: 704 -Stream ID: 0, frame PTS: 704, metadata: N/A +Stream ID: 0, frame PTS: 1323, metadata: encoder=Lavc61.19.100 libvorbis:title=Second Stream +Stream ID: 0, packet PTS: 1451, packet DTS: 1451 +Stream ID: 0, frame PTS: 1451, metadata: N/A +Stream ID: 0, packet PTS: 2027, packet DTS: 2027 +Stream ID: 0, frame PTS: 2027, metadata: N/A -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
