+ pid->es->fmt.p_extra = p_dr->i_length ?
+ malloc( p_dr->i_length ) : NULL;
+ if( pid->es->fmt.p_extra )
+ memcpy( pid->es->fmt.p_extra, p_dr->p_data,
+ p_dr->i_length );
+
+#if defined _DVBPSI_DR_56_H_ && defined DVBPSI_VERSION \
+ && DVBPSI_VERSION_INT > ((0<<16)+(1<<8)+5)
+ pid->es->fmt.i_group = p_pmt->i_program_number;
+
+ /* In stream output mode, only enable descriptor
+ * pass-through. */
+ if( !p_demux->out->b_sout )
+ {
+ uint16_t n, i = 0;
+ dvbpsi_teletext_dr_t *sub;
+
+ sub = dvbpsi_DecodeTeletextDr( p_dr );
+ if( !sub ) continue;
+
+ /* Each subtitle ES contains n languages,
+ * We are going to create n ES for the n tracks */
+ 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) )
+ {
+ ts_es_t *p_es;
+
+ if( i == 0 )
+ {
+ p_es = pid->es;
+ }
+ else
+ {
+ p_es = malloc( sizeof( ts_es_t ) );
+ if( !p_es ) break;
+
+ es_format_Copy( &p_es->fmt, &pid->es->fmt );
+ free( p_es->fmt.psz_language );
+ free( p_es->fmt.psz_description );
+ p_es->fmt.psz_language = NULL;
+ p_es->fmt.psz_description = NULL;
+ p_es->id = NULL;
+ p_es->p_pes = NULL;
+ p_es->i_pes_size = 0;
+ p_es->i_pes_gathered = 0;
+ p_es->pp_last = &p_es->p_pes;
+ p_es->p_mpeg4desc = NULL;
+
+ TAB_APPEND( pid->i_extra_es, pid->extra_es,
+ p_es );
+ }
+
+ p_es->fmt.psz_language = malloc( 4 );
+ if( p_es->fmt.psz_language )
+ {
+ memcpy( p_es->fmt.psz_language,
+ 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;
+
+ case 0x5:
+ p_es->fmt.psz_description =
+ strdup(_("Teletext hearing impaired subtitles"));
+ msg_Dbg( p_demux,
+ " * hearing impaired lan=%s page=%d%x",
+ p_es->fmt.psz_language,
+ p_page->i_teletext_magazine_number,
+ p_page->i_teletext_page_number );
+ break;
+ default:
+ break;
+ }
+
+ 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);
+
+ i++;
+ }
+ }
+
+ if( !i )
+ pid->es->fmt.i_cat = UNKNOWN_ES;
+ }
+ else
+#endif /* defined _DVBPSI_DR_56_H_ && DVBPSI_VERSION(0,1,6) */
+ {
+ pid->es->fmt.subs.dvb.i_id = -1;
+ pid->es->fmt.psz_description = strdup( "Teletext" );
+ }