vlc_plugin.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:18k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * vlc_plugin.h : Macros used from within a module.
  3.  *****************************************************************************
  4.  * Copyright (C) 2001-2006 the VideoLAN team
  5.  * Copyright © 2007-2009 Rémi Denis-Courmont
  6.  *
  7.  * Authors: Samuel Hocevar <sam@zoy.org>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23. #ifndef LIBVLC_MODULES_MACROS_H
  24. # define LIBVLC_MODULES_MACROS_H 1
  25. /**
  26.  * file
  27.  * This file implements plugin (module) macros used to define a vlc module.
  28.  */
  29. VLC_EXPORT( int, vlc_plugin_set, (module_t *, module_config_t *, int, ...) );
  30. #define vlc_module_set( mod, ... ) vlc_plugin_set ((mod), NULL, __VA_ARGS__)
  31. #define vlc_config_set( cfg, ... ) vlc_plugin_set (NULL, (cfg), __VA_ARGS__)
  32. enum vlc_module_properties
  33. {
  34.     VLC_SUBMODULE_CREATE,
  35.     VLC_CONFIG_CREATE,
  36.     /* DO NOT EVER REMOVE, INSERT OR REPLACE ANY ITEM! It would break the ABI!
  37.      * Append new items at the end ONLY. */
  38.     VLC_MODULE_CPU_REQUIREMENT=0x100,
  39.     VLC_MODULE_SHORTCUT,
  40.     VLC_MODULE_CAPABILITY,
  41.     VLC_MODULE_SCORE,
  42.     VLC_MODULE_CB_OPEN,
  43.     VLC_MODULE_CB_CLOSE,
  44.     VLC_MODULE_NO_UNLOAD,
  45.     VLC_MODULE_NAME,
  46.     VLC_MODULE_SHORTNAME,
  47.     VLC_MODULE_DESCRIPTION,
  48.     VLC_MODULE_HELP,
  49.     /* Insert new VLC_MODULE_* here */
  50.     /* DO NOT EVER REMOVE, INSERT OR REPLACE ANY ITEM! It would break the ABI!
  51.      * Append new items at the end ONLY. */
  52.     VLC_CONFIG_NAME=0x1000,
  53.     /* command line name (args=const char *, vlc_callback_t) */
  54.     VLC_CONFIG_VALUE,
  55.     /* actual value (args=int/double/const char *) */
  56.     VLC_CONFIG_RANGE,
  57.     /* minimum value (args=int/double/const char * twice) */
  58.     VLC_CONFIG_ADVANCED,
  59.     /* enable advanced flag (args=none) */
  60.     VLC_CONFIG_VOLATILE,
  61.     /* don't write variable to storage (args=none) */
  62.     VLC_CONFIG_PERSISTENT,
  63.     /* always write variable to storage (args=none) */
  64.     VLC_CONFIG_RESTART,
  65.     /* restart required to apply value change (args=none) */
  66.     VLC_CONFIG_PRIVATE,
  67.     /* hide from user (args=none) */
  68.     VLC_CONFIG_REMOVED,
  69.     /* tag as no longer supported (args=none) */
  70.     VLC_CONFIG_CAPABILITY,
  71.     /* capability for a module or list thereof (args=const char*) */
  72.     VLC_CONFIG_SHORTCUT,
  73.     /* one-character (short) command line option name (args=char) */
  74.     VLC_CONFIG_OLDNAME,
  75.     /* former option name (args=const char *) */
  76.     VLC_CONFIG_SAFE,
  77.     /* tag as modifiable by untrusted input item "sources" (args=none) */
  78.     VLC_CONFIG_DESC,
  79.     /* description (args=const char *, const char *, const char *) */
  80.     VLC_CONFIG_LIST,
  81.     /* possible values list
  82.      * (args=const char *, size_t, const <type> *, const char *const *) */
  83.     VLC_CONFIG_ADD_ACTION,
  84.     /* add value change callback
  85.      * (args=const char *, vlc_callback_t, const char *) */
  86.     /* Insert new VLC_CONFIG_* here */
  87. };
  88. /*****************************************************************************
  89.  * If we are not within a module, assume we're in the vlc core.
  90.  *****************************************************************************/
  91. #if !defined( __PLUGIN__ ) && !defined( __BUILTIN__ )
  92. #   define MODULE_NAME main
  93. #endif
  94. /**
  95.  * Current plugin ABI version
  96.  */
  97. # define MODULE_SYMBOL 1_0_0e
  98. # define MODULE_SUFFIX "__1_0_0e"
  99. /*****************************************************************************
  100.  * Add a few defines. You do not want to read this section. Really.
  101.  *****************************************************************************/
  102. /* Explanation:
  103.  *
  104.  * if linking a module statically, we will need:
  105.  * #define MODULE_FUNC( zog ) module_foo_zog
  106.  *
  107.  * this can't easily be done with the C preprocessor, thus a few ugly hacks.
  108.  */
  109. /* I need to do _this_ to change « foo bar » to « module_foo_bar » ! */
  110. #define CONCATENATE( y, z ) CRUDE_HACK( y, z )
  111. #define CRUDE_HACK( y, z )  y##__##z
  112. /* If the module is built-in, then we need to define foo_InitModule instead
  113.  * of InitModule. Same for Activate- and DeactivateModule. */
  114. #ifdef __PLUGIN__
  115. #   define __VLC_SYMBOL( symbol  ) CONCATENATE( symbol, MODULE_SYMBOL )
  116. #else
  117. #   define __VLC_SYMBOL( symbol )  CONCATENATE( symbol, MODULE_NAME )
  118. #endif
  119. #if defined( __PLUGIN__ ) && ( defined( WIN32 ) || defined( UNDER_CE ) )
  120. #   define DLL_SYMBOL              __declspec(dllexport)
  121. #   define CDECL_SYMBOL            __cdecl
  122. #else
  123. #   define DLL_SYMBOL
  124. #   define CDECL_SYMBOL
  125. #endif
  126. #if defined( __cplusplus )
  127. #   define EXTERN_SYMBOL           extern "C"
  128. #else
  129. #   define EXTERN_SYMBOL
  130. #endif
  131. /*
  132.  * InitModule: this function is called once and only once, when the module
  133.  * is looked at for the first time. We get the useful data from it, for
  134.  * instance the module name, its shortcuts, its capabilities... we also create
  135.  * a copy of its config because the module can be unloaded at any time.
  136.  */
  137. #define vlc_module_begin( )                                                   
  138.     EXTERN_SYMBOL DLL_SYMBOL int CDECL_SYMBOL                                 
  139.     __VLC_SYMBOL(vlc_entry) ( module_t *p_module );                           
  140.                                                                               
  141.     EXTERN_SYMBOL DLL_SYMBOL int CDECL_SYMBOL                                 
  142.     __VLC_SYMBOL(vlc_entry) ( module_t *p_module )                            
  143.     {                                                                         
  144.         module_config_t *p_config = NULL;                                     
  145.         const char *domain = NULL;                                            
  146.         if (vlc_module_set (p_module, VLC_MODULE_NAME,                        
  147.                             (const char *)(MODULE_STRING)))                   
  148.             goto error;                                                       
  149.         {                                                                     
  150.             module_t *p_submodule = p_module;
  151. #define vlc_module_end( )                                                     
  152.         }                                                                     
  153.         (void)p_config;                                                       
  154.         return VLC_SUCCESS;                                                   
  155.                                                                               
  156.     error:                                                                    
  157.         return VLC_EGENERIC;                                                  
  158.     }                                                                         
  159.     VLC_METADATA_EXPORTS
  160. #define add_submodule( ) 
  161.     if (vlc_plugin_set (p_module, NULL, VLC_SUBMODULE_CREATE, &p_submodule)) 
  162.         goto error;
  163. #define add_requirement( cap ) 
  164.     if (vlc_module_set (p_module, VLC_MODULE_CPU_REQUIREMENT, 
  165.                         (int)(CPU_CAPABILITY_##cap))) 
  166.         goto error;
  167. #define add_shortcut( shortcut ) 
  168.     if (vlc_module_set (p_submodule, VLC_MODULE_SHORTCUT, 
  169.         (const char *)(shortcut))) 
  170.         goto error;
  171. #define set_shortname( shortname ) 
  172.     if (vlc_module_set (p_submodule, VLC_MODULE_SHORTNAME, domain, 
  173.                         (const char *)(shortname))) 
  174.         goto error;
  175. #define set_description( desc ) 
  176.     if (vlc_module_set (p_submodule, VLC_MODULE_DESCRIPTION, domain, 
  177.                         (const char *)(desc))) 
  178.         goto error;
  179. #define set_help( help ) 
  180.     if (vlc_module_set (p_submodule, VLC_MODULE_HELP, domain, 
  181.                         (const char *)(help))) 
  182.         goto error;
  183. #define set_capability( cap, score ) 
  184.     if (vlc_module_set (p_submodule, VLC_MODULE_CAPABILITY, 
  185.                         (const char *)(cap)) 
  186.      || vlc_module_set (p_submodule, VLC_MODULE_SCORE, (int)(score))) 
  187.         goto error;
  188. #define set_callbacks( activate, deactivate ) 
  189.     if (vlc_module_set (p_submodule, VLC_MODULE_CB_OPEN, activate) 
  190.      || vlc_module_set (p_submodule, VLC_MODULE_CB_CLOSE, deactivate)) 
  191.         goto error;
  192. #define linked_with_a_crap_library_which_uses_atexit( ) 
  193.     if (vlc_module_set (p_submodule, VLC_MODULE_NO_UNLOAD)) 
  194.         goto error;
  195. #define set_text_domain( dom ) domain = (dom);
  196. /*****************************************************************************
  197.  * Macros used to build the configuration structure.
  198.  *
  199.  * Note that internally we support only 3 types of config data: int, float
  200.  *   and string.
  201.  *   The other types declared here just map to one of these 3 basic types but
  202.  *   have the advantage of also providing very good hints to a configuration
  203.  *   interface so as to make it more user friendly.
  204.  * The configuration structure also includes category hints. These hints can
  205.  *   provide a configuration interface with some very useful data and again
  206.  *   allow for a more user friendly interface.
  207.  *****************************************************************************/
  208. #define add_type_inner( type ) 
  209.     vlc_plugin_set (p_module, NULL, VLC_CONFIG_CREATE, (type), &p_config);
  210. #define add_typedesc_inner( type, text, longtext ) 
  211.     add_type_inner( type ) 
  212.     vlc_config_set (p_config, VLC_CONFIG_DESC, domain, 
  213.                     (const char *)(text), (const char *)(longtext));
  214. #define add_typeadv_inner( type, text, longtext, advc ) 
  215.     add_typedesc_inner( type, text, longtext ) 
  216.     if (advc) vlc_config_set (p_config, VLC_CONFIG_ADVANCED);
  217. #define add_typename_inner( type, name, text, longtext, advc, cb ) 
  218.     add_typeadv_inner( type, text, longtext, advc ) 
  219.     vlc_config_set (p_config, VLC_CONFIG_NAME, 
  220.                     (const char *)(name), (vlc_callback_t)(cb));
  221. #define add_string_inner( type, name, text, longtext, advc, cb, v ) 
  222.     add_typename_inner( type, name, text, longtext, advc, cb ) 
  223.     vlc_config_set (p_config, VLC_CONFIG_VALUE, (const char *)(v));
  224. #define add_int_inner( type, name, text, longtext, advc, cb, v ) 
  225.     add_typename_inner( type, name, text, longtext, advc, cb ) 
  226.     vlc_config_set (p_config, VLC_CONFIG_VALUE, (int)(v));
  227. #define set_category( i_id ) 
  228.     add_type_inner( CONFIG_CATEGORY ) 
  229.     vlc_config_set (p_config, VLC_CONFIG_VALUE, (int)(i_id));
  230. #define set_subcategory( i_id ) 
  231.     add_type_inner( CONFIG_SUBCATEGORY ) 
  232.     vlc_config_set (p_config, VLC_CONFIG_VALUE, (int)(i_id));
  233. #define set_section( text, longtext ) 
  234.     add_typedesc_inner( CONFIG_SECTION, text, longtext )
  235. #define add_category_hint( text, longtext, advc ) 
  236.     add_typeadv_inner( CONFIG_HINT_CATEGORY, text, longtext, advc )
  237. #define add_subcategory_hint( text, longtext ) 
  238.     add_typedesc_inner( CONFIG_HINT_SUBCATEGORY, text, longtext )
  239. #define end_subcategory_hint 
  240.     add_type_inner( CONFIG_HINT_SUBCATEGORY_END )
  241. #define add_usage_hint( text ) 
  242.     add_typedesc_inner( CONFIG_HINT_USAGE, text, NULL )
  243. #define add_string( name, value, p_callback, text, longtext, advc ) 
  244.     add_string_inner( CONFIG_ITEM_STRING, name, text, longtext, advc, 
  245.                       p_callback, value )
  246. #define add_password( name, value, p_callback, text, longtext, advc ) 
  247.     add_string_inner( CONFIG_ITEM_PASSWORD, name, text, longtext, advc, 
  248.                       p_callback, value )
  249. #define add_file( name, value, p_callback, text, longtext, advc ) 
  250.     add_string_inner( CONFIG_ITEM_FILE, name, text, longtext, advc, 
  251.                       p_callback, value )
  252. #define add_directory( name, value, p_callback, text, longtext, advc ) 
  253.     add_string_inner( CONFIG_ITEM_DIRECTORY, name, text, longtext, advc, 
  254.                       p_callback, value )
  255. #define add_module( name, psz_caps, value, p_callback, text, longtext, advc ) 
  256.     add_string_inner( CONFIG_ITEM_MODULE, name, text, longtext, advc, 
  257.                       p_callback, value ) 
  258.     vlc_config_set (p_config, VLC_CONFIG_CAPABILITY, (const char *)(psz_caps));
  259. #define add_module_list( name, psz_caps, value, p_callback, text, longtext, advc ) 
  260.     add_string_inner( CONFIG_ITEM_MODULE_LIST, name, text, longtext, advc, 
  261.                       p_callback, value ) 
  262.     vlc_config_set (p_config, VLC_CONFIG_CAPABILITY, (const char *)(psz_caps));
  263. #ifndef __PLUGIN__
  264. #define add_module_cat( name, i_subcategory, value, p_callback, text, longtext, advc ) 
  265.     add_string_inner( CONFIG_ITEM_MODULE_CAT, name, text, longtext, advc, 
  266.                       p_callback, value ) 
  267.     change_integer_range (i_subcategory /* gruik */, 0);
  268. #define add_module_list_cat( name, i_subcategory, value, p_callback, text, longtext, advc ) 
  269.     add_string_inner( CONFIG_ITEM_MODULE_LIST_CAT, name, text, longtext, 
  270.                       advc, p_callback, value ) 
  271.     change_integer_range (i_subcategory /* gruik */, 0);
  272. #endif
  273. #define add_integer( name, value, p_callback, text, longtext, advc ) 
  274.     add_int_inner( CONFIG_ITEM_INTEGER, name, text, longtext, advc, 
  275.                    p_callback, value )
  276. #if !defined(WIN32) && !defined(SYS_LINUX)
  277. #define add_key( name, value, p_callback, text, longtext, advc ) 
  278.     add_int_inner( CONFIG_ITEM_KEY, name, text, longtext, advc, p_callback, 
  279.                    value )
  280. #else
  281. #define add_key( name, value, p_callback, text, longtext, advc ) 
  282.     add_int_inner( CONFIG_ITEM_KEY, name, text, longtext, advc, 
  283.                    p_callback, value ) 
  284.     add_int_inner( CONFIG_ITEM_KEY, "global-" name, text, longtext, advc, 
  285.                    p_callback, KEY_UNSET )
  286. #endif
  287. #define add_integer_with_range( name, value, i_min, i_max, p_callback, text, longtext, advc ) 
  288.     add_integer( name, value, p_callback, text, longtext, advc ) 
  289.     change_integer_range( i_min, i_max )
  290. #define add_float( name, v, p_callback, text, longtext, advc ) 
  291.     add_typename_inner( CONFIG_ITEM_FLOAT, name, text, longtext, advc, p_callback ) 
  292.     vlc_config_set (p_config, VLC_CONFIG_VALUE, (double)(v));
  293. #define add_float_with_range( name, value, f_min, f_max, p_callback, text, longtext, advc ) 
  294.     add_float( name, value, p_callback, text, longtext, advc ) 
  295.     change_float_range( f_min, f_max )
  296. #define add_bool( name, v, p_callback, text, longtext, advc ) 
  297.     add_typename_inner( CONFIG_ITEM_BOOL, name, text, longtext, advc, 
  298.                         p_callback ) 
  299.     if (v) vlc_config_set (p_config, VLC_CONFIG_VALUE, (int)true);
  300. /* For removed option */
  301. #define add_obsolete_inner( name, type ) 
  302.     add_type_inner( type ) 
  303.     vlc_config_set (p_config, VLC_CONFIG_NAME, 
  304.                     (const char *)(name), (vlc_callback_t)NULL); 
  305.     vlc_config_set (p_config, VLC_CONFIG_REMOVED);
  306. #define add_obsolete_bool( name ) 
  307.         add_obsolete_inner( name, CONFIG_ITEM_BOOL )
  308. #define add_obsolete_integer( name ) 
  309.         add_obsolete_inner( name, CONFIG_ITEM_INTEGER )
  310. #define add_obsolete_float( name ) 
  311.         add_obsolete_inner( name, CONFIG_ITEM_FLOAT )
  312. #define add_obsolete_string( name ) 
  313.         add_obsolete_inner( name, CONFIG_ITEM_STRING )
  314. /* Modifier macros for the config options (used for fine tuning) */
  315. #define add_deprecated_alias( name ) 
  316.     vlc_config_set (p_config, VLC_CONFIG_OLDNAME, (const char *)(name));
  317. #define change_short( ch ) 
  318.     vlc_config_set (p_config, VLC_CONFIG_SHORTCUT, (int)(ch));
  319. #define change_string_list( list, list_text, list_update_func ) 
  320.     vlc_config_set (p_config, VLC_CONFIG_LIST, domain, 
  321.                     (size_t)(sizeof (list) / sizeof (char *)), 
  322.                     (const char *const *)(list), 
  323.                     (const char *const *)(list_text), 
  324.                     (vlc_callback_t)(list_update_func));
  325. #define change_integer_list( list, list_text, list_update_func ) 
  326.     vlc_config_set (p_config, VLC_CONFIG_LIST, domain, 
  327.                     (size_t)(sizeof (list) / sizeof (int)), 
  328.                     (const int *)(list), 
  329.                     (const char *const *)(list_text), 
  330.                     (vlc_callback_t)(list_update_func));
  331. #define change_integer_range( minv, maxv ) 
  332.     vlc_config_set (p_config, VLC_CONFIG_RANGE, (int)(minv), (int)(maxv));
  333. #define change_float_range( minv, maxv ) 
  334.     vlc_config_set (p_config, VLC_CONFIG_RANGE, 
  335.                     (double)(minv), (double)(maxv));
  336. #define change_action_add( pf_action, text ) 
  337.     vlc_config_set (p_config, VLC_CONFIG_ADD_ACTION, domain, 
  338.                     (vlc_callback_t)(pf_action), (const char *)(text));
  339. #define change_internal() 
  340.     vlc_config_set (p_config, VLC_CONFIG_PRIVATE);
  341. #define change_need_restart() 
  342.     vlc_config_set (p_config, VLC_CONFIG_RESTART);
  343. #define change_autosave() 
  344.     vlc_config_set (p_config, VLC_CONFIG_PERSISTENT);
  345. #define change_unsaveable() 
  346.     vlc_config_set (p_config, VLC_CONFIG_VOLATILE);
  347. #define change_safe() 
  348.     vlc_config_set (p_config, VLC_CONFIG_SAFE);
  349. /* Meta data plugin exports */
  350. #define VLC_META_EXPORT( name, value ) 
  351.     EXTERN_SYMBOL DLL_SYMBOL const char * CDECL_SYMBOL 
  352.     __VLC_SYMBOL(vlc_entry_ ## name) (void); 
  353.     EXTERN_SYMBOL DLL_SYMBOL const char * CDECL_SYMBOL 
  354.     __VLC_SYMBOL(vlc_entry_ ## name) (void) 
  355.     { 
  356.          return value; 
  357.     }
  358. #if defined (__LIBVLC__)
  359. # define VLC_COPYRIGHT_EXPORT VLC_META_EXPORT (copyright, 
  360.     "x43x6fx70x79x72x69x67x68x74x20x28x43x29x20x74x68" 
  361.     "x65x20x56x69x64x65x6fx4cx41x4ex20x56x4cx43x20x6d" 
  362.     "x65x64x69x61x20x70x6cx61x79x65x72x20x64x65x76x65" 
  363.     "x6cx6fx70x65x72x73" )
  364. #elif !defined (VLC_COPYRIGHT_EXPORT)
  365. # define VLC_COPYRIGHT_EXPORT
  366. #endif
  367. #define VLC_LICENSE_EXPORT VLC_META_EXPORT (license, 
  368.     "x4cx69x63x65x6ex73x65x64x20x75x6ex64x65x72x20x74" 
  369.     "x68x65x20x74x65x72x6dx73x20x6fx66x20x74x68x65x20" 
  370.     "x47x4ex55x20x47x65x6ex65x72x61x6cx20x50x75x62x6c" 
  371.     "x69x63x20x4cx69x63x65x6ex73x65x2cx20x76x65x72x73" 
  372.     "x69x6fx6ex20x32x20x6fx72x20x6cx61x74x65x72x2e" )
  373. #define VLC_METADATA_EXPORTS 
  374.     VLC_COPYRIGHT_EXPORT 
  375.     VLC_LICENSE_EXPORT
  376. #endif