* modules/demux/ts.c: Fixed stream output mode detection.
authorChristophe Massiot <massiot@videolan.org>
Tue, 23 Jan 2007 17:50:32 +0000 (17:50 +0000)
committerChristophe Massiot <massiot@videolan.org>
Tue, 23 Jan 2007 17:50:32 +0000 (17:50 +0000)
include/vlc_es_out.h
modules/demux/ts.c
src/input/es_out.c

index 10a1723..03ea27a 100644 (file)
@@ -94,6 +94,7 @@ struct es_out_t
     int          (*pf_send)   ( es_out_t *, es_out_id_t *, block_t * );
     void         (*pf_del)    ( es_out_t *, es_out_id_t * );
     int          (*pf_control)( es_out_t *, int i_query, va_list );
+    vlc_bool_t      b_sout;
 
     es_out_sys_t    *p_sys;
 };
index 2b505a6..2a4c6ec 100644 (file)
@@ -3025,12 +3025,9 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
                     && DVBPSI_VERSION_INT > ((0<<16)+(1<<8)+5)
                     pid->es->fmt.i_group = p_pmt->i_program_number;
 
-                    /* If i_dvb_program == -1 it means the user specified
-                     * --sout-all or --programs, so she want to stream, and
-                     * she doesn't want to stream several identical ESes
-                     * with different language descriptors. So for -1 we
-                     * just enable descriptor pass-through. --Meuuh */
-                    if( p_sys->i_dvb_program != -1 )
+                    /* 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;
@@ -3110,10 +3107,12 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
                         if( !i )
                             pid->es->fmt.i_cat = UNKNOWN_ES;
                     }
-#else
-                    pid->es->fmt.subs.dvb.i_id = -1;
-                    pid->es->fmt.psz_description = strdup( "Teletext" );
+                    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" );
+                    }
                 }
                 else if( p_dr->i_tag == 0x59 )
                 {
@@ -3128,12 +3127,9 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
 #ifdef _DVBPSI_DR_59_H_
                     pid->es->fmt.i_group = p_pmt->i_program_number;
 
-                    /* If i_dvb_program == -1 it means the user specified
-                     * --sout-all or --programs, so she want to stream, and
-                     * she doesn't want to stream several identical ESes
-                     * with different language descriptors. So for -1 we
-                     * just enable descriptor pass-through. --Meuuh */
-                    if( p_sys->i_dvb_program != -1 )
+                    /* In stream output mode, only enable descriptor
+                     * pass-through. */
+                    if( !p_demux->out->b_sout )
                     {
                         uint16_t n, i = 0;
                         dvbpsi_subtitling_dr_t *sub;
@@ -3220,7 +3216,12 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
                         if( !i )
                             pid->es->fmt.i_cat = UNKNOWN_ES;
                     }
+                    else
 #endif /* _DVBPSI_DR_59_H_ */
+                    {
+                        pid->es->fmt.subs.dvb.i_id = -1;
+                        pid->es->fmt.psz_description = strdup( "DVB subtitles" );
+                    }
                 }
             }
         }
index 275daab..98f4fa0 100644 (file)
@@ -151,6 +151,7 @@ es_out_t *input_EsOutNew( input_thread_t *p_input )
     out->pf_del     = EsOutDel;
     out->pf_control = EsOutControl;
     out->p_sys      = p_sys;
+    out->b_sout     = (p_input->p->p_sout != NULL ? VLC_TRUE : VLC_FALSE);
 
     p_sys->p_input = p_input;