Browse Source

demux: ts: add USER_PMT, USER_TEMPPMT

Francois Cartegnie 5 years ago
committed by Alexandre Janniaux
parent
commit
9f48408a48
  1. 10
      modules/demux/mpeg/ts.c
  2. 7
      modules/demux/mpeg/ts.h
  3. 10
      modules/demux/mpeg/ts_psi.c

10
modules/demux/mpeg/ts.c

@ -439,9 +439,13 @@ static int Open( vlc_object_t *p_this )
/* We handle description of an extra PMT */
char* psz_string = var_CreateGetString( p_demux, "ts-extra-pmt" );
p_sys->b_user_pmt = false;
if( psz_string && *psz_string )
UserPmt( p_demux, psz_string );
const char* psz_fmt = psz_string;
if( psz_fmt && !strncmp(psz_fmt, "temp:", 5) )
psz_fmt += 5;
if( psz_fmt && *psz_fmt && UserPmt( p_demux, psz_fmt ) == VLC_SUCCESS )
p_sys->program_source = (psz_fmt == psz_string) ? USER_PMT : USER_TEMPPMT;
else
p_sys->program_source = STREAM_PATPMT;
free( psz_string );
psz_string = var_CreateGetStringCommand( p_demux, "ts-csa-ck" );

7
modules/demux/mpeg/ts.h

@ -86,7 +86,12 @@ struct demux_sys_t
/* All pid */
ts_pid_list_t pids;
bool b_user_pmt;
enum
{
STREAM_PATPMT,
USER_PMT,
USER_TEMPPMT,
} program_source;
int i_pmt_es;
enum

10
modules/demux/mpeg/ts_psi.c

@ -102,8 +102,9 @@ static void PATCallBack( void *data, dvbpsi_pat_t *p_dvbpsipat )
}
/* override hotfixes */
if( p_pat->b_generated )
if( p_pat->b_generated || p_sys->program_source == USER_TEMPPMT )
{
p_sys->program_source = STREAM_PATPMT;
p_pat->b_generated = false;
p_pat->i_version = -1;
p_pat->i_ts_id = -1;
@ -112,15 +113,15 @@ static void PATCallBack( void *data, dvbpsi_pat_t *p_dvbpsipat )
/* check versioning changes */
if( ( p_pat->i_version != -1 && p_dvbpsipat->i_version == p_pat->i_version ) ||
( p_pat->i_ts_id != -1 && p_dvbpsipat->i_ts_id != p_pat->i_ts_id ) )
( p_pat->i_ts_id != -1 && p_dvbpsipat->i_ts_id != p_pat->i_ts_id ) ||
p_sys->program_source == USER_PMT )
{
dvbpsi_pat_delete( p_dvbpsipat );
return;
}
/* check content */
if( !p_dvbpsipat->b_current_next || p_sys->b_user_pmt ||
PATCheck( p_demux, p_dvbpsipat ) )
if( !p_dvbpsipat->b_current_next || PATCheck( p_demux, p_dvbpsipat ) )
{
dvbpsi_pat_delete( p_dvbpsipat );
return;
@ -2317,7 +2318,6 @@ int UserPmt( demux_t *p_demux, const char *psz_fmt )
psz = psz_next;
}
p_sys->b_user_pmt = true;
free( psz_dup );
return VLC_SUCCESS;

Loading…
Cancel
Save