[vlc-commits] [Git][videolan/vlc][master] 3 commits: vcd: play all entries of a multi-entries disc
Steve Lhomme (@robUx4)
gitlab at videolan.org
Tue Sep 8 06:15:57 UTC 2026
Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
2dd68983 by Pierre Bogdanovscky at 2026-09-08T06:06:20+00:00
vcd: play all entries of a multi-entries disc
A VCD disc's first track is the ISO filesystem and must be ignored.
When checking if the current track is the last one, an off-by-one
error existed because we checked i_current_title + 2 against the
track list WITHOUT the first track so the first track was
discounted twice.
Work item : #30089
Assisted-by: claude-code:claude-opus-5-0
- - - - -
0bc4ad4a by Pierre Bogdanovscky at 2026-09-08T06:06:20+00:00
ps: reset the clock on a stream discontinuity
CheckPCR() only flagged the next block of each track, which tells the
decoders to expect a gap but leaves the input clock anchored on the old
timeline.
When playing a VCD with multiple tracks, this caused each track to start
with a black image for the duration of the previous track.
Work item : #29811
Assisted-by: claude-code:claude-opus-5-0
- - - - -
36670139 by Pierre Bogdanovscky at 2026-09-08T06:06:20+00:00
ps: fix the length estimated from the mux rate
The mux rate is expressed in units of 50 bytes per second, so the byte
count has to be scaled accordingly, as DEMUX_GET_TIME already does a few
lines above. Without it the estimate came out fifty times too long on
multi-track VCDs.
This bug was in VLC3 too.
Work item : #29811
Assisted-by: claude-code:claude-opus-5-0
- - - - -
2 changed files:
- modules/access/vcd/vcd.c
- modules/demux/mpeg/ps.c
Changes:
=====================================
modules/access/vcd/vcd.c
=====================================
@@ -343,7 +343,7 @@ static block_t *Block( stream_t *p_access, bool *restrict eof )
/* Check end of title */
while( p_sys->i_sector >= p_toc->p_sectors[p_sys->i_current_title + 2].i_lba )
{
- if( p_sys->i_current_title + 2 >= USABLE_TITLES(p_toc->i_tracks) )
+ if( p_sys->i_current_title + 2 > USABLE_TITLES(p_toc->i_tracks) )
{
*eof = true;
return NULL;
=====================================
modules/demux/mpeg/ps.c
=====================================
@@ -415,7 +415,10 @@ static void CheckPCR( demux_sys_t *p_sys, es_out_t *out, vlc_tick_t i_scr )
{
if( p_sys->i_scr != VLC_TICK_INVALID &&
llabs( p_sys->i_scr - i_scr ) > VLC_TICK_FROM_SEC(1) )
+ {
+ es_out_Control( out, ES_OUT_RESET_PCR );
NotifyDiscontinuity( p_sys->tk, out );
+ }
}
/*****************************************************************************
@@ -785,7 +788,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
vlc_stream_GetSize( p_demux->s, &u64 ) == VLC_SUCCESS )
{
*va_arg( args, vlc_tick_t * ) =
- vlc_tick_from_samples( u64 - p_sys->i_start_byte / 50, p_sys->i_mux_rate );
+ vlc_tick_from_samples( u64 - p_sys->i_start_byte, p_sys->i_mux_rate * 50 );
return VLC_SUCCESS;
}
*va_arg( args, vlc_tick_t * ) = 0;
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/6d3d1008d5f646adddda6b5dc0c210e45a645959...36670139c8ba5c61b1aec66d11b38cde88f4cb8b
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/6d3d1008d5f646adddda6b5dc0c210e45a645959...36670139c8ba5c61b1aec66d11b38cde88f4cb8b
You're receiving this email because of your account on code.videolan.org. Manage all notifications: https://code.videolan.org/-/profile/notifications | Help: https://code.videolan.org/help
More information about the vlc-commits
mailing list