ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

从应用调用vivi驱动分析v4l2 -- 输入源列举(VIDIOC_ENUMINPUT)和设置(VIDIOC_S_INPUT)过程分析

2021-03-24 15:33:38  阅读:240  来源: 互联网

标签:std index vivi inp -- VIDIOC input


vivi代码:

https://gitee.com/ldl17/v4l2-learn/blob/master/vivi.c

v4l2测试代码:

https://gitee.com/ldl17/v4l2-learn/blob/master/v4l2_test.c

step 3 : 设置输入设备

1,列举输入设备

ioctl(fd, VIDIOC_ENUMINPUT, &input)

对应vivi的vidioc_enum_input

/* only one input in this sample driver */
static int vidioc_enum_input(struct file *file, void *priv,
				struct v4l2_input *inp)
{
	if (inp->index >= NUM_INPUTS)
		return -EINVAL;

	inp->type = V4L2_INPUT_TYPE_CAMERA;
	inp->std = V4L2_STD_525_60;
	sprintf(inp->name, "Camera %u", inp->index);
	return 0;
}

这部分的代码比较简单,可以看到底层基本就是判断一下inp->index。

这里的NUM_INPUTS值是4,但是注释上写折这个驱动只有1路输入,原因是因为这个vivi驱动可以产生4种不同的colorbar,用户使用的时候可以选择使用那种,这就相当于切换了输入一样。

具体的应用操作代码如下

struct v4l2_input inp;
inp.index = 0;
while (ioctl (fd, VIDIOC_ENUMINPUT, &inp) == 0) {
    printf("%s : std: 0x%08x\n", inp.name, inp.std);
    inp.index++;
}

运行打印如下

Camera 0 : std: 0x0000f900
Camera 1 : std: 0x0000f900
Camera 2 : std: 0x0000f900
Camera 3 : std: 0x0000f900

可以看到视频标准只有 V4L2_STD_525_60这一种,对于一个正常设备来说,这里可能会有多种视频标准。

2,设置输入设备

input.index = index; //指定输入设备
if (ioctl(fd, VIDIOC_S_INPUT, &input) < 0)

对应vivi的vidioc_s_input

static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
{
	struct vivi_dev *dev = video_drvdata(file);

	if (i >= NUM_INPUTS)
		return -EINVAL;

	dev->input = i;
	precalculate_bars(dev);
	precalculate_line(dev);
	return 0;
}

可以看到dev->input中记录了当前设置的编号,所以我们同样也可以用VIDIOC_G_INPUT获取到使用的编号,比较简单,这里不再分析。

对于precalculate_bars和precalculate_line不再分析,这不是重点。

具体的应用代码如下:

        inp.index = 1;

        if (ioctl (fd, VIDIOC_S_INPUT, &inp) < 0) {
                printf("Set input fail\n");
                goto err;
        }

 

标签:std,index,vivi,inp,--,VIDIOC,input
来源: https://blog.csdn.net/ldl617/article/details/115176845

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有