]> git.sesse.net Git - vlc/commitdiff
move MuxGetStream() to libvlccore, bump plugin ABI
authorRafaël Carré <rafael.carre@gmail.com>
Tue, 8 Dec 2009 11:37:49 +0000 (12:37 +0100)
committerRafaël Carré <rafael.carre@gmail.com>
Tue, 8 Dec 2009 11:37:49 +0000 (12:37 +0100)
include/vlc_plugin.h
include/vlc_sout.h
modules/mux/asf.c
modules/mux/mp4.c
modules/mux/mpeg/ps.c
modules/mux/ogg.c
src/stream_output/stream_output.c

index 79d975aee69000d9646e733df1b26d0d6f5ee42d..9854dd2c3fd85bced5d3b4a8ec305e8ccb647a72 100644 (file)
@@ -120,8 +120,8 @@ enum vlc_module_properties
 /**
  * Current plugin ABI version
  */
-# define MODULE_SYMBOL 1_1_0d
-# define MODULE_SUFFIX "__1_1_0d"
+# define MODULE_SYMBOL 1_1_0e
+# define MODULE_SUFFIX "__1_1_0e"
 
 /*****************************************************************************
  * Add a few defines. You do not want to read this section. Really.
index e35d5e948e691e7e92041d0757c59291da7e22ca..2972b060b0ee3a049e9867a539354c098110ba33 100644 (file)
@@ -183,6 +183,7 @@ VLC_EXPORT( sout_input_t *, sout_MuxAddStream,    ( sout_mux_t *, es_format_t *
 VLC_EXPORT( void,           sout_MuxDeleteStream, ( sout_mux_t *, sout_input_t * ) );
 VLC_EXPORT( void,           sout_MuxDelete,       ( sout_mux_t * ) );
 VLC_EXPORT( void,           sout_MuxSendBuffer, ( sout_mux_t *, sout_input_t  *, block_t * ) );
+VLC_EXPORT( int,            sout_MuxGetStream, (sout_mux_t *, int , mtime_t *));
 
 static inline int sout_MuxControl( sout_mux_t *p_mux, int i_query, ... )
 {
index 323bc07e64ac1e167bd0e3030d773d34ffa91f3e..d937bc754c5c3f30fef050deb9eaab9d8fad60cf 100644 (file)
@@ -161,8 +161,6 @@ struct sout_mux_sys_t
     char            *psz_rating;
 };
 
-static int MuxGetStream( sout_mux_t *, int *pi_stream, mtime_t *pi_dts );
-
 static block_t *asf_header_create( sout_mux_t *, bool );
 static block_t *asf_packet_create( sout_mux_t *, asf_track_t *, block_t * );
 static block_t *asf_stream_end_create( sout_mux_t *);
@@ -695,12 +693,12 @@ static int Mux( sout_mux_t *p_mux )
     {
         sout_input_t  *p_input;
         asf_track_t   *tk;
-        int           i_stream;
         mtime_t       i_dts;
         block_t *data;
         block_t *pk;
 
-        if( MuxGetStream( p_mux, &i_stream, &i_dts ) )
+        int i_stream = sout_MuxGetStream( p_mux, 1, &i_dts );
+        if( i_stream < 0 )
         {
             /* not enough data */
             return VLC_SUCCESS;
@@ -747,43 +745,6 @@ static int Mux( sout_mux_t *p_mux )
     return VLC_SUCCESS;
 }
 
-static int MuxGetStream( sout_mux_t *p_mux, int *pi_stream, mtime_t *pi_dts )
-{
-    mtime_t i_dts;
-    int     i_stream;
-    int     i;
-
-    for( i = 0, i_dts = 0, i_stream = -1; i < p_mux->i_nb_inputs; i++ )
-    {
-        sout_input_t  *p_input = p_mux->pp_inputs[i];
-        block_t *p_data;
-
-        if( block_FifoCount( p_input->p_fifo ) <= 0 )
-        {
-            if( p_input->p_fmt->i_cat == AUDIO_ES ||
-                p_input->p_fmt->i_cat == VIDEO_ES )
-            {
-                /* We need that audio+video fifo contain at least 1 packet */
-                return VLC_EGENERIC;
-            }
-            /* SPU */
-            continue;
-        }
-
-        p_data = block_FifoShow( p_input->p_fifo );
-        if( i_stream == -1 || p_data->i_dts < i_dts )
-        {
-            i_stream = i;
-            i_dts    = p_data->i_dts;
-        }
-    }
-
-    *pi_stream = i_stream;
-    *pi_dts = i_dts;
-
-    return VLC_SUCCESS;
-}
-
 /****************************************************************************
  * Asf header construction
  ****************************************************************************/
index 9050821d74e4798896a18ee58dac6646b2435b74..bfd9866c58d192afc7a80fdc62b8e981ee7d54f8 100644 (file)
@@ -452,44 +452,6 @@ static int DelStream( sout_mux_t *p_mux, sout_input_t *p_input )
     return VLC_SUCCESS;
 }
 
-static int MuxGetStream( sout_mux_t *p_mux, int *pi_stream, mtime_t *pi_dts )
-{
-    mtime_t i_dts;
-    int     i_stream, i;
-
-    for( i = 0, i_dts = 0, i_stream = -1; i < p_mux->i_nb_inputs; i++ )
-    {
-        block_fifo_t   *p_fifo = p_mux->pp_inputs[i]->p_fifo;
-        block_t *p_buf;
-
-        if( block_FifoCount( p_fifo ) <= 1 )
-        {
-            if( p_mux->pp_inputs[i]->p_fmt->i_cat != SPU_ES )
-            {
-                return -1; // wait that all fifo have at least 2 packets
-            }
-            /* For SPU, we wait only 1 packet */
-            continue;
-        }
-
-        p_buf = block_FifoShow( p_fifo );
-        if( i_stream < 0 || p_buf->i_dts < i_dts )
-        {
-            i_dts = p_buf->i_dts;
-            i_stream = i;
-        }
-    }
-    if( pi_stream )
-    {
-        *pi_stream = i_stream;
-    }
-    if( pi_dts )
-    {
-        *pi_dts = i_dts;
-    }
-    return i_stream;
-}
-
 /*****************************************************************************
  * Mux:
  *****************************************************************************/
@@ -500,12 +462,12 @@ static int Mux( sout_mux_t *p_mux )
     for( ;; )
     {
         sout_input_t    *p_input;
-        int             i_stream;
         mp4_stream_t    *p_stream;
         block_t         *p_data;
         mtime_t         i_dts;
 
-        if( MuxGetStream( p_mux, &i_stream, &i_dts) < 0 )
+        int i_stream = sout_MuxGetStream( p_mux, 2, &i_dts);
+        if( i_stream < 0 )
         {
             return( VLC_SUCCESS );
         }
index a7e4ef5f7266d74875022f7e628e4452bb84a6de..b80c287349aabc81ddd407893961cdc44837e6de 100644 (file)
@@ -89,7 +89,6 @@ static int Mux      ( sout_mux_t * );
 /*****************************************************************************
  * Local prototypes
  *****************************************************************************/
-static int  MuxGetStream        ( sout_mux_t *, int *, mtime_t * );
 
 static void MuxWritePackHeader  ( sout_mux_t *, block_t **, mtime_t );
 static void MuxWriteSystemHeader( sout_mux_t *, block_t **, mtime_t );
@@ -457,10 +456,10 @@ static int Mux( sout_mux_t *p_mux )
         block_t *p_ps, *p_data;
 
         mtime_t        i_dts;
-        int            i_stream;
 
         /* Choose which stream to mux */
-        if( MuxGetStream( p_mux, &i_stream, &i_dts ) )
+        int i_stream = sout_MuxGetStream( p_mux, 1, &i_dts );
+        if( i_stream < 0 )
         {
             return VLC_SUCCESS;
         }
@@ -799,43 +798,3 @@ static void MuxWritePSM( sout_mux_t *p_mux, block_t **p_buf, mtime_t i_dts )
 
     block_ChainAppend( p_buf, p_hdr );
 }
-
-/*
- * Find stream to be muxed.
- */
-static int MuxGetStream( sout_mux_t *p_mux, int *pi_stream, mtime_t *pi_dts )
-{
-    mtime_t i_dts;
-    int     i_stream, i;
-
-    for( i = 0, i_dts = 0, i_stream = -1; i < p_mux->i_nb_inputs; i++ )
-    {
-        sout_input_t *p_input = p_mux->pp_inputs[i];
-        block_t *p_data;
-
-        if( block_FifoCount( p_input->p_fifo ) <= 0 )
-        {
-            if( p_input->p_fmt->i_cat == AUDIO_ES ||
-                p_input->p_fmt->i_cat == VIDEO_ES )
-            {
-                /* We need that audio+video fifo contain at least 1 packet */
-                return VLC_EGENERIC;
-            }
-
-            /* SPU */
-            continue;
-        }
-
-        p_data = block_FifoShow( p_input->p_fifo );
-        if( i_stream == -1 || p_data->i_dts < i_dts )
-        {
-            i_stream = i;
-            i_dts    = p_data->i_dts;
-        }
-    }
-
-    *pi_stream = i_stream;
-    *pi_dts = i_dts;
-
-    return VLC_SUCCESS;
-}
index 2f2310681d65cab9c44ad1c8dd750b782b40c28d..2aaa3693bff52d7ed0fbe8b6d3a8f3006baa6842 100644 (file)
@@ -127,43 +127,6 @@ typedef struct
 
 } oggds_header_t;
 
-/*
- * TODO  move this function to src/stream_output.c (used by nearly all muxers)
- */
-static int MuxGetStream( sout_mux_t *p_mux, int *pi_stream, mtime_t *pi_dts )
-{
-    mtime_t i_dts = 0;
-    int     i_stream = -1;
-
-    for( int i = 0; i < p_mux->i_nb_inputs; i++ )
-    {
-        block_fifo_t  *p_fifo;
-
-        p_fifo = p_mux->pp_inputs[i]->p_fifo;
-
-        /* We don't really need to have anything in the SPU fifo */
-        if( p_mux->pp_inputs[i]->p_fmt->i_cat == SPU_ES &&
-            block_FifoCount( p_fifo ) == 0 ) continue;
-
-        if( block_FifoCount( p_fifo ) )
-        {
-            block_t *p_buf;
-
-            p_buf = block_FifoShow( p_fifo );
-            if( i_stream < 0 || p_buf->i_dts < i_dts )
-            {
-                i_dts = p_buf->i_dts;
-                i_stream = i;
-            }
-        }
-        else return -1;
-
-    }
-    if( pi_stream ) *pi_stream = i_stream;
-    if( pi_dts ) *pi_dts = i_dts;
-    return i_stream;
-}
-
 /*****************************************************************************
  * Definitions of structures and functions used by this plugins
  *****************************************************************************/
@@ -896,13 +859,12 @@ static int Mux( sout_mux_t *p_mux )
 {
     sout_mux_sys_t *p_sys = p_mux->p_sys;
     block_t        *p_og = NULL;
-    int            i_stream;
     mtime_t        i_dts;
 
     if( p_sys->i_add_streams || p_sys->i_del_streams )
     {
         /* Open new ogg stream */
-        if( MuxGetStream( p_mux, &i_stream, &i_dts) < 0 )
+        if( sout_MuxGetStream( p_mux, 1, &i_dts) < 0 )
         {
             msg_Dbg( p_mux, "waiting for data..." );
             return VLC_SUCCESS;
@@ -941,7 +903,9 @@ static int Mux( sout_mux_t *p_mux )
 
     for( ;; )
     {
-        if( MuxGetStream( p_mux, &i_stream, 0 ) < 0 ) return VLC_SUCCESS;
+        int i_stream = sout_MuxGetStream( p_mux, 1, NULL );
+        if( i_stream < 0 )
+            return VLC_SUCCESS;
         MuxBlock( p_mux, p_mux->pp_inputs[i_stream] );
     }
 
index dfc2f235cbf36894e6457d711f6da543f432ac31..8fbfbb0aeec3996b065bd46a22da951bc67a1c68 100644 (file)
@@ -615,6 +615,44 @@ void sout_MuxSendBuffer( sout_mux_t *p_mux, sout_input_t *p_input,
     p_mux->pf_mux( p_mux );
 }
 
+
+/*****************************************************************************
+ * sout_MuxGetStream: find stream to be muxed
+ *****************************************************************************/
+int sout_MuxGetStream( sout_mux_t *p_mux, int i_blocks, mtime_t *pi_dts )
+{
+    mtime_t i_dts = 0;
+    int     i_stream = -1;
+
+    for( int i = 0; i < p_mux->i_nb_inputs; i++ )
+    {
+        sout_input_t *p_input = p_mux->pp_inputs[i];
+        block_t *p_data;
+
+        if( block_FifoCount( p_input->p_fifo ) < i_blocks )
+        {
+            if( p_input->p_fmt->i_cat != SPU_ES )
+            {
+                return -1;
+            }
+            /* FIXME: SPU muxing */
+            continue;
+        }
+
+        p_data = block_FifoShow( p_input->p_fifo );
+        if( i_stream < 0 || p_data->i_dts < i_dts )
+        {
+            i_stream = i;
+            i_dts    = p_data->i_dts;
+        }
+    }
+
+    if( pi_dts ) *pi_dts = i_dts;
+
+    return i_stream;
+}
+
+
 /*****************************************************************************
  *
  *****************************************************************************/