X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_vlm.h;h=c9f68f257177cd835f18bd81005455fe62fa61f7;hb=12ade3e3bc975d5426ba4af155b7372c31093b31;hp=9bbb4a57cd45b0302b49b0ebd11b288c520249af;hpb=449fd28aaf007c6411251dae9d0dbfdc65b135d1;p=vlc diff --git a/include/vlc_vlm.h b/include/vlc_vlm.h index 9bbb4a57cd..c9f68f2571 100644 --- a/include/vlc_vlm.h +++ b/include/vlc_vlm.h @@ -22,55 +22,61 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -#if !defined( __LIBVLC__ ) - #error You are not libvlc or one of its plugins. You cannot include this file -#endif +#ifndef VLC_VLM_H +#define VLC_VLM_H 1 -#ifndef _VLC_VLM_H -#define _VLC_VLM_H 1 +/** + * \file + * This file defines VLM core functions and structures in vlc + */ #include -/* VLM media */ +/** + * \defgroup server VLM + * VLM is the server core in vlc that allows streaming of multiple media streams + * at the same time. It provides broadcast, schedule and video on demand features + * for streaming using several streaming and network protocols. + * @{ + */ + +/** VLM media */ typedef struct { - int64_t id; - bool b_enabled; + int64_t id; /*< numeric id for vlm_media_t item */ + bool b_enabled; /*< vlm_media_t is enabled */ - /* */ - char *psz_name; + char *psz_name; /*< descriptive name of vlm_media_t item */ - /* */ - int i_input; - char **ppsz_input; + int i_input; /*< number of input options */ + char **ppsz_input; /*< array of input options */ - int i_option; - char **ppsz_option; + int i_option; /*< number of output options */ + char **ppsz_option; /*< array of output options */ - char *psz_output; + char *psz_output; /*< */ - /* */ - bool b_vod; + bool b_vod; /*< vlm_media_t is of type VOD */ struct { - bool b_loop; - } broadcast; + bool b_loop; /*< this vlc_media_t broadcast item should loop */ + } broadcast; /*< Broadcast specific information */ struct { - char *psz_mux; - } vod; + char *psz_mux; /*< name of muxer to use */ + } vod; /*< VOD specific information */ } vlm_media_t; -/* VLM media instance */ +/** VLM media instance */ typedef struct { - char *psz_name; + char *psz_name; /*< vlm media instance descriptive name */ - int64_t i_time; - int64_t i_length; - double d_position; - bool b_paused; + int64_t i_time; /*< vlm media instance vlm media current time */ + int64_t i_length; /*< vlm media instance vlm media item length */ + double d_position; /*< vlm media instance position in stream */ + bool b_paused; /*< vlm media instance is paused */ int i_rate; // normal is INPUT_RATE_DEFAULT } vlm_media_instance_t; @@ -81,7 +87,34 @@ typedef struct } vlm_schedule_t #endif -/* VLM control query */ +/** VLM events + * You can catch vlm event by adding a callback on the variable "intf-event" + * of the VLM object. + * This variable is an address that will hold a vlm_event_t* value. + */ +enum vlm_event_type_e +{ + /* */ + VLM_EVENT_MEDIA_ADDED = 0x100, + VLM_EVENT_MEDIA_REMOVED, + VLM_EVENT_MEDIA_CHANGED, + + /* */ + VLM_EVENT_MEDIA_INSTANCE_STARTED = 0x200, + VLM_EVENT_MEDIA_INSTANCE_STOPPED, + VLM_EVENT_MEDIA_INSTANCE_STATE, +}; + +typedef struct +{ + int i_type; /* a vlm_event_type_e value */ + int64_t id; /* Media ID */ + const char *psz_name; /* Media name */ + const char *psz_instance_name; /* Instance name or NULL */ + input_state_e input_state; /* Input instance event type */ +} vlm_event_t; + +/** VLM control query */ enum vlm_query_e { /* --- Media control */ @@ -139,11 +172,11 @@ enum vlm_query_e If a node has children, it should not have a value (=NULL).*/ struct vlm_message_t { - char *psz_name; - char *psz_value; + char *psz_name; /*< message name */ + char *psz_value; /*< message value */ - int i_child; - vlm_message_t **child; + int i_child; /*< number of child messages */ + vlm_message_t **child; /*< array of vlm_message_t */ }; @@ -151,17 +184,23 @@ struct vlm_message_t extern "C" { #endif -#define vlm_New( a ) __vlm_New( VLC_OBJECT(a) ) -VLC_EXPORT( vlm_t *, __vlm_New, ( vlc_object_t * ) ); +VLC_EXPORT( vlm_t *, vlm_New, ( vlc_object_t * ) ); +#define vlm_New( a ) vlm_New( VLC_OBJECT(a) ) VLC_EXPORT( void, vlm_Delete, ( vlm_t * ) ); VLC_EXPORT( int, vlm_ExecuteCommand, ( vlm_t *, const char *, vlm_message_t ** ) ); VLC_EXPORT( int, vlm_Control, ( vlm_t *p_vlm, int i_query, ... ) ); -VLC_EXPORT( vlm_message_t *, vlm_MessageNew, ( const char *, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) ); +VLC_EXPORT( vlm_message_t *, vlm_MessageSimpleNew, ( const char * ) ); +VLC_EXPORT( vlm_message_t *, vlm_MessageNew, ( const char *, const char *, ... ) LIBVLC_FORMAT( 2, 3 ) ); VLC_EXPORT( vlm_message_t *, vlm_MessageAdd, ( vlm_message_t *, vlm_message_t * ) ); VLC_EXPORT( void, vlm_MessageDelete, ( vlm_message_t * ) ); /* media helpers */ + +/** + * Initialize a vlm_media_t instance + * \param p_media vlm_media_t instance to initialize + */ static inline void vlm_media_Init( vlm_media_t *p_media ) { memset( p_media, 0, sizeof(vlm_media_t) ); @@ -176,7 +215,17 @@ static inline void vlm_media_Init( vlm_media_t *p_media ) p_media->broadcast.b_loop = false; } -static inline void vlm_media_Copy( vlm_media_t *p_dst, vlm_media_t *p_src ) +/** + * Copy a vlm_media_t instance into another vlm_media_t instance + * \param p_dst vlm_media_t instance to copy to + * \param p_src vlm_media_t instance to copy from + */ +static inline void +#ifndef __cplusplus +vlm_media_Copy( vlm_media_t *restrict p_dst, const vlm_media_t *restrict p_src ) +#else +vlm_media_Copy( vlm_media_t *p_dst, const vlm_media_t *p_src ) +#endif { int i; @@ -205,6 +254,12 @@ static inline void vlm_media_Copy( vlm_media_t *p_dst, vlm_media_t *p_src ) p_dst->broadcast.b_loop = p_src->broadcast.b_loop; } } + +/** + * Cleanup and release memory associated with this vlm_media_t instance. + * You still need to release p_media itself with vlm_media_Delete(). + * \param p_media vlm_media_t to cleanup + */ static inline void vlm_media_Clean( vlm_media_t *p_media ) { int i; @@ -222,6 +277,11 @@ static inline void vlm_media_Clean( vlm_media_t *p_media ) if( p_media->b_vod ) free( p_media->vod.psz_mux ); } + +/** + * Allocate a new vlm_media_t instance + * \return vlm_media_t instance + */ static inline vlm_media_t *vlm_media_New(void) { vlm_media_t *p_media = (vlm_media_t *)malloc( sizeof(vlm_media_t) ); @@ -229,11 +289,22 @@ static inline vlm_media_t *vlm_media_New(void) vlm_media_Init( p_media ); return p_media; } + +/** + * Delete a vlm_media_t instance + * \param p_media vlm_media_t instance to delete + */ static inline void vlm_media_Delete( vlm_media_t *p_media ) { vlm_media_Clean( p_media ); free( p_media ); } + +/** + * Copy a vlm_media_t instance + * \param p_src vlm_media_t instance to copy + * \return vlm_media_t duplicate of p_src + */ static inline vlm_media_t *vlm_media_Duplicate( vlm_media_t *p_src ) { vlm_media_t *p_dst = vlm_media_New(); @@ -243,6 +314,10 @@ static inline vlm_media_t *vlm_media_Duplicate( vlm_media_t *p_src ) } /* media instance helpers */ +/** + * Initialize vlm_media_instance_t + * \param p_instance vlm_media_instance_t to initialize + */ static inline void vlm_media_instance_Init( vlm_media_instance_t *p_instance ) { memset( p_instance, 0, sizeof(vlm_media_instance_t) ); @@ -253,10 +328,20 @@ static inline void vlm_media_instance_Init( vlm_media_instance_t *p_instance ) p_instance->b_paused = false; p_instance->i_rate = INPUT_RATE_DEFAULT; } + +/** + * Cleanup vlm_media_instance_t + * \param p_instance vlm_media_instance_t to cleanup + */ static inline void vlm_media_instance_Clean( vlm_media_instance_t *p_instance ) { free( p_instance->psz_name ); } + +/** + * Allocate a new vlm_media_instance_t + * \return a new vlm_media_instance_t + */ static inline vlm_media_instance_t *vlm_media_instance_New(void) { vlm_media_instance_t *p_instance = (vlm_media_instance_t *) malloc( sizeof(vlm_media_instance_t) ); @@ -264,6 +349,11 @@ static inline vlm_media_instance_t *vlm_media_instance_New(void) vlm_media_instance_Init( p_instance ); return p_instance; } + +/** + * Delete a vlm_media_instance_t + * \param p_instance vlm_media_instance_t to delete + */ static inline void vlm_media_instance_Delete( vlm_media_instance_t *p_instance ) { vlm_media_instance_Clean( p_instance ); @@ -274,4 +364,6 @@ static inline void vlm_media_instance_Delete( vlm_media_instance_t *p_instance ) } #endif +/**@}*/ + #endif