您的位置:首页 > 财经 > 产业 > 公司网络维护外包价格_红酒首页网页设计素材_网站空间_徐州百度推广公司

公司网络维护外包价格_红酒首页网页设计素材_网站空间_徐州百度推广公司

2024/12/23 16:13:14 来源:https://blog.csdn.net/weixin_56905687/article/details/143398195  浏览:    关键词:公司网络维护外包价格_红酒首页网页设计素材_网站空间_徐州百度推广公司
公司网络维护外包价格_红酒首页网页设计素材_网站空间_徐州百度推广公司

V4L2(Video for linux two),是 Linux 内核中视频类设备的一套驱动框架,为视频类设备驱动
开发和应用层提供了一套统一的接口规范。

使用 V4L2 设备驱动框架注册的设备会在 Linux 系统/dev/目录下生成对应的设备节点文件,设备节点的名称通常为 videoX(X 标准一个数字编号,0、1、2、3……),每一个 videoX 设备文件就表一个视频类设备。

V4L2的使用按照一套规范的步骤进行编程,从而使用摄像头,基本步骤如下:

1、打开摄像头设备

int fd=open("/dev/video0",O_RDWR);
if (0 > fd) {fprintf(stderr, "open error: %s: %s\n", "/dev/video0", strerror(errno));return -1;
}

2、查询设备的属性或者功能

ioctl(fd,VIDIOC_QUERYCAP,&cap);

3、设置设备的参数

设置帧格式

ioctl(fd,VIDIOC_S_FMT,&fmt);/* 设置帧格式 */
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;//type 类型
fmt.fmt.pix.width = width; //视频帧宽度
fmt.fmt.pix.height = height;//视频帧高度
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB565; //像素格式
if (0 > ioctl(v4l2_fd, VIDIOC_S_FMT, &fmt)) {fprintf(stderr, "ioctl error: VIDIOC_S_FMT: %s\n", strerror(errno));return -1;
}

设置帧率

ioctl(fd,VIDIOC_S_PARM,&stream_parm);

4、申请帧缓冲、内存映射

ioctl(fd,VIDIOC_REQBUFS,&reqbuf);/* 申请帧缓冲 */
reqbuf.count = FRAMEBUFFER_COUNT; //帧缓冲的数量
reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
reqbuf.memory = V4L2_MEMORY_MMAP;
if (0 > ioctl(v4l2_fd, VIDIOC_REQBUFS, &reqbuf)) {fprintf(stderr, "ioctl error: VIDIOC_REQBUFS: %s\n", strerror(errno));return -1;
}

5、帧缓冲入队

ioctl(fd,VIDIOC_QBUF,&buf);/* 入队 */
for (buf.index = 0; buf.index < FRAMEBUFFER_COUNT; buf.index++) {
if (0 > ioctl(v4l2_fd, VIDIOC_QBUF, &buf)) {fprintf(stderr, "ioctl error: VIDIOC_QBUF: %s\n", strerror(errno));return -1;
}

6、开启视频采集

ioctl(fd,VIDIOC_STREAMON,&type);/* 打开摄像头、摄像头开始采集数据 */
enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (0 > ioctl(v4l2_fd, VIDIOC_STREAMON, &type)) {fprintf(stderr, "ioctl error: VIDIOC_STREAMON: %s\n", strerror(errno));return -1;
}

7、帧缓冲出队、对采集的数据进行处理

ioctl(fd,VIDIOC_DQBUF,&buf);

8、处理完再次将帧缓冲入队,往复

ioctl(fd,VIDIO_QBUF,&buf);

8、结束采集

ioctl(fd,VIDIO_STREAMOFF,&type);enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (0 > ioctl(fd, VIDIOC_STREAMOFF, &type)) {perror("ioctl error");return -1;
}

此过程代码量比较多,可以将采集的图像数据显示到开发板LCD屏上,将摄像头的像素格式设置为RGB565,一般要将YUYV格式的转变成RGB565格式才能显示在LCD屏上。

写好程序后,将编译好的可执行文件拷贝到开发板linux系统的用户家目录下,进行测试。

具体代码网上资料很多,这里就不具体罗列了。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com