X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_input_item.h;h=0f9800da4dd2cd7febdca74b4787054d6baa5dee;hb=10dd2acc08ada7d9027bc1aff493f69c39c4a62a;hp=4136bf1d5353b553ec26d3835931213d43de9ed8;hpb=f804bf433dd4a9352237b03f250200cb032d7a84;p=vlc diff --git a/include/vlc_input_item.h b/include/vlc_input_item.h index 4136bf1d53..0f9800da4d 100644 --- a/include/vlc_input_item.h +++ b/include/vlc_input_item.h @@ -1,29 +1,29 @@ /***************************************************************************** * vlc_input_item.h: Core input item ***************************************************************************** - * Copyright (C) 1999-2009 the VideoLAN team + * Copyright (C) 1999-2009 VLC authors and VideoLAN * $Id$ * * Authors: Christophe Massiot * Laurent Aimar * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -#ifndef VLC__INPUT_ITEM_H -#define VLC__INPUT_ITEM_H 1 +#ifndef VLC_INPUT_ITEM_H +#define VLC_INPUT_ITEM_H 1 /** * \file @@ -32,6 +32,7 @@ #include #include +#include #include @@ -53,12 +54,10 @@ struct info_category_t struct input_item_t { - VLC_GC_MEMBERS int i_id; /**< Identifier of the item */ char *psz_name; /**< text describing this item */ char *psz_uri; /**< mrl of this item */ - bool b_fixed_name; /**< Can the interface change the name ?*/ int i_options; /**< Number of input options */ char **ppsz_options; /**< Array of input options */ @@ -67,8 +66,6 @@ struct input_item_t mtime_t i_duration; /**< Duration in microseconds */ - uint8_t i_type; /**< Type (file, disc, ... see input_item_type_e) */ - bool b_prefers_tree; /**< Do we prefer being displayed as tree*/ int i_categories; /**< Number of info categories */ info_category_t **pp_categories; /**< Pointer to the first info category */ @@ -79,8 +76,6 @@ struct input_item_t input_stats_t *p_stats; /**< Statistics */ int i_nb_played; /**< Number of times played */ - bool b_error_when_reading; /**< Error When Reading */ - vlc_meta_t *p_meta; int i_epg; /**< Number of EPG entries */ @@ -89,6 +84,10 @@ struct input_item_t vlc_event_manager_t event_manager; vlc_mutex_t lock; /**< Lock for the item */ + + uint8_t i_type; /**< Type (file, disc, ... see input_item_type_e) */ + bool b_fixed_name; /**< Can the interface change the name ?*/ + bool b_error_when_reading;/**< Error When Reading */ }; enum input_item_type_e @@ -107,14 +106,63 @@ enum input_item_type_e ITEM_TYPE_NUMBER }; -VLC_EXPORT( void, input_item_CopyOptions, ( input_item_t *p_parent, input_item_t *p_child ) ); -VLC_EXPORT( void, input_item_SetName, ( input_item_t *p_item, const char *psz_name ) ); +struct input_item_node_t +{ + input_item_t * p_item; + int i_children; + input_item_node_t **pp_children; + input_item_node_t *p_parent; +}; + +VLC_API void input_item_CopyOptions( input_item_t *p_parent, input_item_t *p_child ); +VLC_API void input_item_SetName( input_item_t *p_item, const char *psz_name ); -/* This won't hold the item, but can tell to interested third parties +/** + * Add one subitem to this item + * + * This won't hold the item, but can tell to interested third parties * Like the playlist, that there is a new sub item. With this design * It is not the input item's responsability to keep all the ref of - * the input item children. */ -VLC_EXPORT( void, input_item_AddSubItem, ( input_item_t *p_parent, input_item_t *p_child ) ); + * the input item children. + * + * Sends a vlc_InputItemSubItemTreeAdded and a vlc_InputItemSubItemAdded event + */ +VLC_API void input_item_PostSubItem( input_item_t *p_parent, input_item_t *p_child ); + +/** + * Start adding multiple subitems. + * + * Create a root node to hold a tree of subitems for given item + */ +VLC_API input_item_node_t * input_item_node_Create( input_item_t *p_input ) VLC_USED; + +/** + * Add a new child node to this parent node that will point to this subitem. + */ +VLC_API input_item_node_t * input_item_node_AppendItem( input_item_node_t *p_node, input_item_t *p_item ); + +/** + * Add an already created node to children of this parent node. + */ +VLC_API void input_item_node_AppendNode( input_item_node_t *p_parent, input_item_node_t *p_child ); + +/** + * Delete a node created with input_item_node_Create() and all its children. + */ +VLC_API void input_item_node_Delete( input_item_node_t *p_node ); + +/** + * End adding multiple subitems. + * + * Sends a vlc_InputItemSubItemTreeAdded event to notify that the item pointed to + * by the given root node has created new subitems that are pointed to by all the + * children of the node. + * + * Also sends vlc_InputItemSubItemAdded event for every child under the given root node; + * + * In the end deletes the node and all its children nodes. + */ +VLC_API void input_item_node_PostAndDelete( input_item_node_t *p_node ); /** @@ -134,86 +182,100 @@ enum input_item_option_e /** * This function allows to add an option to an existing input_item_t. */ -VLC_EXPORT( int, input_item_AddOption, (input_item_t *, const char *, unsigned i_flags ) ); +VLC_API int input_item_AddOption(input_item_t *, const char *, unsigned i_flags ); /* */ -VLC_EXPORT( bool, input_item_HasErrorWhenReading, ( input_item_t * ) ); -VLC_EXPORT( void, input_item_SetMeta, ( input_item_t *, vlc_meta_type_t meta_type, const char *psz_val )); -VLC_EXPORT( bool, input_item_MetaMatch, ( input_item_t *p_i, vlc_meta_type_t meta_type, const char *psz ) ); -VLC_EXPORT( char *, input_item_GetMeta, ( input_item_t *p_i, vlc_meta_type_t meta_type ) ); -VLC_EXPORT( char *, input_item_GetName, ( input_item_t * p_i ) ); -VLC_EXPORT( char *, input_item_GetTitleFbName, ( input_item_t * p_i ) ); -VLC_EXPORT( char *, input_item_GetURI, ( input_item_t * p_i ) ); -VLC_EXPORT( void, input_item_SetURI, ( input_item_t * p_i, const char *psz_uri )); -VLC_EXPORT(mtime_t, input_item_GetDuration, ( input_item_t * p_i ) ); -VLC_EXPORT( void, input_item_SetDuration, ( input_item_t * p_i, mtime_t i_duration )); -VLC_EXPORT( bool, input_item_IsPreparsed, ( input_item_t *p_i )); -VLC_EXPORT( bool, input_item_IsArtFetched, ( input_item_t *p_i )); - - -#define input_item_SetTitle( item, b ) input_item_SetMeta( item, vlc_meta_Title, b ) -#define input_item_SetArtist( item, b ) input_item_SetMeta( item, vlc_meta_Artist, b ) -#define input_item_SetGenre( item, b ) input_item_SetMeta( item, vlc_meta_Genre, b ) -#define input_item_SetCopyright( item, b ) input_item_SetMeta( item, vlc_meta_Copyright, b ) -#define input_item_SetAlbum( item, b ) input_item_SetMeta( item, vlc_meta_Album, b ) -#define input_item_SetTrackNum( item, b ) input_item_SetMeta( item, vlc_meta_TrackNumber, b ) -#define input_item_SetDescription( item, b ) input_item_SetMeta( item, vlc_meta_Description, b ) -#define input_item_SetRating( item, b ) input_item_SetMeta( item, vlc_meta_Rating, b ) -#define input_item_SetDate( item, b ) input_item_SetMeta( item, vlc_meta_Date, b ) -#define input_item_SetSetting( item, b ) input_item_SetMeta( item, vlc_meta_Setting, b ) -#define input_item_SetURL( item, b ) input_item_SetMeta( item, vlc_meta_URL, b ) -#define input_item_SetLanguage( item, b ) input_item_SetMeta( item, vlc_meta_Language, b ) -#define input_item_SetNowPlaying( item, b ) input_item_SetMeta( item, vlc_meta_NowPlaying, b ) -#define input_item_SetPublisher( item, b ) input_item_SetMeta( item, vlc_meta_Publisher, b ) -#define input_item_SetEncodedBy( item, b ) input_item_SetMeta( item, vlc_meta_EncodedBy, b ) -#define input_item_SetArtURL( item, b ) input_item_SetMeta( item, vlc_meta_ArtworkURL, b ) -#define input_item_SetTrackID( item, b ) input_item_SetMeta( item, vlc_meta_TrackID, b ) - -#define input_item_GetTitle( item ) input_item_GetMeta( item, vlc_meta_Title ) -#define input_item_GetArtist( item ) input_item_GetMeta( item, vlc_meta_Artist ) -#define input_item_GetGenre( item ) input_item_GetMeta( item, vlc_meta_Genre ) -#define input_item_GetCopyright( item ) input_item_GetMeta( item, vlc_meta_Copyright ) -#define input_item_GetAlbum( item ) input_item_GetMeta( item, vlc_meta_Album ) -#define input_item_GetTrackNum( item ) input_item_GetMeta( item, vlc_meta_TrackNumber ) -#define input_item_GetDescription( item ) input_item_GetMeta( item, vlc_meta_Description ) -#define input_item_GetRating( item ) input_item_GetMeta( item, vlc_meta_Rating ) -#define input_item_GetDate( item ) input_item_GetMeta( item, vlc_meta_Date ) -#define input_item_GetGetting( item ) input_item_GetMeta( item, vlc_meta_Getting ) -#define input_item_GetURL( item ) input_item_GetMeta( item, vlc_meta_URL ) -#define input_item_GetLanguage( item ) input_item_GetMeta( item, vlc_meta_Language ) -#define input_item_GetNowPlaying( item ) input_item_GetMeta( item, vlc_meta_NowPlaying ) -#define input_item_GetPublisher( item ) input_item_GetMeta( item, vlc_meta_Publisher ) -#define input_item_GetEncodedBy( item ) input_item_GetMeta( item, vlc_meta_EncodedBy ) -#define input_item_GetArtURL( item ) input_item_GetMeta( item, vlc_meta_ArtworkURL ) -#define input_item_GetTrackID( item ) input_item_GetMeta( item, vlc_meta_TrackID ) -#define input_item_GetSetting( item ) input_item_GetMeta( item, vlc_meta_Setting ) - -VLC_EXPORT( char *, input_item_GetInfo, ( input_item_t *p_i, const char *psz_cat,const char *psz_name ) ); -VLC_EXPORT( int, input_item_AddInfo, ( input_item_t *p_i, const char *psz_cat, const char *psz_name, const char *psz_format, ... ) LIBVLC_FORMAT( 4, 5 ) ); -VLC_EXPORT( int, input_item_DelInfo, ( input_item_t *p_i, const char *psz_cat, const char *psz_name ) ); +VLC_API bool input_item_HasErrorWhenReading( input_item_t * ); +VLC_API void input_item_SetMeta( input_item_t *, vlc_meta_type_t meta_type, const char *psz_val ); +VLC_API bool input_item_MetaMatch( input_item_t *p_i, vlc_meta_type_t meta_type, const char *psz ); +VLC_API char * input_item_GetMeta( input_item_t *p_i, vlc_meta_type_t meta_type ) VLC_USED; +VLC_API char * input_item_GetName( input_item_t * p_i ) VLC_USED; +VLC_API char * input_item_GetTitleFbName( input_item_t * p_i ) VLC_USED; +VLC_API char * input_item_GetURI( input_item_t * p_i ) VLC_USED; +VLC_API void input_item_SetURI( input_item_t * p_i, const char *psz_uri ); +VLC_API mtime_t input_item_GetDuration( input_item_t * p_i ); +VLC_API void input_item_SetDuration( input_item_t * p_i, mtime_t i_duration ); +VLC_API bool input_item_IsPreparsed( input_item_t *p_i ); +VLC_API bool input_item_IsArtFetched( input_item_t *p_i ); + +#define INPUT_META( name ) \ +static inline \ +void input_item_Set ## name (input_item_t *p_input, const char *val) \ +{ \ + input_item_SetMeta (p_input, vlc_meta_ ## name, val); \ +} \ +static inline \ +char *input_item_Get ## name (input_item_t *p_input) \ +{ \ + return input_item_GetMeta (p_input, vlc_meta_ ## name); \ +} + +INPUT_META(Title) +INPUT_META(Artist) +INPUT_META(Genre) +INPUT_META(Copyright) +INPUT_META(Album) +INPUT_META(TrackNumber) +INPUT_META(Description) +INPUT_META(Rating) +INPUT_META(Date) +INPUT_META(Setting) +INPUT_META(URL) +INPUT_META(Language) +INPUT_META(NowPlaying) +INPUT_META(Publisher) +INPUT_META(EncodedBy) +INPUT_META(ArtworkURL) +INPUT_META(TrackID) +INPUT_META(TrackTotal) + +#define input_item_SetTrackNum input_item_SetTrackNumber +#define input_item_GetTrackNum input_item_GetTrackNumber +#define input_item_SetArtURL input_item_SetArtworkURL +#define input_item_GetArtURL input_item_GetArtworkURL + +VLC_API char * input_item_GetInfo( input_item_t *p_i, const char *psz_cat,const char *psz_name ) VLC_USED; +VLC_API int input_item_AddInfo( input_item_t *p_i, const char *psz_cat, const char *psz_name, const char *psz_format, ... ) VLC_FORMAT( 4, 5 ); +VLC_API int input_item_DelInfo( input_item_t *p_i, const char *psz_cat, const char *psz_name ); +VLC_API void input_item_ReplaceInfos( input_item_t *, info_category_t * ); +VLC_API void input_item_MergeInfos( input_item_t *, info_category_t * ); /** - * This function creates a new input_item_t with the provided informations. + * This function creates a new input_item_t with the provided information. * * XXX You may also use input_item_New or input_item_NewExt as they need * less arguments. */ -VLC_EXPORT( input_item_t *, input_item_NewWithType, ( vlc_object_t *, const char *psz_uri, const char *psz_name, int i_options, const char *const *ppsz_options, unsigned i_option_flags, mtime_t i_duration, int i_type ) ); +VLC_API input_item_t * input_item_NewWithType( const char *psz_uri, const char *psz_name, int i_options, const char *const *ppsz_options, unsigned i_option_flags, mtime_t i_duration, int i_type ) VLC_USED; /** - * This function creates a new input_item_t with the provided informations. + * This function creates a new input_item_t with the provided information. * * Provided for convenience. */ -#define input_item_NewExt(a,b,c,d,e,f,g) __input_item_NewExt( VLC_OBJECT(a),b,c,d,e,f,g) -VLC_EXPORT( input_item_t *, __input_item_NewExt, (vlc_object_t *, const char *psz_uri, const char *psz_name, int i_options, const char *const *ppsz_options, unsigned i_option_flags, mtime_t i_duration ) ); +VLC_API input_item_t * input_item_NewExt( const char *psz_uri, const char *psz_name, int i_options, const char *const *ppsz_options, unsigned i_option_flags, mtime_t i_duration ) VLC_USED; /** - * This function creates a new input_item_t with the provided informations. + * This function creates a new input_item_t with the provided information. * * Provided for convenience. */ -#define input_item_New( a,b,c ) input_item_NewExt( a, b, c, 0, NULL, 0, -1 ) +#define input_item_New( a,b ) input_item_NewExt( a, b, 0, NULL, 0, -1 ) + +/** + * This function creates a new input_item_t as a copy of another. + */ +VLC_API input_item_t * input_item_Copy(input_item_t * ) VLC_USED; + +/** Holds an input item, i.e. creates a new reference. */ +VLC_API input_item_t *input_item_Hold(input_item_t *); + +/** Releases an input item, i.e. decrements its reference counter. */ +VLC_API void input_item_Release(input_item_t *); + +/* Historical hack... */ +#define vlc_gc_incref(i) input_item_Hold(i) +#define vlc_gc_decref(i) input_item_Release(i) /****************** * Input stats @@ -223,35 +285,35 @@ struct input_stats_t vlc_mutex_t lock; /* Input */ - int i_read_packets; - int i_read_bytes; + int64_t i_read_packets; + int64_t i_read_bytes; float f_input_bitrate; float f_average_input_bitrate; /* Demux */ - int i_demux_read_packets; - int i_demux_read_bytes; + int64_t i_demux_read_packets; + int64_t i_demux_read_bytes; float f_demux_bitrate; float f_average_demux_bitrate; - int i_demux_corrupted; - int i_demux_discontinuity; + int64_t i_demux_corrupted; + int64_t i_demux_discontinuity; /* Decoders */ - int i_decoded_audio; - int i_decoded_video; + int64_t i_decoded_audio; + int64_t i_decoded_video; /* Vout */ - int i_displayed_pictures; - int i_lost_pictures; + int64_t i_displayed_pictures; + int64_t i_lost_pictures; /* Sout */ - int i_sent_packets; - int i_sent_bytes; + int64_t i_sent_packets; + int64_t i_sent_bytes; float f_send_bitrate; /* Aout */ - int i_played_abuffers; - int i_lost_abuffers; + int64_t i_played_abuffers; + int64_t i_lost_abuffers; }; #endif