forked from videolan/vlc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvlc_configuration.h
417 lines (376 loc) · 14.6 KB
/
vlc_configuration.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
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
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
/*****************************************************************************
* vlc_configuration.h : configuration management module
* This file describes the programming interface for the configuration module.
* It includes functions allowing to declare, get or set configuration options.
*****************************************************************************
* Copyright (C) 1999-2006 VLC authors and VideoLAN
* $Id$
*
* Authors: Gildas Bazin <gbazin@videolan.org>
*
* 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
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* 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.
*****************************************************************************/
#ifndef VLC_CONFIGURATION_H
#define VLC_CONFIGURATION_H 1
/**
* \defgroup config User settings
* \ingroup interface
* VLC provides a simple name-value dictionary for user settings.
*
* Those settings are per-user per-system - they are shared by all LibVLC
* instances in a single process, and potentially other processes as well.
*
* Each name-value pair is called a configuration item.
* @{
*/
/**
* \file
* This file describes the programming interface for the configuration module.
* It includes functions allowing to declare, get or set configuration options.
*/
#include <sys/types.h> /* for ssize_t */
# ifdef __cplusplus
extern "C" {
# endif
struct config_category_t
{
int i_id;
const char *psz_name;
const char *psz_help;
};
typedef union
{
char *psz;
int64_t i;
float f;
} module_value_t;
typedef int (*vlc_string_list_cb)(const char *, char ***, char ***);
typedef int (*vlc_integer_list_cb)(const char *, int64_t **, char ***);
/**
* Configuration item
*
* This is the internal reprensation of a configuration item.
* See also config_FindConfig().
*/
struct module_config_t
{
uint8_t i_type; /**< Configuration type */
char i_short; /**< Optional short option name */
unsigned b_advanced:1; /**< Advanced option */
unsigned b_internal:1; /**< Hidden from preferences and help */
unsigned b_unsaveable:1; /**< Not stored in configuration */
unsigned b_safe:1; /**< Safe for web plugins and playlist files */
unsigned b_removed:1; /**< Obsolete */
const char *psz_type; /**< Configuration subtype */
const char *psz_name; /**< Option name */
const char *psz_text; /**< Short comment on the configuration option */
const char *psz_longtext; /**< Long comment on the configuration option */
module_value_t value; /**< Current value */
module_value_t orig; /**< Default value */
module_value_t min; /**< Minimum value (for scalars only) */
module_value_t max; /**< Maximum value (for scalars only) */
/* Values list */
uint16_t list_count; /**< Choices count */
union
{
const char **psz; /**< Table of possible string choices */
const int *i; /**< Table of possible integer choices */
vlc_string_list_cb psz_cb; /**< Callback to enumerate string choices */
vlc_integer_list_cb i_cb; /**< Callback to enumerate integer choices */
} list; /**< Possible choices */
const char **list_text; /**< Human-readable names for list values */
const char *list_cb_name; /**< Symbol name of the enumeration callback */
void *owner; /**< Origin run-time linker module handle */
};
/**
* Gets a configuration item type
*
* This function checks the type of configuration item by name.
* \param name Configuration item name
* \return The configuration item type or 0 if not found.
*/
VLC_API int config_GetType(const char *name) VLC_USED;
/**
* Gets an integer configuration item.
*
* This function retrieves the current value of a configuration item of
* integral type (\ref CONFIG_ITEM_INTEGER and \ref CONFIG_ITEM_BOOL).
*
* \warning The behaviour is undefined if the configuration item exists but is
* not of integer or boolean type.
*
* \param name Configuration item name
* \return The configuration item value or -1 if not found.
* \bug A legitimate integer value of -1 cannot be distinguished from an error.
*/
VLC_API int64_t config_GetInt(const char *name) VLC_USED;
/**
* Sets an integer configuration item.
*
* This function changes the current value of a configuration item of
* integral type (\ref CONFIG_ITEM_INTEGER and \ref CONFIG_ITEM_BOOL).
*
* \warning The behaviour is undefined if the configuration item exists but is
* not of integer or boolean type.
*
* \note If no configuration item by the specified exist, the function has no
* effects.
*
* \param name Configuration item name
* \param val New value
*/
VLC_API void config_PutInt(const char *name, int64_t val);
/**
* Gets an floating point configuration item.
*
* This function retrieves the current value of a configuration item of
* floating point type (\ref CONFIG_ITEM_FLOAT).
*
* \warning The behaviour is undefined if the configuration item exists but is
* not of floating point type.
*
* \param name Configuration item name
* \return The configuration item value or -1 if not found.
* \bug A legitimate floating point value of -1 cannot be distinguished from an
* error.
*/
VLC_API float config_GetFloat(const char *name) VLC_USED;
/**
* Sets an integer configuration item.
*
* This function changes the current value of a configuration item of
* integral type (\ref CONFIG_ITEM_FLOAT).
*
* \warning The behaviour is undefined if the configuration item exists but is
* not of floating point type.
*
* \note If no configuration item by the specified exist, the function has no
* effects.
*
* \param name Configuration item name
* \param val New value
*/
VLC_API void config_PutFloat(const char *name, float val);
/**
* Gets an string configuration item.
*
* This function retrieves the current value of a configuration item of
* string type (\ref CONFIG_ITEM_STRING).
*
* \note The caller must free() the returned pointer (if non-NULL), which is a
* duplicate of the current value. It is not safe to return a pointer to the
* current value internally as it can be modified at any time by any other
* thread.
*
* \warning The behaviour is undefined if the configuration item exists but is
* not of floating point type.
*
* \param name Configuration item name
* \return Normally, a heap-allocated copy of the configuration item value.
* If the value is the empty string, if the configuration does not exist,
* or if an error occurs, NULL is returned.
* \bug The empty string value cannot be distinguished from an error.
*/
VLC_API char *config_GetPsz(const char *name) VLC_USED VLC_MALLOC;
/**
* Sets an string configuration item.
*
* This function changes the current value of a configuration item of
* string type (e.g. \ref CONFIG_ITEM_STRING).
*
* \warning The behaviour is undefined if the configuration item exists but is
* not of a string type.
*
* \note If no configuration item by the specified exist, the function has no
* effects.
*
* \param name Configuration item name
* \param val New value (will be copied)
* \bug This function allocates memory but errors cannot be detected.
*/
VLC_API void config_PutPsz(const char *name, const char *val);
/**
* Enumerates integer configuration choices.
*
* Determines a list of suggested values for an integer configuration item.
* \param values pointer to a table of integer values [OUT]
* \param texts pointer to a table of descriptions strings [OUT]
* \return number of choices, or -1 on error
* \note the caller is responsible for calling free() on all descriptions and
* on both tables. In case of error, both pointers are set to NULL.
*/
VLC_API ssize_t config_GetIntChoices(const char *, int64_t **values,
char ***texts) VLC_USED;
/**
* Determines a list of suggested values for a string configuration item.
* \param values pointer to a table of value strings [OUT]
* \param texts pointer to a table of descriptions strings [OUT]
* \return number of choices, or -1 on error
* \note the caller is responsible for calling free() on all values, on all
* descriptions and on both tables.
* In case of error, both pointers are set to NULL.
*/
VLC_API ssize_t config_GetPszChoices(const char *,
char ***values, char ***texts) VLC_USED;
VLC_API int config_SaveConfigFile( vlc_object_t * );
#define config_SaveConfigFile(a) config_SaveConfigFile(VLC_OBJECT(a))
/**
* Resets the configuration.
*
* This function resets all configuration items to their respective
* compile-time default value.
*/
VLC_API void config_ResetAll(void);
/**
* Looks up a configuration item.
*
* This function looks for the internal representation of a configuration item.
* Where possible, this should be avoided in favor of more specific function
* calls.
*
* \param name Configuration item name
* \return The internal structure, or NULL if not found.
*/
VLC_API module_config_t *config_FindConfig(const char *name) VLC_USED;
/**
* System directory identifiers
*/
typedef enum vlc_system_dir
{
VLC_PKG_DATA_DIR, /**< Package-specific architecture-independent read-only
data directory (e.g. /usr/local/data/vlc). */
VLC_PKG_LIB_DIR, /**< Package-specific architecture-dependent read-only
data directory (e.g. /usr/local/lib/vlc). */
VLC_PKG_LIBEXEC_DIR, /**< Package-specific executable read-only directory
(e.g. /usr/local/libexec/vlc). */
VLC_PKG_INCLUDE_DIR_RESERVED,
VLC_SYSDATA_DIR, /**< Global architecture-independent read-only
data directory (e.g. /usr/local/data).
Available only on some platforms. */
VLC_LIB_DIR, /**< Global architecture-dependent read-only directory
(e.g. /usr/local/lib). */
VLC_LIBEXEC_DIR, /**< Global executable read-only directory
(e.g. /usr/local/libexec). */
VLC_INCLUDE_DIR_RESERVED,
VLC_LOCALE_DIR, /**< Base directory for package read-only locale data. */
} vlc_sysdir_t;
/**
* Gets an installation directory.
*
* This function determines one of the installation directory.
*
* @param dir identifier of the directory (see \ref vlc_sysdir_t)
* @param filename name of a file or other object within the directory
* (or NULL to obtain the plain directory)
*
* @return a heap-allocated string (use free() to release it), or NULL on error
*/
VLC_API char *config_GetSysPath(vlc_sysdir_t dir, const char *filename)
VLC_USED VLC_MALLOC;
typedef enum vlc_user_dir
{
VLC_HOME_DIR, /* User's home */
VLC_CONFIG_DIR, /* VLC-specific configuration directory */
VLC_USERDATA_DIR, /* VLC-specific data directory */
VLC_CACHE_DIR, /* VLC-specific user cached data directory */
/* Generic directories (same as XDG) */
VLC_DESKTOP_DIR=0x80,
VLC_DOWNLOAD_DIR,
VLC_TEMPLATES_DIR,
VLC_PUBLICSHARE_DIR,
VLC_DOCUMENTS_DIR,
VLC_MUSIC_DIR,
VLC_PICTURES_DIR,
VLC_VIDEOS_DIR,
} vlc_userdir_t;
VLC_API char * config_GetUserDir( vlc_userdir_t ) VLC_USED VLC_MALLOC;
VLC_API void config_AddIntf(const char *);
VLC_API void config_RemoveIntf(const char *);
VLC_API bool config_ExistIntf(const char *) VLC_USED;
/****************************************************************************
* config_chain_t:
****************************************************************************/
struct config_chain_t
{
config_chain_t *p_next; /**< Pointer on the next config_chain_t element */
char *psz_name; /**< Option name */
char *psz_value; /**< Option value */
};
/**
* This function will
* - create all options in the array ppsz_options (var_Create).
* - parse the given linked list of config_chain_t and set the value (var_Set).
*
* The option names will be created by adding the psz_prefix prefix.
*/
VLC_API void config_ChainParse( vlc_object_t *, const char *psz_prefix, const char *const *ppsz_options, config_chain_t * );
#define config_ChainParse( a, b, c, d ) config_ChainParse( VLC_OBJECT(a), b, c, d )
/**
* This function will parse a configuration string (psz_opts) and
* - set all options for this module in a chained list (*pp_cfg)
* - returns a pointer on the next module if any.
*
* The string format is
* module{option=*,option=*}
*
* The options values are unescaped using config_StringUnescape.
*/
VLC_API const char *config_ChainParseOptions( config_chain_t **pp_cfg, const char *ppsz_opts );
/**
* This function will parse a configuration string (psz_string) and
* - set the module name (*ppsz_name)
* - set all options for this module in a chained list (*pp_cfg)
* - returns a pointer on the next module if any.
*
* The string format is
* module{option=*,option=*}[:modulenext{option=*,...}]
*
* The options values are unescaped using config_StringUnescape.
*/
VLC_API char *config_ChainCreate( char **ppsz_name, config_chain_t **pp_cfg, const char *psz_string ) VLC_USED VLC_MALLOC;
/**
* This function will release a linked list of config_chain_t
* (Including the head)
*/
VLC_API void config_ChainDestroy( config_chain_t * );
/**
* This function will duplicate a linked list of config_chain_t
*/
VLC_API config_chain_t * config_ChainDuplicate( const config_chain_t * ) VLC_USED VLC_MALLOC;
/**
* This function will unescape a string in place and will return a pointer on
* the given string.
* No memory is allocated by it (unlike config_StringEscape).
* If NULL is given as parameter nothing will be done (NULL will be returned).
*
* The following sequences will be unescaped (only one time):
* \\ \' and \"
*/
VLC_API char * config_StringUnescape( char *psz_string );
/**
* This function will escape a string that can be unescaped by
* config_StringUnescape.
* The returned value is allocated by it. You have to free it once you
* do not need it anymore (unlike config_StringUnescape).
* If NULL is given as parameter nothing will be done (NULL will be returned).
*
* The escaped characters are ' " and \
*/
VLC_API char * config_StringEscape( const char *psz_string ) VLC_USED VLC_MALLOC;
# ifdef __cplusplus
}
# endif
/** @} */
#endif /* _VLC_CONFIGURATION_H */