Mjpeg-streamer源码学习笔记-Main-动态库插件(三)

目标文件:mjpg-stream/mjpg-stream.c + mjpg-stream.h + input.h + output.h

这一篇的主要难点是main()中的结构体globals引出的动态链接库,插件,条件变量,互斥锁等问题。

新手写,有不对的请大神指正,鼓励。

 

本人参考文章:

http://www.360doc.com/content/13/0913/13/13876325_314174121.shtml

http://www.cnblogs.com/ardar/articles/357321.html

一:结构体介绍

 

globals

------------------------------------------------------------------------------

// global variables that are accessed by all plugins
typedef struct _globals globals;

struct _globals {
    int stop;  // 一个全局标志位 
    
    input in[MAX_INPUT_PLUGINS];  //输入插件,一个输入插件可对应多个输出插件 宏定义为10

    int incnt;//输入插件数量
    output out[MAX_OUTPUT_PLUGINS]; //输出插件,以数组形式表示 宏定义为10
    int outcnt;//输出插件数量
 
    //int (*control)(int command, char *details);
};

------------------------------------------------------------------------------

input

------------------------------------------------------------------------------

//structure to store variables/functions for input plugin
typedef struct _input input;

struct _input {
    char *plugin;  //动态链接库的名字,或者是动态链接库的地址
    void *handle;  //动态链接库的句柄,通过该句柄可以调用动态库中的函数

    input_parameter param;  //输入插件的参数

    // input plugin parameters
    struct _control *in_parameters;// control结构
    int parametercount;//参数计数


    struct v4l2_jpegcompression jpegcomp;//关于v4l2的所有结构体在后面详述

   
    pthread_mutex_t db;        //互斥锁,数据锁
    pthread_cond_t  db_update;      //条件变量,数据更新的标志  

   
    unsigned char *buf;       //全局JPG帧的缓冲区的指针
    int size;     //缓冲区的大小

     
    struct timeval timestamp;//定时结构

    input_format *in_formats;//输入格式
    int formatCount;//格式计数
    int currentFormat; // holds the current format number 保存当前格式数量

    int (*init)(input_parameter *, int id);  //四个函数指针
    int (*stop)(int);
    int (*run)(int);
    int (*cmd)(int plugin, unsigned int control_id, unsigned int group, int value);
 
};

------------------------------------------------------------------------------

output

------------------------------------------------------------------------------

//structure to store variables/functions for output plugin
typedef struct _output output;
struct _output {
    char *plugin; //动态链接库的名字,或者是动态链接库的地址
    void *handle; //动态链接库的句柄,通过该句柄可以调用动态库中的函数
    output_parameter param;//输出插件的参数

    // input plugin parameters
    struct _control *out_parameters; //control结构
    int parametercount; //参数计数

    int (*init)(output_parameter *param, int id);  //四个函数指针
    int (*stop)(int);
    int (*run)(int);
    int (*cmd)(int plugin, unsigned int control_id, unsigned int group, int value);
};

------------------------------------------------------------------------------

input_parameter

------------------------------------------------------------------------------

//parameters for input plugin
typedef struct _input_parameter input_parameter;
struct _input_parameter {
    int id;  //用于标记是哪一个输入插件的参数
    char *parameters; //输入参数指针
    int argc;
    char *argv[MAX_PLUGIN_ARGUMENTS];//插件参数数组
    struct _globals *global;//全局结构指针
};

------------------------------------------------------------------------------

output_parameter

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值