arm linux系统默认编码,基于ARM+Linux的视频采集编码系统设计

Linux 系统通过URB实现USB 传输。为提高有效数据的传输速度可扩大 URB的缓冲来降低每个USB 事务中握手信息所占比例。每次 USB 传输都需要在操作系统中进行URB的建立、发出、回收和数据整理等阶段。可建立两个URB,当等待一个 URB被回收时,也就是图像正在被传感器采集时同时处理、初始化另一个 URB,并在回收后立刻将其发出。两个URB交替使用,大大提高了系统处理的时间效率。本文引用地址:http://www.eepw.com.cn/article/248474.htm

在编译器部分将 Linux 下的摄像头驱动程序中Makefile 文件中相关行修改为CC=/opt/host/armv4l/bin/armv4l-unknown-gcc-linux,修改 Config.in 文件,这样在配置内核的时候才可以看见驱动程序的名称。同时对下列与处理器相关的部分进行修改,即可实现对S3C2440 的USB 驱动的移植。

(1)PCI 接口处理

由于S3C2440 的USB 主机控制器不包含 PCI 接口,因此需要删除 usb-ochi.c中与PCI接口相关的代码。

(2)寄存器地址设置

在usb-ochi.c中,使S3C2440 的USB 主机控制器寄存器的起始地址(0x49000000) 初始化ochi->regs。

(3)主机控制器中断设置

在usb-ochi.c中,使S3C2440 的USB 主机控制器寄存器的中断向量初始化 ochi->irq 。

(4)根HUB端口数目设置

在usb-ochi.c 中,定义根HUB的下行端口数目为 2(#define MAX_ROOT_PORTS

2),MAX_ ROOT_PORTS 的默认值为150。

(5)修改 Makefile和Config.in 文件

修改完成后执行 make命令,即可生成所需要的带有.o 后缀的驱动文件。

驱动程序设计完成并编译成功后,使用动态加载的方法添加到内核中。首先在宿主机上交叉编译好驱动模块,然后通过串口下载到开发板上,再使用 insmod 命令将驱动挂载,摄像头驱动便可成功添加,通过 lsmod 命令可以查看当前驭动添加的情况。

4 视频采集

系统软件基于VFL 开发,基本流程原理如图3。其中最关键的步骤就是视频数据的采集,一般有两种实现方法,一是直接读取,二是内存映射的方法。

8c97841a8f13ac5988db7ec941dcd04d.png

1) 定义数据结构

程序中需要定义一些数据结构,如:video_capability ,包含摄像头的基本信息;video_picture,包含设备采集图像的各种属性;video_mmap,用于内存映射;video_mbuf ,利用mmap 进行映射的帧信息,实际上是输入到摄像头存储器缓冲中的帧信息;video_Window,包括设备采集窗口的各种参数。

Linux 系统中把设备看成设备文件,在用户空间可以通过标准的 I/O 系统调用函数操作设备文件,从而达到与设备通信交互的目的。用 ioctl 函数来控制1/O 通道。

2) 采集程序实现过程

1. 打开视频设备

在linux中视频设备对应的设备文件为/dev/video0 ,采用open 函数来打开视频设备。

2. 获取设备信息和视频信息并进行设置

开启设备文件后,通过调用 camera_get_capability() 和camera_get_picture() 函数来实现对设备信息以及图像信息的获取。这两个函数均通过调用ioctl() 函数来取得设备和图像的相关信息,并将取得的信息放到 video_capability 结构里。若需对图像信息进行设置时,先给video_picture 数据结构对象中所要修改的变量进行重新赋值,然后通过 ioctl 函数的VIDIOCGPICT来进行设置。通过调用 ioctl VIDIOCGPICT可设置所采集图像的属性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值