* ts: clean my last commit for SPU. Btw, report any regression.
[vlc.git] / modules / mux / mpeg / ts.c
index 6fc8b7f..5a28f26 100644 (file)
@@ -2,7 +2,7 @@
  * ts.c: MPEG-II TS Muxer
  *****************************************************************************
  * Copyright (C) 2001, 2002 VideoLAN
  * ts.c: MPEG-II TS Muxer
  *****************************************************************************
  * Copyright (C) 2001, 2002 VideoLAN
- * $Id: ts.c,v 1.30 2003/08/26 00:52:38 fenrir Exp $
+ * $Id: ts.c,v 1.31 2003/08/26 01:04:29 fenrir Exp $
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *          Eric Petit <titer@videolan.org>
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *          Eric Petit <titer@videolan.org>
@@ -700,8 +700,8 @@ static int TSFill( sout_mux_t *p_mux, sout_input_t *p_input )
 
     ts_stream_t     *p_pcr_stream = (ts_stream_t*)p_sys->p_pcr_input->p_sys;
     ts_stream_t     *p_stream = (ts_stream_t*)p_input->p_sys;
 
     ts_stream_t     *p_pcr_stream = (ts_stream_t*)p_sys->p_pcr_input->p_sys;
     ts_stream_t     *p_stream = (ts_stream_t*)p_input->p_sys;
-    mtime_t         i_dts, i_dts_next,i_length;
-    sout_buffer_t   *p_data, *p_next;
+    mtime_t         i_dts, i_length;
+    sout_buffer_t   *p_data;
     vlc_bool_t      b_pcr = VLC_FALSE;
     vlc_bool_t      b_pcr_soft = VLC_FALSE;
 
     vlc_bool_t      b_pcr = VLC_FALSE;
     vlc_bool_t      b_pcr_soft = VLC_FALSE;
 
@@ -716,8 +716,9 @@ static int TSFill( sout_mux_t *p_mux, sout_input_t *p_input )
                 /* We need more data */
                 return VLC_EGENERIC;
             }
                 /* We need more data */
                 return VLC_EGENERIC;
             }
-            else
+            else if( p_input->p_fifo->i_depth <= 0 )
             {
             {
+                /* spu, only one packet is needed */
                 return VLC_SUCCESS;
             }
         }
                 return VLC_SUCCESS;
             }
         }
@@ -725,14 +726,17 @@ static int TSFill( sout_mux_t *p_mux, sout_input_t *p_input )
         i_dts    = p_data->i_dts;
         i_length = p_data->i_length;
 
         i_dts    = p_data->i_dts;
         i_length = p_data->i_length;
 
-        p_next = sout_FifoShow( p_input->p_fifo );
-        i_dts_next = p_next->i_dts;
-
         if(  p_stream->i_pid == p_pcr_stream->i_pid &&
              p_stream->chain_ts.p_first == NULL )
         {
             /* I need that length == dts_next - dts, but be carefull if
              * some dts are broken length >= 0.5s are suspicious */
         if(  p_stream->i_pid == p_pcr_stream->i_pid &&
              p_stream->chain_ts.p_first == NULL )
         {
             /* I need that length == dts_next - dts, but be carefull if
              * some dts are broken length >= 0.5s are suspicious */
+            sout_buffer_t   *p_next;
+            mtime_t         i_dts_next;
+
+            p_next = sout_FifoShow( p_input->p_fifo );
+            i_dts_next = p_next->i_dts;
+
             if( i_dts_next > i_dts &&
                 i_dts_next - i_dts < (mtime_t)500000 )
             {
             if( i_dts_next > i_dts &&
                 i_dts_next - i_dts < (mtime_t)500000 )
             {