module_t说明

前面几章介绍加载插件时或许你已经注意到了,每个插件其实是由一个module_t结构体管理的,我们看下module_t结构体, 它在modules.h文件中:

struct module_t
{
    module_t   *next;   //说明它是链表的一个节点
    module_t   *parent;
    module_t   *submodule;
    unsigned    submodule_count;

    unsigned    i_shortcuts;
    char        **pp_shortcuts;

    char *psz_shortname;   //名字                          
    char *psz_longname;                   
    char *psz_help;       

    char    *psz_capability;                                 
    int      i_score;                          

    bool          b_loaded;        
    bool b_unloadable;                       

    void *pf_activate;    //指向插件的回调函数
    void *pf_deactivate;


    module_config_t *p_config;  //配置           
    size_t           confsize;           
    unsigned int     i_config_items;       
    unsigned int     i_bool_items;           


    module_handle_t     handle;  //dll对应的句柄                          
    char *              psz_filename;                     
    char *              domain;                           
};

module_t的成员是在vlc_module_begin ()后面赋值的,我们可以看下filesystem插件对应的module_t赋值后的情况:

struct module_t
{
    module_t  *submodule = 等会列出;
    unsigned  submodule_count = 1char *psz_shortname = "File";                        
    char *psz_longname = "File input"                  

    char    *psz_capability = "access";                                 
    int      i_score = 50;                                               

    void *pf_activate = FileOpen;
    void *pf_deactivate = FileClose;

};

它有一个子模块submodule , 它的赋值为

struct module_t
{
    module_t  *submodule = NULL;
    unsigned  submodule_count = 0char *psz_shortname = "File";                        
    char *psz_longname = "File input"                  

    char    *psz_capability = "access";                                 
    int      i_score = 55;                                               

    void *pf_activate = DirOpen;
    void *pf_deactivate = DirClose;

};

从中可以看出,父模块的pf_activate 为FileOpen, 子模块的pf_activate 为DirOpen。

插件avcodec对应的module_t字段为:

struct module_t
{
    module_t  *submodule = 有6个子模块,待会说;
    unsigned  submodule_count = 6char **pp_shortcuts = "avcodec";

    char *psz_shortname = "";                        
    char *psz_longname = "FFmpeg audio/video decoder"                  

    char    *psz_capability = "decoder";                                 
    int      i_score = 70;                                               

    void *pf_activate = OpenDecoder( vlc_object_t * );
    void *pf_deactivate = CloseDecoder( vlc_object_t * );                   
};

它包含有6个子模块,我画了个图:
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值