【C语言】之使用V4L2编程获取摄像头设备信息

如果想进一步了解V4L2编程,可以访问V4L2编程帮助手册官网

http://v4l.videotechnology.com/dwg/

或者在我的网盘上下载

https://pan.baidu.com/s/15gmKHxXrXqT-lCr5HnVYVQ

里面包含了所有关于V4L2编程的命令和例程,好了,不多说了,下面以一个示例简单使用 V4L2 来操作摄像头获取摄像头设备信息


/*****************************************************
 * 文件名:GetCameraInfo.c
 * 文件描述:linux下使用v4l2编程查询摄像头设备信息 
 * 编写人:王廷云
 * 编写日期:2017-12-1
 * 修改日期:2018-1-1
*****************************************************/
#include <stdio.h>
#include <unistd.h>

#include <sys/types.h>                      // 下面四个头文件是linux系统编程特有的
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>

#include <linux/videodev2.h>                // 操作摄像头设备

int main(int argc, char **argv)
{	
	int ret, i, j;
	int fd;

	/* 打开摄像头设备 */ 
	fd = open("/dev/video0", O_RDWR);       // 注意查看摄像头设备名
	if (-1 == fd)
	{
		perror("open /dev/video0");
		return -1;
	}

	/* 查询打开的设备是否属于摄像头:设备video不一定是摄像头*/
	struct v4l2_capability cap;
	ret = ioctl(fd, VIDIOC_QUERYCAP, &cap);
	if (-1 == ret)
	{
		perror("ioctl VIDIOC_QUERYCAP");
		close(fd);
	}
	if (cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)
	{
		/* 如果为摄像头设备则打印摄像头驱动名字 */
		printf("Driver    Name: %s\n", cap.driver);         
	}
	else
	{
		printf("open file is not video\n");
		close(fd);
		return -2;
	}

	/* 查询摄像头可捕捉的图片类型,VIDIOC_ENUM_FMT: 枚举摄像头帧格式 */
	struct v4l2_fmtdesc fmt;
	fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; // 指定需要枚举的类型
	for (i = 0; ; i++)                      // 有可能摄像头支持的图片格式不止一种 
	{
		fmt.index = i;
		ret = ioctl(fd, VIDIOC_ENUM_FMT, &fmt);
		if (-1 == ret)                      // 获取所有格式完成
		{
			break;	
		}
		
		/* 打印摄像头图片格式 */
		printf("Picture Format: %s\n", fmt.description);    

		/* 查询该图像格式所支持的分辨率 */	
		struct v4l2_frmsizeenum frmsize;
		frmsize.pixel_format = fmt.pixelformat;
		for (j = 0; ; j++)                  // 该格式支持分辨率不止一种
		{
			frmsize.index = j;
			ret = ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &frmsize);
			if (-1 == ret)                  // 获取所有图片分辨率完成
			{
				break;
			}
			
			/* 打印图片分辨率 */
			printf("width: %d height: %d\n",
			        frmsize.discrete.width,frmsize.discrete.height);
		}

	}
	
	close(fd);                              // 不要忘记关闭打开的设备

	return 0;
}
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值