-/*
- * i_query parameter of pf_mux_capacity
- */
-/* SOUT_MUX_CAP_GET_ADD_STREAM_ANY_TIME: p_args=NULL, p_answer=&boolean */
-#define SOUT_MUX_CAP_GET_ADD_STREAM_ANY_TIME 0x01
-/* SOUT_MUX_CAP_GET_STREAMABLE: p_args=NULL, p_answer=&boolean */
-#define SOUT_MUX_CAP_GET_STREAMABLE 0x02
-/*
- * return error code
- */
-#define SOUT_MUX_CAP_ERR_OK 0x00
-#define SOUT_MUX_CAP_ERR_UNKNOWN 0x01
-#define SOUT_MUX_CAP_ERR_UNIMPLEMENTED 0x02
-
-typedef struct sout_instance_sys_t sout_instance_sys_t;
-struct sout_instance_t
+
+enum sout_mux_query_e
+{
+ /* capabilities */
+ MUX_CAN_ADD_STREAM_WHILE_MUXING, /* arg1= vlc_bool_t *, res=cannot fail */
+ /* properties */
+ MUX_GET_ADD_STREAM_WAIT, /* arg1= vlc_bool_t *, res=cannot fail */
+ MUX_GET_MIME, /* arg1= char ** res=can fail */
+};
+
+struct sout_input_t
+{
+ sout_instance_t *p_sout;
+
+ es_format_t *p_fmt;
+ block_fifo_t *p_fifo;
+
+ void *p_sys;
+};
+
+
+VLC_EXPORT( sout_mux_t *, sout_MuxNew, ( sout_instance_t*, char *, sout_access_out_t * ) );
+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 * ) );
+
+static inline int sout_MuxControl( sout_mux_t *p_mux, int i_query, ... )
+{
+ va_list args;
+ int i_result;
+
+ va_start( args, i_query );
+ i_result = p_mux->pf_control( p_mux, i_query, args );
+ va_end( args );
+ return i_result;
+}
+
+/****************************************************************************
+ * sout_stream:
+ ****************************************************************************/
+struct sout_stream_t