• usb摄像头打不开 > usb摄像头
  • usb摄像头

    免费下载 下载该文档 文档格式:DOC   更新时间:2005-11-02   下载次数:0   点击次数:1
    文档基本属性
    文档语言:Simplified Chinese
    文档格式:doc
    文档作者:zc
    关键词:
    主题:
    备注:
    点击这里显示更多文档属性
    Video4Linux(简V4L)是Linux中关于视频设备的内核驱动,它为针对视频设备的应用程序编程提供一系列接口函数,这些视频设备包括现今市场上流行的TV卡,视频捕捉卡和USB摄像头等.对于USB口摄像头,其驱动程序中需要提供基本的I/O操作接口函数open,read,write,close的实现.对中断的处理实现,内存映射功能以及对I/O通道的控制接口函数ioct1的实现等,并把它们定义在struct file_operations中.这样当应用程序对设备文件进行诸如open,close,read,write等系统调用操作时,Linux内核将通过file_operations结构访问驱动程序提供的函数.例如,当应用程序对设备文件执行读操作时,内核将调用file_operations结构中的read函数.在系统平台上对USB口数码摄像头驱动,首先把USB控制器驱动模块静态编译进内核,使平台中支持USB接口,再在需要使用摄像头采集时,使用insmode动态加载其驱动模块,这样摄像头就可正常工作了,接着进行了下一步对视频流的采集编程.
    3.2 Video4Linux下的摄像头采集编程
    在USB摄像头被驱动后,只需要再编写一个对视频流采集的应用程序就可以了.根据嵌入式系统开发特征,先在宿主机上编写应用程序,再使用交叉编译器进行编译链接,生成在目标平台的可执行文件.宿主机与目标板通信采用打印终端的方式进行交叉调试,成功后移植到目标平台.本文编写采集程序是在安装Linux操作系统的宿主机PC机上进行的,下面是具体论述.
    (1)程序中定义的数据结构
    struct voide_capability grab_cap;
    struct voide_picture grab_pic;
    struct voide_mmap grab_buf;
    struct voide_mbuf grab_vm;
    这些数据结构都是由Video4Linux支持的,它们的用途如下:
    *video_capability包含摄像头的基本信息,例如设备名称,支持的最大最小分辨率,信号源信息等,分别对应着结构体中成员变量name[32],maxwidth,maxheight,minwidth,minheight,channels(信号源个数),type等;
    *voide_picture包含设备采集图像的各种属性,如brightness(亮度),hue(色调),contrast(对比度),whiteness(色度),depth(深度)等;
    *video_mmap用于内存映射;
    *voido_mbuf利用mmap进行映射的帧信息,实际上是输入到摄像头存储器缓冲中的帧信息,包括size(帧的大小),frames(最多支持的帧数),offsets(每帧相对基址的偏移).
    程序中用到的主要系统调用函数有:open("/dev/voideo0",int flags),close(fd),mmap(void *start,size_t length,int prot,int flags,int fd,off_t offset),munmap(void *start,size_tlength)和ioctl(int fd,int cmd,…).
    前面提到Linux系统中把设备看成设备文件,在用户空间可以通过标准的I/O系统调用函数操作设备文件,从而达到与设备通信交互的目的.当然,在设备驱动中要提供对这些函数的相应支持.这里说明一下ioctl(int fd,int cmd,…)函数,它在用户程序中用来控制I/O通道,其中,fd代表设备文件描述符,cmd代表用户程序对设备的控制命令,省略号一般是一个表示类型长度的参数,也可没有.
    (2)采集程序实现过程
    首先打开视频设备,摄像头在系统中对应的设备文件为/dev/video0,采用系统调用函数grab_fd=open("/dev/video0",O_RDWR),grab_fd是设备打开后返回的文件描述符(打开错误返回-1),以后的系统调用函数就可使用它来对设备文件进行操作了.接着,利用ioct1(grab_fd,VIDIOCGCAP,&grab_cap)函数读取struct video_capability中有关摄像头的信息.该函数成功返回后,这些信息从内核空间拷贝到用户程序空间grab_cap各成员分量中,使用printf函数就可得到各成员分量信息,例如printf("maxheight=%d",grab_fd.maxheight)获得最大垂直分辨率的大小.不规则用ioct1(grab_fd,VIDIOCGPICT,&grab_pic)函数读取摄像头缓冲中voideo_picture信息.在用户空间程序中可以改变这些信息,具体方法为先给分量赋新值,再调用VIDIOCSPICT ioct1函数,例如:

    下一页

  • 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
  • 免费下载 DOC格式下载
  • 您可能感兴趣的
  • usb摄像头万能驱动  usb高清摄像头  松翰usb摄像头驱动  摄像头usb无法识别  usb摄像头  usb摄像头监控软件  usb摄像头驱动  usb摄像头驱动下载  usb摄像头安防监控