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 {
72  intf_thread_t *p_intf;
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 */
87  struct interaction_dialog_t *p_dialog;
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 {
145  INTF_DIALOG_EXIT = 99
147 
148 /* Useful text messages shared by interfaces */
149 #define INTF_ABOUT_MSG LICENSE_MSG
151 #define EXTENSIONS_AUDIO_CSV "3ga", "669", "a52", "aac", "ac3", "adt", "adts", "aif", "aifc", "aiff", \
152  "amb", "amr", "aob", "ape", "au", "awb", "caf", "dts", "dsf", "dff", "flac", "it", "kar", \
153  "m4a", "m4b", "m4p", "m5p", "mka", "mlp", "mod", "mpa", "mp1", "mp2", "mp3", "mpc", "mpga", "mus", \
154  "oga", "ogg", "oma", "opus", "qcp", "ra", "rmi", "s3m", "sid", "spx", "tak", "thd", "tta", \
155  "voc", "vqf", "w64", "wav", "wma", "wv", "xa", "xm"
156 
157 #define EXTENSIONS_VIDEO_CSV "3g2", "3gp", "3gp2", "3gpp", "amv", "asf", "avi", "bik", "crf", "dav", "divx", "drc", "dv", "dvr-ms" \
158  "evo", "f4v", "flv", "gvi", "gxf", "iso", \
159  "m1v", "m2v", "m2t", "m2ts", "m4v", "mkv", "mov",\
160  "mp2", "mp2v", "mp4", "mp4v", "mpe", "mpeg", "mpeg1", \
161  "mpeg2", "mpeg4", "mpg", "mpv2", "mts", "mtv", "mxf", "mxg", "nsv", "nuv", \
162  "ogg", "ogm", "ogv", "ogx", "ps", \
163  "rec", "rm", "rmvb", "rpl", "thp", "tod", "ts", "tts", "txd", "vob", "vro", \
164  "webm", "wm", "wmv", "wtv", "xesc"
165 
166 #define EXTENSIONS_AUDIO \
167  "*.3ga;" \
168  "*.669;" \
169  "*.a52;" \
170  "*.aac;" \
171  "*.ac3;" \
172  "*.adt;" \
173  "*.adts;" \
174  "*.aif;"\
175  "*.aifc;"\
176  "*.aiff;"\
177  "*.amb;" \
178  "*.amr;" \
179  "*.aob;" \
180  "*.ape;" \
181  "*.au;" \
182  "*.awb;" \
183  "*.caf;" \
184  "*.dts;" \
185  "*.dsf;" \
186  "*.dff;" \
187  "*.flac;"\
188  "*.it;" \
189  "*.kar;" \
190  "*.m4a;" \
191  "*.m4b;" \
192  "*.m4p;" \
193  "*.m5p;" \
194  "*.mid;" \
195  "*.mka;" \
196  "*.mlp;" \
197  "*.mod;" \
198  "*.mpa;" \
199  "*.mp1;" \
200  "*.mp2;" \
201  "*.mp3;" \
202  "*.mpc;" \
203  "*.mpga;" \
204  "*.mus;" \
205  "*.oga;" \
206  "*.ogg;" \
207  "*.oma;" \
208  "*.opus;" \
209  "*.qcp;" \
210  "*.ra;" \
211  "*.rmi;" \
212  "*.s3m;" \
213  "*.sid;" \
214  "*.spx;" \
215  "*.tak;" \
216  "*.thd;" \
217  "*.tta;" \
218  "*.voc;" \
219  "*.vqf;" \
220  "*.w64;" \
221  "*.wav;" \
222  "*.wma;" \
223  "*.wv;" \
224  "*.xa;" \
225  "*.xm"
226 
227 #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;" \
228  "*.m2t;*.m2ts;*.m4v;*.mkv;*.mov;*.mp2;*.mp2v;*.mp4;*.mp4v;*.mpe;*.mpeg;*.mpeg1;" \
229  "*.mpeg2;*.mpeg4;*.mpg;*.mpv2;*.mts;*.mtv;*.mxf;*.mxg;*.nsv;*.nuv;" \
230  "*.ogg;*.ogm;*.ogv;*.ogx;*.ps;" \
231  "*.rec;*.rm;*.rmvb;*.rpl;*.thp;*.tod;*.tp;*.ts;*.tts;*.txd;*.vob;*.vro;*.webm;*.wm;*.wmv;*.wtv;*.xesc"
232 
233 #define EXTENSIONS_PLAYLIST "*.asx;*.b4s;*.cue;*.ifo;*.m3u;*.m3u8;*.pls;*.ram;*.rar;*.sdp;*.vlc;*.xspf;*.wax;*.wvx;*.zip;*.conf"
235 #define EXTENSIONS_MEDIA EXTENSIONS_VIDEO ";" EXTENSIONS_AUDIO ";" \
236  EXTENSIONS_PLAYLIST
237 
238 #define EXTENSIONS_SUBTITLE "*.cdg;*.idx;*.srt;" \
239  "*.sub;*.utf;*.ass;" \
240  "*.ssa;*.aqt;" \
241  "*.jss;*.psb;" \
242  "*.rt;*.sami;*.smi;*.txt;" \
243  "*.smil;*.stl;*.usf;" \
244  "*.dks;*.pjs;*.mpl2;*.mks;" \
245  "*.vtt;*.tt;*.ttml;*.dfxp;" \
246  "*.scc"
247 
248 /** \defgroup interaction Interaction
249  * \ingroup interface
250  * Interaction between user and modules
251  * @{
252  */
253 
254 /**
255  * This structure describes a piece of interaction with the user
256  */
257 typedef struct interaction_dialog_t
258 {
259  int i_type; ///< Type identifier
260  char *psz_title; ///< Title
261  char *psz_description; ///< Descriptor string
262  char *psz_default_button; ///< default button title (~OK)
263  char *psz_alternate_button;///< alternate button title (~NO)
264  /// other button title (optional,~Cancel)
265  char *psz_other_button;
267  char *psz_returned[1]; ///< returned responses from the user
269  vlc_value_t val; ///< value coming from core for dialogue
270  int i_timeToGo; ///< time (in sec) until shown progress is finished
271  bool b_cancelled; ///< was the dialogue cancelled ?
273  void * p_private; ///< Private interface data
275  int i_status; ///< Dialog status;
276  int i_action; ///< Action to perform;
277  int i_flags; ///< Misc flags
278  int i_return; ///< Return status
280  vlc_object_t *p_parent; ///< The vlc object that asked
281  //for interaction
282  intf_thread_t *p_interface;
283  vlc_mutex_t *p_lock;
285 
286 /**
287  * Possible flags . Dialog types
288  */
289 #define DIALOG_GOT_ANSWER 0x01
290 #define DIALOG_YES_NO_CANCEL 0x02
291 #define DIALOG_LOGIN_PW_OK_CANCEL 0x04
292 #define DIALOG_PSZ_INPUT_OK_CANCEL 0x08
293 #define DIALOG_BLOCKING_ERROR 0x10
294 #define DIALOG_NONBLOCKING_ERROR 0x20
295 #define DIALOG_USER_PROGRESS 0x80
296 #define DIALOG_INTF_PROGRESS 0x100
298 /** Possible return codes */
299 enum
300 {
304 };
305 
306 /** Possible status */
307 enum
308 {
309  ANSWERED_DIALOG, ///< Got "answer"
310  DESTROYED_DIALOG, ///< Interface has destroyed it
311 };
312 
313 /** Possible actions */
314 enum
315 {
316  INTERACT_NEW,
320 };
321 
322 #define intf_UserStringInput( a, b, c, d ) (VLC_OBJECT(a),b,c,d, VLC_EGENERIC)
323 #define interaction_Register( t ) (t, VLC_EGENERIC)
324 #define interaction_Unregister( t ) (t, VLC_EGENERIC)
326 
327 /** @} */
328 /** @} */
329 
330 # ifdef __cplusplus
331 }
332 # endif
333 #endif
Definition: vlc_interface.h:303
Definition: playlist.h:48
Definition: vlc_interface.h:116
struct intf_thread_t intf_thread_t
Describe all interface-specific data of the interface thread.
Definition: vlc_interface.h:117
Definition: vlc_interface.h:319
Definition: vlc_objects.h:115
struct interaction_dialog_t interaction_dialog_t
This structure describes a piece of interaction with the user.
Definition: vlc_interface.h:143
Definition: vlc_interface.h:128
Definition: vlc_messages.h:151
Internal module descriptor.
Definition: modules.h:75
VLC value structure.
Definition: vlc_common.h:455
Definition: vlc_interface.h:140
void(* pf_show_dialog)(struct intf_thread_t *, int, int, intf_dialog_args_t *)
Specific for dialogs providers.
Definition: vlc_interface.h:61
Definition: vlc_interface.h:139
Definition: vlc_interface.h:118
Definition: vlc_interface.h:130
Definition: vlc_interface.h:304
Definition: vlc_configuration.h:331
void libvlc_Quit(libvlc_int_t *)
Posts an exit signal to LibVLC instance.
Definition: exit.c:55
Interface has destroyed it.
Definition: vlc_interface.h:311
Got "answer".
Definition: vlc_interface.h:310
int i_type
Definition: httpd.c:1270
Definition: vlc_interface.h:120
Mutex.
Definition: vlc_threads.h:266
Definition: vlc_interface.h:124
module_t * p_module
system interface
Definition: vlc_interface.h:58
Describe all interface-specific data of the interface thread.
Definition: vlc_interface.h:48
vlc_intf_dialog
Definition: vlc_interface.h:114
Definition: vlc_interface.h:134
struct intf_sys_t intf_sys_t
Definition: vlc_interface.h:45
Arguments passed to a dialogs provider This describes the arguments passed to the dialogs provider...
Definition: vlc_interface.h:71
Definition: vlc_interface.h:144
Definition: vlc_interface.h:119
intf_sys_t * p_sys
LibVLC interfaces book keeping.
Definition: vlc_interface.h:55
#define VLC_API
Definition: fourcc_gen.c:31
Definition: vlc_interface.h:115
Definition: vlc_interface.h:132
Definition: vlc_interface.h:137
Definition: vlc_interface.h:320
config_chain_t * p_cfg
Definition: vlc_interface.h:64
Definition: vlc_interface.h:126
Definition: vlc_interface.h:136
Definition: vlc_interface.h:318
vlc_playlist_t * vlc_intf_GetMainPlaylist(intf_thread_t *intf)
Recover the main playlist from an interface module.
Definition: interface.c:117
Definition: vlc_interface.h:127
Definition: vlc_interface.h:123
Definition: vlc_interface.h:129
VLC object common members.
Definition: vlc_objects.h:43
Definition: vlc_interface.h:121
Definition: vlc_interface.h:302
struct intf_thread_t * p_next
Definition: vlc_interface.h:52
Definition: vlc_interface.h:135
int intf_Create(libvlc_int_t *, const char *)
Create and start an interface.
Definition: interface.c:131
Definition: vlc_interface.h:141
Definition: vlc_interface.h:146
This structure describes a piece of interaction with the user.
Definition: vlc_interface.h:258
Definition: vlc_interface.h:131
Definition: vlc_interface.h:317
void vlc_LogSet(libvlc_int_t *, const struct vlc_logger_operations *, void *data)
Sets the message logging callback.
Definition: messages.c:569