如何在Linux下开发摄像头驱动

如何在Linux下开发摄像头驱动,第1张

在linux下所有设备都是文件。所以对摄像头的 *** 作其实就是对文件的 *** 作。USB摄像头的设备文件就是在/dev目录下的video0(假如只有一个摄像头)。在linux下 *** 作摄像头就是使用v4l2对摄像头进行视频的 *** 作, *** 作步骤如下

1. 打开设备文件。

int fd=open(”/dev/video0″,O_RDWR)

2. 取得设备的capability,看看设备具有什么功能,比如是否具有视频输入,或者音频输入输出等。VIDIOC_QUERYCAP,struct v4l2_capability

v4l2_std_id std

do {

ret= ioctl(fd, VIDIOC_QUERYSTD, &std)

} while (ret == -1 &&errno == EAGAIN)

switch (std) {

case V4L2_STD_NTSC:

//……

case V4L2_STD_PAL:

//……

}

3. 选择视频输入,一个视频设备可以有多个视频输入。VIDIOC_S_INPUT,struct v4l2_input(可不要)

4. 设置视频的制式和帧格式,制式包括PAL,NTSC,帧的格式个包括宽度和高度等。

VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format

struct v4l2_format fmt

memset ( &fmt, 0, sizeof(fmt) )

fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE

fmt.fmt.pix.width = 320

fmt.fmt.pix.height = 240

fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_JPEG

if (ioctl(fd, VIDIOC_S_FMT, &fmt) <0)

{

printf("set format failed\n")

//return 0

}

5. 向驱动申请帧缓冲,一般不超过5个。struct v4l2_requestbuffers

struct v4l2_requestbuffers req

memset(&req, 0, sizeof (req))

req.count = 4

req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE

req.memory = V4L2_MEMORY_MMAP

if (ioctl(fd,VIDIOC_REQBUFS,&req) == -1)

{

perror("VIDIOC_REQBUFS error \n")

//return -1

}

6.申请物理内存

将申请到的帧缓冲映射到用户空间,这样就可以直接 *** 作采集到的帧了,而不必去复制。将申请到的帧缓冲全部入队列,以便存放采集到的数据.VIDIOC_QBUF,struct v4l2_buffer

VideoBuffer* buffers = calloc( req.count, sizeof(VideoBuffer) )

printf("sizeof(VideoBuffer) is %d\n",sizeof(VideoBuffer))

struct v4l2_buffer buf

for (numBufs = 0numBufs <req.countnumBufs++)

{

memset( &buf, 0, sizeof(buf) )

buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE

buf.memory = V4L2_MEMORY_MMAP

buf.index = numBufs

if (ioctl(fd, VIDIOC_QUERYBUF, &buf) <0)

{

printf("VIDIOC_QUERYBUF error\n")

//return -1

}

printf("buf len is %d\n",sizeof(buf))

//内存映射

buffers[numBufs].length = buf.length

buffers[numBufs].offset = (size_t) buf.m.offset

buffers[numBufs].start = mmap (NULL, buf.length,PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.offset)

printf("buffers.length = %d,buffers.offset = %d ,buffers.start[0] = %d\n",buffers[num

目前210开发板视频很少,基本没有专门为某个开发板录的,基本都是第三方的。相比而言,飞凌的OK210视频还多一点儿,给你个目录参考一下吧。

Android视频

1、飞凌S5PV210开发板Android编译环境搭建视频教程

2、飞凌S5PV210开发板Android源码编译视频教程

3、飞凌S5PV210开发板将Android烧写到开发板视频教程

4、飞凌S5PV210开发板将Android开发环境搭建视频教程

5、飞凌S5PV210开发板将Android应用开发实例视频教程

WIN

CE视频

1、飞凌S5PV210开发板wince环境搭建与编译视频教程

2、飞凌S5PV210开发板初识bsp视频教程

3、飞凌S5PV210开发板bootloader的启动流程视频教程

4、飞凌S5PV210开发板LED驱动与应用程序开发视频教程

5、飞凌S5PV210开发板串口驱动与应用程序开发视频教程

6、飞凌S5PV210开发板摄像头驱动与应用程序开发视频教程

Linux视频

1、飞凌S5PV210开发板Windows7

安装Ubuntu12.04(32位)

虚拟机视频教程

2、飞凌S5PV210开发板配置虚拟机环境视频教程

3、飞凌S5PV210开发板Linux内核代码的下载视频教程

4、飞凌S5PV210开发板移植新的Linux内核代码到开发板视频教程

5、飞凌S5PV210开发板在新的Linux内核代码中增加网络驱动视频教程

6、飞凌S5PV210开发板在新的Linux内核代码中增加LED驱动视频教程

7、飞凌S5PV210开发板在新的Linux内核代码中增加串口驱动视频教程

8、飞凌S5PV210开发板在新的Linux内核代码中增加LCD显示功能视频教程

9、飞凌S5PV210开发板在新的Linux内核代码中增加电阻触摸功能视频教程

10、飞凌S5PV210开发板编写Led应用程序视频教程

11、飞凌S5PV210开发板编写串口测试应用程序视频教程

QT视频

1、飞凌S5PV210开发板QT

creator

集成开发环境介绍视频教程

2、

飞凌S5PV210开发板hello

world视频教程

3、飞凌S5PV210开发板ubuntu环境搭建视频教程

4、飞凌S5PV210开发板如何在开发板上运行qt4.7程序视频教程

5、飞凌S5PV210开发板应用开发实例视频教程

裸机视频

1、飞凌S5PV210开发板下载bin文件到开发板视频教程

2、飞凌S5PV210开发板裸机开发环境搭建视频教程

3、飞凌S5PV210开发板实例1:蜂鸣器实验视频教程

4、飞凌S5PV210开发板实例2:LED流水灯实验视频教程

5、飞凌S5PV210开发板实例3:按键实验视频教程

6、飞凌S5PV210开发板实例4:串口 *** 实验视频教程

7、飞凌S5PV210开发板实例5:IIC实验视频教程

8、飞凌S5PV210开发板实例6:PWM实验视频教程

硬件设计视频

1、飞凌S5PV210开发板AD10的安装视频教程

2、飞凌S5PV210开发板AD10的介绍视频教程

3、飞凌S5PV210开发板AD10元件库的制作方法视频教程

4、飞凌S5PV210开发板AD10封装库的制作方法视频教程

5、飞凌S5PV210开发板OK210最小系统可行性分析视频教程

6、飞凌S5PV210开发板设计原理图视频教程

7、飞凌S5PV210开发板生成PCB视频教程

8、飞凌S5PV210开发板制板流程讲解视频教程

我看的这个LINUX系列视频觉得不错,一共4部分:

第一部分,主要介绍Linux系统简介;Linux系统安装;给Linux初学者的建议;Linux常用命令。

第二部分,主要介绍文本编辑器Vim;软件包管理;用户和用户组管理;权限管理。

第三部分,主要介绍文件系统管理;Shell基础;Shell编程;Linux服务管理。第四部分,主要介绍Linux系统管理;日志管理;启动管理;备份与恢复。

可以在线观看,链接网页链接


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8307238.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存