* [FFmpeg-devel] [PATCH] Don't reset last{pts,dts} on new sequentialized ogg streams. (PR #20868)
@ 2025-11-08 18:22 toots via ffmpeg-devel
0 siblings, 0 replies; only message in thread
From: toots via ffmpeg-devel @ 2025-11-08 18:22 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: toots
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 <romain.beauxis@gmail.com>
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 -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2025-11-08 18:22 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-11-08 18:22 [FFmpeg-devel] [PATCH] Don't reset last{pts,dts} on new sequentialized ogg streams. (PR #20868) toots via ffmpeg-devel
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git