fix audiodevice cycle hotkey
[vlc/asuraparaju-public.git] / include / vlc_input_item.h
blob4ef4e7c256a002c7350dfa8347d7550537542598
1 /*****************************************************************************
2 * vlc_input_item.h: Core input item
3 *****************************************************************************
4 * Copyright (C) 1999-2009 the VideoLAN team
5 * $Id$
7 * Authors: Christophe Massiot <massiot@via.ecp.fr>
8 * Laurent Aimar <fenrir@via.ecp.fr>
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
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 General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23 *****************************************************************************/
25 #ifndef VLC__INPUT_ITEM_H
26 #define VLC__INPUT_ITEM_H 1
28 /**
29 * \file
30 * This file defines functions, structures and enums for input items in vlc
33 #include <vlc_meta.h>
35 #include <string.h>
37 /*****************************************************************************
38 * input_item_t: Describes an input and is used to spawn input_thread_t objects
39 *****************************************************************************/
40 struct info_t
42 char *psz_name; /**< Name of this info */
43 char *psz_value; /**< Value of the info */
46 struct info_category_t
48 char *psz_name; /**< Name of this category */
49 int i_infos; /**< Number of infos in the category */
50 struct info_t **pp_infos; /**< Pointer to an array of infos */
53 struct input_item_t
55 VLC_GC_MEMBERS
56 int i_id; /**< Identifier of the item */
58 char *psz_name; /**< text describing this item */
59 char *psz_uri; /**< mrl of this item */
60 bool b_fixed_name; /**< Can the interface change the name ?*/
62 int i_options; /**< Number of input options */
63 char **ppsz_options; /**< Array of input options */
64 uint8_t *optflagv; /**< Some flags of input options */
65 unsigned optflagc;
67 mtime_t i_duration; /**< Duration in milliseconds*/
69 uint8_t i_type; /**< Type (file, disc, ... see input_item_type_e) */
70 bool b_prefers_tree; /**< Do we prefer being displayed as tree*/
72 int i_categories; /**< Number of info categories */
73 info_category_t **pp_categories; /**< Pointer to the first info category */
75 int i_es; /**< Number of es format descriptions */
76 es_format_t **es; /**< Es formats */
78 input_stats_t *p_stats; /**< Statistics */
79 int i_nb_played; /**< Number of times played */
81 bool b_error_when_reading; /**< Error When Reading */
83 vlc_meta_t *p_meta;
85 vlc_event_manager_t event_manager;
87 vlc_mutex_t lock; /**< Lock for the item */
90 enum input_item_type_e
92 ITEM_TYPE_UNKNOWN,
93 ITEM_TYPE_FILE,
94 ITEM_TYPE_DIRECTORY,
95 ITEM_TYPE_DISC,
96 ITEM_TYPE_CDDA,
97 ITEM_TYPE_CARD,
98 ITEM_TYPE_NET,
99 ITEM_TYPE_PLAYLIST,
100 ITEM_TYPE_NODE,
102 /* This one is not a real type but the number of input_item types. */
103 ITEM_TYPE_NUMBER
106 VLC_EXPORT( void, input_item_CopyOptions, ( input_item_t *p_parent, input_item_t *p_child ) );
107 VLC_EXPORT( void, input_item_SetName, ( input_item_t *p_item, const char *psz_name ) );
109 /* This won't hold the item, but can tell to interested third parties
110 * Like the playlist, that there is a new sub item. With this design
111 * It is not the input item's responsability to keep all the ref of
112 * the input item children. */
113 VLC_EXPORT( void, input_item_AddSubItem, ( input_item_t *p_parent, input_item_t *p_child ) );
117 * Option flags
119 enum input_item_option_e
121 /* Allow VLC to trust the given option.
122 * By default options are untrusted */
123 VLC_INPUT_OPTION_TRUSTED = 0x2,
125 /* Change the value associated to an option if already present, otherwise
126 * add the option */
127 VLC_INPUT_OPTION_UNIQUE = 0x100,
131 * This function allows to add an option to an existing input_item_t.
133 VLC_EXPORT( int, input_item_AddOption, (input_item_t *, const char *, unsigned i_flags ) );
135 /* */
136 VLC_EXPORT( bool, input_item_HasErrorWhenReading, ( input_item_t * ) );
137 VLC_EXPORT( void, input_item_SetMeta, ( input_item_t *, vlc_meta_type_t meta_type, const char *psz_val ));
138 VLC_EXPORT( bool, input_item_MetaMatch, ( input_item_t *p_i, vlc_meta_type_t meta_type, const char *psz ) );
139 VLC_EXPORT( char *, input_item_GetMeta, ( input_item_t *p_i, vlc_meta_type_t meta_type ) );
140 VLC_EXPORT( char *, input_item_GetName, ( input_item_t * p_i ) );
141 VLC_EXPORT( char *, input_item_GetURI, ( input_item_t * p_i ) );
142 VLC_EXPORT( void, input_item_SetURI, ( input_item_t * p_i, const char *psz_uri ));
143 VLC_EXPORT(mtime_t, input_item_GetDuration, ( input_item_t * p_i ) );
144 VLC_EXPORT( void, input_item_SetDuration, ( input_item_t * p_i, mtime_t i_duration ));
145 VLC_EXPORT( bool, input_item_IsPreparsed, ( input_item_t *p_i ));
146 VLC_EXPORT( bool, input_item_IsArtFetched, ( input_item_t *p_i ));
149 #define input_item_SetTitle( item, b ) input_item_SetMeta( item, vlc_meta_Title, b )
150 #define input_item_SetArtist( item, b ) input_item_SetMeta( item, vlc_meta_Artist, b )
151 #define input_item_SetGenre( item, b ) input_item_SetMeta( item, vlc_meta_Genre, b )
152 #define input_item_SetCopyright( item, b ) input_item_SetMeta( item, vlc_meta_Copyright, b )
153 #define input_item_SetAlbum( item, b ) input_item_SetMeta( item, vlc_meta_Album, b )
154 #define input_item_SetTrackNum( item, b ) input_item_SetMeta( item, vlc_meta_TrackNumber, b )
155 #define input_item_SetDescription( item, b ) input_item_SetMeta( item, vlc_meta_Description, b )
156 #define input_item_SetRating( item, b ) input_item_SetMeta( item, vlc_meta_Rating, b )
157 #define input_item_SetDate( item, b ) input_item_SetMeta( item, vlc_meta_Date, b )
158 #define input_item_SetSetting( item, b ) input_item_SetMeta( item, vlc_meta_Setting, b )
159 #define input_item_SetURL( item, b ) input_item_SetMeta( item, vlc_meta_URL, b )
160 #define input_item_SetLanguage( item, b ) input_item_SetMeta( item, vlc_meta_Language, b )
161 #define input_item_SetNowPlaying( item, b ) input_item_SetMeta( item, vlc_meta_NowPlaying, b )
162 #define input_item_SetPublisher( item, b ) input_item_SetMeta( item, vlc_meta_Publisher, b )
163 #define input_item_SetEncodedBy( item, b ) input_item_SetMeta( item, vlc_meta_EncodedBy, b )
164 #define input_item_SetArtURL( item, b ) input_item_SetMeta( item, vlc_meta_ArtworkURL, b )
165 #define input_item_SetTrackID( item, b ) input_item_SetMeta( item, vlc_meta_TrackID, b )
167 #define input_item_GetTitle( item ) input_item_GetMeta( item, vlc_meta_Title )
168 #define input_item_GetArtist( item ) input_item_GetMeta( item, vlc_meta_Artist )
169 #define input_item_GetGenre( item ) input_item_GetMeta( item, vlc_meta_Genre )
170 #define input_item_GetCopyright( item ) input_item_GetMeta( item, vlc_meta_Copyright )
171 #define input_item_GetAlbum( item ) input_item_GetMeta( item, vlc_meta_Album )
172 #define input_item_GetTrackNum( item ) input_item_GetMeta( item, vlc_meta_TrackNumber )
173 #define input_item_GetDescription( item ) input_item_GetMeta( item, vlc_meta_Description )
174 #define input_item_GetRating( item ) input_item_GetMeta( item, vlc_meta_Rating )
175 #define input_item_GetDate( item ) input_item_GetMeta( item, vlc_meta_Date )
176 #define input_item_GetGetting( item ) input_item_GetMeta( item, vlc_meta_Getting )
177 #define input_item_GetURL( item ) input_item_GetMeta( item, vlc_meta_URL )
178 #define input_item_GetLanguage( item ) input_item_GetMeta( item, vlc_meta_Language )
179 #define input_item_GetNowPlaying( item ) input_item_GetMeta( item, vlc_meta_NowPlaying )
180 #define input_item_GetPublisher( item ) input_item_GetMeta( item, vlc_meta_Publisher )
181 #define input_item_GetEncodedBy( item ) input_item_GetMeta( item, vlc_meta_EncodedBy )
182 #define input_item_GetArtURL( item ) input_item_GetMeta( item, vlc_meta_ArtworkURL )
183 #define input_item_GetTrackID( item ) input_item_GetMeta( item, vlc_meta_TrackID )
184 #define input_item_GetSetting( item ) input_item_GetMeta( item, vlc_meta_Setting )
186 VLC_EXPORT( char *, input_item_GetInfo, ( input_item_t *p_i, const char *psz_cat,const char *psz_name ) );
187 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 ) );
188 VLC_EXPORT( int, input_item_DelInfo, ( input_item_t *p_i, const char *psz_cat, const char *psz_name ) );
191 * This function creates a new input_item_t with the provided informations.
193 * XXX You may also use input_item_New or input_item_NewExt as they need
194 * less arguments.
196 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 ) );
199 * This function creates a new input_item_t with the provided informations.
201 * Provided for convenience.
203 #define input_item_NewExt(a,b,c,d,e,f,g) __input_item_NewExt( VLC_OBJECT(a),b,c,d,e,f,g)
204 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 ) );
207 * This function creates a new input_item_t with the provided informations.
209 * Provided for convenience.
211 #define input_item_New( a,b,c ) input_item_NewExt( a, b, c, 0, NULL, 0, -1 )
213 /******************
214 * Input stats
215 ******************/
216 struct input_stats_t
218 vlc_mutex_t lock;
220 /* Input */
221 int i_read_packets;
222 int i_read_bytes;
223 float f_input_bitrate;
224 float f_average_input_bitrate;
226 /* Demux */
227 int i_demux_read_packets;
228 int i_demux_read_bytes;
229 float f_demux_bitrate;
230 float f_average_demux_bitrate;
231 int i_demux_corrupted;
232 int i_demux_discontinuity;
234 /* Decoders */
235 int i_decoded_audio;
236 int i_decoded_video;
238 /* Vout */
239 int i_displayed_pictures;
240 int i_lost_pictures;
242 /* Sout */
243 int i_sent_packets;
244 int i_sent_bytes;
245 float f_send_bitrate;
247 /* Aout */
248 int i_played_abuffers;
249 int i_lost_abuffers;
252 #endif