#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_sout.h>
-#include <vlc_codecs.h>
#include <vlc_block.h>
+#include <vlc_rand.h>
#include <vlc_iso_lang.h>
p_mux->pf_mux = Mux;
p_mux->p_sys = p_sys;
- srand( (uint32_t)mdate() );
for ( i = 0; i < MAX_PMT; i++ )
p_sys->sdt_descriptors[i].psz_service_name
= p_sys->sdt_descriptors[i].psz_provider = NULL;
}
free( val.psz_string );
- p_sys->i_pat_version_number = rand() % 32;
+ unsigned short subi[3];
+ vlc_rand_bytes(subi, sizeof(subi));
+ p_sys->i_pat_version_number = nrand48(subi) & 0x1f;
p_sys->pat.i_pid = 0;
p_sys->pat.i_continuity_counter = 0;
p_sys->pat.b_discontinuity = false;
if ( val.i_int )
p_sys->i_tsid = val.i_int;
else
- p_sys->i_tsid = rand() % 65536;
+ p_sys->i_tsid = nrand48(subi) & 0xffff;
- p_sys->i_netid = rand() % 65536;
+ p_sys->i_netid = nrand48(subi) & 0xffff;
#ifdef HAVE_DVBPSI_SDT
var_Get( p_mux, SOUT_CFG_PREFIX "netid", &val );
if ( val.i_int )
p_sys->i_netid = val.i_int;
#endif
- p_sys->i_pmt_version_number = rand() % 32;
+ p_sys->i_pmt_version_number = nrand48(subi) & 0x1f;
for( i = 0; i < p_sys->i_num_pmt; i++ )
{
p_sys->pmt[i].i_continuity_counter = 0;
p_sys->b_sdt = false;
#endif
- var_Get( p_mux, SOUT_CFG_PREFIX "alignment", &val );
- p_sys->b_data_alignment = val.b_bool;
+ p_sys->b_data_alignment = var_GetBool( p_mux, SOUT_CFG_PREFIX "alignment" );
var_Get( p_mux, SOUT_CFG_PREFIX "program-pmt", &val );
if( val.psz_string && *val.psz_string )
p_sys->i_pid_free = p_sys->pmt[p_sys->i_num_pmt - 1].i_pid + 1;
- var_Get( p_mux, SOUT_CFG_PREFIX "pid-video", &val );
- p_sys->i_pid_video = val.i_int;
+ p_sys->i_pid_video = var_GetInteger( p_mux, SOUT_CFG_PREFIX "pid-video" );
if ( p_sys->i_pid_video > p_sys->i_pid_free )
{
p_sys->i_pid_free = p_sys->i_pid_video + 1;
}
- var_Get( p_mux, SOUT_CFG_PREFIX "pid-audio", &val );
- p_sys->i_pid_audio = val.i_int;
+ p_sys->i_pid_audio = var_GetInteger( p_mux, SOUT_CFG_PREFIX "pid-audio" );
if ( p_sys->i_pid_audio > p_sys->i_pid_free )
{
p_sys->i_pid_free = p_sys->i_pid_audio + 1;
}
- var_Get( p_mux, SOUT_CFG_PREFIX "pid-spu", &val );
- p_sys->i_pid_spu = val.i_int;
+ p_sys->i_pid_spu = var_GetInteger( p_mux, SOUT_CFG_PREFIX "pid-spu" );
if ( p_sys->i_pid_spu > p_sys->i_pid_free )
{
p_sys->i_pid_free = p_sys->i_pid_spu + 1;
p_sys->i_null_continuity_counter = 0;
/* Allow to create constrained stream */
- var_Get( p_mux, SOUT_CFG_PREFIX "bmin", &val );
- p_sys->i_bitrate_min = val.i_int;
+ p_sys->i_bitrate_min = var_GetInteger( p_mux, SOUT_CFG_PREFIX "bmin" );
- var_Get( p_mux, SOUT_CFG_PREFIX "bmax", &val );
- p_sys->i_bitrate_max = val.i_int;
+ p_sys->i_bitrate_max = var_GetInteger( p_mux, SOUT_CFG_PREFIX "bmax" );
if( p_sys->i_bitrate_min > 0 && p_sys->i_bitrate_max > 0 &&
p_sys->i_bitrate_min > p_sys->i_bitrate_max )
msg_Dbg( p_mux, "shaping=%"PRId64" pcr=%"PRId64" dts_delay=%"PRId64,
p_sys->i_shaping_delay, p_sys->i_pcr_delay, p_sys->i_dts_delay );
- var_Get( p_mux, SOUT_CFG_PREFIX "use-key-frames", &val );
- p_sys->b_use_key_frames = val.b_bool;
+ p_sys->b_use_key_frames = var_GetBool( p_mux, SOUT_CFG_PREFIX "use-key-frames" );
/* for TS generation */
p_sys->i_pcr = 0;
var_Get( p_mux, SOUT_CFG_PREFIX "csa-pkt", &pkt_val );
if( pkt_val.i_int < 12 || pkt_val.i_int > 188 )
{
- msg_Err( p_mux, "wrong packet size %d specified.", pkt_val.i_int );
+ msg_Err( p_mux, "wrong packet size %"PRId64" specified.",
+ pkt_val.i_int );
msg_Warn( p_mux, "using default packet size of 188 bytes" );
p_sys->i_csa_pkt_size = 188;
}
}
free( val.psz_string );
- var_Get( p_mux, SOUT_CFG_PREFIX "crypt-audio", &val );
- p_sys->b_crypt_audio = val.b_bool;
+ p_sys->b_crypt_audio = var_GetBool( p_mux, SOUT_CFG_PREFIX "crypt-audio" );
- var_Get( p_mux, SOUT_CFG_PREFIX "crypt-video", &val );
- p_sys->b_crypt_video = val.b_bool;
+ p_sys->b_crypt_video = var_GetBool( p_mux, SOUT_CFG_PREFIX "crypt-video" );
return VLC_SUCCESS;
}
sout_mux_sys_t *p_sys = p_mux->p_sys;
int i;
- vlc_mutex_lock( &p_sys->csa_lock );
if( p_sys->csa )
{
var_DelCallback( p_mux, SOUT_CFG_PREFIX "csa-ck", ChangeKeyCallback, NULL );
var_DelCallback( p_mux, SOUT_CFG_PREFIX "csa2-ck", ChangeKeyCallback, NULL );
var_DelCallback( p_mux, SOUT_CFG_PREFIX "csa-use", ActiveKeyCallback, NULL );
csa_Delete( p_sys->csa );
- p_sys->csa = NULL;
}
- vlc_mutex_unlock( &p_sys->csa_lock );
for( i = 0; i < MAX_PMT; i++ )
{
}
/* Convert to pes */
- if( p_stream->i_stream_id == 0xa0 &&
+ if( (p_stream->i_stream_id == 0xa0 ||
+ p_stream->i_stream_type == 0x1b ) && /*Workaroud for bug #3306 */
p_data->i_pts <= 0 )
{
/* XXX yes I know, it's awful, but it's needed,
}
p_ts = block_New( p_mux, 188 );
+
+ if (b_new_pes && !(p_pes->i_flags & BLOCK_FLAG_NO_KEYFRAME) && p_pes->i_flags & BLOCK_FLAG_TYPE_I)
+ {
+ p_ts->i_flags |= BLOCK_FLAG_TYPE_I;
+ }
+
p_ts->i_dts = p_pes->i_dts;
p_ts->p_buffer[0] = 0x47;