本文论述了嵌入式系统相关理论、嵌入式Linux的基本概念,主要阐述了采用嵌入式Linux进行视频图像数据的捕获、存储、显示等。采用的关键技术包括 V4L、framebuffer、数字图像格式变换等,提出了图像数据格式的变换方法。同时阐述了具体的实现方法。
1 嵌入式系统简介
sys/stat.h>、 sys/ioctl.h>、 sys/mman.h>、 linux/videodev.h>、 fcntl.h>、 unistd.h>等。摄像头、V4L、设备驱动程序、嵌入式Linux操作系统的关系用图1表示如下。
图1
具体的图像数据的捕获过程为:打开设备文件、查询和确认设备性能、设置捕获的图像的宽和高、设置色深、建立内存映射(后文阐述)、读取图像数据、关闭设备。[4]
具体的这个过程由于篇幅关系本文将不做具体阐述,读者可以查阅本文的参考文献3。在上述的过程中主要考虑的问题是内存的映射问题。为了读取数据首先需要将显示设备的地址映射到系统地址上来,这需要调用函数mmap()。该函数返回的地址就是存放图像数据的地址。每一帧图像都偏移固定的长度。而摄像头取得图像会包含若干帧。这样通过周而复始的进行就可以将图像数据捕获下来。具体过程和涉及到的函数如下所示:
打开设备文件: int device = open (/dev/v4l/video0, O_RDWR);
内存映射:char* memoryMap = (char*)mmap (0, memoryBuffer.size, PROT_READ | PROT_WRITE, MAP_SHARED, device, 0);
图像数据memoryMap + memoryBuffer.offsets[bufferIndex]
图2