VLC  3.0.15
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  * $Id: e271314c3120c270a0bef5189cfee21dd9e7b26b $
8  *
9  * Authors: Vincent Seguin <seguin@via.ecp.fr>
10  *
11  * This program is free software; you can redistribute it and/or modify it
12  * under the terms of the GNU Lesser General Public License as published by
13  * the Free Software Foundation; either version 2.1 of the License, or
14  * (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * along with this program; if not, write to the Free Software Foundation,
23  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
24  *****************************************************************************/
25 
26 #ifndef VLC_INTF_H_
27 #define VLC_INTF_H_
28 
29 # ifdef __cplusplus
30 extern "C" {
31 # endif
32 
34 
35 /**
36  * \defgroup interface Interface
37  * VLC user interfaces
38  * @{
39  * \file
40  * VLC user interface modules
41  */
42 
43 typedef struct intf_sys_t intf_sys_t;
44 
45 /** Describe all interface-specific data of the interface thread */
46 typedef struct intf_thread_t
47 {
49 
50  struct intf_thread_t *p_next; /** LibVLC interfaces book keeping */
51 
52  /* Specific interfaces */
53  intf_sys_t * p_sys; /** system interface */
54 
55  /** Interface module */
57 
58  /** Specific for dialogs providers */
59  void ( *pf_show_dialog ) ( struct intf_thread_t *, int, int,
61 
64 
65 /** \brief Arguments passed to a dialogs provider
66  * This describes the arguments passed to the dialogs provider. They are
67  * mainly used with INTF_DIALOG_FILE_GENERIC.
68  */
70 {
72  char *psz_title;
73 
74  char **psz_results;
75  int i_results;
76 
78  void *p_arg;
79 
80  /* Specifically for INTF_DIALOG_FILE_GENERIC */
82  bool b_save;
83  bool b_multiple;
84 
85  /* Specific to INTF_DIALOG_INTERACTION */
87 };
88 
89 VLC_API int intf_Create( playlist_t *, const char * );
90 
92 
93 static inline playlist_t *pl_Get( struct intf_thread_t *intf )
94 {
95  return (playlist_t *)(intf->obj.parent);
96 }
97 
98 /**
99  * Retrieves the current input thread from the playlist.
100  * @note The returned object must be released with vlc_object_release().
101  */
102 #define pl_CurrentInput(intf) (playlist_CurrentInput(pl_Get(intf)))
103 
104 /**
105  * @ingroup messages
106  * @{
107  */
108 
109 VLC_API void vlc_LogSet(libvlc_int_t *, vlc_log_cb cb, void *data);
110 
111 /*@}*/
112 
113 /* Interface dialog ids for dialog providers */
114 typedef enum vlc_intf_dialog {
122 
125 
133 
138 
142 
145 
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", "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", "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  "*.flac;"\
187  "*.it;" \
188  "*.kar;" \
189  "*.m4a;" \
190  "*.m4b;" \
191  "*.m4p;" \
192  "*.m5p;" \
193  "*.mid;" \
194  "*.mka;" \
195  "*.mlp;" \
196  "*.mod;" \
197  "*.mpa;" \
198  "*.mp1;" \
199  "*.mp2;" \
200  "*.mp3;" \
201  "*.mpc;" \
202  "*.mpga;" \
203  "*.mus;" \
204  "*.oga;" \
205  "*.ogg;" \
206  "*.oma;" \
207  "*.opus;" \
208  "*.qcp;" \
209  "*.ra;" \
210  "*.rmi;" \
211  "*.s3m;" \
212  "*.sid;" \
213  "*.spx;" \
214  "*.tak;" \
215  "*.thd;" \
216  "*.tta;" \
217  "*.voc;" \
218  "*.vqf;" \
219  "*.w64;" \
220  "*.wav;" \
221  "*.wma;" \
222  "*.wv;" \
223  "*.xa;" \
224  "*.xm"
225 
226 #define EXTENSIONS_VIDEO "*.3g2;*.3gp;*.3gp2;*.3gpp;*.amv;*.asf;*.avi;*.bik;*.bin;*.crf;*.divx;*.drc;*.dv;*.dvr-ms;*.evo;*.f4v;*.flv;*.gvi;*.gxf;*.iso;*.m1v;*.m2v;" \
227  "*.m2t;*.m2ts;*.m4v;*.mkv;*.mov;*.mp2;*.mp2v;*.mp4;*.mp4v;*.mpe;*.mpeg;*.mpeg1;" \
228  "*.mpeg2;*.mpeg4;*.mpg;*.mpv2;*.mts;*.mtv;*.mxf;*.mxg;*.nsv;*.nuv;" \
229  "*.ogg;*.ogm;*.ogv;*.ogx;*.ps;" \
230  "*.rec;*.rm;*.rmvb;*.rpl;*.thp;*.tod;*.tp;*.ts;*.tts;*.txd;*.vob;*.vro;*.webm;*.wm;*.wmv;*.wtv;*.xesc"
231 
232 #define EXTENSIONS_PLAYLIST "*.asx;*.b4s;*.cue;*.ifo;*.m3u;*.m3u8;*.pls;*.ram;*.rar;*.sdp;*.vlc;*.xspf;*.wax;*.wvx;*.zip;*.conf"
233 
234 #define EXTENSIONS_MEDIA EXTENSIONS_VIDEO ";" EXTENSIONS_AUDIO ";" \
235  EXTENSIONS_PLAYLIST
236 
237 #define EXTENSIONS_SUBTITLE "*.cdg;*.idx;*.srt;" \
238  "*.sub;*.utf;*.ass;" \
239  "*.ssa;*.aqt;" \
240  "*.jss;*.psb;" \
241  "*.rt;*.sami;*.smi;*.txt;" \
242  "*.smil;*.stl;*.usf;" \
243  "*.dks;*.pjs;*.mpl2;*.mks;" \
244  "*.vtt;*.tt;*.ttml;*.dfxp;" \
245  "*.scc"
246 
247 /** \defgroup interaction Interaction
248  * \ingroup interface
249  * Interaction between user and modules
250  * @{
251  */
252 
253 /**
254  * This structure describes a piece of interaction with the user
255  */
256 typedef struct interaction_dialog_t
257 {
258  int i_type; ///< Type identifier
259  char *psz_title; ///< Title
260  char *psz_description; ///< Descriptor string
261  char *psz_default_button; ///< default button title (~OK)
262  char *psz_alternate_button;///< alternate button title (~NO)
263  /// other button title (optional,~Cancel)
265 
266  char *psz_returned[1]; ///< returned responses from the user
267 
268  vlc_value_t val; ///< value coming from core for dialogue
269  int i_timeToGo; ///< time (in sec) until shown progress is finished
270  bool b_cancelled; ///< was the dialogue cancelled ?
271 
272  void * p_private; ///< Private interface data
273 
274  int i_status; ///< Dialog status;
275  int i_action; ///< Action to perform;
276  int i_flags; ///< Misc flags
277  int i_return; ///< Return status
278 
279  vlc_object_t *p_parent; ///< The vlc object that asked
280  //for interaction
284 
285 /**
286  * Possible flags . Dialog types
287  */
288 #define DIALOG_GOT_ANSWER 0x01
289 #define DIALOG_YES_NO_CANCEL 0x02
290 #define DIALOG_LOGIN_PW_OK_CANCEL 0x04
291 #define DIALOG_PSZ_INPUT_OK_CANCEL 0x08
292 #define DIALOG_BLOCKING_ERROR 0x10
293 #define DIALOG_NONBLOCKING_ERROR 0x20
294 #define DIALOG_USER_PROGRESS 0x80
295 #define DIALOG_INTF_PROGRESS 0x100
296 
297 /** Possible return codes */
298 enum
299 {
303 };
304 
305 /** Possible status */
306 enum
307 {
308  ANSWERED_DIALOG, ///< Got "answer"
309  DESTROYED_DIALOG, ///< Interface has destroyed it
310 };
311 
312 /** Possible actions */
313 enum
314 {
319 };
320 
321 #define intf_UserStringInput( a, b, c, d ) (VLC_OBJECT(a),b,c,d, VLC_EGENERIC)
322 #define interaction_Register( t ) (t, VLC_EGENERIC)
323 #define interaction_Unregister( t ) (t, VLC_EGENERIC)
324 
325 
326 /** @} */
327 /** @} */
328 
329 # ifdef __cplusplus
330 }
331 # endif
332 #endif
INTF_DIALOG_CAPTURE
Definition: vlc_interface.h:119
playlist_t
Structure containing information about the playlist.
Definition: vlc_playlist.h:151
DIALOG_NO
Definition: vlc_interface.h:301
VLC_API
#define VLC_API
Definition: fourcc_gen.c:30
VLC_COMMON_MEMBERS
#define VLC_COMMON_MEMBERS
Backward compatibility macro.
Definition: vlc_common.h:453
intf_thread_t::obj
struct vlc_common_members obj
Definition: vlc_interface.h:48
interaction_dialog_t::p_parent
vlc_object_t * p_parent
The vlc object that asked.
Definition: vlc_interface.h:279
INTF_DIALOG_MESSAGES
Definition: vlc_interface.h:127
libvlc_int_t
Definition: vlc_main.h:33
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:77
DESTROYED_DIALOG
Interface has destroyed it.
Definition: vlc_interface.h:309
vlc_common.h
INTF_DIALOG_BOOKMARKS
Definition: vlc_interface.h:130
intf_dialog_args_t::b_multiple
bool b_multiple
Definition: vlc_interface.h:83
INTF_DIALOG_PLAYLIST
Definition: vlc_interface.h:126
INTF_DIALOG_SAT
Definition: vlc_interface.h:120
INTF_DIALOG_INTERACTION
Definition: vlc_interface.h:140
interaction_dialog_t
struct interaction_dialog_t interaction_dialog_t
This structure describes a piece of interaction with the user.
intf_thread_t::p_module
module_t * p_module
system interface
Definition: vlc_interface.h:56
libvlc_Quit
void libvlc_Quit(libvlc_int_t *)
Posts an exit signal to LibVLC instance.
Definition: exit.c:60
interaction_dialog_t::psz_description
char * psz_description
Descriptor string.
Definition: vlc_interface.h:260
intf_dialog_args_t::psz_results
char ** psz_results
Definition: vlc_interface.h:74
INTF_DIALOG_AUDIOPOPUPMENU
Definition: vlc_interface.h:135
interaction_dialog_t::i_action
int i_action
Action to perform;.
Definition: vlc_interface.h:275
interaction_dialog_t::i_return
int i_return
Return status.
Definition: vlc_interface.h:277
intf_dialog_args_t::psz_title
char * psz_title
Definition: vlc_interface.h:72
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:268
interaction_dialog_t::psz_default_button
char * psz_default_button
default button title (~OK)
Definition: vlc_interface.h:261
INTF_DIALOG_VIDEOPOPUPMENU
Definition: vlc_interface.h:136
INTF_DIALOG_VLM
Definition: vlc_interface.h:144
intf_dialog_args_t::p_intf
intf_thread_t * p_intf
Definition: vlc_interface.h:71
vlc_common_members::parent
vlc_object_t * parent
Parent object.
Definition: vlc_common.h:448
intf_thread_t::p_cfg
config_chain_t * p_cfg
Definition: vlc_interface.h:62
interaction_dialog_t::i_flags
int i_flags
Misc flags.
Definition: vlc_interface.h:276
INTF_DIALOG_RENDERER
Definition: vlc_interface.h:132
INTF_DIALOG_POPUPMENU
Definition: vlc_interface.h:134
INTF_DIALOG_SENDKEY
Definition: vlc_interface.h:141
config_chain_t
Definition: vlc_configuration.h:155
INTF_DIALOG_MISCPOPUPMENU
Definition: vlc_interface.h:137
module_t
Internal module descriptor.
Definition: modules.h:79
interaction_dialog_t::psz_title
char * psz_title
Title.
Definition: vlc_interface.h:259
INTERACT_HIDE
Definition: vlc_interface.h:317
INTF_DIALOG_FILE_SIMPLE
Definition: vlc_interface.h:115
interaction_dialog_t::i_type
int i_type
Type identifier.
Definition: vlc_interface.h:258
interaction_dialog_t::psz_returned
char * psz_returned[1]
returned responses from the user
Definition: vlc_interface.h:266
interaction_dialog_t::i_timeToGo
int i_timeToGo
time (in sec) until shown progress is finished
Definition: vlc_interface.h:269
INTF_DIALOG_STREAMWIZARD
Definition: vlc_interface.h:123
interaction_dialog_t::psz_other_button
char * psz_other_button
other button title (optional,~Cancel)
Definition: vlc_interface.h:264
ANSWERED_DIALOG
Got "answer".
Definition: vlc_interface.h:308
INTF_DIALOG_FILEINFO
Definition: vlc_interface.h:128
intf_thread_t::p_next
struct intf_thread_t * p_next
Definition: vlc_interface.h:50
INTF_DIALOG_EXTENDED
Definition: vlc_interface.h:131
INTERACT_NEW
Definition: vlc_interface.h:315
vlc_object_t
The main vlc_object_t structure.
Definition: vlc_objects.h:39
DIALOG_CANCELLED
Definition: vlc_interface.h:302
vlc_mutex_t
pthread_mutex_t vlc_mutex_t
Mutex.
Definition: vlc_threads.h:267
interaction_dialog_t::psz_alternate_button
char * psz_alternate_button
alternate button title (~NO)
Definition: vlc_interface.h:262
interaction_dialog_t
This structure describes a piece of interaction with the user.
Definition: vlc_interface.h:256
pl_Get
static playlist_t * pl_Get(struct intf_thread_t *intf)
Definition: vlc_interface.h:93
INTF_DIALOG_WIZARD
Definition: vlc_interface.h:124
INTF_DIALOG_EXIT
Definition: vlc_interface.h:146
intf_dialog_args_t
Arguments passed to a dialogs provider This describes the arguments passed to the dialogs provider.
Definition: vlc_interface.h:69
intf_dialog_args_t::p_arg
void * p_arg
Definition: vlc_interface.h:78
intf_dialog_args_t::b_save
bool b_save
Definition: vlc_interface.h:82
INTERACT_UPDATE
Definition: vlc_interface.h:316
INTF_DIALOG_PREFS
Definition: vlc_interface.h:129
INTF_DIALOG_DIRECTORY
Definition: vlc_interface.h:121
DIALOG_OK_YES
Definition: vlc_interface.h:300
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:59
interaction_dialog_t::b_cancelled
bool b_cancelled
was the dialogue cancelled ?
Definition: vlc_interface.h:270
intf_thread_t
struct intf_thread_t intf_thread_t
Describe all interface-specific data of the interface thread.
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:53
interaction_dialog_t::p_private
void * p_private
Private interface data.
Definition: vlc_interface.h:272
vlc_log_cb
void(* vlc_log_cb)(void *data, int type, const vlc_log_t *item, const char *fmt, va_list args)
Message logging callback signature.
Definition: vlc_messages.h:102
INTF_DIALOG_UPDATEVLC
Definition: vlc_interface.h:143
intf_sys_t
struct intf_sys_t intf_sys_t
Definition: vlc_interface.h:43
interaction_dialog_t::p_interface
intf_thread_t * p_interface
Definition: vlc_interface.h:281
intf_Create
int intf_Create(playlist_t *, const char *)
Create and start an interface.
Definition: interface.c:71
intf_dialog_args_t::p_dialog
struct interaction_dialog_t * p_dialog
Definition: vlc_interface.h:86
vlc_LogSet
void vlc_LogSet(libvlc_int_t *, vlc_log_cb cb, void *data)
Sets the message logging callback.
Definition: messages.c:388
INTF_DIALOG_FILE_GENERIC
Definition: vlc_interface.h:139
interaction_dialog_t::p_lock
vlc_mutex_t * p_lock
Definition: vlc_interface.h:282
vlc_value_t
VLC value structure.
Definition: vlc_common.h:325
intf_dialog_args_t::psz_extensions
char * psz_extensions
Definition: vlc_interface.h:81
INTF_DIALOG_FILE
Definition: vlc_interface.h:116
intf_dialog_args_t::i_results
int i_results
Definition: vlc_interface.h:75
intf_thread_t
Describe all interface-specific data of the interface thread.
Definition: vlc_interface.h:46
interaction_dialog_t::i_status
int i_status
Dialog status;.
Definition: vlc_interface.h:274
INTERACT_DESTROY
Definition: vlc_interface.h:318