* where pid_description could take 3 forms:
* 1. pid:pcr (to force the pcr pid)
* 2. pid:stream_type
- * 3. pid:type:fourcc where type=(video|audio|spu)
+ * 3. pid:type=fourcc where type=(video|audio|spu)
*/
#define PMT_TEXT N_("Extra PMT")
#define PMT_LONGTEXT N_( \
/*****************************************************************************
* Local prototypes
*****************************************************************************/
+static const char *const ppsz_teletext_type[] = {
+ "",
+ N_("Teletext"),
+ N_("Teletext subtitles"),
+ N_("Teletext additional information"),
+ N_("Teletext programme schedule"),
+ N_("Teletext hearing impaired subtitles")
+};
typedef struct
{
/* */
bool b_meta;
+
+ /* */
+ bool b_start_record;
};
static int Demux ( demux_t *p_demux );
p_sys->b_udp_out = false;
p_sys->i_ts_read = 50;
p_sys->csa = NULL;
+ p_sys->b_start_record = false;
/* Init PAT handler */
pat = &p_sys->pid[0];
if( p_sys->buffer[i_pos] != 0x47 )
{
msg_Warn( p_demux, "lost sync" );
- while( !p_demux->b_die && (i_pos < i_data) )
+ while( vlc_object_alive (p_demux) && (i_pos < i_data) )
{
i_pos++;
if( p_sys->buffer[i_pos] == 0x47 )
break;
}
- if( !p_demux->b_die )
+ if( vlc_object_alive (p_demux) )
msg_Warn( p_demux, "sync found" );
}
msg_Warn( p_demux, "lost synchro" );
block_Release( p_pkt );
- while( !p_demux->b_die )
+ while( vlc_object_alive (p_demux) )
{
const uint8_t *p_peek;
int i_peek, i_skip = 0;
}
}
+ if( p_sys->b_start_record )
+ {
+ /* Enable recording once synchronized */
+ stream_Control( p_demux->s, STREAM_SET_RECORD_STATE, true, "ts" );
+ p_sys->b_start_record = false;
+ }
+
if( p_sys->b_udp_out )
{
memcpy( &p_sys->buffer[i_pkt * p_sys->i_packet_size],
{
demux_sys_t *p_sys = p_demux->p_sys;
double f, *pf;
+ bool b_bool, *pb_bool;
int64_t i64;
int64_t *pi64;
int i_int;
return VLC_SUCCESS;
}
+ case DEMUX_CAN_RECORD:
+ pb_bool = (bool*)va_arg( args, bool * );
+ *pb_bool = true;
+ return VLC_SUCCESS;
+
+ case DEMUX_SET_RECORD_STATE:
+ b_bool = (bool)va_arg( args, int );
+
+ if( !b_bool )
+ stream_Control( p_demux->s, STREAM_SET_RECORD_STATE, false );
+ p_sys->b_start_record = b_bool;
+ return VLC_SUCCESS;
+
case DEMUX_GET_FPS:
case DEMUX_SET_TIME:
default:
case 0xBC: /* Program stream map */
case 0xBE: /* Padding */
case 0xBF: /* Private stream 2 */
- case 0xB0: /* ECM */
- case 0xB1: /* EMM */
+ case 0xF0: /* ECM */
+ case 0xF1: /* EMM */
case 0xFF: /* Program stream directory */
case 0xF2: /* DSMCC stream */
case 0xF8: /* ITU-T H.222.1 type E stream */
if( pE->i_text_length > 0 )
{
char *psz_text = EITConvertToUTF8( pE->i_text, pE->i_text_length );
- msg_Dbg( p_demux, " - text='%s'", psz_text );
+ if( psz_text )
+ {
+ msg_Dbg( p_demux, " - text='%s'", psz_text );
- psz_extra = realloc( psz_extra, strlen(psz_extra) + strlen(psz_text) + 1 );
- strcat( psz_extra, psz_text );
- free( psz_text );
+ psz_extra = realloc( psz_extra, strlen(psz_extra) + strlen(psz_text) + 1 );
+ strcat( psz_extra, psz_text );
+ free( psz_text );
+ }
}
for( i = 0; i < pE->i_entry_count; i++ )
else if( !memcmp( p_dr->p_data, "BSSD", 4 ) )
{
pid->es->fmt.i_cat = AUDIO_ES;
- pid->es->fmt.i_codec = VLC_FOURCC('l','p','c','m');
+ pid->es->fmt.b_packetized = true;
+ pid->es->fmt.i_codec = VLC_FOURCC('a','e','s','3');
}
else
{
for( n = 0; n < sub->i_pages_number; n++ )
{
dvbpsi_teletextpage_t *p_page = &sub->p_pages[n];
- if( (p_page->i_teletext_type == 0x2)
- || (p_page->i_teletext_type == 0x5) )
+ if( p_page->i_teletext_type > 0x0 &&
+ p_page->i_teletext_type < 0x6 )
{
ts_es_t *p_es;
p_page->i_iso6392_language_code, 3 );
p_es->fmt.psz_language[3] = 0;
}
- switch( p_page->i_teletext_type )
- {
- case 0x2:
- p_es->fmt.psz_description =
- strdup(_("Teletext subtitles"));
- msg_Dbg( p_demux,
- " * sub lan=%s page=%d%x",
- p_es->fmt.psz_language,
- p_page->i_teletext_magazine_number,
- p_page->i_teletext_page_number );
- break;
+ p_es->fmt.psz_description = strdup(_(ppsz_teletext_type[p_page->i_teletext_type]));
- case 0x5:
- p_es->fmt.psz_description =
- strdup(_("Teletext hearing impaired subtitles"));
- msg_Dbg( p_demux,
- " * hearing impaired lan=%s page=%d%x",
+ msg_Dbg( p_demux,
+ " * ttxt type=%s lan=%s page=%d%02x",
+ p_es->fmt.psz_description,
p_es->fmt.psz_language,
p_page->i_teletext_magazine_number,
p_page->i_teletext_page_number );
- break;
- default:
- break;
- }
+ /* Hack, FIXME This stores the initial page for this track,
+ so that it can be used by the telx and zvbi decoders. */
p_es->fmt.subs.dvb.i_id =
p_page->i_teletext_page_number;
- /* Hack, FIXME */
p_es->fmt.subs.dvb.i_id |=
- ((int)p_page->i_teletext_magazine_number << 16);
+ ((int)p_page->i_teletext_magazine_number << 16);
i++;
}