VLC  4.0.0-dev
vlc_interface.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * vlc_interface.h: interface access for other threads
3  * This library provides basic functions for threads to interact with user
4  * interface, such as message output.
5  *****************************************************************************
6  * Copyright (C) 1999, 2000 VLC authors and VideoLAN
7  *
8  * Authors: Vincent Seguin <seguin@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_INTF_H_
26 #define VLC_INTF_H_
27 
28 # ifdef __cplusplus
29 extern "C" {
30 # endif
31 
32 typedef struct vlc_playlist vlc_playlist_t;
34 
35 /**
36  * \defgroup interface Interface
37  * \ingroup vlc
38  * VLC user interfaces
39  * @{
40  * \file
41  * VLC user interface modules
42  */
43 
44 typedef struct intf_sys_t intf_sys_t;
45 
46 /** Describe all interface-specific data of the interface thread */
47 typedef struct intf_thread_t
48 {
49  struct vlc_object_t obj;
50 
51  struct intf_thread_t *p_next; /** LibVLC interfaces book keeping */
52 
53  /* Specific interfaces */
54  intf_sys_t * p_sys; /** system interface */
55 
56  /** Interface module */
58 
59  /** Specific for dialogs providers */
60  void ( *pf_show_dialog ) ( struct intf_thread_t *, int, int,
62 
65 
66 /** \brief Arguments passed to a dialogs provider
67  * This describes the arguments passed to the dialogs provider. They are
68  * mainly used with INTF_DIALOG_FILE_GENERIC.
69  */
70 struct intf_dialog_args_t
71 {
73  char *psz_title;
74 
75  char **psz_results;
76  int i_results;
77 
78  void (*pf_callback) ( intf_dialog_args_t * );
79  void *p_arg;
80 
81  /* Specifically for INTF_DIALOG_FILE_GENERIC */
82  char *psz_extensions;
83  bool b_save;
84  bool b_multiple;
85 
86  /* Specific to INTF_DIALOG_INTERACTION */
88 };
89 
90 VLC_API int intf_Create( libvlc_int_t *, const char * );
91 
93 
94 /**
95  * Recover the main playlist from an interface module
96  *
97  * @return the main playlist (can't be NULL)
98  */
101 
102 /**
103  * @ingroup messages
104  * @{
105  */
106 
108  void *data);
109 
110 /*@}*/
111 
112 /* Interface dialog ids for dialog providers */
113 typedef enum vlc_intf_dialog {
121 
124 
133 
138 
142 
145 
146  INTF_DIALOG_EXIT = 99
148 
149 /* Useful text messages shared by interfaces */
150 #define INTF_ABOUT_MSG LICENSE_MSG
151 
152 #define EXTENSIONS_AUDIO_CSV "3ga", "669", "a52", "aac", "ac3", "adt", "adts", "aif", "aifc", "aiff", \
153  "amb", "amr", "aob", "ape", "au", "awb", "caf", "dts", "dsf", "dff", "flac", "it", "kar", \
154  "m4a", "m4b", "m4p", "m5p", "mka", "mlp", "mod", "mpa", "mp1", "mp2", "mp3", "mpc", "mpga", "mus", \
155  "oga", "ogg", "oma", "opus", "qcp", "ra", "rmi", "s3m", "sid", "spx", "tak", "thd", "tta", \
156  "voc", "vqf", "w64", "wav", "wma", "wv", "xa", "xm"
157 
158 #define EXTENSIONS_VIDEO_CSV "3g2", "3gp", "3gp2", "3gpp", "amv", "asf", "avi", "bik", "crf", "dav", "divx", "drc", "dv", "dvr-ms" \
159  "evo", "f4v", "flv", "gvi", "gxf", "iso", \
160  "m1v", "m2v", "m2t", "m2ts", "m4v", "mkv", "mov",\
161  "mp2", "mp2v", "mp4", "mp4v", "mpe", "mpeg", "mpeg1", \
162  "mpeg2", "mpeg4", "mpg", "mpv2", "mts", "mtv", "mxf", "mxg", "nsv", "nuv", \
163  "ogg", "ogm", "ogv", "ogx", "ps", \
164  "rec", "rm", "rmvb", "rpl", "thp", "tod", "ts", "tts", "txd", "vob", "vro", \
165  "webm", "wm", "wmv", "wtv", "xesc"
166 
167 #define EXTENSIONS_AUDIO \
168  "*.3ga;" \
169  "*.669;" \
170  "*.a52;" \
171  "*.aac;" \
172  "*.ac3;" \
173  "*.adt;" \
174  "*.adts;" \
175  "*.aif;"\
176  "*.aifc;"\
177  "*.aiff;"\
178  "*.amb;" \
179  "*.amr;" \
180  "*.aob;" \
181  "*.ape;" \
182  "*.au;" \
183  "*.awb;" \
184  "*.caf;" \
185  "*.dts;" \
186  "*.dsf;" \
187  "*.dff;" \
188  "*.flac;"\
189  "*.it;" \
190  "*.kar;" \
191  "*.m4a;" \
192  "*.m4b;" \
193  "*.m4p;" \
194  "*.m5p;" \
195  "*.mid;" \
196  "*.mka;" \
197  "*.mlp;" \
198  "*.mod;" \
199  "*.mpa;" \
200  "*.mp1;" \
201  "*.mp2;" \
202  "*.mp3;" \
203  "*.mpc;" \
204  "*.mpga;" \
205  "*.mus;" \
206  "*.oga;" \
207  "*.ogg;" \
208  "*.oma;" \
209  "*.opus;" \
210  "*.qcp;" \
211  "*.ra;" \
212  "*.rmi;" \
213  "*.s3m;" \
214  "*.sid;" \
215  "*.spx;" \
216  "*.tak;" \
217  "*.thd;" \
218  "*.tta;" \
219  "*.voc;" \
220  "*.vqf;" \
221  "*.w64;" \
222  "*.wav;" \
223  "*.wma;" \
224  "*.wv;" \
225  "*.xa;" \
226  "*.xm"
227 
228 #define EXTENSIONS_VIDEO "*.3g2;*.3gp;*.3gp2;*.3gpp;*.amv;*.asf;*.avi;*.bik;*.bin;*.crf;*.dav;*.divx;*.drc;*.dv;*.dvr-ms;*.evo;*.f4v;*.flv;*.gvi;*.gxf;*.iso;*.m1v;*.m2v;" \
229  "*.m2t;*.m2ts;*.m4v;*.mkv;*.mov;*.mp2;*.mp2v;*.mp4;*.mp4v;*.mpe;*.mpeg;*.mpeg1;" \
230  "*.mpeg2;*.mpeg4;*.mpg;*.mpv2;*.mts;*.mtv;*.mxf;*.mxg;*.nsv;*.nuv;" \
231  "*.ogg;*.ogm;*.ogv;*.ogx;*.ps;" \
232  "*.rec;*.rm;*.rmvb;*.rpl;*.thp;*.tod;*.tp;*.ts;*.tts;*.txd;*.vob;*.vro;*.webm;*.wm;*.wmv;*.wtv;*.xesc"
233 
234 #define EXTENSIONS_PLAYLIST "*.asx;*.b4s;*.cue;*.ifo;*.m3u;*.m3u8;*.pls;*.ram;*.rar;*.sdp;*.vlc;*.xspf;*.wax;*.wpl;*.wvx;*.zip;*.conf"
235 
236 #define EXTENSIONS_MEDIA EXTENSIONS_VIDEO ";" EXTENSIONS_AUDIO ";" \
237  EXTENSIONS_PLAYLIST
238 
239 #define EXTENSIONS_SUBTITLE "*.cdg;*.idx;*.srt;" \
240  "*.sub;*.utf;*.ass;" \
241  "*.ssa;*.aqt;" \
242  "*.jss;*.psb;" \
243  "*.rt;*.sami;*.smi;*.txt;" \
244  "*.smil;*.stl;*.usf;" \
245  "*.dks;*.pjs;*.mpl2;*.mks;" \
246  "*.vtt;*.tt;*.ttml;*.dfxp;" \
247  "*.scc"
248 
249 /** \defgroup interaction Interaction
250  * \ingroup interface
251  * Interaction between user and modules
252  * @{
253  */
254 
255 /**
256  * This structure describes a piece of interaction with the user
257  */
258 typedef struct interaction_dialog_t
259 {
260  int i_type; ///< Type identifier
261  char *psz_title; ///< Title
262  char *psz_description; ///< Descriptor string
263  char *psz_default_button; ///< default button title (~OK)
264  char *psz_alternate_button;///< alternate button title (~NO)
265  /// other button title (optional,~Cancel)
266  char *psz_other_button;
267 
268  char *psz_returned[1]; ///< returned responses from the user
269 
270  vlc_value_t val; ///< value coming from core for dialogue
271  int i_timeToGo; ///< time (in sec) until shown progress is finished
272  bool b_cancelled; ///< was the dialogue cancelled ?
273 
274  void * p_private; ///< Private interface data
275 
276  int i_status; ///< Dialog status;
277  int i_action; ///< Action to perform;
278  int i_flags; ///< Misc flags
279  int i_return; ///< Return status
280 
281  vlc_object_t *p_parent; ///< The vlc object that asked
282  //for interaction
286 
287 /**
288  * Possible flags . Dialog types
289  */
290 #define DIALOG_GOT_ANSWER 0x01
291 #define DIALOG_YES_NO_CANCEL 0x02
292 #define DIALOG_LOGIN_PW_OK_CANCEL 0x04
293 #define DIALOG_PSZ_INPUT_OK_CANCEL 0x08
294 #define DIALOG_BLOCKING_ERROR 0x10
295 #define DIALOG_NONBLOCKING_ERROR 0x20
296 #define DIALOG_USER_PROGRESS 0x80
297 #define DIALOG_INTF_PROGRESS 0x100
298 
299 /** Possible return codes */
300 enum
301 {
305 };
306 
307 /** Possible status */
308 enum
309 {
310  ANSWERED_DIALOG, ///< Got "answer"
311  DESTROYED_DIALOG, ///< Interface has destroyed it
312 };
313 
314 /** Possible actions */
315 enum
316 {
317  INTERACT_NEW,
321 };
322 
323 #define intf_UserStringInput( a, b, c, d ) (VLC_OBJECT(a),b,c,d, VLC_EGENERIC)
324 #define interaction_Register( t ) (t, VLC_EGENERIC)
325 #define interaction_Unregister( t ) (t, VLC_EGENERIC)
326 
327 
328 /** @} */
329 /** @} */
330 
331 # ifdef __cplusplus
332 }
333 # endif
334 #endif
INTF_DIALOG_CAPTURE
@ INTF_DIALOG_CAPTURE
Definition: vlc_interface.h:119
vlc_LogSet
VLC_EXPORT void vlc_LogSet(libvlc_int_t *, const struct vlc_logger_operations *, void *data)
Sets the message logging callback.
Definition: messages.c:568
VLC_API
#define VLC_API
Definition: fourcc_gen.c:31
libvlc_Quit
VLC_EXPORT void libvlc_Quit(libvlc_int_t *)
Posts an exit signal to LibVLC instance.
Definition: exit.c:55
vlc_playlist
Definition: playlist.h:48
interaction_dialog_t::p_parent
vlc_object_t * p_parent
The vlc object that asked.
Definition: vlc_interface.h:282
INTF_DIALOG_MESSAGES
@ INTF_DIALOG_MESSAGES
Definition: vlc_interface.h:128
libvlc_int_t
Definition: vlc_objects.h:114
INTF_DIALOG_NET
@ INTF_DIALOG_NET
Definition: vlc_interface.h:118
intf_dialog_args_t::pf_callback
void(* pf_callback)(intf_dialog_args_t *)
Definition: vlc_interface.h:79
vlc_common.h
INTF_DIALOG_BOOKMARKS
@ INTF_DIALOG_BOOKMARKS
Definition: vlc_interface.h:131
DIALOG_NO
@ DIALOG_NO
Definition: vlc_interface.h:304
intf_dialog_args_t::b_multiple
bool b_multiple
Definition: vlc_interface.h:85
INTF_DIALOG_PLAYLIST
@ INTF_DIALOG_PLAYLIST
Definition: vlc_interface.h:126
INTF_DIALOG_SAT
@ INTF_DIALOG_SAT
Definition: vlc_interface.h:120
INTF_DIALOG_INTERACTION
@ INTF_DIALOG_INTERACTION
Definition: vlc_interface.h:141
intf_thread_t::p_module
module_t * p_module
system interface
Definition: vlc_interface.h:58
intf_Create
VLC_EXPORT int intf_Create(libvlc_int_t *, const char *)
Create and start an interface.
Definition: interface.c:131
interaction_dialog_t::psz_description
char * psz_description
Descriptor string.
Definition: vlc_interface.h:263
intf_dialog_args_t::psz_results
char ** psz_results
Definition: vlc_interface.h:76
INTF_DIALOG_AUDIOPOPUPMENU
@ INTF_DIALOG_AUDIOPOPUPMENU
Definition: vlc_interface.h:136
interaction_dialog_t::i_action
int i_action
Action to perform;.
Definition: vlc_interface.h:278
interaction_dialog_t::i_return
int i_return
Return status.
Definition: vlc_interface.h:280
intf_dialog_args_t::psz_title
char * psz_title
Definition: vlc_interface.h:74
INTF_DIALOG_DISC
@ INTF_DIALOG_DISC
Definition: vlc_interface.h:117
interaction_dialog_t::val
vlc_value_t val
value coming from core for dialogue
Definition: vlc_interface.h:271
DESTROYED_DIALOG
@ DESTROYED_DIALOG
Interface has destroyed it.
Definition: vlc_interface.h:312
interaction_dialog_t::psz_default_button
char * psz_default_button
default button title (~OK)
Definition: vlc_interface.h:264
vlc_mutex_t
Mutex.
Definition: vlc_threads.h:225
INTF_DIALOG_VIDEOPOPUPMENU
@ INTF_DIALOG_VIDEOPOPUPMENU
Definition: vlc_interface.h:137
INTF_DIALOG_VLM
@ INTF_DIALOG_VLM
Definition: vlc_interface.h:145
intf_dialog_args_t::p_intf
intf_thread_t * p_intf
Definition: vlc_interface.h:73
intf_thread_t::p_cfg
config_chain_t * p_cfg
Definition: vlc_interface.h:64
interaction_dialog_t::i_flags
int i_flags
Misc flags.
Definition: vlc_interface.h:279
INTF_DIALOG_RENDERER
@ INTF_DIALOG_RENDERER
Definition: vlc_interface.h:133
INTF_DIALOG_POPUPMENU
@ INTF_DIALOG_POPUPMENU
Definition: vlc_interface.h:135
INTF_DIALOG_SENDKEY
@ INTF_DIALOG_SENDKEY
Definition: vlc_interface.h:142
config_chain_t
Definition: vlc_configuration.h:331
INTF_DIALOG_MISCPOPUPMENU
@ INTF_DIALOG_MISCPOPUPMENU
Definition: vlc_interface.h:138
module_t
Internal module descriptor.
Definition: modules.h:78
vlc_logger_operations
Definition: vlc_messages.h:155
interaction_dialog_t::psz_title
char * psz_title
Title.
Definition: vlc_interface.h:262
INTF_DIALOG_FILE_SIMPLE
@ INTF_DIALOG_FILE_SIMPLE
Definition: vlc_interface.h:115
INTF_DIALOG_PLAYLISTS
@ INTF_DIALOG_PLAYLISTS
Definition: vlc_interface.h:127
interaction_dialog_t::i_type
int i_type
Type identifier.
Definition: vlc_interface.h:261
interaction_dialog_t::psz_returned
char * psz_returned[1]
returned responses from the user
Definition: vlc_interface.h:269
DIALOG_CANCELLED
@ DIALOG_CANCELLED
Definition: vlc_interface.h:305
interaction_dialog_t::i_timeToGo
int i_timeToGo
time (in sec) until shown progress is finished
Definition: vlc_interface.h:272
INTF_DIALOG_STREAMWIZARD
@ INTF_DIALOG_STREAMWIZARD
Definition: vlc_interface.h:123
interaction_dialog_t
struct interaction_dialog_t interaction_dialog_t
This structure describes a piece of interaction with the user.
interaction_dialog_t::psz_other_button
char * psz_other_button
other button title (optional,~Cancel)
Definition: vlc_interface.h:267
INTF_DIALOG_FILEINFO
@ INTF_DIALOG_FILEINFO
Definition: vlc_interface.h:129
INTERACT_HIDE
@ INTERACT_HIDE
Definition: vlc_interface.h:320
intf_thread_t::p_next
struct intf_thread_t * p_next
Definition: vlc_interface.h:52
intf_thread_t::obj
struct vlc_object_t obj
Definition: vlc_interface.h:50
INTF_DIALOG_EXTENDED
@ INTF_DIALOG_EXTENDED
Definition: vlc_interface.h:132
DIALOG_OK_YES
@ DIALOG_OK_YES
Definition: vlc_interface.h:303
intf_thread_t
struct intf_thread_t intf_thread_t
Describe all interface-specific data of the interface thread.
vlc_object_t
VLC object common members.
Definition: vlc_objects.h:43
interaction_dialog_t::psz_alternate_button
char * psz_alternate_button
alternate button title (~NO)
Definition: vlc_interface.h:265
interaction_dialog_t
This structure describes a piece of interaction with the user.
Definition: vlc_interface.h:259
INTF_DIALOG_WIZARD
@ INTF_DIALOG_WIZARD
Definition: vlc_interface.h:124
INTF_DIALOG_EXIT
@ INTF_DIALOG_EXIT
Definition: vlc_interface.h:147
intf_dialog_args_t
Arguments passed to a dialogs provider This describes the arguments passed to the dialogs provider.
Definition: vlc_interface.h:71
intf_dialog_args_t::p_arg
void * p_arg
Definition: vlc_interface.h:80
intf_dialog_args_t::b_save
bool b_save
Definition: vlc_interface.h:84
INTF_DIALOG_PREFS
@ INTF_DIALOG_PREFS
Definition: vlc_interface.h:130
INTF_DIALOG_DIRECTORY
@ INTF_DIALOG_DIRECTORY
Definition: vlc_interface.h:121
intf_thread_t::pf_show_dialog
void(* pf_show_dialog)(struct intf_thread_t *, int, int, intf_dialog_args_t *)
Specific for dialogs providers.
Definition: vlc_interface.h:61
interaction_dialog_t::b_cancelled
bool b_cancelled
was the dialogue cancelled ?
Definition: vlc_interface.h:273
INTERACT_DESTROY
@ INTERACT_DESTROY
Definition: vlc_interface.h:321
INTERACT_UPDATE
@ INTERACT_UPDATE
Definition: vlc_interface.h:319
vlc_intf_dialog
vlc_intf_dialog
Definition: vlc_interface.h:114
intf_thread_t::p_sys
intf_sys_t * p_sys
LibVLC interfaces book keeping.
Definition: vlc_interface.h:55
interaction_dialog_t::p_private
void * p_private
Private interface data.
Definition: vlc_interface.h:275
INTF_DIALOG_UPDATEVLC
@ INTF_DIALOG_UPDATEVLC
Definition: vlc_interface.h:144
intf_sys_t
struct intf_sys_t intf_sys_t
Definition: vlc_interface.h:45
interaction_dialog_t::p_interface
intf_thread_t * p_interface
Definition: vlc_interface.h:284
vlc_intf_GetMainPlaylist
VLC_EXPORT vlc_playlist_t * vlc_intf_GetMainPlaylist(intf_thread_t *intf)
Recover the main playlist from an interface module.
Definition: interface.c:117
intf_dialog_args_t::p_dialog
struct interaction_dialog_t * p_dialog
Definition: vlc_interface.h:88
ANSWERED_DIALOG
@ ANSWERED_DIALOG
Got "answer".
Definition: vlc_interface.h:311
INTF_DIALOG_FILE_GENERIC
@ INTF_DIALOG_FILE_GENERIC
Definition: vlc_interface.h:140
interaction_dialog_t::p_lock
vlc_mutex_t * p_lock
Definition: vlc_interface.h:285
vlc_value_t
VLC value structure.
Definition: vlc_common.h:457
INTERACT_NEW
@ INTERACT_NEW
Definition: vlc_interface.h:318
intf_dialog_args_t::psz_extensions
char * psz_extensions
Definition: vlc_interface.h:83
INTF_DIALOG_FILE
@ INTF_DIALOG_FILE
Definition: vlc_interface.h:116
intf_dialog_args_t::i_results
int i_results
Definition: vlc_interface.h:77
intf_thread_t
Describe all interface-specific data of the interface thread.
Definition: vlc_interface.h:48
interaction_dialog_t::i_status
int i_status
Dialog status;.
Definition: vlc_interface.h:277