vlc_plugin.h 18.9 KB
Newer Older
1
/*****************************************************************************
2
 * vlc_plugin.h : Macros used from within a module.
3
 *****************************************************************************
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
4
 * Copyright (C) 2001-2006 VLC authors and VideoLAN
5
 * Copyright © 2007-2009 Rémi Denis-Courmont
6 7
 *
 * Authors: Samuel Hocevar <sam@zoy.org>
8
 *
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
9 10 11
 * 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
12 13 14 15
 * (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
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
16 17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Lesser General Public License for more details.
18
 *
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
19 20 21
 * 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.
22 23
 *****************************************************************************/

24 25 26
#ifndef LIBVLC_MODULES_MACROS_H
# define LIBVLC_MODULES_MACROS_H 1

27 28 29 30 31
/**
 * \file
 * This file implements plugin (module) macros used to define a vlc module.
 */

32 33
enum vlc_module_properties
{
34
    VLC_MODULE_CREATE,
35 36
    VLC_CONFIG_CREATE,

37 38
    /* DO NOT EVER REMOVE, INSERT OR REPLACE ANY ITEM! It would break the ABI!
     * Append new items at the end ONLY. */
39
    VLC_MODULE_CPU_REQUIREMENT=0x100,
40 41 42 43 44 45 46 47 48 49
    VLC_MODULE_SHORTCUT,
    VLC_MODULE_CAPABILITY,
    VLC_MODULE_SCORE,
    VLC_MODULE_CB_OPEN,
    VLC_MODULE_CB_CLOSE,
    VLC_MODULE_NO_UNLOAD,
    VLC_MODULE_NAME,
    VLC_MODULE_SHORTNAME,
    VLC_MODULE_DESCRIPTION,
    VLC_MODULE_HELP,
50
    VLC_MODULE_TEXTDOMAIN,
51
    /* Insert new VLC_MODULE_* here */
52 53 54

    /* DO NOT EVER REMOVE, INSERT OR REPLACE ANY ITEM! It would break the ABI!
     * Append new items at the end ONLY. */
55
    VLC_CONFIG_NAME=0x1000,
56
    /* command line name (args=const char *) */
57 58

    VLC_CONFIG_VALUE,
59
    /* actual value (args=int64_t/double/const char *) */
60 61

    VLC_CONFIG_RANGE,
62
    /* minimum value (args=int64_t/double/const char * twice) */
63

64 65
    VLC_CONFIG_ADVANCED_RESERVED,
    /* reserved - do not use */
66 67 68 69

    VLC_CONFIG_VOLATILE,
    /* don't write variable to storage (args=none) */

70 71
    VLC_CONFIG_PERSISTENT_OBSOLETE,
    /* unused (ignored) */
72 73 74 75 76 77 78 79 80 81 82 83 84

    VLC_CONFIG_PRIVATE,
    /* hide from user (args=none) */

    VLC_CONFIG_REMOVED,
    /* tag as no longer supported (args=none) */

    VLC_CONFIG_CAPABILITY,
    /* capability for a module or list thereof (args=const char*) */

    VLC_CONFIG_SHORTCUT,
    /* one-character (short) command line option name (args=char) */

85 86
    VLC_CONFIG_OLDNAME_OBSOLETE,
    /* unused (ignored) */
87 88 89 90 91 92 93

    VLC_CONFIG_SAFE,
    /* tag as modifiable by untrusted input item "sources" (args=none) */

    VLC_CONFIG_DESC,
    /* description (args=const char *, const char *, const char *) */

94 95
    VLC_CONFIG_LIST_OBSOLETE,
    /* unused (ignored) */
96

97 98
    VLC_CONFIG_ADD_ACTION_OBSOLETE,
    /* unused (ignored) */
99

100 101 102 103 104
    VLC_CONFIG_LIST,
    /* list of suggested values
     * (args=size_t, const <type> *, const char *const *) */

    VLC_CONFIG_LIST_CB,
105
    /* callback for suggested values
106
     * (args=const char *, size_t (*)(vlc_object_t *, <type> **, char ***)) */
107

108
    /* Insert new VLC_CONFIG_* here */
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
/* Configuration hint types */
#define CONFIG_HINT_CATEGORY                0x02  /* Start of new category */
#define CONFIG_HINT_USAGE                   0x05  /* Usage information */

#define CONFIG_CATEGORY                     0x06 /* Set category */
#define CONFIG_SUBCATEGORY                  0x07 /* Set subcategory */
#define CONFIG_SECTION                      0x08 /* Start of new section */

/* Configuration item types */
#define CONFIG_ITEM_FLOAT                   0x20  /* Float option */
#define CONFIG_ITEM_INTEGER                 0x40  /* Integer option */
#define CONFIG_ITEM_RGB                     0x41  /* RGB color option */
#define CONFIG_ITEM_BOOL                    0x60  /* Bool option */
#define CONFIG_ITEM_STRING                  0x80  /* String option */
#define CONFIG_ITEM_PASSWORD                0x81  /* Password option (*) */
#define CONFIG_ITEM_KEY                     0x82  /* Hot key option */
#define CONFIG_ITEM_MODULE                  0x84  /* Module option */
#define CONFIG_ITEM_MODULE_CAT              0x85  /* Module option */
#define CONFIG_ITEM_MODULE_LIST             0x86  /* Module option */
#define CONFIG_ITEM_MODULE_LIST_CAT         0x87  /* Module option */
#define CONFIG_ITEM_LOADFILE                0x8C  /* Read file option */
#define CONFIG_ITEM_SAVEFILE                0x8D  /* Written file option */
#define CONFIG_ITEM_DIRECTORY               0x8E  /* Directory option */
#define CONFIG_ITEM_FONT                    0x8F  /* Font option */

#define CONFIG_ITEM(x) (((x) & ~0xF) != 0)

/* Categories and subcategories */
#define CAT_INTERFACE 1
#define SUBCAT_INTERFACE_GENERAL 101
#define SUBCAT_INTERFACE_MAIN 102
#define SUBCAT_INTERFACE_CONTROL 103
#define SUBCAT_INTERFACE_HOTKEYS 104

#define CAT_AUDIO 2
#define SUBCAT_AUDIO_GENERAL 201
#define SUBCAT_AUDIO_AOUT 202
#define SUBCAT_AUDIO_AFILTER 203
#define SUBCAT_AUDIO_VISUAL 204
#define SUBCAT_AUDIO_MISC 205
151
#define SUBCAT_AUDIO_RESAMPLER 206
152 153 154 155 156 157

#define CAT_VIDEO 3
#define SUBCAT_VIDEO_GENERAL 301
#define SUBCAT_VIDEO_VOUT 302
#define SUBCAT_VIDEO_VFILTER 303
#define SUBCAT_VIDEO_SUBPIC 305
158
#define SUBCAT_VIDEO_SPLITTER 306
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175

#define CAT_INPUT 4
#define SUBCAT_INPUT_GENERAL 401
#define SUBCAT_INPUT_ACCESS 402
#define SUBCAT_INPUT_DEMUX 403
#define SUBCAT_INPUT_VCODEC 404
#define SUBCAT_INPUT_ACODEC 405
#define SUBCAT_INPUT_SCODEC 406
#define SUBCAT_INPUT_STREAM_FILTER 407

#define CAT_SOUT 5
#define SUBCAT_SOUT_GENERAL 501
#define SUBCAT_SOUT_STREAM 502
#define SUBCAT_SOUT_MUX 503
#define SUBCAT_SOUT_ACO 504
#define SUBCAT_SOUT_PACKETIZER 505
#define SUBCAT_SOUT_VOD 507
176
#define SUBCAT_SOUT_RENDERER 508
177 178 179 180 181 182 183 184 185 186 187

#define CAT_ADVANCED 6
#define SUBCAT_ADVANCED_MISC 602
#define SUBCAT_ADVANCED_NETWORK 603

#define CAT_PLAYLIST 7
#define SUBCAT_PLAYLIST_GENERAL 701
#define SUBCAT_PLAYLIST_SD 702
#define SUBCAT_PLAYLIST_EXPORT 703


188 189 190
/**
 * Current plugin ABI version
 */
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
191 192
# define MODULE_SYMBOL 4_0_3
# define MODULE_SUFFIX "__4_0_3"
193 194 195 196 197 198 199

/*****************************************************************************
 * Add a few defines. You do not want to read this section. Really.
 *****************************************************************************/

/* Explanation:
 *
200
 * if linking a module statically, we will need:
201 202 203 204 205
 * #define MODULE_FUNC( zog ) module_foo_zog
 *
 * this can't easily be done with the C preprocessor, thus a few ugly hacks.
 */

206
/* I need to do _this_ to change « foo bar » to « module_foo_bar » ! */
207 208 209 210 211 212
#define CONCATENATE( y, z ) CRUDE_HACK( y, z )
#define CRUDE_HACK( y, z )  y##__##z

/* If the module is built-in, then we need to define foo_InitModule instead
 * of InitModule. Same for Activate- and DeactivateModule. */
#ifdef __PLUGIN__
213 214 215
# define __VLC_SYMBOL( symbol  ) CONCATENATE( symbol, MODULE_SYMBOL )
# define VLC_MODULE_NAME_HIDDEN_SYMBOL \
    const char vlc_module_name[] = MODULE_STRING;
216
#else
217 218
# define __VLC_SYMBOL( symbol )  CONCATENATE( symbol, MODULE_NAME )
# define VLC_MODULE_NAME_HIDDEN_SYMBOL
219 220
#endif

221 222
#define CDECL_SYMBOL
#if defined (__PLUGIN__)
223
# if defined (_WIN32)
224
#   define DLL_SYMBOL              __declspec(dllexport)
225
#   undef CDECL_SYMBOL
226
#   define CDECL_SYMBOL            __cdecl
227
# elif defined (__GNUC__)
228 229 230 231
#   define DLL_SYMBOL              __attribute__((visibility("default")))
# else
#  define DLL_SYMBOL
# endif
232
#else
233
# define DLL_SYMBOL
234 235 236 237 238 239 240 241
#endif

#if defined( __cplusplus )
#   define EXTERN_SYMBOL           extern "C"
#else
#   define EXTERN_SYMBOL
#endif

242
EXTERN_SYMBOL typedef int (*vlc_set_cb) (void *, void *, int, ...);
243 244 245 246 247

#define vlc_plugin_set(...) vlc_set (opaque,   NULL, __VA_ARGS__)
#define vlc_module_set(...) vlc_set (opaque, module, __VA_ARGS__)
#define vlc_config_set(...) vlc_set (opaque, config, __VA_ARGS__)

248 249 250 251 252 253
/*
 * InitModule: this function is called once and only once, when the module
 * is looked at for the first time. We get the useful data from it, for
 * instance the module name, its shortcuts, its capabilities... we also create
 * a copy of its config because the module can be unloaded at any time.
 */
254 255
#define vlc_module_begin() \
EXTERN_SYMBOL DLL_SYMBOL \
256
int CDECL_SYMBOL __VLC_SYMBOL(vlc_entry) (vlc_set_cb, void *); \
257
EXTERN_SYMBOL DLL_SYMBOL \
258
int CDECL_SYMBOL __VLC_SYMBOL(vlc_entry) (vlc_set_cb vlc_set, void *opaque) \
259
{ \
260 261 262
    module_t *module; \
    module_config_t *config = NULL; \
    if (vlc_plugin_set (VLC_MODULE_CREATE, &module)) \
263
        goto error; \
264 265
    if (vlc_module_set (VLC_MODULE_NAME, (MODULE_STRING))) \
        goto error;
266 267

#define vlc_module_end() \
268 269
    (void) config; \
    return 0; \
270
error: \
271
    return -1; \
272
} \
273
VLC_MODULE_NAME_HIDDEN_SYMBOL \
274
VLC_METADATA_EXPORTS
275 276

#define add_submodule( ) \
277
    if (vlc_plugin_set (VLC_MODULE_CREATE, &module)) \
278
        goto error;
279

280
#define add_shortcut( ... ) \
281 282
{ \
    const char *shortcuts[] = { __VA_ARGS__ }; \
283
    if (vlc_module_set (VLC_MODULE_SHORTCUT, \
284 285 286
                        sizeof(shortcuts)/sizeof(shortcuts[0]), shortcuts)) \
        goto error; \
}
287 288

#define set_shortname( shortname ) \
289
    if (vlc_module_set (VLC_MODULE_SHORTNAME, (const char *)(shortname))) \
290
        goto error;
291 292

#define set_description( desc ) \
293
    if (vlc_module_set (VLC_MODULE_DESCRIPTION, (const char *)(desc))) \
294
        goto error;
295 296

#define set_help( help ) \
297
    if (vlc_module_set (VLC_MODULE_HELP, (const char *)(help))) \
298
        goto error;
299 300

#define set_capability( cap, score ) \
301 302
    if (vlc_module_set (VLC_MODULE_CAPABILITY, (const char *)(cap)) \
     || vlc_module_set (VLC_MODULE_SCORE, (int)(score))) \
303
        goto error;
304 305

#define set_callbacks( activate, deactivate ) \
306 307 308
    if (vlc_module_set(VLC_MODULE_CB_OPEN, #activate, (void *)(activate)) \
     || vlc_module_set(VLC_MODULE_CB_CLOSE, #deactivate, \
                       (void *)(deactivate))) \
309
        goto error;
310

311
#define cannot_unload_broken_library( ) \
312
    if (vlc_module_set (VLC_MODULE_NO_UNLOAD)) \
313
        goto error;
314

315
#define set_text_domain( dom ) \
316
    if (vlc_plugin_set (VLC_MODULE_TEXTDOMAIN, (dom))) \
317
        goto error;
318

319 320 321 322 323 324 325 326 327 328 329 330 331 332
/*****************************************************************************
 * Macros used to build the configuration structure.
 *
 * Note that internally we support only 3 types of config data: int, float
 *   and string.
 *   The other types declared here just map to one of these 3 basic types but
 *   have the advantage of also providing very good hints to a configuration
 *   interface so as to make it more user friendly.
 * The configuration structure also includes category hints. These hints can
 *   provide a configuration interface with some very useful data and again
 *   allow for a more user friendly interface.
 *****************************************************************************/

#define add_type_inner( type ) \
333
    vlc_plugin_set (VLC_CONFIG_CREATE, (type), &config);
334 335

#define add_typedesc_inner( type, text, longtext ) \
336
    add_type_inner( type ) \
337
    vlc_config_set (VLC_CONFIG_DESC, \
338
                    (const char *)(text), (const char *)(longtext));
339

340 341
#define add_typename_inner(type, name, text, longtext) \
    add_typedesc_inner(type, text, longtext) \
342
    vlc_config_set (VLC_CONFIG_NAME, (const char *)(name));
343

344 345
#define add_string_inner(type, name, text, longtext, v) \
    add_typename_inner(type, name, text, longtext) \
346
    vlc_config_set (VLC_CONFIG_VALUE, (const char *)(v));
347

348 349
#define add_int_inner(type, name, text, longtext, v) \
    add_typename_inner(type, name, text, longtext) \
350
    vlc_config_set (VLC_CONFIG_VALUE, (int64_t)(v));
351 352 353


#define set_category( i_id ) \
354
    add_type_inner( CONFIG_CATEGORY ) \
355
    vlc_config_set (VLC_CONFIG_VALUE, (int64_t)(i_id));
356 357

#define set_subcategory( i_id ) \
358
    add_type_inner( CONFIG_SUBCATEGORY ) \
359
    vlc_config_set (VLC_CONFIG_VALUE, (int64_t)(i_id));
360 361 362 363

#define set_section( text, longtext ) \
    add_typedesc_inner( CONFIG_SECTION, text, longtext )

364
#define add_category_hint(text, longtext) \
365
    add_typedesc_inner( CONFIG_HINT_CATEGORY, text, longtext )
366 367 368 369

#define add_usage_hint( text ) \
    add_typedesc_inner( CONFIG_HINT_USAGE, text, NULL )

370
#define add_string( name, value, text, longtext, advc ) \
371
    add_string_inner(CONFIG_ITEM_STRING, name, text, longtext, value)
372

373
#define add_password(name, value, text, longtext) \
374
    add_string_inner(CONFIG_ITEM_PASSWORD, name, text, longtext, value)
375

376
#define add_loadfile(name, value, text, longtext) \
377
    add_string_inner(CONFIG_ITEM_LOADFILE, name, text, longtext, value)
378

379
#define add_savefile(name, value, text, longtext) \
380
    add_string_inner(CONFIG_ITEM_SAVEFILE, name, text, longtext, value)
381

382
#define add_directory(name, value, text, longtext) \
383
    add_string_inner(CONFIG_ITEM_DIRECTORY, name, text, longtext, value)
384

385
#define add_font(name, value, text, longtext) \
386
    add_string_inner(CONFIG_ITEM_FONT, name, text, longtext, value)
387

388
#define add_module(name, psz_caps, value, text, longtext) \
389
    add_string_inner(CONFIG_ITEM_MODULE, name, text, longtext, value) \
390
    vlc_config_set (VLC_CONFIG_CAPABILITY, (const char *)(psz_caps));
391

392
#define add_module_list(name, psz_caps, value, text, longtext) \
393
    add_string_inner(CONFIG_ITEM_MODULE_LIST, name, text, longtext, value) \
394
    vlc_config_set (VLC_CONFIG_CAPABILITY, (const char *)(psz_caps));
395 396

#ifndef __PLUGIN__
397
#define add_module_cat(name, i_subcategory, value, text, longtext) \
398
    add_string_inner(CONFIG_ITEM_MODULE_CAT, name, text, longtext, value) \
399
    change_integer_range (i_subcategory /* gruik */, 0);
400

401
#define add_module_list_cat(name, i_subcategory, value, text, longtext) \
402 403
    add_string_inner(CONFIG_ITEM_MODULE_LIST_CAT, name, text, longtext, \
                     value) \
404
    change_integer_range (i_subcategory /* gruik */, 0);
405 406
#endif

407
#define add_integer( name, value, text, longtext, advc ) \
408
    add_int_inner(CONFIG_ITEM_INTEGER, name, text, longtext, value)
409

410
#define add_rgb(name, value, text, longtext) \
411
    add_int_inner(CONFIG_ITEM_RGB, name, text, longtext, value) \
412 413
    change_integer_range( 0, 0xFFFFFF )

414
#define add_key(name, value, text, longtext) \
415 416 417
    add_string_inner(CONFIG_ITEM_KEY, "global-" name, text, longtext, \
                     KEY_UNSET) \
    add_string_inner(CONFIG_ITEM_KEY, name, text, longtext, value)
418

419
#define add_integer_with_range( name, value, i_min, i_max, text, longtext, advc ) \
420
    add_integer( name, value, text, longtext, advc ) \
421 422
    change_integer_range( i_min, i_max )

423
#define add_float( name, v, text, longtext, advc ) \
424
    add_typename_inner(CONFIG_ITEM_FLOAT, name, text, longtext) \
425
    vlc_config_set (VLC_CONFIG_VALUE, (double)(v));
426

427
#define add_float_with_range( name, value, f_min, f_max, text, longtext, advc ) \
428
    add_float( name, value, text, longtext, advc ) \
429 430
    change_float_range( f_min, f_max )

431
#define add_bool( name, v, text, longtext, advc ) \
432
    add_typename_inner(CONFIG_ITEM_BOOL, name, text, longtext) \
433
    if (v) vlc_config_set (VLC_CONFIG_VALUE, (int64_t)true);
434 435 436

/* For removed option */
#define add_obsolete_inner( name, type ) \
437
    add_type_inner( type ) \
438 439
    vlc_config_set (VLC_CONFIG_NAME, (const char *)(name)); \
    vlc_config_set (VLC_CONFIG_REMOVED);
440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455

#define add_obsolete_bool( name ) \
        add_obsolete_inner( name, CONFIG_ITEM_BOOL )

#define add_obsolete_integer( name ) \
        add_obsolete_inner( name, CONFIG_ITEM_INTEGER )

#define add_obsolete_float( name ) \
        add_obsolete_inner( name, CONFIG_ITEM_FLOAT )

#define add_obsolete_string( name ) \
        add_obsolete_inner( name, CONFIG_ITEM_STRING )

/* Modifier macros for the config options (used for fine tuning) */

#define change_short( ch ) \
456
    vlc_config_set (VLC_CONFIG_SHORTCUT, (int)(ch));
457

458
#define change_string_list( list, list_text ) \
459
    vlc_config_set (VLC_CONFIG_LIST, \
460 461
                    (size_t)(sizeof (list) / sizeof (char *)), \
                    (const char *const *)(list), \
462
                    (const char *const *)(list_text));
463 464

#define change_string_cb( cb ) \
465
    vlc_config_set (VLC_CONFIG_LIST_CB, #cb, (void *)(cb));
466

467
#define change_integer_list( list, list_text ) \
468
    vlc_config_set (VLC_CONFIG_LIST, \
469 470
                    (size_t)(sizeof (list) / sizeof (int)), \
                    (const int *)(list), \
471
                    (const char *const *)(list_text));
472

473
#define change_integer_cb( cb ) \
474
    vlc_config_set (VLC_CONFIG_LIST_CB, #cb, (cb));
475

476
#define change_integer_range( minv, maxv ) \
477
    vlc_config_set (VLC_CONFIG_RANGE, (int64_t)(minv), (int64_t)(maxv));
478 479

#define change_float_range( minv, maxv ) \
480
    vlc_config_set (VLC_CONFIG_RANGE, (double)(minv), (double)(maxv));
481

482 483
/* For options that are saved but hidden from the preferences panel */
#define change_private() \
484
    vlc_config_set (VLC_CONFIG_PRIVATE);
485 486 487 488

/* For options that cannot be saved in the configuration */
#define change_volatile() \
    change_private() \
489
    vlc_config_set (VLC_CONFIG_VOLATILE);
490 491

#define change_safe() \
492
    vlc_config_set (VLC_CONFIG_SAFE);
493

494 495
/* Meta data plugin exports */
#define VLC_META_EXPORT( name, value ) \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
496
    EXTERN_SYMBOL DLL_SYMBOL const char * CDECL_SYMBOL \
497
    __VLC_SYMBOL(vlc_entry_ ## name) (void); \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
498
    EXTERN_SYMBOL DLL_SYMBOL const char * CDECL_SYMBOL \
499 500 501 502 503
    __VLC_SYMBOL(vlc_entry_ ## name) (void) \
    { \
         return value; \
    }

504
#define VLC_COPYRIGHT_VIDEOLAN \
505 506
    "\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\x20\x74\x68" \
    "\x65\x20\x56\x69\x64\x65\x6f\x4c\x41\x4e\x20\x56\x4c\x43\x20\x6d" \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
507
    "\x65\x64\x69\x61\x20\x70\x6c\x61\x79\x65\x72\x20\x64\x65\x76\x65" \
508 509
    "\x6c\x6f\x70\x65\x72\x73"
#define VLC_LICENSE_LGPL_2_1_PLUS \
510 511
    "\x4c\x69\x63\x65\x6e\x73\x65\x64\x20\x75\x6e\x64\x65\x72\x20\x74" \
    "\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\x20" \
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
512 513 514
    "\x47\x4e\x55\x20\x4c\x65\x73\x73\x65\x72\x20\x47\x65\x6e\x65\x72" \
    "\x61\x6c\x20\x50\x75\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\x6e\x73" \
    "\x65\x2c\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x32\x2e\x31\x20\x6f" \
515
    "\x72\x20\x6c\x61\x74\x65\x72\x2e"
516 517 518 519 520 521
#define VLC_LICENSE_GPL_2_PLUS \
    "\x4c\x69\x63\x65\x6e\x73\x65\x64\x20\x75\x6e\x64\x65\x72\x20\x74" \
    "\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\x20" \
    "\x47\x4e\x55\x20\x47\x65\x6e\x65\x72\x61\x6c\x20\x50\x75\x62\x6c" \
    "\x69\x63\x20\x4c\x69\x63\x65\x6e\x73\x65\x2c\x20\x76\x65\x72\x73" \
    "\x69\x6f\x6e\x20\x32\x20\x6f\x72\x20\x6c\x61\x74\x65\x72\x2e"
522 523 524 525
#if defined (__LIBVLC__)
# define VLC_MODULE_COPYRIGHT VLC_COPYRIGHT_VIDEOLAN
# ifndef VLC_MODULE_LICENSE
#  define VLC_MODULE_LICENSE VLC_LICENSE_LGPL_2_1_PLUS
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
526 527
# endif
#endif
528

529 530
#ifdef VLC_MODULE_COPYRIGHT
# define VLC_COPYRIGHT_EXPORT VLC_META_EXPORT(copyright, VLC_MODULE_COPYRIGHT)
531 532
#else
# define VLC_COPYRIGHT_EXPORT
533 534 535
#endif
#ifdef VLC_MODULE_LICENSE
# define VLC_LICENSE_EXPORT VLC_META_EXPORT(license, VLC_MODULE_LICENSE)
536 537
#else
# define VLC_LICENSE_EXPORT
538 539
#endif

540 541 542 543
#define VLC_METADATA_EXPORTS \
    VLC_COPYRIGHT_EXPORT \
    VLC_LICENSE_EXPORT

544
#endif