V4L 简介及其与V4L2区别
V4L是 Video for Linux的缩写,它是Linux 内核中关于视频设备的子系统,它为linux 下的视频驱动提供了统一的接口,使得应用程序可以使用统一的API 函数操作不同的视频设备,极大地简化了视频系统的开发和维护。
1.V4L支持设备
2.V4L处理基本流程
- VIDIOC_REQBUFS:分配内存
- VIDIOC_QUERYBUF:把VIDIOC_REQBUFS中分配的数据缓存转换成物理地址
- VIDIOC_QUERYCAP:查询驱动功能
- VIDIOC_ENUM_FMT:获取当前驱动支持的视频格式
- VIDIOC_S_FMT:设置当前驱动的频捕获格式
- VIDIOC_G_FMT:读取当前驱动的频捕获格式
- VIDIOC_TRY_FMT:验证当前驱动的显示格式
- VIDIOC_CROPCAP:查询驱动的修剪能力
- VIDIOC_S_CROP:设置视频信号的边框
- VIDIOC_G_CROP:读取视频信号的边框
- VIDIOC_QBUF:把数据从缓存中读取出来
- VIDIOC_DQBUF:把数据放回缓存队列
- VIDIOC_STREAMON:开始视频显示函数
- VIDIOC_STREAMOFF:结束视频显示函数
- VIDIOC_QUERYSTD:检查当前视频设备支持的标准,例如PAL或NTSC。
- /*
- * Author: Andrew Huang <bluedrum@163.com>
- * detectd v4l2 device version
- *
- */
- #include <stdio.h>
- #include <string.h>
- #include <errno.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <sys/ioctl.h>
- #include <fcntl.h>
- #include <linux/videodev2.h>
- #include <linux/videodev.h>
- /*
- 0 -- 不是v4l设备
- 1 -- v4l 设备
- 2 -- v4l2 设备
- */
- int test_v4l_version(int fd)
- {
- int ret = 0;
- char dummy[256];
- if (-1 != ioctl(fd,VIDIOC_QUERYCAP,dummy)) {
- ret = 2;
- }
- else if (-1 != ioctl(fd,VIDIOCGCAP,dummy)) {
- ret = 1;
- }
- return ret;
- }
- int main(int argc,char * argv[])
- {
- char dev_name[64] = "/dev/video2";
- int cam_fd =-1;
- if(argc>1)
- {
- strncpy(dev_name,argv[1],sizeof(dev_name)-1);
- }
- printf("open device %s\n",dev_name);
- cam_fd = open(dev_name,O_RDWR|O_NONBLOCK);
- if(cam_fd == -1)
- {
- printf("open failure \n");
- return -1;
- }
- switch(test_v4l_version(cam_fd))
- {
- case 0:
- printf("%s:fd %d isn't v4l deivce\n",dev_name,cam_fd);
- return -1;
- break;
- case 1:
- printf("\n### video4linux device info [%s] ###\n",dev_name);
- return -2;
- break;
- case 2:
- printf("\n### v4l2 device info [%s] ###\n",dev_name);
- break;
- }
- close(cam_fd);
- return 0;
- }
作者:Andrew Huang bluedrum@163.com
V4L 简介及其与V4L2区别相关推荐
- Database:Database数据库的简介、类型及其区别(关系数据库VS非关系型数据库)、案例应用之详细攻略
Database:Database数据库的简介.类型及其区别(关系数据库VS非关系型数据库).案例应用之详细攻略 目录 Database数据库的简介 1.掌握数据库的方法-学会sql语言进而学会增.删 ...
- Redis简介 与Memcache的区别
redis 是一个基于内存的高性能key-value数据库. Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作, ...
- 【Linux】Linux简介以及 与UNIX区别
一直以来对Linux.Unix.linux内核.linux发行版的概念比较模糊,最近查找资料并经过自己的整理,主要总结了Linux和UNIX的区别和联系.内核和操作系统的关系.Linux操作系统和结构 ...
- Maven和Ant简介以及两者的区别
原文地址:http://blog.csdn.net/yangkai_hudong/article/details/12554983 一.Maven简介 Maven是基于项目对象模型(POM),可以通过 ...
- linux v4l2 示例程序,Linux关于Camera使用V4L2
简介 Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版.V4L2是linux操作系统下用于采集图片.视频和音频数据的API接口. 工作流程 打开设备-& ...
- Linux应用开发【第七章】摄像头V4L2编程应用开发
文章目录 7 摄像头V4L2编程应用开发 7.1 V4L2简介 7.2 V4L2视频采集原理 7.3 V4L2程序实现流程 7.4 V4L2程序实例 7.4.1 打开设备 7.4.2 查询设备属性 7 ...
- linux_驱动_V4l2层_camera_应用层调用流程_MIPI协议包格式简介
一. 摄像头基础介绍 1.摄像头结构和工作原理. 拍摄景物通过镜头,将生成的光学图像投射到传感器上,然后光学图像被转换成电信号,电信号再经过模数转换变为数字信号,数字信号经过DSP加工处理,再被送到电 ...
- Linux的视频编程(V4L2编程)【转】
本文转载自:http://blog.csdn.net/tommy_wxie/article/details/11472073 一.什么是video4linux Video4linux2(简称V4L2) ...
- linux之V4L2摄像头应用流程
对于v4l2,上次是在调试收音机驱动的时候用过,其他也就只是用i2c配置一些寄存器就可以了.那时只是粗粗的了解了,把收音机当作v4l2的设备后会在/dev目录下生成一个radio的节点.然后就可以操作 ...
最新文章
- python脚本获取内网,公网ip
- MySQL 联合查询实质_1.多表查询 = 转化为一张联合大表 2.可视化工具 3.pymysql模块...
- Windows 下用VS2012(Visual Studio 2012)编译librtmp
- java字数统计,求大神教我,java语言里的字数统计功能的代码?
- boost::spirit模块实现一个类似于 XML 的小型解析器,Karma 用于打印生成的 AST
- uva 10037——Bridge
- Tensorflow学习—— 预创建的 Estimator
- 2021-2025年中国云计算数据中心IT资产处置(ITAD)行业市场供需与战略研究报告
- JDK 15 正式发布,划时代的 ZGC 同时宣布转正!
- IDEA解决Tomcat乱码问题
- 互联网日报 | 美团外卖日订单量突破4000万个;《王者荣耀》动画番剧启动;360金融更名为360数科...
- Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletCont
- 计算机模拟病例考试试题,计算机模拟病例考试的效标—关联效度研究
- 360监测显示:cookie没有httponly标志解决方法
- Jerry Wang的英语学习笔记
- 原生JS实现各种运动之匀速运动
- (转)大数据量分页存储过程效率测试附代码
- 【机器学习课程】第一章机器学习概述 2.机器学习
- 如何在交通事故中保障自己的安全
- SQL语言的基础操作(二)