#include <sys/types.h>
#include <vlc_es.h>
-/** Stream output instance */
+/** Stream output instance (FIXME: should be private to src/ to avoid
+ * invalid unsynchronized access) */
struct sout_instance_t
{
VLC_COMMON_MEMBERS
char *psz_sout;
- /* meta data (Read only) XXX it won't be set before the first packet received */
- vlc_meta_t *p_meta;
-
/** count of output that can't control the space */
int i_out_pace_nocontrol;
vlc_mutex_t lock;
sout_stream_t *p_stream;
-
- /** Private */
- sout_instance_sys_t *p_sys;
};
/****************************************************************************
- * sout_stream_id_t: opaque (private for all sout_stream_t)
+ * sout_stream_id_sys_t: opaque (private for all sout_stream_t)
****************************************************************************/
-typedef struct sout_stream_id_t sout_stream_id_t;
+typedef struct sout_stream_id_sys_t sout_stream_id_sys_t;
/** Stream output access_output */
struct sout_access_out_t
module_t *p_module;
char *psz_access;
- int i_writes;
- /** Local counter reset each time it is transferred to stats */
- int64_t i_sent_bytes;
-
char *psz_path;
sout_access_out_sys_t *p_sys;
int (*pf_seek)( sout_access_out_t *, off_t );
enum access_out_query_e
{
ACCESS_OUT_CONTROLS_PACE, /* arg1=bool *, can fail (assume true) */
+ ACCESS_OUT_CAN_SEEK, /* arg1=bool *, can fail (assume true) */
};
VLC_API sout_access_out_t * sout_AccessOutNew( vlc_object_t *, const char *psz_access, const char *psz_name ) VLC_USED;
struct sout_input_t
{
- sout_instance_t *p_sout;
-
- es_format_t *p_fmt;
- block_fifo_t *p_fifo;
-
- void *p_sys;
+ const es_format_t *p_fmt;
+ block_fifo_t *p_fifo;
+ void *p_sys;
+ es_format_t fmt;
};
VLC_API sout_mux_t * sout_MuxNew( sout_instance_t*, const char *, sout_access_out_t * ) VLC_USED;
-VLC_API sout_input_t * sout_MuxAddStream( sout_mux_t *, es_format_t * ) VLC_USED;
+VLC_API sout_input_t *sout_MuxAddStream( sout_mux_t *, const es_format_t * ) VLC_USED;
VLC_API void sout_MuxDeleteStream( sout_mux_t *, sout_input_t * );
VLC_API void sout_MuxDelete( sout_mux_t * );
-VLC_API void sout_MuxSendBuffer( sout_mux_t *, sout_input_t *, block_t * );
-VLC_API int sout_MuxGetStream(sout_mux_t *, int , mtime_t *);
+VLC_API int sout_MuxSendBuffer( sout_mux_t *, sout_input_t *, block_t * );
+VLC_API int sout_MuxGetStream(sout_mux_t *, unsigned, mtime_t *);
static inline int sout_MuxControl( sout_mux_t *p_mux, int i_query, ... )
{
config_chain_t *p_cfg;
sout_stream_t *p_next;
- /* Subpicture unit */
- spu_t *p_spu;
-
/* add, remove a stream */
- sout_stream_id_t *(*pf_add)( sout_stream_t *, es_format_t * );
- int (*pf_del)( sout_stream_t *, sout_stream_id_t * );
+ sout_stream_id_sys_t *(*pf_add)( sout_stream_t *, const es_format_t * );
+ void (*pf_del)( sout_stream_t *, sout_stream_id_sys_t * );
/* manage a packet */
- int (*pf_send)( sout_stream_t *, sout_stream_id_t *, block_t* );
+ int (*pf_send)( sout_stream_t *, sout_stream_id_sys_t *, block_t* );
- /* private */
sout_stream_sys_t *p_sys;
+ bool pace_nocontrol;
};
VLC_API void sout_StreamChainDelete(sout_stream_t *p_first, sout_stream_t *p_last );
VLC_API sout_stream_t *sout_StreamChainNew(sout_instance_t *p_sout,
char *psz_chain, sout_stream_t *p_next, sout_stream_t **p_last) VLC_USED;
-static inline sout_stream_id_t *sout_StreamIdAdd( sout_stream_t *s, es_format_t *fmt )
+static inline sout_stream_id_sys_t *sout_StreamIdAdd( sout_stream_t *s,
+ const es_format_t *fmt )
{
return s->pf_add( s, fmt );
}
-static inline int sout_StreamIdDel( sout_stream_t *s, sout_stream_id_t *id )
+
+static inline void sout_StreamIdDel( sout_stream_t *s,
+ sout_stream_id_sys_t *id )
{
- return s->pf_del( s, id );
+ s->pf_del( s, id );
}
-static inline int sout_StreamIdSend( sout_stream_t *s, sout_stream_id_t *id, block_t *b )
+
+static inline int sout_StreamIdSend( sout_stream_t *s,
+ sout_stream_id_sys_t *id, block_t *b )
{
return s->pf_send( s, id, b );
}
* Announce handler
****************************************************************************/
VLC_API session_descriptor_t* sout_AnnounceRegisterSDP( vlc_object_t *, const char *, const char * ) VLC_USED;
-VLC_API int sout_AnnounceUnRegister(vlc_object_t *,session_descriptor_t* );
+VLC_API void sout_AnnounceUnRegister(vlc_object_t *,session_descriptor_t* );
#define sout_AnnounceRegisterSDP(o, sdp, addr) \
sout_AnnounceRegisterSDP(VLC_OBJECT (o), sdp, addr)
#define sout_AnnounceUnRegister(o, a) \