int i_mux_rate;
vlc_bool_t b_lost_sync;
+ vlc_bool_t b_have_pack;
};
static int Demux ( demux_t *p_demux );
p_sys->i_mux_rate = 0;
p_sys->i_scr = -1;
p_sys->b_lost_sync = VLC_FALSE;
+ p_sys->b_have_pack = VLC_FALSE;
ps_psm_init( &p_sys->psm );
ps_track_init( p_sys->tk );
case 0x1ba:
if( !ps_pkt_parse_pack( p_pkt, &p_sys->i_scr, &i_mux_rate ) )
{
+ if( !p_sys->b_have_pack ) p_sys->b_have_pack = VLC_TRUE;
/* done later on to work around bad vcd/svcd streams */
/* es_out_Control( p_demux->out, ES_OUT_SET_PCR, p_sys->i_scr ); */
if( i_mux_rate > 0 ) p_sys->i_mux_rate = i_mux_rate;
default:
if( (i_id = ps_pkt_id( p_pkt )) >= 0xc0 )
{
+ vlc_bool_t b_new = VLC_FALSE;
ps_track_t *tk = &p_sys->tk[PS_ID_TO_TK(i_id)];
if( !tk->b_seen )
if( !ps_track_fill( tk, &p_sys->psm, i_id ) )
{
tk->es = es_out_Add( p_demux->out, &tk->fmt );
+ b_new = VLC_TRUE;
}
else
{
if( tk->b_seen && tk->es &&
!ps_pkt_parse_pes( p_pkt, tk->i_skip ) )
{
+ if( !b_new && !p_sys->b_have_pack && tk->fmt.i_cat == AUDIO_ES && p_pkt->i_pts > 0 )
+ {
+ /* A hack to sync the A/V on PES files. */
+ msg_Dbg( p_demux, "force SCR: %lld", p_pkt->i_pts );
+ es_out_Control( p_demux->out, ES_OUT_SET_PCR, p_pkt->i_pts );
+ }
+
es_out_Send( p_demux->out, tk->es, p_pkt );
}
else