X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_input.h;h=29c5287c89e1615851717208227f7e81d01c3d1e;hb=dffe74e2d2eb9591cc08cf03a97e449d0091cf8b;hp=b9872ee6d193eb86f97532160206a640243ef6ac;hpb=e9097e4f6da79a7f780ef17488b35b37d3973be7;p=vlc diff --git a/include/vlc_input.h b/include/vlc_input.h index b9872ee6d1..29c5287c89 100644 --- a/include/vlc_input.h +++ b/include/vlc_input.h @@ -53,15 +53,113 @@ struct input_item_t mtime_t i_duration; /**< A hint about the duration of this * item, in milliseconds*/ + int i_id; /**< Identifier of the item */ + uint8_t i_type; /**< Type (file, disc, ...) */ + int i_categories; /**< Number of info categories */ info_category_t **pp_categories; /**< Pointer to the first info category */ int i_es; /**< Number of es format descriptions */ es_format_t **es; /**< Pointer to an array of es formats */ + vlc_bool_t b_fixed_name; /**< Can the interface change the name ?*/ + vlc_mutex_t lock; /**< Item cannot be changed without this lock */ }; +#define ITEM_TYPE_UNKNOWN 0 +#define ITEM_TYPE_AFILE 1 +#define ITEM_TYPE_VFILE 2 +#define ITEM_TYPE_DIRECTORY 3 +#define ITEM_TYPE_DISC 4 +#define ITEM_TYPE_CDDA 5 +#define ITEM_TYPE_CARD 6 +#define ITEM_TYPE_NET 7 +#define ITEM_TYPE_PLAYLIST 8 +#define ITEM_TYPE_NODE 9 + +static inline void vlc_input_item_Init( vlc_object_t *p_o, input_item_t *p_i ) +{ + memset( p_i, 0, sizeof(input_item_t) ); + p_i->i_options = 0; + p_i->i_es = 0; + p_i->i_categories = 0 ; + p_i->psz_name = 0; + p_i->psz_uri = 0; + p_i->ppsz_options = 0; + p_i->pp_categories = 0; + p_i->es = 0; + p_i->i_type = ITEM_TYPE_UNKNOWN; + p_i->b_fixed_name = VLC_TRUE; + vlc_mutex_init( p_o, &p_i->lock ); +} + +static inline void vlc_input_item_CopyOptions( input_item_t *p_parent, + input_item_t *p_child ) +{ + int i; + for( i = 0 ; i< p_parent->i_options; i++ ) + { + char *psz_option= strdup( p_parent->ppsz_options[i] ); + p_child->i_options++; + p_child->ppsz_options = (char **)realloc( p_child->ppsz_options, + p_child->i_options * + sizeof( char * ) ); + p_child->ppsz_options[p_child->i_options-1] = psz_option; + } +} + +static inline void vlc_input_item_Clean( input_item_t *p_i ) +{ + if( p_i->psz_name ) free( p_i->psz_name ); + if( p_i->psz_uri ) free( p_i->psz_uri ); + p_i->psz_name = 0; + p_i->psz_uri = 0; + + while( p_i->i_options ) + { + p_i->i_options--; + if( p_i->ppsz_options[p_i->i_options] ) + free( p_i->ppsz_options[p_i->i_options] ); + if( !p_i->i_options ) free( p_i->ppsz_options ); + } + + while( p_i->i_es ) + { + p_i->i_es--; + es_format_Clean( p_i->es[p_i->i_es] ); + if( !p_i->i_es ) free( p_i->es ); + } + + while( p_i->i_categories ) + { + info_category_t *p_category = + p_i->pp_categories[--(p_i->i_categories)]; + + while( p_category->i_infos ) + { + p_category->i_infos--; + + if( p_category->pp_infos[p_category->i_infos]->psz_name ) + free( p_category->pp_infos[p_category->i_infos]->psz_name); + if( p_category->pp_infos[p_category->i_infos]->psz_value ) + free( p_category->pp_infos[p_category->i_infos]->psz_value ); + free( p_category->pp_infos[p_category->i_infos] ); + + if( !p_category->i_infos ) free( p_category->pp_infos ); + } + + if( p_category->psz_name ) free( p_category->psz_name ); + free( p_category ); + + if( !p_i->i_categories ) free( p_i->pp_categories ); + } + + vlc_mutex_destroy( &p_i->lock ); +} + +VLC_EXPORT( char *, vlc_input_item_GetInfo, ( input_item_t *p_i, const char *psz_cat,const char *psz_name ) ); +VLC_EXPORT(int, vlc_input_item_AddInfo, ( input_item_t *p_i, const char *psz_cat, const char *psz_name, const char *psz_format, ... ) ); /***************************************************************************** * Seek point: (generalisation of chapters) @@ -71,6 +169,7 @@ struct seekpoint_t int64_t i_byte_offset; int64_t i_time_offset; char *psz_name; + int i_level; }; static inline seekpoint_t *vlc_seekpoint_New( void ) @@ -78,6 +177,7 @@ static inline seekpoint_t *vlc_seekpoint_New( void ) seekpoint_t *point = (seekpoint_t*)malloc( sizeof( seekpoint_t ) ); point->i_byte_offset = point->i_time_offset = 0; + point->i_level = 0; point->psz_name = NULL; return point; } @@ -129,6 +229,7 @@ static inline input_title_t *vlc_input_title_New( ) return t; } + static inline void vlc_input_title_Delete( input_title_t *t ) { int i; @@ -169,7 +270,6 @@ static inline input_title_t *vlc_input_title_Duplicate( input_title_t *t ) return dup; } - /***************************************************************************** * input defines/constants. *****************************************************************************/ @@ -272,6 +372,9 @@ struct input_thread_t int i_bookmark; seekpoint_t **bookmark; + /* Global meta datas FIXME move to input_item_t ? */ + vlc_meta_t *p_meta; + /* Output */ es_out_t *p_es_out; sout_instance_t *p_sout; /* XXX Move it to es_out ? */ @@ -303,6 +406,8 @@ struct input_thread_t *****************************************************************************/ #define input_CreateThread(a,b) __input_CreateThread(VLC_OBJECT(a),b) VLC_EXPORT( input_thread_t *, __input_CreateThread, ( vlc_object_t *, input_item_t * ) ); +#define input_Preparse(a,b) __input_Preparse(VLC_OBJECT(a),b) +VLC_EXPORT( int, __input_Preparse, ( vlc_object_t *, input_item_t * ) ); VLC_EXPORT( void, input_StopThread, ( input_thread_t * ) ); VLC_EXPORT( void, input_DestroyThread, ( input_thread_t * ) ); @@ -327,7 +432,7 @@ enum input_query_e INPUT_GET_STATE, /* arg1= int * res= */ INPUT_SET_STATE, /* arg1= int res=can fail */ - /* input variable "audio-delay" and "spu-delay" */ + /* input variable "audio-delay" and "sub-delay" */ INPUT_GET_AUDIO_DELAY, /* arg1 = int* res=can fail */ INPUT_SET_AUDIO_DELAY, /* arg1 = int res=can fail */ INPUT_GET_SPU_DELAY, /* arg1 = int* res=can fail */ @@ -352,15 +457,16 @@ enum input_query_e INPUT_CHANGE_BOOKMARK, /* arg1= seekpoint_t * arg2= int * res=can fail */ INPUT_DEL_BOOKMARK, /* arg1= seekpoint_t * res=can fail */ INPUT_SET_BOOKMARK, /* arg1= int res=can fail */ + + /* On the fly input slave */ + INPUT_ADD_SLAVE, /* arg1= char * */ }; VLC_EXPORT( int, input_vaControl,( input_thread_t *, int i_query, va_list ) ); VLC_EXPORT( int, input_Control, ( input_thread_t *, int i_query, ... ) ); - VLC_EXPORT( decoder_t *, input_DecoderNew, ( input_thread_t *, es_format_t *, vlc_bool_t b_force_decoder ) ); VLC_EXPORT( void, input_DecoderDelete, ( decoder_t * ) ); VLC_EXPORT( void, input_DecoderDecode,( decoder_t *, block_t * ) ); #endif -