开源软件mjpg-streamer 简要分析(中)

5 篇文章 0 订阅

 源码输入组件分析

当选择使用USB摄像头时,input_uvc将是一个必选的输入组件,其主要功能是获取摄像头拍摄的图像并进行压缩编码,并将处理好的图像复制到全局图像缓存区。此输入组件文件参照关系如图4.7所示。


图4.7 输入组件input_uvc文件参照关系

与其他组件一样它有5个接口函数分别为input_init、input_run、input_stop、input_cmd、help。具体函数定义在input_uvc.c文件内。下面重点对前三个函数进行分析,了解具体的模块化设计思路及图像输入的工作原理。input_init为输入组件初始化函数,其工作流程如图4.8所示。


图4.8 input_init操作流程

在初始化函数中用到的网络摄像头设备描述数据结构,它包含了V4L2接口信息、图片高宽、图片格式、从摄像头抓取方式等,具体的数据结构vdIn定义如下:

struct vdIn {

    int fd;

    char *videodevice;

    char *status;

    char *pictName;

    struct v4l2_capability cap;

    struct v4l2_format fmt;

    struct v4l2_buffer buf;

    struct v4l2_requestbuffers rb;

    void *mem[NB_BUFFER];

    unsigned char *tmpbuffer;

    unsigned char*framebuffer;

    int isstreaming;

    int grabmethod;

    int width;

    int height;

    int fps;

   int formatIn;

   int formatOut;

    int framesizeIn;

    int signalquit;

    int toggleAvi;

    int getPict;

    int rawFrameCapture;

    /* raw frame capture */

    unsigned int fileCounter;

    /* raw frame streamcapture */

    unsigned intrfsFramesWritten;

    unsigned intrfsBytesWritten;

    /* raw stream capture */

    FILE *captureFile;

    unsigned intframesWritten;

    unsigned int bytesWritten;

    int framecount;

    int recordstart;

    int recordtime;

};

在input_run函数中创建了描述符为cam的线程,线程调用函数为cam_thread,然后调用pthread_detach(cam),将此线程设置为detached(分离状态),这样一来该线程运行结束后会自动释放所有资源,且不必阻塞其他线程而等待它结束。工作线程cam_thread的操作流程如图4.9所示。


图4.9 工作线程cam_thread操作流程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值