vlc_interface.h 10.6 KB
Newer Older
1
/*****************************************************************************
2
 * vlc_interface.h: interface access for other threads
Michel Kaempf's avatar
Michel Kaempf committed
3
4
 * This library provides basic functions for threads to interact with user
 * interface, such as message output.
5
 *****************************************************************************
Jean-Baptiste Kempf's avatar
LGPL    
Jean-Baptiste Kempf committed
6
 * Copyright (C) 1999, 2000 VLC authors and VideoLAN
7
 * $Id$
8
 *
Sam Hocevar's avatar
   
Sam Hocevar committed
9
 * Authors: Vincent Seguin <seguin@via.ecp.fr>
10
 *
Jean-Baptiste Kempf's avatar
LGPL    
Jean-Baptiste Kempf committed
11
12
13
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2.1 of the License, or
14
 * (at your option) any later version.
15
 *
16
17
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Jean-Baptiste Kempf's avatar
LGPL    
Jean-Baptiste Kempf committed
18
19
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Lesser General Public License for more details.
20
 *
Jean-Baptiste Kempf's avatar
LGPL    
Jean-Baptiste Kempf committed
21
22
23
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
24
25
 *****************************************************************************/

26
27
#ifndef VLC_INTF_H_
#define VLC_INTF_H_
zorglub's avatar
zorglub committed
28
29
30
31

# ifdef __cplusplus
extern "C" {
# endif
32

gbazin's avatar
   
gbazin committed
33
34
typedef struct intf_dialog_args_t intf_dialog_args_t;

zorglub's avatar
zorglub committed
35
36
/**
 * \file
zorglub's avatar
zorglub committed
37
38
 * This file contains structures and function prototypes for
 * interface management in vlc
zorglub's avatar
zorglub committed
39
40
41
42
43
44
45
 */

/**
 * \defgroup vlc_interface Interface
 * These functions and structures are for interface management
 * @{
 */
zorglub's avatar
zorglub committed
46

47
48
typedef struct intf_sys_t intf_sys_t;

zorglub's avatar
zorglub committed
49
/** Describe all interface-specific data of the interface thread */
50
typedef struct intf_thread_t
Michel Kaempf's avatar
Michel Kaempf committed
51
{
52
53
    VLC_COMMON_MEMBERS

54
    struct intf_thread_t *p_next; /** LibVLC interfaces book keeping */
Michel Kaempf's avatar
Michel Kaempf committed
55

56
    /* Specific interfaces */
gbazin's avatar
   
gbazin committed
57
    intf_sys_t *        p_sys;                          /** system interface */
58

zorglub's avatar
zorglub committed
59
    /** Interface module */
60
    module_t *   p_module;
61

zorglub's avatar
zorglub committed
62
    /** Specific for dialogs providers */
63
    void ( *pf_show_dialog ) ( struct intf_thread_t *, int, int,
gbazin's avatar
   
gbazin committed
64
                               intf_dialog_args_t * );
gbazin's avatar
   
gbazin committed
65

66
    config_chain_t *p_cfg;
67
} intf_thread_t;
Sam Hocevar's avatar
   
Sam Hocevar committed
68

zorglub's avatar
zorglub committed
69
70
/** \brief Arguments passed to a dialogs provider
 *  This describes the arguments passed to the dialogs provider. They are
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
71
 *  mainly used with INTF_DIALOG_FILE_GENERIC.
zorglub's avatar
zorglub committed
72
 */
gbazin's avatar
   
gbazin committed
73
74
struct intf_dialog_args_t
{
zorglub's avatar
zorglub committed
75
    intf_thread_t *p_intf;
gbazin's avatar
   
gbazin committed
76
77
78
79
80
81
82
83
84
85
    char *psz_title;

    char **psz_results;
    int  i_results;

    void (*pf_callback) ( intf_dialog_args_t * );
    void *p_arg;

    /* Specifically for INTF_DIALOG_FILE_GENERIC */
    char *psz_extensions;
86
87
    bool b_save;
    bool b_multiple;
zorglub's avatar
zorglub committed
88
89

    /* Specific to INTF_DIALOG_INTERACTION */
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
90
    struct interaction_dialog_t *p_dialog;
gbazin's avatar
   
gbazin committed
91
92
};

93
VLC_API int intf_Create( vlc_object_t *, const char * );
94
#define intf_Create(a,b) intf_Create(VLC_OBJECT(a),b)
Vincent Seguin's avatar
Vincent Seguin committed
95

96
VLC_API void libvlc_Quit( libvlc_int_t * );
97

98
99
100
101
102
103
104
105
/**
 * \defgroup vlc_subscription Log messages subscription
 * These functions deal with log messages.
 * @{
 */

/**
 * Message logging callback signature.
106
 * \param data data pointer as provided to vlc_msg_SetCallback().
107
 * \param type message type (VLC_MSG_* values from enum vlc_log_type)
108
 * \param item meta information
109
110
 * \param fmt format string
 * \param args format string arguments
111
 */
112
typedef void (*vlc_log_cb) (void *data, int type, const vlc_log_t *item,
113
                            const char *fmt, va_list args);
114

115
VLC_API void vlc_LogSet(libvlc_int_t *, vlc_log_cb cb, void *data);
116

117
118
119
typedef struct msg_subscription { } msg_subscription_t;
#define vlc_Subscribe(sub,cb,data) ((sub), (cb), (data))
#define vlc_Unsubscribe(sub) ((void)(sub))
120

zorglub's avatar
zorglub committed
121
122
/*@}*/

123
#if defined( _WIN32 ) && !VLC_WINSTORE_APP
gbazin's avatar
   
gbazin committed
124
#    define CONSOLE_INTRO_MSG \
125
         if( !getenv( "PWD" ) ) /* detect Cygwin shell or Wine */ \
126
         { \
gbazin's avatar
   
gbazin committed
127
128
129
130
         AllocConsole(); \
         freopen( "CONOUT$", "w", stdout ); \
         freopen( "CONOUT$", "w", stderr ); \
         freopen( "CONIN$", "r", stdin ); \
131
         } \
132
         msg_Info( p_intf, "VLC media player - %s", VERSION_MESSAGE ); \
133
         msg_Info( p_intf, "%s", COPYRIGHT_MESSAGE ); \
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
134
         msg_Info( p_intf, _("\nWarning: if you cannot access the GUI " \
zorglub's avatar
zorglub committed
135
                             "anymore, open a command-line window, go to the " \
gbazin's avatar
   
gbazin committed
136
                             "directory where you installed VLC and run " \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
137
                             "\"vlc -I qt\"\n") )
gbazin's avatar
   
gbazin committed
138
#else
139
#    define CONSOLE_INTRO_MSG (void)0
gbazin's avatar
   
gbazin committed
140
#endif
gbazin's avatar
   
gbazin committed
141
142

/* Interface dialog ids for dialog providers */
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
143
typedef enum vlc_dialog {
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
    INTF_DIALOG_FILE_SIMPLE = 1,
    INTF_DIALOG_FILE,
    INTF_DIALOG_DISC,
    INTF_DIALOG_NET,
    INTF_DIALOG_CAPTURE,
    INTF_DIALOG_SAT,
    INTF_DIALOG_DIRECTORY,

    INTF_DIALOG_STREAMWIZARD,
    INTF_DIALOG_WIZARD,

    INTF_DIALOG_PLAYLIST,
    INTF_DIALOG_MESSAGES,
    INTF_DIALOG_FILEINFO,
    INTF_DIALOG_PREFS,
    INTF_DIALOG_BOOKMARKS,
    INTF_DIALOG_EXTENDED,

    INTF_DIALOG_POPUPMENU = 20,
    INTF_DIALOG_AUDIOPOPUPMENU,
    INTF_DIALOG_VIDEOPOPUPMENU,
    INTF_DIALOG_MISCPOPUPMENU,

    INTF_DIALOG_FILE_GENERIC = 30,
    INTF_DIALOG_INTERACTION = 50,

    INTF_DIALOG_UPDATEVLC = 90,
    INTF_DIALOG_VLM,

    INTF_DIALOG_EXIT = 99
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
174
} vlc_dialog_t;
gbazin's avatar
   
gbazin committed
175
176

/* Useful text messages shared by interfaces */
177
#define INTF_ABOUT_MSG LICENSE_MSG
178

179
#define EXTENSIONS_AUDIO_CSV "3ga", "669", "a52", "aac", "ac3", "adt", "adts", "aif", "aifc", "aiff", \
180
                         "amr", "aob", "ape", "awb", "caf", "dts", "flac", "it", "kar", \
181
182
183
184
185
186
                         "m4a", "m4p", "m5p", "mka", "mlp", "mod", "mpa", "mp1", "mp2", "mp3", "mpc", "mpga", \
                         "oga", "ogg", "oma", "opus", "qcp", "ra", "rmi", "s3m", "spx", "thd", "tta", \
                         "voc", "vqf", "w64", "wav", "wma", "wv", "xa", "xm"

#define EXTENSIONS_VIDEO_CSV "3g2", "3gp", "3gp2", "3gpp", "amv", "asf", "avi", "divx", "drc", "dv", \
                             "f4v", "flv", "gvi", "gxf", "iso", \
jetru's avatar
jetru committed
187
                             "m1v", "m2v", "m2t", "m2ts", "m4v", "mkv", "mov",\
188
189
                             "mp2", "mp2v", "mp4", "mp4v", "mpe", "mpeg", "mpeg1", \
                             "mpeg2", "mpeg4", "mpg", "mpv2", "mts", "mtv", "mxf", "mxg", "nsv", "nuv", \
jetru's avatar
jetru committed
190
                             "ogg", "ogm", "ogv", "ogx", "ps", \
191
192
                             "rec", "rm", "rmvb", "tod", "ts", "tts", "vob", "vro", \
                             "webm", "wm", "wmv", "wtv", "xesc"
jetru's avatar
jetru committed
193

194
#define EXTENSIONS_AUDIO \
Julien Humbert's avatar
Julien Humbert committed
195
    "*.3ga;" \
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
196
    "*.669;" \
197
198
199
    "*.a52;" \
    "*.aac;" \
    "*.ac3;" \
200
201
202
203
    "*.adt;" \
    "*.adts;" \
    "*.aif;"\
    "*.aifc;"\
204
    "*.aiff;"\
205
    "*.amr;" \
206
207
    "*.aob;" \
    "*.ape;" \
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
208
    "*.awb;" \
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
209
    "*.caf;" \
210
211
212
    "*.dts;" \
    "*.flac;"\
    "*.it;"  \
213
    "*.kar;" \
214
215
    "*.m4a;" \
    "*.m4p;" \
216
    "*.m5p;" \
217
218
219
220
    "*.mid;" \
    "*.mka;" \
    "*.mlp;" \
    "*.mod;" \
221
    "*.mpa;" \
222
223
224
225
    "*.mp1;" \
    "*.mp2;" \
    "*.mp3;" \
    "*.mpc;" \
226
    "*.mpga;" \
227
228
229
    "*.oga;" \
    "*.ogg;" \
    "*.oma;" \
.'s avatar
. committed
230
    "*.opus;" \
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
231
    "*.qcp;" \
232
    "*.ra;" \
233
234
235
    "*.rmi;" \
    "*.s3m;" \
    "*.spx;" \
236
    "*.thd;" \
237
    "*.tta;" \
238
239
240
241
242
243
244
245
    "*.voc;" \
    "*.vqf;" \
    "*.w64;" \
    "*.wav;" \
    "*.wma;" \
    "*.wv;"  \
    "*.xa;"  \
    "*.xm"
246

247
248
#define EXTENSIONS_VIDEO "*.3g2;*.3gp;*.3gp2;*.3gpp;*.amv;*.asf;*.avi;*.bin;*.divx;*.drc;*.dv;*f4v;*.flv;*.gvi;*.gvi;*.gxf;*.iso;*.m1v;*.m2v;" \
                         "*.m2t;*.m2ts;*.m4v;*.mkv;*.mov;*.mp2;*.mp2v;*.mp4;*.mp4v;*.mpe;*.mpeg;*.mpeg1;" \
sebastien's avatar
sebastien committed
249
                         "*.mpeg2;*.mpeg4;*.mpg;*.mpv2;*.mts;*.mtv;*.mxf;*.mxg;*.nsv;*.nuv;" \
250
                         "*.ogg;*.ogm;*.ogv;*.ogx;*.ps;" \
251
                         "*.rec;*.rm;*.rmvb;*.tod;*.ts;*.tts;*.vob;*.vro;*.webm;*.wm;*.wmv;*.wtv;*.xesc"
252

253
#define EXTENSIONS_PLAYLIST "*.asx;*.b4s;*.cue;*.ifo;*.m3u;*.m3u8;*.pls;*.ram;*.rar;*.sdp;*.vlc;*.xspf;*.wvx;*.zip;*.conf"
254

255
256
257
#define EXTENSIONS_MEDIA EXTENSIONS_VIDEO ";" EXTENSIONS_AUDIO ";" \
                          EXTENSIONS_PLAYLIST

258
259
260
261
262
#define EXTENSIONS_SUBTITLE "*.cdg;*.idx;*.srt;" \
                            "*.sub;*.utf;*.ass;" \
                            "*.ssa;*.aqt;" \
                            "*.jss;*.psb;" \
                            "*.rt;*.smi;*.txt;" \
263
                            "*.smil;*.stl;*.usf;" \
264
                            "*.dks;*.pjs;*.mpl2;*.mks"
zorglub's avatar
zorglub committed
265
266
267
268
269
270
271
272
273
274

/** \defgroup vlc_interaction Interaction
 * \ingroup vlc_interface
 * Interaction between user and modules
 * @{
 */

/**
 * This structure describes a piece of interaction with the user
 */
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
275
typedef struct interaction_dialog_t
zorglub's avatar
zorglub committed
276
277
278
279
280
281
282
283
284
285
286
287
288
{
    int             i_type;             ///< Type identifier
    char           *psz_title;          ///< Title
    char           *psz_description;    ///< Descriptor string
    char           *psz_default_button;  ///< default button title (~OK)
    char           *psz_alternate_button;///< alternate button title (~NO)
    /// other button title (optional,~Cancel)
    char           *psz_other_button;

    char           *psz_returned[1];    ///< returned responses from the user

    vlc_value_t     val;                ///< value coming from core for dialogue
    int             i_timeToGo;         ///< time (in sec) until shown progress is finished
289
    bool      b_cancelled;        ///< was the dialogue cancelled ?
zorglub's avatar
zorglub committed
290
291
292
293
294
295
296
297
298
299

    void *          p_private;          ///< Private interface data

    int             i_status;           ///< Dialog status;
    int             i_action;           ///< Action to perform;
    int             i_flags;            ///< Misc flags
    int             i_return;           ///< Return status

    vlc_object_t   *p_parent;           ///< The vlc object that asked
                                        //for interaction
300
    intf_thread_t  *p_interface;
301
    vlc_mutex_t    *p_lock;
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
302
} interaction_dialog_t;
303

zorglub's avatar
zorglub committed
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
/**
 * Possible flags . Dialog types
 */
#define DIALOG_GOT_ANSWER           0x01
#define DIALOG_YES_NO_CANCEL        0x02
#define DIALOG_LOGIN_PW_OK_CANCEL   0x04
#define DIALOG_PSZ_INPUT_OK_CANCEL  0x08
#define DIALOG_BLOCKING_ERROR       0x10
#define DIALOG_NONBLOCKING_ERROR    0x20
#define DIALOG_USER_PROGRESS        0x80
#define DIALOG_INTF_PROGRESS        0x100

/** Possible return codes */
enum
{
    DIALOG_OK_YES,
    DIALOG_NO,
    DIALOG_CANCELLED
};

/** Possible status  */
enum
{
    ANSWERED_DIALOG,            ///< Got "answer"
    DESTROYED_DIALOG,           ///< Interface has destroyed it
};

/** Possible actions */
enum
{
    INTERACT_NEW,
    INTERACT_UPDATE,
    INTERACT_HIDE,
    INTERACT_DESTROY
};

340
#define intf_UserStringInput( a, b, c, d ) (VLC_OBJECT(a),b,c,d, VLC_EGENERIC)
Rémi Denis-Courmont's avatar
Typo    
Rémi Denis-Courmont committed
341
#define interaction_Register( t ) (t, VLC_EGENERIC)
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
342
343
#define interaction_Unregister( t ) (t, VLC_EGENERIC)

zorglub's avatar
zorglub committed
344
345
346
347
348
349
350
351

/** @} */
/** @} */

# ifdef __cplusplus
}
# endif
#endif