# include "config.h"
#endif
+#include <limits.h>
+
#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>
"of the shaping algorithm, since I frames are usually the biggest " \
"frames in the stream.")
-#define PCR_TEXT N_("PCR delay (ms)")
+#define PCR_TEXT N_("PCR interval (ms)")
#define PCR_LONGTEXT N_("Set at which interval " \
"PCRs (Program Clock Reference) will be sent (in milliseconds). " \
"This value should be below 100ms. (default is 70ms).")
"encrypting." )
#define SOUT_CFG_PREFIX "sout-ts-"
-#ifdef HAVE_BSEARCH
-# define MAX_PMT 64 /* Maximum number of programs. FIXME: I just chose an arbitary number. Where is the maximum in the spec? */
-#else
-# define MAX_PMT 1
-#endif
+#define MAX_PMT 64 /* Maximum number of programs. FIXME: I just chose an arbitary number. Where is the maximum in the spec? */
#define MAX_PMT_PID 64 /* Maximum pids in each pmt. FIXME: I just chose an arbitary number. Where is the maximum in the spec? */
-vlc_module_begin();
- set_description( N_("TS muxer (libdvbpsi)") );
- set_shortname( "MPEG-TS");
- set_category( CAT_SOUT );
- set_subcategory( SUBCAT_SOUT_MUX );
- set_capability( "sout mux", 120 );
- add_shortcut( "ts" );
+vlc_module_begin ()
+ set_description( N_("TS muxer (libdvbpsi)") )
+ set_shortname( "MPEG-TS")
+ set_category( CAT_SOUT )
+ set_subcategory( SUBCAT_SOUT_MUX )
+ set_capability( "sout mux", 120 )
+ add_shortcut( "ts" )
add_integer( SOUT_CFG_PREFIX "pid-video", 0, NULL,VPID_TEXT, VPID_LONGTEXT,
- true );
+ true )
add_integer( SOUT_CFG_PREFIX "pid-audio", 0, NULL, APID_TEXT,
- APID_LONGTEXT, true );
+ APID_LONGTEXT, true )
add_integer( SOUT_CFG_PREFIX "pid-spu", 0, NULL, SPUPID_TEXT,
- SPUPID_LONGTEXT, true );
+ SPUPID_LONGTEXT, true )
add_integer( SOUT_CFG_PREFIX "pid-pmt", 0, NULL, PMTPID_TEXT,
- PMTPID_LONGTEXT, true );
+ PMTPID_LONGTEXT, true )
add_integer( SOUT_CFG_PREFIX "tsid", 0, NULL, TSID_TEXT,
- TSID_LONGTEXT, true );
+ TSID_LONGTEXT, true )
#ifdef HAVE_DVBPSI_SDT
add_integer( SOUT_CFG_PREFIX "netid", 0, NULL, NETID_TEXT,
- NETID_LONGTEXT, true );
+ NETID_LONGTEXT, true )
#endif
add_string( SOUT_CFG_PREFIX "program-pmt", NULL, NULL, PMTPROG_TEXT,
- PMTPROG_LONGTEXT, true );
- add_bool( SOUT_CFG_PREFIX "es-id-pid", 0, NULL, PID_TEXT, PID_LONGTEXT,
- true );
- add_string( SOUT_CFG_PREFIX "muxpmt", NULL, NULL, MUXPMT_TEXT, MUXPMT_LONGTEXT, true );
+ PMTPROG_LONGTEXT, true )
+ add_bool( SOUT_CFG_PREFIX "es-id-pid", false, NULL, PID_TEXT, PID_LONGTEXT,
+ true )
+ add_string( SOUT_CFG_PREFIX "muxpmt", NULL, NULL, MUXPMT_TEXT, MUXPMT_LONGTEXT, true )
#ifdef HAVE_DVBPSI_SDT
- add_string( SOUT_CFG_PREFIX "sdtdesc", NULL, NULL, SDTDESC_TEXT, SDTDESC_LONGTEXT, true );
+ add_string( SOUT_CFG_PREFIX "sdtdesc", NULL, NULL, SDTDESC_TEXT, SDTDESC_LONGTEXT, true )
#endif
add_bool( SOUT_CFG_PREFIX "alignment", true, NULL, ALIGNMENT_TEXT,
- ALIGNMENT_LONGTEXT, true );
+ ALIGNMENT_LONGTEXT, true )
add_integer( SOUT_CFG_PREFIX "shaping", 200, NULL, SHAPING_TEXT,
- SHAPING_LONGTEXT, true );
+ SHAPING_LONGTEXT, true )
add_bool( SOUT_CFG_PREFIX "use-key-frames", false, NULL, KEYF_TEXT,
- KEYF_LONGTEXT, true );
+ KEYF_LONGTEXT, true )
add_integer( SOUT_CFG_PREFIX "pcr", 70, NULL, PCR_TEXT, PCR_LONGTEXT,
- true );
+ true )
add_integer( SOUT_CFG_PREFIX "bmin", 0, NULL, BMIN_TEXT, BMIN_LONGTEXT,
- true );
+ true )
add_integer( SOUT_CFG_PREFIX "bmax", 0, NULL, BMAX_TEXT, BMAX_LONGTEXT,
- true );
+ true )
add_integer( SOUT_CFG_PREFIX "dts-delay", 400, NULL, DTS_TEXT,
- DTS_LONGTEXT, true );
+ DTS_LONGTEXT, true )
add_bool( SOUT_CFG_PREFIX "crypt-audio", true, NULL, ACRYPT_TEXT,
- ACRYPT_LONGTEXT, true );
+ ACRYPT_LONGTEXT, true )
add_bool( SOUT_CFG_PREFIX "crypt-video", true, NULL, VCRYPT_TEXT,
- VCRYPT_LONGTEXT, true );
+ VCRYPT_LONGTEXT, true )
add_string( SOUT_CFG_PREFIX "csa-ck", NULL, NULL, CK_TEXT, CK_LONGTEXT,
- true );
+ true )
add_string( SOUT_CFG_PREFIX "csa2-ck", NULL, NULL, CK2_TEXT, CK2_LONGTEXT,
- true );
+ true )
add_string( SOUT_CFG_PREFIX "csa-use", "1", NULL, CU_TEXT, CU_LONGTEXT,
- true );
- add_integer( SOUT_CFG_PREFIX "csa-pkt", 188, NULL, CPKT_TEXT, CPKT_LONGTEXT, true );
+ true )
+ add_integer( SOUT_CFG_PREFIX "csa-pkt", 188, NULL, CPKT_TEXT, CPKT_LONGTEXT, true )
- set_callbacks( Open, Close );
-vlc_module_end();
+ set_callbacks( Open, Close )
+vlc_module_end ()
/*****************************************************************************
* Local data structures
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;
p_sys->i_audio_bound = 0;
p_sys->i_video_bound = 0;
- var_Get( p_mux, SOUT_CFG_PREFIX "es-id-pid", &val );
- p_sys->b_es_id_pid = val.b_bool;
+ p_sys->b_es_id_pid = var_GetBool( p_mux, SOUT_CFG_PREFIX "es-id-pid" );
var_Get( p_mux, SOUT_CFG_PREFIX "muxpmt", &val );
/*
}
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;
else
{
csa_Delete( p_sys->csa );
+ p_sys->csa = NULL;
}
if( p_sys->csa )
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 "csa-use", ActiveKeyCallback, NULL );
csa_Delete( p_sys->csa );
}
- vlc_mutex_unlock( &p_sys->csa_lock );
- vlc_mutex_destroy( &p_sys->csa_lock );
for( i = 0; i < MAX_PMT; i++ )
{
free( p_sys->sdt_descriptors[i].psz_provider );
}
+ vlc_mutex_destroy( &p_sys->csa_lock );
free( p_sys->dvbpmt );
free( p_sys );
}
VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval);
sout_mux_t *p_mux = (sout_mux_t*)p_this;
sout_mux_sys_t *p_sys = p_mux->p_sys;
- int i_tmp = (int)p_data;
+ int ret;
vlc_mutex_lock( &p_sys->csa_lock );
- if ( i_tmp )
- {
- i_tmp = csa_SetCW( p_this, p_sys->csa, newval.psz_string, true );
- }
- else
- {
- i_tmp = csa_SetCW( p_this, p_sys->csa, newval.psz_string, false );
- }
+ ret = csa_SetCW( p_this, p_sys->csa, newval.psz_string,
+ !!(intptr_t)p_data );
vlc_mutex_unlock( &p_sys->csa_lock );
- return i_tmp;
+ return ret;
}
/*****************************************************************************
case VIDEO_ES:
switch( p_input->p_fmt->i_codec )
{
- case VLC_FOURCC( 'm', 'p','g', 'v' ):
+ case VLC_CODEC_MPGV:
/* TODO: do we need to check MPEG-I/II ? */
p_stream->i_stream_type = 0x02;
p_stream->i_stream_id = 0xe0;
break;
- case VLC_FOURCC( 'm', 'p','4', 'v' ):
+ case VLC_CODEC_MP4V:
p_stream->i_stream_type = 0x10;
p_stream->i_stream_id = 0xe0;
p_stream->i_es_id = p_stream->i_pid;
break;
- case VLC_FOURCC( 'h', '2','6', '4' ):
+ case VLC_CODEC_H264:
p_stream->i_stream_type = 0x1b;
p_stream->i_stream_id = 0xe0;
break;
/* XXX dirty dirty but somebody want that:
* using crapy MS-codec XXX */
/* I didn't want to do that :P */
- case VLC_FOURCC( 'H', '2', '6', '3' ):
- case VLC_FOURCC( 'I', '2', '6', '3' ):
- case VLC_FOURCC( 'W', 'M', 'V', '3' ):
- case VLC_FOURCC( 'W', 'M', 'V', '2' ):
- case VLC_FOURCC( 'W', 'M', 'V', '1' ):
- case VLC_FOURCC( 'D', 'I', 'V', '3' ):
- case VLC_FOURCC( 'D', 'I', 'V', '2' ):
- case VLC_FOURCC( 'D', 'I', 'V', '1' ):
- case VLC_FOURCC( 'M', 'J', 'P', 'G' ):
+ case VLC_CODEC_H263I:
+ case VLC_CODEC_H263:
+ case VLC_CODEC_WMV3:
+ case VLC_CODEC_WMV2:
+ case VLC_CODEC_WMV1:
+ case VLC_CODEC_DIV3:
+ case VLC_CODEC_DIV2:
+ case VLC_CODEC_DIV1:
+ case VLC_CODEC_MJPG:
p_stream->i_stream_type = 0xa0; /* private */
p_stream->i_stream_id = 0xa0; /* beurk */
p_stream->i_bih_codec = p_input->p_fmt->i_codec;
p_stream->i_bih_width = p_input->p_fmt->video.i_width;
p_stream->i_bih_height = p_input->p_fmt->video.i_height;
break;
+ case VLC_CODEC_DIRAC:
+ /* stream_id makes use of stream_id_extension */
+ p_stream->i_stream_id = (PES_EXTENDED_STREAM_ID << 8) | 0x60;
+ p_stream->i_stream_type = 0xd1;
+ break;
default:
free( p_stream );
return VLC_EGENERIC;
case AUDIO_ES:
switch( p_input->p_fmt->i_codec )
{
- case VLC_FOURCC( 'm', 'p','g', 'a' ):
- case VLC_FOURCC( 'm', 'p', '3', ' ' ):
+ case VLC_CODEC_MPGA:
p_stream->i_stream_type =
p_input->p_fmt->audio.i_rate >= 32000 ? 0x03 : 0x04;
p_stream->i_stream_id = 0xc0;
break;
- case VLC_FOURCC( 'a', '5','2', ' ' ):
+ case VLC_CODEC_A52:
p_stream->i_stream_type = 0x81;
p_stream->i_stream_id = 0xbd;
break;
- case VLC_FOURCC( 'l', 'p','c', 'm' ):
+ case VLC_CODEC_EAC3:
+ p_stream->i_stream_type = 0x06;
+ p_stream->i_stream_id = 0xbd;
+ break;
+ case VLC_CODEC_DVD_LPCM:
p_stream->i_stream_type = 0x83;
p_stream->i_stream_id = 0xbd;
break;
- case VLC_FOURCC( 'd', 't','s', ' ' ):
+ case VLC_CODEC_DTS:
p_stream->i_stream_type = 0x06;
p_stream->i_stream_id = 0xbd;
break;
- case VLC_FOURCC( 'm', 'p','4', 'a' ):
+ case VLC_CODEC_MP4A:
/* XXX: make that configurable in some way when LOAS
* is implemented for AAC in TS */
//p_stream->i_stream_type = 0x11; /* LOAS/LATM */
p_stream->i_stream_type = 0x0f; /* ADTS */
- p_stream->i_stream_id = 0xfa;
+ p_stream->i_stream_id = 0xc0;
p_sys->i_mpeg4_streams++;
p_stream->i_es_id = p_stream->i_pid;
break;
case SPU_ES:
switch( p_input->p_fmt->i_codec )
{
- case VLC_FOURCC( 's', 'p','u', ' ' ):
+ case VLC_CODEC_SPU:
p_stream->i_stream_type = 0x82;
p_stream->i_stream_id = 0xbd;
break;
- case VLC_FOURCC( 's', 'u','b', 't' ):
+ case VLC_CODEC_SUBT:
p_stream->i_stream_type = 0x12;
p_stream->i_stream_id = 0xfa;
p_sys->i_mpeg4_streams++;
p_stream->i_es_id = p_stream->i_pid;
break;
- case VLC_FOURCC('d','v','b','s'):
+ case VLC_CODEC_DVBS:
p_stream->i_stream_type = 0x06;
p_stream->i_es_id = p_input->p_fmt->subs.dvb.i_id;
p_stream->i_stream_id = 0xbd;
break;
- case VLC_FOURCC('t','e','l','x'):
+ case VLC_CODEC_TELETEXT:
p_stream->i_stream_type = 0x06;
p_stream->i_stream_id = 0xbd; /* FIXME */
break;
}
/* Create decoder specific info for subt */
- if( p_stream->i_codec == VLC_FOURCC( 's', 'u','b', 't' ) )
+ if( p_stream->i_codec == VLC_CODEC_SUBT )
{
uint8_t *p;
block_FifoEmpty( p_mux->pp_inputs[i]->p_fifo );
}
msg_Dbg( p_mux, "waiting for PCR streams" );
- msleep( 1000 );
return VLC_SUCCESS;
}
p_pcr_stream = (ts_stream_t*)p_sys->p_pcr_input->p_sys;
if( p_stream == p_pcr_stream || p_sys->b_data_alignment
|| p_input->p_fmt->i_codec !=
- VLC_FOURCC('m', 'p', 'g', 'a') )
+ VLC_CODEC_MPGA )
{
p_data = block_FifoGet( p_input->p_fifo );
if( p_input->p_fmt->i_codec ==
- VLC_FOURCC('m', 'p', '4', 'a' ) )
+ VLC_CODEC_MP4A )
p_data = Add_ADTS( p_data, p_input->p_fmt );
}
else
p_data->i_length = p_next->i_dts - p_data->i_dts;
}
else if( p_input->p_fmt->i_codec !=
- VLC_FOURCC('s', 'u', 'b', 't' ) )
+ VLC_CODEC_SUBT )
p_data->i_length = 1000;
if( ( p_pcr_stream->i_pes_dts > 0 &&
else
{
int i_header_size = 0;
+ int i_max_pes_size = 0;
int b_data_alignment = 0;
if( p_input->p_fmt->i_cat == SPU_ES )
{
if( p_input->p_fmt->i_codec ==
- VLC_FOURCC('s','u','b','t') )
+ VLC_CODEC_SUBT )
{
/* Prepend header */
p_data = block_Realloc( p_data, 2,
}
}
else if( p_input->p_fmt->i_codec ==
- VLC_FOURCC('t','e','l','x') )
+ VLC_CODEC_TELETEXT )
{
/* EN 300 472 */
i_header_size = 0x24;
b_data_alignment = 1;
}
else if( p_input->p_fmt->i_codec ==
- VLC_FOURCC('d','v','b','s') )
+ VLC_CODEC_DVBS )
{
/* EN 300 743 */
b_data_alignment = 1;
}
/* 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_data->i_pts = p_data->i_dts;
}
+ if( p_input->p_fmt->i_codec ==
+ VLC_CODEC_DIRAC )
+ {
+ b_data_alignment = 1;
+ /* dirac pes packets should be unbounded in
+ * length, specify a suitibly large max size */
+ i_max_pes_size = INT_MAX;
+ }
+
EStoPES ( p_mux->p_sout, &p_data, p_data,
p_input->p_fmt, p_stream->i_stream_id,
- 1, b_data_alignment, i_header_size, 0 );
+ 1, b_data_alignment, i_header_size,
+ i_max_pes_size );
BufferChainAppend( &p_stream->chain_pes, p_data );
#define STD_PES_PAYLOAD 170
static block_t *FixPES( sout_mux_t *p_mux, block_fifo_t *p_fifo )
{
+ VLC_UNUSED(p_mux);
block_t *p_data;
size_t i_size;
static block_t *TSNew( sout_mux_t *p_mux, ts_stream_t *p_stream,
bool b_pcr )
{
+ VLC_UNUSED(p_mux);
block_t *p_pes = p_stream->chain_pes.p_first;
block_t *p_ts;
}
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;
sout_buffer_chain_t *c, block_t *p_pes,
ts_stream_t *p_stream )
{
+ VLC_UNUSED(p_sout);
uint8_t *p_data;
int i_size;
int b_new_pes;
static block_t *WritePSISection( sout_instance_t *p_sout,
dvbpsi_psi_section_t* p_section )
{
+ VLC_UNUSED(p_sout);
block_t *p_psi, *p_first = NULL;
while( p_section )
bits_write( &bits, 8, 0x21 ); /* Visual 14496-2 */
bits_write( &bits, 6, 0x04 ); /* VisualStream */
}
- else if( p_stream->i_stream_type == 0x11 || p_stream->i_stream_type == 0x0f )
+ else if( p_stream->i_stream_type == 0x11 ||
+ p_stream->i_stream_type == 0x0f )
{
bits_write( &bits, 8, 0x40 ); /* Audio 14496-3 */
bits_write( &bits, 6, 0x05 ); /* AudioStream */
}
else if( p_stream->i_stream_type == 0x12 &&
- p_stream->i_codec == VLC_FOURCC('s','u','b','t') )
+ p_stream->i_codec == VLC_CODEC_SUBT )
{
bits_write( &bits, 8, 0x0B ); /* Text Stream */
bits_write( &bits, 6, 0x04 ); /* VisualStream */
GetDescriptorLength24b( bits.i_data -
bits_fix_IOD.i_data - 3 ) );
-#if 0//def HAVE_BSEARCH /* FIXME!!! This can't possibly work */
+#if 0 /* FIXME!!! This can't possibly work */
i_pidinput = p_mux->pp_inputs[i]->p_fmt->i_id;
p_usepid = bsearch( &i_pidinput, p_sys->pmtmap, p_sys->i_pmtslots,
sizeof(pmt_map_t), intcompare );
p_stream = (ts_stream_t *)p_mux->pp_inputs[i_stream]->p_sys;
-#ifdef HAVE_BSEARCH
i_pidinput = p_mux->pp_inputs[i_stream]->p_fmt->i_id;
p_usepid = bsearch( &i_pidinput, p_sys->pmtmap, p_sys->i_pmtslots,
sizeof(pmt_map_t), intcompare );
p_stream->i_stream_type, p_stream->i_pid );
else
/* If there's an error somewhere, dump it to the first pmt */
-#endif
p_es = dvbpsi_PMTAddES( &p_sys->dvbpmt[0], p_stream->i_stream_type,
p_stream->i_pid );
/* "registration" descriptor : "AC-3" */
dvbpsi_PMTESAddDescriptor( p_es, 0x05, 4, format );
}
- else if( p_stream->i_codec == VLC_FOURCC('d','t','s',' ') )
+ else if( p_stream->i_codec == VLC_CODEC_DIRAC )
+ {
+ /* Dirac registration descriptor */
+
+ uint8_t data[4] = { 'd', 'r', 'a', 'c' };
+ dvbpsi_PMTESAddDescriptor( p_es, 0x05, 4, data );
+ }
+ else if( p_stream->i_codec == VLC_CODEC_DTS )
{
/* DTS registration descriptor (ETSI TS 101 154 Annex F) */
uint8_t data[4] = { 0x44, 0x54, 0x53, 0x32 };
dvbpsi_PMTESAddDescriptor( p_es, 0x05, 4, data );
}
- else if( p_stream->i_codec == VLC_FOURCC('t','e','l','x') )
+ else if( p_stream->i_codec == VLC_CODEC_EAC3 )
+ {
+ uint8_t data[1] = { 0x00 };
+ dvbpsi_PMTESAddDescriptor( p_es, 0x7a, 1, data );
+ }
+ else if( p_stream->i_codec == VLC_CODEC_TELETEXT )
{
if( p_stream->i_decoder_specific_info )
{
}
continue;
}
- else if( p_stream->i_codec == VLC_FOURCC('d','v','b','s') )
+ else if( p_stream->i_codec == VLC_CODEC_DVBS )
{
/* DVB subtitles */
if( p_stream->i_decoder_specific_info )