home *** CD-ROM | disk | FTP | other *** search
/ mail.altrad.com / 2015.02.mail.altrad.com.tar / mail.altrad.com / TEST / vlc-2-0-5-win32.exe / sdk / include / vlc / plugins / vlc_configuration.h < prev    next >
C/C++ Source or Header  |  2012-12-12  |  12KB  |  309 lines

  1. /*****************************************************************************
  2.  * configuration.h : configuration management module
  3.  * This file describes the programming interface for the configuration module.
  4.  * It includes functions allowing to declare, get or set configuration options.
  5.  *****************************************************************************
  6.  * Copyright (C) 1999-2006 VLC authors and VideoLAN
  7.  * $Id: bd6e00b6bf70e4b6be324648146a0d5d7c0309b4 $
  8.  *
  9.  * Authors: Gildas Bazin <gbazin@videolan.org>
  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_CONFIGURATION_H
  27. #define VLC_CONFIGURATION_H 1
  28.  
  29. /**
  30.  * \file
  31.  * This file describes the programming interface for the configuration module.
  32.  * It includes functions allowing to declare, get or set configuration options.
  33.  */
  34.  
  35. # ifdef __cplusplus
  36. extern "C" {
  37. # endif
  38.  
  39. /*****************************************************************************
  40.  * Macros used to build the configuration structure.
  41.  *****************************************************************************/
  42.  
  43. /* Configuration hint types */
  44. #define CONFIG_HINT_CATEGORY                0x02  /* Start of new category */
  45. #define CONFIG_HINT_SUBCATEGORY             0x03  /* Start of sub-category */
  46. #define CONFIG_HINT_SUBCATEGORY_END         0x04  /* End of sub-category */
  47. #define CONFIG_HINT_USAGE                   0x05  /* Usage information */
  48.  
  49. #define CONFIG_CATEGORY                     0x06 /* Set category */
  50. #define CONFIG_SUBCATEGORY                  0x07 /* Set subcategory */
  51. #define CONFIG_SECTION                      0x08 /* Start of new section */
  52.  
  53. /* Configuration item types */
  54. #define CONFIG_ITEM_FLOAT                   0x20  /* Float option */
  55. #define CONFIG_ITEM_INTEGER                 0x40  /* Integer option */
  56. #define CONFIG_ITEM_RGB                     0x41  /* RGB color option */
  57. #define CONFIG_ITEM_BOOL                    0x60  /* Bool option */
  58. #define CONFIG_ITEM_STRING                  0x80  /* String option */
  59. #define CONFIG_ITEM_PASSWORD                0x81  /* Password option (*) */
  60. #define CONFIG_ITEM_KEY                     0x82  /* Hot key option */
  61. #define CONFIG_ITEM_MODULE                  0x84  /* Module option */
  62. #define CONFIG_ITEM_MODULE_CAT              0x85  /* Module option */
  63. #define CONFIG_ITEM_MODULE_LIST             0x86  /* Module option */
  64. #define CONFIG_ITEM_MODULE_LIST_CAT         0x87  /* Module option */
  65. #define CONFIG_ITEM_LOADFILE                0x8C  /* Read file option */
  66. #define CONFIG_ITEM_SAVEFILE                0x8D  /* Written file option */
  67. #define CONFIG_ITEM_DIRECTORY               0x8E  /* Directory option */
  68. #define CONFIG_ITEM_FONT                    0x8F  /* Font option */
  69.  
  70. #define CONFIG_ITEM(x) (((x) & ~0xF) != 0)
  71.  
  72. /*******************************************************************
  73.  * All predefined categories and subcategories
  74.  *******************************************************************/
  75. #define CAT_INTERFACE 1
  76.    #define SUBCAT_INTERFACE_GENERAL 101
  77.    #define SUBCAT_INTERFACE_MAIN 102
  78.    #define SUBCAT_INTERFACE_CONTROL 103
  79.    #define SUBCAT_INTERFACE_HOTKEYS 104
  80.  
  81. #define CAT_AUDIO 2
  82.    #define SUBCAT_AUDIO_GENERAL 201
  83.    #define SUBCAT_AUDIO_AOUT 202
  84.    #define SUBCAT_AUDIO_AFILTER 203
  85.    #define SUBCAT_AUDIO_VISUAL 204
  86.    #define SUBCAT_AUDIO_MISC 205
  87.  
  88. #define CAT_VIDEO 3
  89.    #define SUBCAT_VIDEO_GENERAL 301
  90.    #define SUBCAT_VIDEO_VOUT 302
  91.    #define SUBCAT_VIDEO_VFILTER 303
  92.    #define SUBCAT_VIDEO_TEXT 304
  93.    #define SUBCAT_VIDEO_SUBPIC 305
  94.    #define SUBCAT_VIDEO_VFILTER2 306
  95.  
  96. #define CAT_INPUT 4
  97.    #define SUBCAT_INPUT_GENERAL 401
  98.    #define SUBCAT_INPUT_ACCESS 402
  99.    #define SUBCAT_INPUT_DEMUX 403
  100.    #define SUBCAT_INPUT_VCODEC 404
  101.    #define SUBCAT_INPUT_ACODEC 405
  102.    #define SUBCAT_INPUT_SCODEC 406
  103.    #define SUBCAT_INPUT_STREAM_FILTER 407
  104.  
  105. #define CAT_SOUT 5
  106.    #define SUBCAT_SOUT_GENERAL 501
  107.    #define SUBCAT_SOUT_STREAM 502
  108.    #define SUBCAT_SOUT_MUX 503
  109.    #define SUBCAT_SOUT_ACO 504
  110.    #define SUBCAT_SOUT_PACKETIZER 505
  111.    #define SUBCAT_SOUT_SAP 506
  112.    #define SUBCAT_SOUT_VOD 507
  113.  
  114. #define CAT_ADVANCED 6
  115.    #define SUBCAT_ADVANCED_CPU 601
  116.    #define SUBCAT_ADVANCED_MISC 602
  117.    #define SUBCAT_ADVANCED_NETWORK 603
  118.    #define SUBCAT_ADVANCED_XML 604
  119.  
  120. #define CAT_PLAYLIST 7
  121.    #define SUBCAT_PLAYLIST_GENERAL 701
  122.    #define SUBCAT_PLAYLIST_SD 702
  123.    #define SUBCAT_PLAYLIST_EXPORT 703
  124.  
  125. #define CAT_OSD 8
  126.    #define SUBCAT_OSD_IMPORT 801
  127.  
  128. struct config_category_t
  129. {
  130.     int         i_id;
  131.     const char *psz_name;
  132.     const char *psz_help;
  133. };
  134.  
  135. typedef union
  136. {
  137.     char       *psz;
  138.     int64_t     i;
  139.     float       f;
  140. } module_value_t;
  141.  
  142. struct module_config_t
  143. {
  144.     char        *psz_type;                          /* Configuration subtype */
  145.     char        *psz_name;                                    /* Option name */
  146.     char        *psz_text;      /* Short comment on the configuration option */
  147.     char        *psz_longtext;   /* Long comment on the configuration option */
  148.     module_value_t value;                                    /* Option value */
  149.     module_value_t orig;
  150.     module_value_t min;
  151.     module_value_t max;
  152.  
  153.     /* Values list */
  154.     char **      ppsz_list;       /* List of possible values for the option */
  155.     int         *pi_list;                              /* Idem for integers */
  156.     char       **ppsz_list_text;          /* Friendly names for list values */
  157.     int          i_list;                               /* Options list size */
  158.     vlc_callback_t pf_update_list; /* Callback to initialize dropdown lists */
  159.     uint8_t      i_type;                              /* Configuration type */
  160.     char         i_short;                     /* Optional short option name */
  161.  
  162.     /* Misc */
  163.     unsigned    b_dirty:1;        /* Dirty flag to indicate a config change */
  164.     unsigned    b_advanced:1;        /* Flag to indicate an advanced option */
  165.     unsigned    b_internal:1; /* Flag to indicate option is not to be shown */
  166.     unsigned    b_unsaveable:1;               /* Config should not be saved */
  167.     unsigned    b_safe:1;       /* Safe to use in web plugins and playlists */
  168.  
  169.     /* Actions list */
  170.     int            i_action;                           /* actions list size */
  171.     vlc_callback_t *ppf_action;    /* List of possible actions for a config */
  172.     char          **ppsz_action_text;         /* Friendly names for actions */
  173.  
  174.     /* Deprecated */
  175.     bool        b_removed;
  176. };
  177.  
  178. /*****************************************************************************
  179.  * Prototypes - these methods are used to get, set or manipulate configuration
  180.  * data.
  181.  *****************************************************************************/
  182. VLC_API int config_GetType(vlc_object_t *, const char *) VLC_USED;
  183. VLC_API int64_t config_GetInt(vlc_object_t *, const char *) VLC_USED;
  184. VLC_API void config_PutInt(vlc_object_t *, const char *, int64_t);
  185. VLC_API float config_GetFloat(vlc_object_t *, const char *) VLC_USED;
  186. VLC_API void config_PutFloat(vlc_object_t *, const char *, float);
  187. VLC_API char * config_GetPsz(vlc_object_t *, const char *) VLC_USED VLC_MALLOC;
  188. VLC_API void config_PutPsz(vlc_object_t *, const char *, const char *);
  189.  
  190. VLC_API int config_SaveConfigFile( vlc_object_t * );
  191. #define config_SaveConfigFile(a) config_SaveConfigFile(VLC_OBJECT(a))
  192.  
  193. VLC_API void config_ResetAll( vlc_object_t * );
  194. #define config_ResetAll(a) config_ResetAll(VLC_OBJECT(a))
  195.  
  196. VLC_API module_config_t * config_FindConfig( vlc_object_t *, const char * ) VLC_USED;
  197. VLC_API char * config_GetDataDir( vlc_object_t * ) VLC_USED VLC_MALLOC;
  198. #define config_GetDataDir(a) config_GetDataDir(VLC_OBJECT(a))
  199. VLC_API const char * config_GetLibDir( void ) VLC_USED;
  200. VLC_API const char * config_GetConfDir( void ) VLC_USED;
  201.  
  202. typedef enum vlc_userdir
  203. {
  204.     VLC_HOME_DIR, /* User's home */
  205.     VLC_CONFIG_DIR, /* VLC-specific configuration directory */
  206.     VLC_DATA_DIR, /* VLC-specific data directory */
  207.     VLC_CACHE_DIR, /* VLC-specific user cached data directory */
  208.     /* Generic directories (same as XDG) */
  209.     VLC_DESKTOP_DIR=0x80,
  210.     VLC_DOWNLOAD_DIR,
  211.     VLC_TEMPLATES_DIR,
  212.     VLC_PUBLICSHARE_DIR,
  213.     VLC_DOCUMENTS_DIR,
  214.     VLC_MUSIC_DIR,
  215.     VLC_PICTURES_DIR,
  216.     VLC_VIDEOS_DIR,
  217. } vlc_userdir_t;
  218.  
  219. VLC_API char * config_GetUserDir( vlc_userdir_t ) VLC_USED VLC_MALLOC;
  220.  
  221. VLC_API void config_AddIntf( vlc_object_t *, const char * );
  222. VLC_API void config_RemoveIntf( vlc_object_t *, const char * );
  223. VLC_API bool config_ExistIntf( vlc_object_t *, const char * ) VLC_USED;
  224.  
  225. #define config_GetType(a,b) config_GetType(VLC_OBJECT(a),b)
  226. #define config_GetInt(a,b) config_GetInt(VLC_OBJECT(a),b)
  227. #define config_PutInt(a,b,c) config_PutInt(VLC_OBJECT(a),b,c)
  228. #define config_GetFloat(a,b) config_GetFloat(VLC_OBJECT(a),b)
  229. #define config_PutFloat(a,b,c) config_PutFloat(VLC_OBJECT(a),b,c)
  230. #define config_GetPsz(a,b) config_GetPsz(VLC_OBJECT(a),b)
  231. #define config_PutPsz(a,b,c) config_PutPsz(VLC_OBJECT(a),b,c)
  232.  
  233. #define config_AddIntf(a,b) config_AddIntf(VLC_OBJECT(a),b)
  234. #define config_RemoveIntf(a,b) config_RemoveIntf(VLC_OBJECT(a),b)
  235. #define config_ExistIntf(a,b) config_ExistIntf(VLC_OBJECT(a),b)
  236.  
  237. /****************************************************************************
  238.  * config_chain_t:
  239.  ****************************************************************************/
  240. struct config_chain_t
  241. {
  242.     config_chain_t *p_next;     /**< Pointer on the next config_chain_t element */
  243.  
  244.     char        *psz_name;      /**< Option name */
  245.     char        *psz_value;     /**< Option value */
  246. };
  247.  
  248. /**
  249.  * This function will
  250.  * - create all options in the array ppsz_options (var_Create).
  251.  * - parse the given linked list of config_chain_t and set the value (var_Set).
  252.  *
  253.  * The option names will be created by adding the psz_prefix prefix.
  254.  */
  255. VLC_API void config_ChainParse( vlc_object_t *, const char *psz_prefix, const char *const *ppsz_options, config_chain_t * );
  256. #define config_ChainParse( a, b, c, d ) config_ChainParse( VLC_OBJECT(a), b, c, d )
  257.  
  258. /**
  259.  * This function will parse a configuration string (psz_string) and
  260.  * - set the module name (*ppsz_name)
  261.  * - set all options for this module in a chained list (*pp_cfg)
  262.  * - returns a pointer on the next module if any.
  263.  *
  264.  * The string format is
  265.  *   module{option=*,option=*}[:modulenext{option=*,...}]
  266.  *
  267.  * The options values are unescaped using config_StringUnescape.
  268.  */
  269. VLC_API char *config_ChainCreate( char **ppsz_name, config_chain_t **pp_cfg, const char *psz_string ) VLC_USED VLC_MALLOC;
  270.  
  271. /**
  272.  * This function will release a linked list of config_chain_t
  273.  * (Including the head)
  274.  */
  275. VLC_API void config_ChainDestroy( config_chain_t * );
  276.  
  277. /**
  278.  * This function will duplicate a linked list of config_chain_t
  279.  */
  280. VLC_API config_chain_t * config_ChainDuplicate( const config_chain_t * ) VLC_USED VLC_MALLOC;
  281.  
  282. /**
  283.  * This function will unescape a string in place and will return a pointer on
  284.  * the given string.
  285.  * No memory is allocated by it (unlike config_StringEscape).
  286.  * If NULL is given as parameter nothing will be done (NULL will be returned).
  287.  *
  288.  * The following sequences will be unescaped (only one time):
  289.  * \\ \' and \"
  290.  */
  291. VLC_API char * config_StringUnescape( char *psz_string );
  292.  
  293. /**
  294.  * This function will escape a string that can be unescaped by
  295.  * config_StringUnescape.
  296.  * The returned value is allocated by it. You have to free it once you
  297.  * do not need it anymore (unlike config_StringUnescape).
  298.  * If NULL is given as parameter nothing will be done (NULL will be returned).
  299.  *
  300.  * The escaped characters are ' " and \
  301.  */
  302. VLC_API char * config_StringEscape( const char *psz_string ) VLC_USED VLC_MALLOC;
  303.  
  304. # ifdef __cplusplus
  305. }
  306. # endif
  307.  
  308. #endif /* _VLC_CONFIGURATION_H */
  309.