新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于S3C2410的的图像采集系统

基于S3C2410的的图像采集系统

作者:时间:2012-03-09来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/149480.htm

启动时,首先需要加载各种驱动模块,然后向注册了生产厂商号码(VendorID)和产品号(Pro-ductID)。当USB设备连接到主机上,会检测它的VendorID和ProductID,如果与驱动模块的注册内容匹配,则将该驱动程序与设备挂接起来[5]。当插入摄像头时,系统会调用zc301_probe函数。参数dev指定了设备信息,probe函数验证所有可选配置的有效性,并调用usbvideo模块的sbvideo_Regis-terVideodevice()函数向videodev系统注册。

当系统完成驱动注册后,调用staticintzc301_init(structusb_zc301*zc301)和staticvoidzc301_start(structusb_301*zc301)函数完成对设备的初始化过程:填写各个寄存器值、启动摄像头。系统运行到这一步,基本完成了对摄像头驱动加载及设备初始化。接下来需要通过读取用户设定的规格,其中包括:格式、分辨率、颜色深度、对比度和亮度等参数。这些数值的读取都是通过以下函数实现的:

在得到这些参数值后,再调用一套函数,实现参数的设置。每个参数设置函数和之前的参数取值函数是一一对应的。具体函数如下:

通过调用上面的函数,我们基本得到了所需的参数值,这样我们就可以启动摄像头了。

当然我们还需要staticvoidzc301_shutdown(structusb_zc301*zc301)来关闭摄像头。

至此,摄像头驱动的驱动基本完成。通过这些函数的设置我们可以把具体的硬件电路抽象化为数据结构中的参数值。接下来我们可以通过V4L驱动来调用这些函数,实现对参数的赋值、打开设备、和关闭设备等一系列的过程。

重新编译、运行内核时,在串口反馈信息中会显示USB摄像头驱动程序成功加载。如图3所示。

图3串口反馈信息3Video4Linux下的图像编程:

Video4Linux,简称V4L,是Linux中关于视频设备的内核驱动,它为针对视频设备的应用程序编程提供一系列半标准的接口。V4L利用这个接口,增加一些额外的功能,同时向外提供了一个属于自己的API。我们可以通过调用V4L的API来实现各种功能。在Linux下,视频设备的正常使用依赖于对Video4Linux标准的支持。目前的V4L涵盖了视、音频流捕捉及处理等内容,USB摄像头也属于它支持的范畴。

V4L中定义的主要数据结构:

这些数据结构都是由Video4Linux支持的,它们的用途如下:

(1)video_capability包含摄像头的基本信息,例如设备名称、支持的最大最小分辨率、信号源信息等,分别对应着结构体中成员变量name、maxwidth、maxheight、minwidth、minheight、channels(信号源个数)、type等;

(2)voide_picture包含设备采集图像的各种属性,如brightness(亮度)、hue(色调)、contrast(对比度)、whiteness(色度)、depth(深度)等;

(3)video_mmap用于内存映射;

(4)voido_mbuf利用mmap进行映射的帧信息,实际上是输入到摄像头存储器缓冲中的帧信息,包括size(帧的大小)、frAMEs(最多支持的帧数)、offsets(每帧相对基址的偏移)。

系统在采集图像之前,需要初始化这些数据结构中的参数值,系统才能够按照要求采集图像数据。

在USB摄像头被驱动后,只需要再编写一个对视频流采集的应用程序就可以了。根据嵌入式系统开发特征,先在宿主机上编写应用程序,再使用交叉编译器进行编译链接,生成在目标平台的可执行文件。宿主机与目标板通信采用打印终端的方式进行交叉调试,成功后移植到目标平台。

V4L图像采集编程流程:

(1)打开视频设备;

(2)读取设备信息;

(3)更改设备当前设置;

(4)视频采集得到图像信息;



评论


相关推荐

技术专区

关闭