PR #25270 opened by dalecurtis URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25270 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25270.patch
Commit 63b7e4cefa91 stopped setting st->start_time on the BOS page while shifting the priming packet's timestamp by -ts_offset. Because the priming packet produces no PCM output, actual audio begins at the unshifted timestamp (0). Leaving start_time unset caused ogg_get_length() to subtract the negative pts from st->duration (inflating duration by ts_offset) and update_initial_timestamps() to set a negative start_time. Set st->start_time to os->lastpts on the BOS page before subtracting priv->ts_offset. # Summary of changes Briefly describe what this PR does and why. <!-- If this PR requires new FATE test samples, attach them to the PR and list their target paths below (relative to the fate-suite root). Attached filenames must match the sample's filename: ```fate-samples # e.g. vorbis/new-sample.ogg ``` --> >From cc882162990e99e4bfe6059ae809cc90e8f28ce8 Mon Sep 17 00:00:00 2001 From: Dale Curtis <[email protected]> Date: Tue, 20 Oct 2026 21:00:21 +0000 Subject: [PATCH] lavf/oggparsevorbis: set stream start_time before applying ts_offset Commit 63b7e4cefa91 stopped setting st->start_time on the BOS page while shifting the priming packet's timestamp by -ts_offset. Because the priming packet produces no PCM output, actual audio begins at the unshifted timestamp (0). Leaving start_time unset caused ogg_get_length() to subtract the negative pts from st->duration (inflating duration by ts_offset) and update_initial_timestamps() to set a negative start_time. Set st->start_time to os->lastpts on the BOS page before subtracting priv->ts_offset. --- libavformat/oggparsevorbis.c | 5 +- tests/ref/fate/limited_input_seek | 2 +- tests/ref/fate/mov-mp4-chapters | 39 +++++++------- tests/ref/fate/ogg-vorbis-bear | 2 +- .../fate/ogg-vorbis-initial-padding-chained | 6 +-- tests/ref/fate/ogg-vorbis-libvorbis-1s | 4 +- tests/ref/fate/ogg-vorbis-libvorbis-30s | 4 +- tests/ref/fate/ogg-vorbis-ts-seek | 6 +-- tests/ref/fate/ogg-vorbis-ts-seek-1.5s | 6 +-- tests/ref/fate/webm-dash-chapters | 54 +++++++++---------- 10 files changed, 66 insertions(+), 62 deletions(-) diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c index b4a1cfb509b..ef91a076f9a 100644 --- a/libavformat/oggparsevorbis.c +++ b/libavformat/oggparsevorbis.c @@ -500,8 +500,11 @@ static int vorbis_packet(AVFormatContext *s, int idx) /* Initial position shift to account for encoder delay, or page scan * to recover the page start timestamp after a seek. */ if (bos) { - if (os->lastpts != AV_NOPTS_VALUE) + if (os->lastpts != AV_NOPTS_VALUE) { + if (s->streams[idx]->start_time == AV_NOPTS_VALUE) + s->streams[idx]->start_time = os->lastpts; os->lastpts -= priv->ts_offset; + } if (os->lastdts != AV_NOPTS_VALUE) os->lastdts -= priv->ts_offset; } else if (os->page_start && os->lastpts == AV_NOPTS_VALUE && diff --git a/tests/ref/fate/limited_input_seek b/tests/ref/fate/limited_input_seek index 95f50a107fd..0b4500ca380 100644 --- a/tests/ref/fate/limited_input_seek +++ b/tests/ref/fate/limited_input_seek @@ -1 +1 @@ -e1068afb583b5f21a6faff94b458fd8f +6e30db839c32436310270b69e842f096 diff --git a/tests/ref/fate/mov-mp4-chapters b/tests/ref/fate/mov-mp4-chapters index 067169f008c..02f267a0fb2 100644 --- a/tests/ref/fate/mov-mp4-chapters +++ b/tests/ref/fate/mov-mp4-chapters @@ -1,4 +1,4 @@ -d3560e9ac82b30c4f59f357b94124a71 *tests/data/fate/mov-mp4-chapters.mp4 +f0289770c1fb126b195755ba7ccc1f50 *tests/data/fate/mov-mp4-chapters.mp4 111288 tests/data/fate/mov-mp4-chapters.mp4 #extradata 0: 3469, 0xc6769ddc #tb 0: 1/44100 @@ -6,43 +6,44 @@ d3560e9ac82b30c4f59f357b94124a71 *tests/data/fate/mov-mp4-chapters.mp4 #codec_id 0: vorbis #sample_rate 0: 44100 #channel_layout_name 0: mono -0, 0, 0, 256, 28, 0xefcf103e -0, 256, 256, 1152, 198, 0xfbbe5eb5 -0, 1408, 1408, 2048, 198, 0xabd95c6c -0, 3456, 3456, 1152, 41, 0x954b12a5 +0, -256, -256, 256, 28, 0xefcf103e, F=0x5 +0, 0, 0, 1152, 198, 0xfbbe5eb5 +0, 1152, 1152, 2048, 198, 0xabd95c6c +0, 3200, 3200, 1152, 41, 0x954b12a5 +0, 4352, 4352, 256, 41, 0xbccd1463 [CHAPTER] id=0 time_base=1/44100 start=0 start_time=0.000000 -end=220765 -end_time=5.006009 +end=220500 +end_time=5.000000 TAG:title=start [/CHAPTER] [CHAPTER] id=1 time_base=1/44100 -start=220765 -start_time=5.006009 -end=463315 -end_time=10.506009 +start=220500 +start_time=5.000000 +end=463050 +end_time=10.500000 TAG:title=Five Seconds [/CHAPTER] [CHAPTER] id=2 time_base=1/44100 -start=463315 -start_time=10.506009 -end=661765 -end_time=15.006009 +start=463050 +start_time=10.500000 +end=661500 +end_time=15.000000 TAG:title=Ten point 5 seconds [/CHAPTER] [CHAPTER] id=3 time_base=1/44100 -start=661765 -start_time=15.006009 -end=875606 -end_time=19.855011 +start=661500 +start_time=15.000000 +end=875341 +end_time=19.849002 TAG:title=15 sec - over soon [/CHAPTER] diff --git a/tests/ref/fate/ogg-vorbis-bear b/tests/ref/fate/ogg-vorbis-bear index 3c4028cd20c..9cbed52d7a8 100644 --- a/tests/ref/fate/ogg-vorbis-bear +++ b/tests/ref/fate/ogg-vorbis-bear @@ -92,7 +92,7 @@ nb_streams=2 nb_programs=0 nb_stream_groups=0 format_name=ogg -start_time=-0.005805 +start_time=0.000000 duration=1.011519 size=59943 bit_rate=474083 diff --git a/tests/ref/fate/ogg-vorbis-initial-padding-chained b/tests/ref/fate/ogg-vorbis-initial-padding-chained index 1003b3b395b..afc04834775 100644 --- a/tests/ref/fate/ogg-vorbis-initial-padding-chained +++ b/tests/ref/fate/ogg-vorbis-initial-padding-chained @@ -140,9 +140,9 @@ nb_streams=1 nb_programs=0 nb_stream_groups=0 format_name=ogg -start_time=-0.002902 -duration=0.032902 +start_time=0.000000 +duration=0.030000 size=7151 -bit_rate=1738739 +bit_rate=1906933 probe_score=100 [/FORMAT] diff --git a/tests/ref/fate/ogg-vorbis-libvorbis-1s b/tests/ref/fate/ogg-vorbis-libvorbis-1s index 038b9f3e3d8..333e9afd75b 100644 --- a/tests/ref/fate/ogg-vorbis-libvorbis-1s +++ b/tests/ref/fate/ogg-vorbis-libvorbis-1s @@ -56,7 +56,7 @@ nb_streams=1 nb_programs=0 nb_stream_groups=0 format_name=ogg -start_time=-0.002902 -duration=1.002902 +start_time=0.000000 +duration=1.000000 probe_score=100 [/FORMAT] diff --git a/tests/ref/fate/ogg-vorbis-libvorbis-30s b/tests/ref/fate/ogg-vorbis-libvorbis-30s index 299267ed0b0..d2b7877bdb0 100644 --- a/tests/ref/fate/ogg-vorbis-libvorbis-30s +++ b/tests/ref/fate/ogg-vorbis-libvorbis-30s @@ -56,7 +56,7 @@ nb_streams=1 nb_programs=0 nb_stream_groups=0 format_name=ogg -start_time=-0.002902 -duration=30.002902 +start_time=0.000000 +duration=30.000000 probe_score=100 [/FORMAT] diff --git a/tests/ref/fate/ogg-vorbis-ts-seek b/tests/ref/fate/ogg-vorbis-ts-seek index 779dd1e9956..4b1828b9e93 100644 --- a/tests/ref/fate/ogg-vorbis-ts-seek +++ b/tests/ref/fate/ogg-vorbis-ts-seek @@ -64,9 +64,9 @@ nb_streams=1 nb_programs=0 nb_stream_groups=0 format_name=ogg -start_time=-0.002902 -duration=3.036009 +start_time=0.000000 +duration=3.033107 size=40295 -bit_rate=106178 +bit_rate=106280 probe_score=100 [/FORMAT] diff --git a/tests/ref/fate/ogg-vorbis-ts-seek-1.5s b/tests/ref/fate/ogg-vorbis-ts-seek-1.5s index 779dd1e9956..4b1828b9e93 100644 --- a/tests/ref/fate/ogg-vorbis-ts-seek-1.5s +++ b/tests/ref/fate/ogg-vorbis-ts-seek-1.5s @@ -64,9 +64,9 @@ nb_streams=1 nb_programs=0 nb_stream_groups=0 format_name=ogg -start_time=-0.002902 -duration=3.036009 +start_time=0.000000 +duration=3.033107 size=40295 -bit_rate=106178 +bit_rate=106280 probe_score=100 [/FORMAT] diff --git a/tests/ref/fate/webm-dash-chapters b/tests/ref/fate/webm-dash-chapters index 9fcaec0dbe0..6b4fc9ea6f7 100644 --- a/tests/ref/fate/webm-dash-chapters +++ b/tests/ref/fate/webm-dash-chapters @@ -1,5 +1,5 @@ -b72cac0fe6048d70685a43965c2c87c6 *tests/data/fate/webm-dash-chapters.webm -111155 tests/data/fate/webm-dash-chapters.webm +ef1102edcd5393536206f921e02caf56 *tests/data/fate/webm-dash-chapters.webm +111153 tests/data/fate/webm-dash-chapters.webm #extradata 0: 3469, 0xc6769ddc #tb 0: 1/1000 #media_type 0: audio @@ -9,65 +9,65 @@ b72cac0fe6048d70685a43965c2c87c6 *tests/data/fate/webm-dash-chapters.webm 0, 0, 0, 5, 28, 0xefcf103e 0, 6, 6, 26, 198, 0xfbbe5eb5 0, 32, 32, 46, 198, 0xabd95c6c -0, 78, 78, 26, 41, 0x954b12a5 -0, 104, 104, 5, 41, 0xbccd1463 +0, 79, 79, 26, 41, 0x954b12a5 +0, 105, 105, 5, 41, 0xbccd1463 0, 110, 110, 5, 44, 0x4fa218a1 0, 116, 116, 5, 43, 0xf87716d4 0, 122, 122, 5, 32, 0x0fdc1057 0, 128, 128, 5, 67, 0xd5352244 0, 134, 134, 5, 68, 0x36e91faf -0, 139, 139, 5, 57, 0xe6f51928 +0, 140, 140, 5, 57, 0xe6f51928 0, 145, 145, 5, 49, 0x3bb416e1 0, 151, 151, 5, 54, 0x678f1777 0, 157, 157, 5, 57, 0x56601ef3 0, 163, 163, 5, 52, 0xc0fe1a12 -0, 168, 168, 26, 236, 0xfe396f02 -0, 194, 194, 46, 208, 0x018e62d3 +0, 169, 169, 26, 236, 0xfe396f02 +0, 195, 195, 46, 208, 0x018e62d3 0, 241, 241, 46, 223, 0x9fa76917 -0, 287, 287, 26, 46, 0xd8c314f9 -0, 313, 313, 5, 46, 0x199018bc +0, 288, 288, 26, 46, 0xd8c314f9 +0, 314, 314, 5, 46, 0x199018bc 0, 319, 319, 5, 46, 0xbe8314cd 0, 325, 325, 5, 45, 0xe0ad1622 0, 331, 331, 5, 43, 0xe52a1659 0, 337, 337, 5, 58, 0xd5e01f9c -0, 342, 342, 5, 67, 0x5bbc2201 +0, 343, 343, 5, 67, 0x5bbc2201 0, 348, 348, 26, 226, 0x04887569 -0, 374, 374, 46, 217, 0x4b6564ab +0, 375, 375, 46, 217, 0x4b6564ab 0, 421, 421, 46, 211, 0xb7e868da 0, 467, 467, 46, 198, 0x7bf65d8a [CHAPTER] id=1 time_base=1/1000000000 -start=6000000 -start_time=0.006000 -end=5006000000 -end_time=5.006000 +start=0 +start_time=0.000000 +end=5000000000 +end_time=5.000000 TAG:title=start [/CHAPTER] [CHAPTER] id=2 time_base=1/1000000000 -start=5006000000 -start_time=5.006000 -end=10506000000 -end_time=10.506000 +start=5000000000 +start_time=5.000000 +end=10500000000 +end_time=10.500000 TAG:title=Five Seconds [/CHAPTER] [CHAPTER] id=3 time_base=1/1000000000 -start=10506000000 -start_time=10.506000 -end=15006000000 -end_time=15.006000 +start=10500000000 +start_time=10.500000 +end=15000000000 +end_time=15.000000 TAG:title=Ten point 5 seconds [/CHAPTER] [CHAPTER] id=4 time_base=1/1000000000 -start=15006000000 -start_time=15.006000 -end=19855000000 -end_time=19.855000 +start=15000000000 +start_time=15.000000 +end=19849000000 +end_time=19.849000 TAG:title=15 sec - over soon [/CHAPTER] -- 2.54.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
