home *** CD-ROM | disk | FTP | other *** search
/ mail.altrad.com / 2015.02.mail.altrad.com.tar / mail.altrad.com / TEST / vlc-2-0-5-win32.exe / sdk / include / vlc / plugins / vlc_input_item.h < prev    next >
C/C++ Source or Header  |  2012-12-12  |  10KB  |  311 lines

  1. /*****************************************************************************
  2.  * vlc_input_item.h: Core input item
  3.  *****************************************************************************
  4.  * Copyright (C) 1999-2009 VLC authors and VideoLAN
  5.  * $Id: 686957288e574ef911209db70178568c9ba61a39 $
  6.  *
  7.  * Authors: Christophe Massiot <massiot@via.ecp.fr>
  8.  *          Laurent Aimar <fenrir@via.ecp.fr>
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify it
  11.  * under the terms of the GNU Lesser General Public License as published by
  12.  * the Free Software Foundation; either version 2.1 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18.  * GNU Lesser General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU Lesser General Public License
  21.  * along with this program; if not, write to the Free Software Foundation,
  22.  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  23.  *****************************************************************************/
  24.  
  25. #ifndef VLC_INPUT_ITEM_H
  26. #define VLC_INPUT_ITEM_H 1
  27.  
  28. /**
  29.  * \file
  30.  * This file defines functions, structures and enums for input items in vlc
  31.  */
  32.  
  33. #include <vlc_meta.h>
  34. #include <vlc_epg.h>
  35. #include <vlc_events.h>
  36.  
  37. #include <string.h>
  38.  
  39. /*****************************************************************************
  40.  * input_item_t: Describes an input and is used to spawn input_thread_t objects
  41.  *****************************************************************************/
  42. struct info_t
  43. {
  44.     char *psz_name;            /**< Name of this info */
  45.     char *psz_value;           /**< Value of the info */
  46. };
  47.  
  48. struct info_category_t
  49. {
  50.     char   *psz_name;      /**< Name of this category */
  51.     int    i_infos;        /**< Number of infos in the category */
  52.     struct info_t **pp_infos;     /**< Pointer to an array of infos */
  53. };
  54.  
  55. struct input_item_t
  56. {
  57.     VLC_GC_MEMBERS
  58.     int        i_id;                 /**< Identifier of the item */
  59.  
  60.     char       *psz_name;            /**< text describing this item */
  61.     char       *psz_uri;             /**< mrl of this item */
  62.  
  63.     int        i_options;            /**< Number of input options */
  64.     char       **ppsz_options;       /**< Array of input options */
  65.     uint8_t    *optflagv;            /**< Some flags of input options */
  66.     unsigned   optflagc;
  67.  
  68.     mtime_t    i_duration;           /**< Duration in microseconds */
  69.  
  70.  
  71.     int        i_categories;         /**< Number of info categories */
  72.     info_category_t **pp_categories; /**< Pointer to the first info category */
  73.  
  74.     int         i_es;                /**< Number of es format descriptions */
  75.     es_format_t **es;                /**< Es formats */
  76.  
  77.     input_stats_t *p_stats;          /**< Statistics */
  78.     int           i_nb_played;       /**< Number of times played */
  79.  
  80.     vlc_meta_t *p_meta;
  81.  
  82.     int         i_epg;               /**< Number of EPG entries */
  83.     vlc_epg_t   **pp_epg;            /**< EPG entries */
  84.  
  85.     vlc_event_manager_t event_manager;
  86.  
  87.     vlc_mutex_t lock;                 /**< Lock for the item */
  88.  
  89.     uint8_t     i_type;              /**< Type (file, disc, ... see input_item_type_e) */
  90.     bool        b_fixed_name;        /**< Can the interface change the name ?*/
  91.     bool        b_error_when_reading;/**< Error When Reading */
  92. };
  93.  
  94. enum input_item_type_e
  95. {
  96.     ITEM_TYPE_UNKNOWN,
  97.     ITEM_TYPE_FILE,
  98.     ITEM_TYPE_DIRECTORY,
  99.     ITEM_TYPE_DISC,
  100.     ITEM_TYPE_CDDA,
  101.     ITEM_TYPE_CARD,
  102.     ITEM_TYPE_NET,
  103.     ITEM_TYPE_PLAYLIST,
  104.     ITEM_TYPE_NODE,
  105.  
  106.     /* This one is not a real type but the number of input_item types. */
  107.     ITEM_TYPE_NUMBER
  108. };
  109.  
  110. struct input_item_node_t
  111. {
  112.     input_item_t *         p_item;
  113.     int                    i_children;
  114.     input_item_node_t      **pp_children;
  115.     input_item_node_t      *p_parent;
  116. };
  117.  
  118. VLC_API void input_item_CopyOptions( input_item_t *p_parent, input_item_t *p_child );
  119. VLC_API void input_item_SetName( input_item_t *p_item, const char *psz_name );
  120.  
  121. /**
  122.  * Add one subitem to this item
  123.  *
  124.  * This won't hold the item, but can tell to interested third parties
  125.  * Like the playlist, that there is a new sub item. With this design
  126.  * It is not the input item's responsability to keep all the ref of
  127.  * the input item children.
  128.  *
  129.  * Sends a vlc_InputItemSubItemTreeAdded and a vlc_InputItemSubItemAdded event
  130.  */
  131. VLC_API void input_item_PostSubItem( input_item_t *p_parent, input_item_t *p_child );
  132.  
  133. /**
  134.  * Start adding multiple subitems.
  135.  *
  136.  * Create a root node to hold a tree of subitems for given item
  137.  */
  138. VLC_API input_item_node_t * input_item_node_Create( input_item_t *p_input ) VLC_USED;
  139.  
  140. /**
  141.  * Add a new child node to this parent node that will point to this subitem.
  142.  */
  143. VLC_API input_item_node_t * input_item_node_AppendItem( input_item_node_t *p_node, input_item_t *p_item );
  144.  
  145. /**
  146.  * Add an already created node to children of this parent node.
  147.  */
  148. VLC_API void input_item_node_AppendNode( input_item_node_t *p_parent, input_item_node_t *p_child );
  149.  
  150. /**
  151.  * Delete a node created with input_item_node_Create() and all its children.
  152.  */
  153. VLC_API void input_item_node_Delete( input_item_node_t *p_node );
  154.  
  155. /**
  156.  * End adding multiple subitems.
  157.  *
  158.  * Sends a vlc_InputItemSubItemTreeAdded event to notify that the item pointed to
  159.  * by the given root node has created new subitems that are pointed to by all the
  160.  * children of the node.
  161.  *
  162.  * Also sends vlc_InputItemSubItemAdded event for every child under the given root node;
  163.  *
  164.  * In the end deletes the node and all its children nodes.
  165.  */
  166. VLC_API void input_item_node_PostAndDelete( input_item_node_t *p_node );
  167.  
  168.  
  169. /**
  170.  * Option flags
  171.  */
  172. enum input_item_option_e
  173. {
  174.     /* Allow VLC to trust the given option.
  175.      * By default options are untrusted */
  176.     VLC_INPUT_OPTION_TRUSTED = 0x2,
  177.  
  178.     /* Change the value associated to an option if already present, otherwise
  179.      * add the option */
  180.     VLC_INPUT_OPTION_UNIQUE  = 0x100,
  181. };
  182.  
  183. /**
  184.  * This function allows to add an option to an existing input_item_t.
  185.  */
  186. VLC_API int input_item_AddOption(input_item_t *, const char *, unsigned i_flags );
  187.  
  188. /* */
  189. VLC_API bool input_item_HasErrorWhenReading( input_item_t * );
  190. VLC_API void input_item_SetMeta( input_item_t *, vlc_meta_type_t meta_type, const char *psz_val );
  191. VLC_API bool input_item_MetaMatch( input_item_t *p_i, vlc_meta_type_t meta_type, const char *psz );
  192. VLC_API char * input_item_GetMeta( input_item_t *p_i, vlc_meta_type_t meta_type ) VLC_USED;
  193. VLC_API char * input_item_GetName( input_item_t * p_i ) VLC_USED;
  194. VLC_API char * input_item_GetTitleFbName( input_item_t * p_i ) VLC_USED;
  195. VLC_API char * input_item_GetURI( input_item_t * p_i ) VLC_USED;
  196. VLC_API void input_item_SetURI( input_item_t * p_i, const char *psz_uri );
  197. VLC_API mtime_t input_item_GetDuration( input_item_t * p_i );
  198. VLC_API void input_item_SetDuration( input_item_t * p_i, mtime_t i_duration );
  199. VLC_API bool input_item_IsPreparsed( input_item_t *p_i );
  200. VLC_API bool input_item_IsArtFetched( input_item_t *p_i );
  201.  
  202. #define INPUT_META( name ) \
  203. static inline \
  204. void input_item_Set ## name (input_item_t *p_input, const char *val) \
  205. { \
  206.     input_item_SetMeta (p_input, vlc_meta_ ## name, val); \
  207. } \
  208. static inline \
  209. char *input_item_Get ## name (input_item_t *p_input) \
  210. { \
  211.     return input_item_GetMeta (p_input, vlc_meta_ ## name); \
  212. }
  213.  
  214. INPUT_META(Title)
  215. INPUT_META(Artist)
  216. INPUT_META(Genre)
  217. INPUT_META(Copyright)
  218. INPUT_META(Album)
  219. INPUT_META(TrackNumber)
  220. INPUT_META(Description)
  221. INPUT_META(Rating)
  222. INPUT_META(Date)
  223. INPUT_META(Setting)
  224. INPUT_META(URL)
  225. INPUT_META(Language)
  226. INPUT_META(NowPlaying)
  227. INPUT_META(Publisher)
  228. INPUT_META(EncodedBy)
  229. INPUT_META(ArtworkURL)
  230. INPUT_META(TrackID)
  231.  
  232. #define input_item_SetTrackNum input_item_SetTrackNumber
  233. #define input_item_GetTrackNum input_item_GetTrackNumber
  234. #define input_item_SetArtURL   input_item_SetArtworkURL
  235. #define input_item_GetArtURL   input_item_GetArtworkURL
  236.  
  237. VLC_API char * input_item_GetInfo( input_item_t *p_i, const char *psz_cat,const char *psz_name ) VLC_USED;
  238. 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 );
  239. VLC_API int input_item_DelInfo( input_item_t *p_i, const char *psz_cat, const char *psz_name );
  240. VLC_API void input_item_ReplaceInfos( input_item_t *, info_category_t * );
  241. VLC_API void input_item_MergeInfos( input_item_t *, info_category_t * );
  242.  
  243. /**
  244.  * This function creates a new input_item_t with the provided information.
  245.  *
  246.  * XXX You may also use input_item_New or input_item_NewExt as they need
  247.  * less arguments.
  248.  */
  249. 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;
  250.  
  251. /**
  252.  * This function creates a new input_item_t with the provided information.
  253.  *
  254.  * Provided for convenience.
  255.  */
  256. 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;
  257.  
  258. /**
  259.  * This function creates a new input_item_t with the provided information.
  260.  *
  261.  * Provided for convenience.
  262.  */
  263. #define input_item_New( a,b ) input_item_NewExt( a, b, 0, NULL, 0, -1 )
  264.  
  265. /**
  266.  * This function creates a new input_item_t as a copy of another.
  267.  */
  268. VLC_API input_item_t * input_item_Copy(input_item_t * ) VLC_USED;
  269.  
  270.  
  271. /******************
  272.  * Input stats
  273.  ******************/
  274. struct input_stats_t
  275. {
  276.     vlc_mutex_t         lock;
  277.  
  278.     /* Input */
  279.     int64_t i_read_packets;
  280.     int64_t i_read_bytes;
  281.     float f_input_bitrate;
  282.     float f_average_input_bitrate;
  283.  
  284.     /* Demux */
  285.     int64_t i_demux_read_packets;
  286.     int64_t i_demux_read_bytes;
  287.     float f_demux_bitrate;
  288.     float f_average_demux_bitrate;
  289.     int64_t i_demux_corrupted;
  290.     int64_t i_demux_discontinuity;
  291.  
  292.     /* Decoders */
  293.     int64_t i_decoded_audio;
  294.     int64_t i_decoded_video;
  295.  
  296.     /* Vout */
  297.     int64_t i_displayed_pictures;
  298.     int64_t i_lost_pictures;
  299.  
  300.     /* Sout */
  301.     int64_t i_sent_packets;
  302.     int64_t i_sent_bytes;
  303.     float f_send_bitrate;
  304.  
  305.     /* Aout */
  306.     int64_t i_played_abuffers;
  307.     int64_t i_lost_abuffers;
  308. };
  309.  
  310. #endif
  311.