modules.h
上传用户:riyaled888
上传日期:2009-03-27
资源大小:7338k
文件大小:6k
源码类别:

多媒体

开发平台:

MultiPlatform

  1. /*****************************************************************************
  2.  * modules.h : Module management functions.
  3.  *****************************************************************************
  4.  * Copyright (C) 2001 VideoLAN
  5.  * $Id: modules.h 7857 2004-06-01 15:45:07Z gbazin $
  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., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  22.  *****************************************************************************/
  23. /*****************************************************************************
  24.  * Module #defines.
  25.  *****************************************************************************/
  26. /* Number of tries before we unload an unused module */
  27. #define MODULE_HIDE_DELAY 50
  28. #define MODULE_SHORTCUT_MAX 50
  29. /* The module handle type. */
  30. #if defined(HAVE_DL_DYLD)
  31. #   if defined (HAVE_MACH_O_DYLD_H)
  32. #       include <mach-o/dyld.h>
  33. #   endif
  34. typedef NSModule module_handle_t;
  35. #elif defined(HAVE_IMAGE_H)
  36. typedef int module_handle_t;
  37. #elif defined(WIN32) || defined(UNDER_CE)
  38. typedef void * module_handle_t;
  39. #elif defined(HAVE_DL_DLOPEN)
  40. typedef void * module_handle_t;
  41. #elif defined(HAVE_DL_SHL_LOAD)
  42. typedef shl_t module_handle_t;
  43. #endif
  44. /*****************************************************************************
  45.  * module_bank_t: the module bank
  46.  *****************************************************************************
  47.  * This variable is accessed by any function using modules.
  48.  *****************************************************************************/
  49. struct module_bank_t
  50. {
  51.     VLC_COMMON_MEMBERS
  52.     int              i_usage;
  53.     module_symbols_t symbols;
  54.     /* Plugins cache */
  55.     vlc_bool_t     b_cache;
  56.     vlc_bool_t     b_cache_dirty;
  57.     vlc_bool_t     b_cache_delete;
  58.     int            i_cache;
  59.     module_cache_t **pp_cache;
  60.     int            i_loaded_cache;
  61.     module_cache_t **pp_loaded_cache;
  62. };
  63. /*****************************************************************************
  64.  * Module description structure
  65.  *****************************************************************************/
  66. struct module_t
  67. {
  68.     VLC_COMMON_MEMBERS
  69.     /*
  70.      * Variables set by the module to identify itself
  71.      */
  72.     char *psz_shortname;                                      /* Module name */
  73.     char *psz_longname;                           /* Module descriptive name */
  74.     /*
  75.      * Variables set by the module to tell us what it can do
  76.      */
  77.     char *psz_program;        /* Program name which will activate the module */
  78.     char *pp_shortcuts[ MODULE_SHORTCUT_MAX ];    /* Shortcuts to the module */
  79.     char    *psz_capability;                                   /* Capability */
  80.     int      i_score;                           /* Score for each capability */
  81.     uint32_t i_cpu;                             /* Required CPU capabilities */
  82.     vlc_bool_t b_unloadable;                          /* Can we be dlclosed? */
  83.     vlc_bool_t b_reentrant;                             /* Are we reentrant? */
  84.     vlc_bool_t b_submodule;                          /* Is this a submodule? */
  85.     /* Callbacks */
  86.     int  ( * pf_activate )   ( vlc_object_t * );
  87.     void ( * pf_deactivate ) ( vlc_object_t * );
  88.     /*
  89.      * Variables set by the module to store its config options
  90.      */
  91.     module_config_t *p_config;             /* Module configuration structure */
  92.     unsigned int     i_config_items;        /* number of configuration items */
  93.     unsigned int     i_bool_items;            /* number of bool config items */
  94.     /*
  95.      * Variables used internally by the module manager
  96.      */
  97.     /* Plugin-specific stuff */
  98.     module_handle_t     handle;                             /* Unique handle */
  99.     char *              psz_filename;                     /* Module filename */
  100.     vlc_bool_t          b_builtin;  /* Set to true if the module is built in */
  101.     vlc_bool_t          b_loaded;        /* Set to true if the dll is loaded */
  102.     /*
  103.      * Symbol table we send to the module so that it can access vlc symbols
  104.      */
  105.     module_symbols_t *p_symbols;
  106. };
  107. /*****************************************************************************
  108.  * Module cache description structure
  109.  *****************************************************************************/
  110. struct module_cache_t
  111. {
  112.     /* Mandatory cache entry header */
  113.     char       *psz_file;
  114.     int64_t    i_time;
  115.     int64_t    i_size;
  116.     vlc_bool_t b_junk;
  117.     /* Optional extra data */
  118.     module_t *p_module;
  119. };
  120. /*****************************************************************************
  121.  * Exported functions.
  122.  *****************************************************************************/
  123. #define module_InitBank(a)     __module_InitBank(VLC_OBJECT(a))
  124. void  __module_InitBank        ( vlc_object_t * );
  125. #define module_LoadMain(a)     __module_LoadMain(VLC_OBJECT(a))
  126. void  __module_LoadMain        ( vlc_object_t * );
  127. #define module_LoadBuiltins(a) __module_LoadBuiltins(VLC_OBJECT(a))
  128. void  __module_LoadBuiltins    ( vlc_object_t * );
  129. #define module_LoadPlugins(a)  __module_LoadPlugins(VLC_OBJECT(a))
  130. void  __module_LoadPlugins     ( vlc_object_t * );
  131. #define module_EndBank(a)      __module_EndBank(VLC_OBJECT(a))
  132. void  __module_EndBank         ( vlc_object_t * );
  133. #define module_ResetBank(a)    __module_ResetBank(VLC_OBJECT(a))
  134. void  __module_ResetBank       ( vlc_object_t * );
  135. #define module_Need(a,b,c,d) __module_Need(VLC_OBJECT(a),b,c,d)
  136. VLC_EXPORT( module_t *, __module_Need, ( vlc_object_t *, const char *, const char *, vlc_bool_t ) );
  137. #define module_Unneed(a,b) __module_Unneed(VLC_OBJECT(a),b)
  138. VLC_EXPORT( void, __module_Unneed, ( vlc_object_t *, module_t * ) );