#include "../mux/mpeg/csa.h"
/* Include dvbpsi headers */
-#ifdef HAVE_DVBPSI_DR_H
-# include <dvbpsi/dvbpsi.h>
-# include <dvbpsi/demux.h>
-# include <dvbpsi/descriptor.h>
-# include <dvbpsi/pat.h>
-# include <dvbpsi/pmt.h>
-# include <dvbpsi/sdt.h>
-# include <dvbpsi/dr.h>
-# include <dvbpsi/psi.h>
-#else
-# include "dvbpsi.h"
-# include "demux.h"
-# include "descriptor.h"
-# include "tables/pat.h"
-# include "tables/pmt.h"
-# include "tables/sdt.h"
-# include "descriptors/dr.h"
-# include "psi.h"
-#endif
+# include <dvbpsi/dvbpsi.h>
+# include <dvbpsi/demux.h>
+# include <dvbpsi/descriptor.h>
+# include <dvbpsi/pat.h>
+# include <dvbpsi/pmt.h>
+# include <dvbpsi/sdt.h>
+# include <dvbpsi/dr.h>
+# include <dvbpsi/psi.h>
/* EIT support */
-#ifdef _DVBPSI_DR_4D_H_
-# define TS_USE_DVB_SI 1
-# ifdef HAVE_DVBPSI_DR_H
-# include <dvbpsi/eit.h>
-# else
-# include "tables/eit.h"
-# endif
-#endif
+# include <dvbpsi/eit.h>
/* TDT support */
#ifdef _DVBPSI_DR_58_H_
# define TS_USE_TDT 1
-# ifdef HAVE_DVBPSI_DR_H
-# include <dvbpsi/tot.h>
-# else
-# include "tables/tot.h"
-# endif
+# include <dvbpsi/tot.h>
#else
# include <time.h>
#endif
#define MTUOUT_TEXT N_("MTU for out mode")
#define MTUOUT_LONGTEXT N_("MTU for out mode.")
-#define CSA_TEXT N_("CSA ck")
-#define CSA_LONGTEXT N_("Control word for the CSA encryption algorithm")
+#define CSA_TEXT N_("CSA Key")
+#define CSA_LONGTEXT N_("CSA encryption key. This must be a " \
+ "16 char string (8 hexadecimal bytes).")
#define CSA2_TEXT N_("Second CSA Key")
#define CSA2_LONGTEXT N_("The even CSA encryption key. This must be a " \
set_subcategory( SUBCAT_INPUT_DEMUX )
add_string( "ts-extra-pmt", NULL, PMT_TEXT, PMT_LONGTEXT, true )
- add_bool( "ts-es-id-pid", true, NULL, PID_TEXT, PID_LONGTEXT, true )
+ add_bool( "ts-es-id-pid", true, PID_TEXT, PID_LONGTEXT, true )
+ change_safe()
add_string( "ts-out", NULL, TSOUT_TEXT, TSOUT_LONGTEXT, true )
- add_integer( "ts-out-mtu", 1400, NULL, MTUOUT_TEXT,
+ add_integer( "ts-out-mtu", 1400, MTUOUT_TEXT,
MTUOUT_LONGTEXT, true )
+
add_string( "ts-csa-ck", NULL, CSA_TEXT, CSA_LONGTEXT, true )
- add_string( "ts-csa2-ck", NULL, CSA_TEXT, CSA_LONGTEXT, true )
- add_integer( "ts-csa-pkt", 188, NULL, CPKT_TEXT, CPKT_LONGTEXT, true )
- add_bool( "ts-silent", false, NULL, SILENT_TEXT, SILENT_LONGTEXT, true )
+ change_safe()
+ add_string( "ts-csa2-ck", NULL, CSA2_TEXT, CSA2_LONGTEXT, true )
+ change_safe()
+ add_integer( "ts-csa-pkt", 188, CPKT_TEXT, CPKT_LONGTEXT, true )
+ change_safe()
+
+ add_bool( "ts-silent", false, SILENT_TEXT, SILENT_LONGTEXT, true )
- add_savefile( "ts-dump-file", NULL, NULL, TSDUMP_TEXT, TSDUMP_LONGTEXT, false )
- add_bool( "ts-dump-append", false, NULL, APPEND_TEXT, APPEND_LONGTEXT, false )
- add_integer( "ts-dump-size", 16384, NULL, DUMPSIZE_TEXT,
+ add_savefile( "ts-dump-file", NULL, TSDUMP_TEXT, TSDUMP_LONGTEXT, false )
+ add_bool( "ts-dump-append", false, APPEND_TEXT, APPEND_LONGTEXT, false )
+ add_integer( "ts-dump-size", 16384, DUMPSIZE_TEXT,
DUMPSIZE_LONGTEXT, true )
- add_bool( "ts-split-es", true, NULL, SPLIT_ES_TEXT, SPLIT_ES_LONGTEXT, false )
+ add_bool( "ts-split-es", true, SPLIT_ES_TEXT, SPLIT_ES_LONGTEXT, false )
set_capability( "demux", 10 )
set_callbacks( Open, Close )
static void PATCallBack( demux_t *, dvbpsi_pat_t * );
static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt );
-#ifdef TS_USE_DVB_SI
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 )
* http://www.i-topfield.com/data/product/firmware/Structure%20of%20Recorded%20File%20in%20TF5000PVR%20(Feb%2021%202004).doc
* but after the filename the offsets seem to be incorrect. - DJ */
int i_duration, i_name;
- char *psz_name = malloc(25);
+ char *psz_name = xmalloc(25);
char *psz_event_name;
- char *psz_event_text = malloc(130);
- char *psz_ext_text = malloc(1025);
+ char *psz_event_text = xmalloc(130);
+ char *psz_ext_text = xmalloc(1025);
// 2 bytes version Uimsbf (4,5)
// 2 bytes reserved (6,7)
// 1 byte event name length Uimsbf (89)
i_name = (int)(p_peek[89]&~0x81);
msg_Dbg( p_demux, "event name length = %d", i_name);
- psz_event_name = malloc( i_name+1 );
+ psz_event_name = xmalloc( i_name+1 );
// 1 byte parental rating (90)
// 129 bytes of event text
memcpy( psz_event_name, &p_peek[91], i_name );
PIDInit( pat, true, NULL );
pat->psi->handle = dvbpsi_AttachPAT( (dvbpsi_pat_callback)PATCallBack,
p_demux );
-#ifdef TS_USE_DVB_SI
if( p_sys->b_dvb_meta )
{
ts_pid_t *sdt = &p_sys->pid[0x11];
p_sys->b_access_control = false;
}
}
-#endif
/* Init PMT array */
TAB_INIT( p_sys->i_pmt, p_sys->pmt );
{
p_sys->i_ts_read = 1500 / p_sys->i_packet_size;
}
- p_sys->buffer = malloc( p_sys->i_packet_size * p_sys->i_ts_read );
+ p_sys->buffer = xmalloc( p_sys->i_packet_size * p_sys->i_ts_read );
}
}
free( psz_string );
if( !b_old_valid )
{
pid->psi = xmalloc( sizeof( ts_psi_t ) );
- if( pid->psi )
- {
- pid->psi->handle = NULL;
- TAB_INIT( pid->psi->i_prg, pid->psi->prg );
- }
+ pid->psi->handle = NULL;
+ TAB_INIT( pid->psi->i_prg, pid->psi->prg );
}
assert( pid->psi );
/* FIXME find real max size */
/* const int i_max = */ block_ChainExtract( p_pes, header, 34 );
-
+
if( header[0] != 0 || header[1] != 0 || header[2] != 1 )
{
if( !p_demux->p_sys->b_silent )
- msg_Warn( p_demux, "invalid header [0x%x:%x:%x:%x] (pid: %d)",
+ msg_Warn( p_demux, "invalid header [0x%02x:%02x:%02x:%02x] (pid: %d)",
header[0], header[1],header[2],header[3], pid->i_pid );
block_ChainRelease( p_pes );
return;
}
/* Append a \0 */
p_block = block_Realloc( p_block, 0, p_block->i_buffer + 1 );
+ if( !p_block )
+ abort();
p_block->p_buffer[p_block->i_buffer -1] = '\0';
}
if( dec_descr.i_decoder_specific_info_len > 0 )
{
dec_descr.p_decoder_specific_info =
- malloc( dec_descr.i_decoder_specific_info_len );
+ xmalloc( dec_descr.i_decoder_specific_info_len );
}
for( i = 0; i < dec_descr.i_decoder_specific_info_len; i++ )
{
p_sys->b_dvb_meta = false;
}
+#include "dvb-text.h"
-#ifdef TS_USE_DVB_SI
-/* FIXME same than dvbsi_to_utf8 from dvb access */
static char *EITConvertToUTF8( const unsigned char *psz_instring,
size_t i_length,
bool b_broken )
{
- const char *psz_encoding;
- char *psz_outstring;
- char psz_encbuf[sizeof( "ISO_8859-123" )];
- size_t i_in, i_out, offset = 1;
- vlc_iconv_t iconv_handle;
-
- if( i_length < 1 ) return NULL;
- if( psz_instring[0] >= 0x20 )
- {
- /* According to ETSI EN 300 468 Annex A, this should be ISO6937,
- * but some broadcasters use different charset... */
- if( b_broken )
- psz_encoding = "ISO_8859-1";
- else
- psz_encoding = "ISO_6937";
-
- offset = 0;
- }
- else switch( psz_instring[0] )
- {
- case 0x01:
- psz_encoding = "ISO_8859-5";
- break;
- case 0x02:
- psz_encoding = "ISO_8859-6";
- break;
- case 0x03:
- psz_encoding = "ISO_8859-7";
- break;
- case 0x04:
- psz_encoding = "ISO_8859-8";
- break;
- case 0x05:
- psz_encoding = "ISO_8859-9";
- break;
- case 0x06:
- psz_encoding = "ISO_8859-10";
- break;
- case 0x07:
- psz_encoding = "ISO_8859-11";
- break;
- case 0x08:
- psz_encoding = "ISO_8859-12";
- break;
- case 0x09:
- psz_encoding = "ISO_8859-13";
- break;
- case 0x0a:
- psz_encoding = "ISO_8859-14";
- break;
- case 0x0b:
- psz_encoding = "ISO_8859-15";
- break;
- case 0x10:
-#warning Is Latin-10 (psz_instring[2] == 16) really illegal?
- if( i_length < 3 || psz_instring[1] != 0x00 || psz_instring[2] > 15
- || psz_instring[2] == 0 )
- {
- psz_encoding = "UTF-8";
- offset = 0;
- }
- else
- {
- sprintf( psz_encbuf, "ISO_8859-%u", psz_instring[2] );
- psz_encoding = psz_encbuf;
- offset = 3;
- }
- break;
- case 0x11:
-#warning Is there a BOM or do we use a fixed endianess?
- psz_encoding = "UTF-16";
- break;
- case 0x12:
- psz_encoding = "KSC5601-1987";
- break;
- case 0x13:
- psz_encoding = "GB2312"; /* GB-2312-1980 */
- break;
- case 0x14:
- psz_encoding = "BIG-5";
- break;
- case 0x15:
- psz_encoding = "UTF-8";
- break;
- default:
- /* invalid */
- psz_encoding = "UTF-8";
- offset = 0;
- }
-
- i_in = i_length - offset;
- i_out = i_in * 6 + 1;
-
- psz_outstring = malloc( i_out );
- if( !psz_outstring )
- {
- return NULL;
- }
-
- iconv_handle = vlc_iconv_open( "UTF-8", psz_encoding );
- if( iconv_handle == (vlc_iconv_t)(-1) )
- {
- /* Invalid character set (e.g. ISO_8859-12) */
- memcpy( psz_outstring, &psz_instring[offset], i_in );
- psz_outstring[i_in] = '\0';
- EnsureUTF8( psz_outstring );
- }
- else
- {
- const char *psz_in = (const char *)&psz_instring[offset];
- char *psz_out = psz_outstring;
-
- while( vlc_iconv( iconv_handle, &psz_in, &i_in,
- &psz_out, &i_out ) == (size_t)(-1) )
- {
- /* skip naughty byte. This may fail terribly for multibyte stuff,
- * but what can we do anyway? */
- psz_in++;
- i_in--;
- vlc_iconv( iconv_handle, NULL, NULL, NULL, NULL ); /* reset */
- }
- vlc_iconv_close( iconv_handle );
-
- *psz_out = '\0';
-
- /* Convert EIT-coded CR/LFs */
- unsigned char *pbuf = (unsigned char *)psz_outstring;
- for( ; pbuf < (unsigned char *)psz_out ; pbuf++)
- {
- if( pbuf[0] == 0xc2 && pbuf[1] == 0x8a )
- {
- pbuf[0] = ' ';
- pbuf[1] = '\n';
- }
- }
-
-
- }
- return psz_outstring;
+ if( b_broken )
+ return FromCharset( "ISO_8859-1", psz_instring, i_length );
+ return vlc_from_EIT( psz_instring, i_length );
}
static void SDTCallBack( demux_t *p_demux, dvbpsi_sdt_t *p_sdt )
{
const size_t i_length = strlen(ppsz_broken_providers[i]);
if( pD->i_service_provider_name_length == i_length &&
- !strncmp( pD->i_service_provider_name, ppsz_broken_providers[i], i_length ) )
+ !strncmp( (char *)pD->i_service_provider_name, ppsz_broken_providers[i], i_length ) )
p_sys->b_broken_charset = true;
}
#endif
}
-#endif
/*****************************************************************************
* PMT callback and helpers
/* */
const dvbpsi_subtitle_t *p = &p_sub->p_subtitle[i];
- p_es->fmt.psz_language = strndup( p->i_iso6392_language_code, 3 );
+ p_es->fmt.psz_language = strndup( (char *)p->i_iso6392_language_code, 3 );
switch( p->i_subtitling_type )
{
case 0x10: /* unspec. */