Linux系统编程应用 V4L2编程基础

Posted itcast0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统编程应用 V4L2编程基础相关的知识,希望对你有一定的参考价值。


1. 什么是V4L2

V4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口。


2. 编程步骤

打开设备-> 检查和设置设备属性-> 设置帧格式-> 设置一种输入输出方法(缓冲 区管理)-> 循环获取数据-> 关闭设备。


3. 设备的打开和关闭

相关代码如下:

【Linux系统编程应用】


4. 查询设备属性


相关方法如下:

int ioctl(int fd, int request, struct v4l2_capability *argp);


VIDIOC_QUERYCAP -- Query device capabilities

相关结构体如下:

struct v4l2_capability

u8 driver[16]; // 驱动名字
u8 card[32]; // 设备名字
u8 bus_info[32]; // 设备在系统中的位置
u32 version; // 驱动版本号
u32 capabilities; // 设备支持的操作
u32 reserved[4]; // 保留字段
;


相关参考代码


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/videodev2.h>


#if 0
struct v4l2_capability

__u8 driver[16]; /* i.e. "bttv" */
__u8 card[32]; /* i.e. "Hauppauge WinTV" */
__u8 bus_info[32]; /* "PCI:" + pci_name(pci_dev) */
__u32 version; /* should use KERNEL_VERSION() */
__u32 capabilities; /* Device capabilities */
__u32 reserved[4];
;

#endif

int main(void)


int fd = -1;
int ret = -1;

struct v4l2_capability cap;

//open the device
fd = open("/dev/video0", O_RDWR);
if (-1 == fd)

perror("open");
goto err0;


printf("fd = %d\\n", fd);

memset(&cap, 0, sizeof(cap));
//query device capabilities
ret = ioctl(fd, VIDIOC_QUERYCAP, &cap);
if (-1 == ret)

perror("ioctl");
goto err0;


printf("driver name: %s device name: %s device location: %s\\n", cap.driver, cap.card, cap.bus_info);
printf("version: %u.%u.%u\\n", (cap.version >> 16) & 0xff, (cap.version >> 8) & 0xff, cap.version & 0xff);

if (cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)
printf("Is a video capture device\\n");
else
printf("Is not a video capture device\\n");


//close device
close(fd);

return 0;
err0:
return -1;

执行结果如下:

【Linux系统编程应用】

capabilities 常用值:

V4L2_CAP_VIDEO_CAPTURE // 是否支持图像获取


以上是关于Linux系统编程应用 V4L2编程基础的主要内容,如果未能解决你的问题,请参考以下文章

Linux v4l2编程(摄像头信息采集)

摄像头驱动的使能配置V4L2编程接口的设计应用

深入学习Linux摄像头v4l2应用编程

Linux应用开发第七章摄像头V4L2编程应用开发

V4L2编程 视频采集

v4l2编程 关于linux中无驱动摄像头无法驱动问题 会的话麻烦你看一下 万分感谢