系统的硬件功能框图如图1所示,CPU采用的是三星公司的S3C2410。该处理器内部集成了A R M 公司A R M 9 2 0 T 处理器核的3 2 位微控制器,并带有独立的16KB的指令Cache 和16KB的数据Cache、L C D 控制器、R A M 控制器、NAND 闪存控制器、3路UART、4路DMA 、4路带PWM 的timer、并行I/O口、8路10位ADC、触摸屏接口、I2C接口、I2S接口、2个U S B 接口控制器、2路SPI,主频最高可达203MHZ。在此基础上,平台还进行了相应的配置和扩展,配置了4MB16位的Flash和8MB32位的SDRAM,通过以太网控制芯片DM9000E扩展了一个网口。引出了一个UART接口,通过RS232可以和宿主机做串口通讯。并引出了一个HOST USB接口,通过在USB接口上外接一个带USB的摄象头将采集到的图象数据放入输入缓冲区中。对缓冲区的数据进行处理,最后通过网口发送到Internet上,在PC上保存和接收。
可以看出,程序的内容主要有三个部分:图象采集部分,图象的网络发送部分和程序的多线程控制部分。下面分别介绍一下这三个部分主要涉及的内容。
在图象采集部分,定义了一个数据结构,它的主要成员变量有:
l Video_capability 包含基本的设备信息(设备名称、支持的最大最小分辨率、信号源信息)
l video_channel 关于各个信号源的属性
l video_mbuf 利用mmap进行映射的帧的信息
l video_buffer 最底层对buffer的描述
l video_mmap 用于mmap
l pthread_mutex_t 线程互斥量
截取图象方法有两种:直接读取设备文件和内存影射的方法,本文采用后面一种。采用这种方法后,普通文件被映射到内存地址空间,进程可以象访问普通文件一样访问内存,这样做的一个好处是可以提高效率。做视频截取的两个主要函数是:
n ioctl(vd->fd, VIDIOCMCAPTURE, &(vd->mmap)) 若调用成功,开始一副图象的截取。是否截取完毕留给VIDIOCSYNC来判断。
n ioctl(vd->fd, VIDIOCSYNC, &frame) 若调用成功,表明一帧截取已完成。可以开始做下一次截取