#endif
#undef TS_DEBUG
-/* TODO:
- * - XXX: do not mark options message to be translated, they are too osbcure for now ...
- * - test it
- * - ...
- */
-
-/*****************************************************************************
- * Callback prototypes
- *****************************************************************************/
-static int ChangeKeyCallback ( vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void * );
-
/*****************************************************************************
* Module descriptor
*****************************************************************************/
static void PSINewTableCallBack( demux_t *, dvbpsi_handle,
uint8_t i_table_id, uint16_t i_extension );
#endif
+static int ChangeKeyCallback( vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void * );
static inline int PIDGet( block_t *p )
{
{
switch( pid->i_pid )
{
- case 0: /* PAT */
- dvbpsi_DetachPAT( pid->psi->handle );
- free( pid->psi );
- break;
- case 1: /* CAT */
+ case 0: /* PAT */
+ dvbpsi_DetachPAT( pid->psi->handle );
+ free( pid->psi );
+ break;
+ case 1: /* CAT */
+ free( pid->psi );
+ break;
+ default:
+ if( p_sys->b_dvb_meta && ( pid->i_pid == 0x11 || pid->i_pid == 0x12 ) )
+ {
+ /* SDT or EIT */
+ dvbpsi_DetachDemux( pid->psi->handle );
free( pid->psi );
- break;
- default:
- if( p_sys->b_dvb_meta && ( pid->i_pid == 0x11 || pid->i_pid == 0x12 ) )
- {
- /* SDT or EIT */
- dvbpsi_DetachDemux( pid->psi->handle );
- free( pid->psi );
- }
- else
- {
- PIDClean( p_demux->out, pid );
- }
- break;
+ }
+ else
+ {
+ PIDClean( p_demux->out, pid );
+ }
+ break;
}
}
else if( pid->b_valid && pid->es )
static int DemuxFile( demux_t *p_demux )
{
demux_sys_t *p_sys = p_demux->p_sys;
- uint8_t *p_buffer = p_sys->buffer; /* Put first on sync byte */
- int i_diff= 0;
- int i_data= 0;
- int i_pos = 0;
- int i_bufsize = p_sys->i_packet_size * p_sys->i_ts_read;
-
- i_data = stream_Read( p_demux->s, p_sys->buffer, i_bufsize );
- if( (i_data <= 0) && (i_data < p_sys->i_packet_size) )
+ const int i_bufsize = p_sys->i_packet_size * p_sys->i_ts_read;
+ uint8_t *p_buffer = p_sys->buffer; /* Put first on sync byte */
+ const int i_data = stream_Read( p_demux->s, p_sys->buffer, i_bufsize );
+
+ if( i_data <= 0 && i_data < p_sys->i_packet_size )
{
msg_Dbg( p_demux, "error reading malformed packets" );
return i_data;
}
/* Test continuity counter */
- while( i_pos < i_data )
+ for( int i_pos = 0; i_pos < i_data; )
{
- ts_pid_t *p_pid; /* point to a PID structure */
- bool b_payload; /* indicates a packet with payload */
- bool b_adaptation; /* adaptation field */
- int i_cc = 0; /* continuity counter */
-
if( p_sys->buffer[i_pos] != 0x47 )
{
msg_Warn( p_demux, "lost sync" );
* diff == 0 and duplicate packet (playload != 0) <- should we
* test the content ?
*/
- i_cc = p_buffer[i_pos+3]&0x0f;
- b_payload = p_buffer[i_pos+3]&0x10;
- b_adaptation = p_buffer[i_pos+3]&0x20;
+ const int i_cc = p_buffer[i_pos+3]&0x0f;
+ const bool b_payload = p_buffer[i_pos+3]&0x10;
+ const bool b_adaptation = p_buffer[i_pos+3]&0x20;
/* Get the PID */
- p_pid = &p_sys->pid[ ((p_buffer[i_pos+1]&0x1f)<<8)|p_buffer[i_pos+2] ];
+ ts_pid_t *p_pid = &p_sys->pid[ ((p_buffer[i_pos+1]&0x1f)<<8)|p_buffer[i_pos+2] ];
/* Detect discontinuity indicator in adaptation field */
if( b_adaptation && p_buffer[i_pos + 4] > 0 )
msg_Warn( p_demux, "random access indicator (pid=%d) ", p_pid->i_pid );
}
- i_diff = ( i_cc - p_pid->i_cc )&0x0f;
+ const int i_diff = ( i_cc - p_pid->i_cc )&0x0f;
if( b_payload && i_diff == 1 )
{
p_pid->i_cc = ( p_pid->i_cc + 1 ) & 0xf;
}
/* Then write */
- i_data = fwrite( p_sys->buffer, 1, i_data, p_sys->p_file );
- if( i_data < 0 )
+ const int i_write = fwrite( p_sys->buffer, 1, i_data, p_sys->p_file );
+ if( i_write < 0 )
{
msg_Err( p_demux, "failed to write data" );
return -1;
}
-#if 0
- msg_Dbg( p_demux, "dumped %d bytes", i_data );
-#endif
- p_sys->i_write += i_data;
+ p_sys->i_write += i_write;
return 1;
}
static int Demux( demux_t *p_demux )
{
demux_sys_t *p_sys = p_demux->p_sys;
- int i_pkt;
/* We read at most 100 TS packet or until a frame is completed */
- for( i_pkt = 0; i_pkt < p_sys->i_ts_read; i_pkt++ )
+ for( int i_pkt = 0; i_pkt < p_sys->i_ts_read; i_pkt++ )
{
bool b_frame = false;
block_t *p_pkt;
- ts_pid_t *p_pid;
/* Get a new TS packet */
if( !( p_pkt = stream_Block( p_demux->s, p_sys->i_packet_size ) ) )
}
/* Parse the TS packet */
- p_pid = &p_sys->pid[PIDGet( p_pkt )];
+ ts_pid_t *p_pid = &p_sys->pid[PIDGet( p_pkt )];
if( p_pid->b_valid )
{
}
else
{
- int i_prg;
- for( i_prg = 0; i_prg < p_pid->psi->i_prg; i_prg++ )
+ for( int i_prg = 0; i_prg < p_pid->psi->i_prg; i_prg++ )
{
dvbpsi_PushPacket( p_pid->psi->prg[i_prg]->handle,
p_pkt->p_buffer );
p_pid->b_seen = true;
if( b_frame )
- {
break;
- }
}
if( p_sys->b_udp_out )
if( p_sys->b_access_control && i_int > 0 && i_int != p_sys->i_current_program )
{
int i_pmt_pid = -1;
- int i;
/* Search pmt to be unselected */
- for( i = 0; i < p_sys->i_pmt; i++ )
+ for( int i = 0; i < p_sys->i_pmt; i++ )
{
ts_pid_t *pmt = p_sys->pmt[i];
- int i_prg;
- for( i_prg = 0; i_prg < pmt->psi->i_prg; i_prg++ )
+ for( int i_prg = 0; i_prg < pmt->psi->i_prg; i_prg++ )
{
if( pmt->psi->prg[i_prg]->i_number == p_sys->i_current_program )
{
ACCESS_SET_PRIVATE_ID_STATE, i_pmt_pid,
false );
/* All ES */
- for( i = 2; i < 8192; i++ )
+ for( int i = 2; i < 8192; i++ )
{
ts_pid_t *pid = &p_sys->pid[i];
- int i_prg;
- if( !pid->b_valid || pid->psi ) continue;
+ if( !pid->b_valid || pid->psi )
+ continue;
- for( i_prg = 0; i_prg < pid->p_owner->i_prg; i_prg++ )
+ for( int i_prg = 0; i_prg < pid->p_owner->i_prg; i_prg++ )
{
if( pid->p_owner->prg[i_prg]->i_pid_pmt == i_pmt_pid && pid->es->id )
{
/* select new program */
p_sys->i_current_program = i_int;
i_pmt_pid = -1;
- for( i = 0; i < p_sys->i_pmt; i++ )
+ for( int i = 0; i < p_sys->i_pmt; i++ )
{
ts_pid_t *pmt = p_sys->pmt[i];
- int i_prg;
- for( i_prg = 0; i_prg < pmt->psi->i_prg; i_prg++ )
+ for( int i_prg = 0; i_prg < pmt->psi->i_prg; i_prg++ )
{
if( pmt->psi->prg[i_prg]->i_number == i_int )
{
break;
}
}
- if( i_pmt_pid > 0 ) break;
+ if( i_pmt_pid > 0 )
+ break;
}
if( i_pmt_pid > 0 )
{
ACCESS_SET_PRIVATE_ID_STATE, p_prg->i_pid_pcr,
true );
- for( i = 2; i < 8192; i++ )
+ for( int i = 2; i < 8192; i++ )
{
ts_pid_t *pid = &p_sys->pid[i];
- int i_prg;
- if( !pid->b_valid || pid->psi ) continue;
+ if( !pid->b_valid || pid->psi )
+ continue;
- for( i_prg = 0; i_prg < pid->p_owner->i_prg; i_prg++ )
+ for( int i_prg = 0; i_prg < pid->p_owner->i_prg; i_prg++ )
{
if( pid->p_owner->prg[i_prg]->i_pid_pmt == i_pmt_pid && pid->es->id )
{
{
if( pid->psi )
{
- int i;
-
- if( pid->psi->handle ) dvbpsi_DetachPMT( pid->psi->handle );
- for( i = 0; i < pid->psi->i_prg; i++ )
+ if( pid->psi->handle )
+ dvbpsi_DetachPMT( pid->psi->handle );
+ for( int i = 0; i < pid->psi->i_prg; i++ )
{
if( pid->psi->prg[i]->iod )
IODFree( pid->psi->prg[i]->iod );
}
else
{
- int i;
-
if( pid->es->id )
es_out_Del( out, pid->es->id );
free( pid->es );
- for( i = 0; i < pid->i_extra_es; i++ )
+ for( int i = 0; i < pid->i_extra_es; i++ )
{
if( pid->extra_es[i]->id )
es_out_Del( out, pid->extra_es[i]->id );
free( pid->extra_es[i] );
}
- if( pid->i_extra_es ) free( pid->extra_es );
+ if( pid->i_extra_es )
+ free( pid->extra_es );
}
pid->b_valid = false;
mtime_t i_dts = -1;
mtime_t i_pts = -1;
mtime_t i_length = 0;
- int i_max;
/* remove the pes from pid */
pid->es->p_pes = NULL;
pid->es->pp_last = &pid->es->p_pes;
/* FIXME find real max size */
- i_max = block_ChainExtract( p_pes, header, 34 );
-
+ const int i_max = block_ChainExtract( p_pes, header, 34 );
if( header[0] != 0 || header[1] != 0 || header[2] != 1 )
{
( p[5]&0x10 ) &&
( p[4] >= 7 ) )
{
- int i;
- mtime_t i_pcr; /* 33 bits */
-
- i_pcr = ( (mtime_t)p[6] << 25 ) |
- ( (mtime_t)p[7] << 17 ) |
- ( (mtime_t)p[8] << 9 ) |
- ( (mtime_t)p[9] << 1 ) |
- ( (mtime_t)p[10] >> 7 );
+ /* PCR is 33 bits */
+ const mtime_t i_pcr = ( (mtime_t)p[6] << 25 ) |
+ ( (mtime_t)p[7] << 17 ) |
+ ( (mtime_t)p[8] << 9 ) |
+ ( (mtime_t)p[9] << 1 ) |
+ ( (mtime_t)p[10] >> 7 );
/* Search program and set the PCR */
- for( i = 0; i < p_sys->i_pmt; i++ )
+ for( int i = 0; i < p_sys->i_pmt; i++ )
{
- int i_prg;
- for( i_prg = 0; i_prg < p_sys->pmt[i]->psi->i_prg; i_prg++ )
+ for( int i_prg = 0; i_prg < p_sys->pmt[i]->psi->i_prg; i_prg++ )
{
if( pid->i_pid == p_sys->pmt[i]->psi->prg[i_prg]->i_pid_pcr )
{
const bool b_unit_start = p[1]&0x40;
const bool b_adaptation = p[3]&0x20;
const bool b_payload = p[3]&0x10;
- const int i_cc = p[3]&0x0f; /* continuity counter */
- bool b_discontinuity = false;/* discontinuity */
+ const int i_cc = p[3]&0x0f; /* continuity counter */
+ bool b_discontinuity = false; /* discontinuity */
/* transport_scrambling_control is ignored */
int i_skip = 0;
- bool i_ret = false;
- int i_diff;
+ bool i_ret = false;
#if 0
msg_Dbg( p_demux, "pid=%d unit_start=%d adaptation=%d payload=%d "
* diff == 0 and duplicate packet (playload != 0) <- should we
* test the content ?
*/
- i_diff = ( i_cc - pid->i_cc )&0x0f;
+ const int i_diff = ( i_cc - pid->i_cc )&0x0f;
if( b_payload && i_diff == 1 )
{
pid->i_cc = ( pid->i_cc + 1 ) & 0xf;
dvbpsi_extended_event_dr_t *pE = dvbpsi_DecodeExtendedEventDr( p_dr );
if( pE )
{
- int i;
msg_Dbg( p_demux, " - extended event lang=%3.3s [%d/%d]",
pE->i_iso_639_code,
pE->i_descriptor_number, pE->i_last_descriptor_number );
}
}
- for( i = 0; i < pE->i_entry_count; i++ )
+ for( int i = 0; i < pE->i_entry_count; i++ )
{
char *psz_dsc = EITConvertToUTF8( pE->i_item_description[i],
pE->i_item_description_length[i] );
ts_prg_psi_t *prg = NULL;
ts_pid_t **pp_clean = NULL;
- int i_clean = 0, i;
+ int i_clean = 0;
bool b_hdmv = false;
msg_Dbg( p_demux, "PMTCallBack called" );
/* First find this PMT declared in PAT */
- for( i = 0; i < p_sys->i_pmt; i++ )
+ for( int i = 0; i < p_sys->i_pmt; i++ )
{
int i_prg;
for( i_prg = 0; i_prg < p_sys->pmt[i]->psi->i_prg; i_prg++ )
break;
}
}
- if( pmt ) break;
+ if( pmt )
+ break;
}
if( pmt == NULL )
}
/* Clean this program (remove all es) */
- for( i = 0; i < 8192; i++ )
+ for( int i = 0; i < 8192; i++ )
{
ts_pid_t *pid = &p_sys->pid[i];
ts_pid_t tmp_pid, *old_pid = 0, *pid = &tmp_pid;
/* Find out if the PID was already declared */
- for( i = 0; i < i_clean; i++ )
+ for( int i = 0; i < i_clean; i++ )
{
if( pp_clean[i] == &p_sys->pid[p_es->i_pid] )
{
pid->es->p_mpeg4desc = NULL;
- for( i = 0; i < 255; i++ )
+ for( int i = 0; i < 255; i++ )
{
iod_descriptor_t *iod = prg->iod;
pid->es->fmt.i_extra_languages );
if( pid->es->fmt.p_extra_languages )
{
- for( i = 0; i < pid->es->fmt.i_extra_languages; i++ )
+ for( int i = 0; i < pid->es->fmt.i_extra_languages; i++ )
{
msg_Dbg( p_demux, "bang" );
pid->es->fmt.p_extra_languages[i].psz_language =
{
pid->es->id = old_pid->es->id;
old_pid->es->id = NULL;
- for( i = 0; i < pid->i_extra_es; i++ )
+ for( int i = 0; i < pid->i_extra_es; i++ )
{
pid->extra_es[i]->id = old_pid->extra_es[i]->id;
old_pid->extra_es[i]->id = NULL;
}
pid->es->id = es_out_Add( p_demux->out, &pid->es->fmt );
- for( i = 0; i < pid->i_extra_es; i++ )
+ for( int i = 0; i < pid->i_extra_es; i++ )
{
pid->extra_es[i]->id =
es_out_Add( p_demux->out, &pid->extra_es[i]->fmt );
dvbpsi_DeletePMT( p_pmt );
}
- for ( i = 0; i < i_clean; i++ )
+ for( int i = 0; i < i_clean; i++ )
{
if( ProgramIsSelected( p_demux, prg->i_number ) )
{
PIDClean( p_demux->out, pp_clean[i] );
}
- if( i_clean ) free( pp_clean );
+ if( i_clean )
+ free( pp_clean );
}
static void PATCallBack( demux_t *p_demux, dvbpsi_pat_t *p_pat )
demux_sys_t *p_sys = p_demux->p_sys;
dvbpsi_pat_program_t *p_program;
ts_pid_t *pat = &p_sys->pid[0];
- int i, j;
msg_Dbg( p_demux, "PATCallBack called" );
ts_pid_t **pmt_rm = NULL;
/* Search pmt to be deleted */
- for( i = 0; i < p_sys->i_pmt; i++ )
+ for( int i = 0; i < p_sys->i_pmt; i++ )
{
ts_pid_t *pmt = p_sys->pmt[i];
bool b_keep = false;
{
if( p_program->i_pid == pmt->i_pid )
{
- int i_prg;
- for( i_prg = 0; i_prg < pmt->psi->i_prg; i_prg++ )
+ for( int i_prg = 0; i_prg < pmt->psi->i_prg; i_prg++ )
{
if( p_program->i_number ==
pmt->psi->prg[i_prg]->i_number )
break;
}
}
- if( b_keep ) break;
+ if( b_keep )
+ break;
}
}
}
/* Delete all ES attached to thoses PMT */
- for( i = 2; i < 8192; i++ )
+ for( int i = 2; i < 8192; i++ )
{
ts_pid_t *pid = &p_sys->pid[i];
- if( !pid->b_valid || pid->psi ) continue;
+ if( !pid->b_valid || pid->psi )
+ continue;
- for( j = 0; j < i_pmt_rm && pid->b_valid; j++ )
+ for( int j = 0; j < i_pmt_rm && pid->b_valid; j++ )
{
- int i_prg;
- for( i_prg = 0; i_prg < pid->p_owner->i_prg; i_prg++ )
+ for( int i_prg = 0; i_prg < pid->p_owner->i_prg; i_prg++ )
{
/* We only remove es that aren't defined by extra pmt */
- if( pid->p_owner->prg[i_prg]->i_pid_pmt !=
- pmt_rm[j]->i_pid ) continue;
+ if( pid->p_owner->prg[i_prg]->i_pid_pmt != pmt_rm[j]->i_pid )
+ continue;
if( p_sys->b_access_control && pid->es->id )
{
}
/* Delete PMT pid */
- for( i = 0; i < i_pmt_rm; i++ )
+ for( int i = 0; i < i_pmt_rm; i++ )
{
- int i_prg;
if( p_sys->b_access_control )
{
if( stream_Control( p_demux->s, STREAM_CONTROL_ACCESS,
p_sys->b_access_control = false;
}
- for( i_prg = 0; i_prg < pmt_rm[i]->psi->i_prg; i_prg++ )
+ for( int i_prg = 0; i_prg < pmt_rm[i]->psi->i_prg; i_prg++ )
{
const int i_number = pmt_rm[i]->psi->prg[i_prg]->i_number;
es_out_Control( p_demux->out, ES_OUT_DEL_GROUP, i_number );