V4L2超详细讲解Word文件下载.docx

上传人:b****6 文档编号:16018643 上传时间:2022-11-17 格式:DOCX 页数:10 大小:19.36KB
下载 相关 举报
V4L2超详细讲解Word文件下载.docx_第1页
第1页 / 共10页
V4L2超详细讲解Word文件下载.docx_第2页
第2页 / 共10页
V4L2超详细讲解Word文件下载.docx_第3页
第3页 / 共10页
V4L2超详细讲解Word文件下载.docx_第4页
第4页 / 共10页
V4L2超详细讲解Word文件下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

V4L2超详细讲解Word文件下载.docx

《V4L2超详细讲解Word文件下载.docx》由会员分享,可在线阅读,更多相关《V4L2超详细讲解Word文件下载.docx(10页珍藏版)》请在冰豆网上搜索。

V4L2超详细讲解Word文件下载.docx

intfd=open(“/dev/video0”,O_RDWR);

//打开设备

close(fd);

//关闭设备

注意:

v4l2的相关定义包含在头文件<

linux/videodev2.h>

中.

4.查询设备属性:

VIDIOC_QUERYCAP

相关函数:

intioctl(intfd,intrequest,structv4l2_capability*argp);

相关结构体:

structv4l2_capability

{

u8driver[16];

//驱动名字

u8card[32];

//设备名字

u8bus_info[32];

//设备在系统中的位置

u32version;

//驱动版本号

u32capabilities;

//设备支持的操作

u32reserved[4];

//保留字段

};

capabilities常用值:

V4L2_CAP_VIDEO_CAPTURE//是否支持图像获取

显示设备信息

structv4l2_capabilitycap;

ioctl(fd,VIDIOC_QUERYCAP,&

cap);

printf(“DriverName:

%s\nCardName:

%s\nBusinfo:

%s\nDriverVersion:

%u.%u.%u\n”,cap.driver,cap.card,cap.bus_info,(cap.version>

>

16)&

0XFF,(cap.version>

8)&

0XFF,cap.version&

0XFF);

5.设置视频的制式和帧格式

制式包括PAL,NTSC,帧的格式个包括宽度和高度等。

intioctl(intfd,intrequest,structv4l2_fmtdesc*argp);

intioctl(intfd,intrequest,structv4l2_format*argp);

v4l2_cropcap结构体用来设置摄像头的捕捉能力,在捕捉上视频时应先先设置

v4l2_cropcap的type域,再通过VIDIO_CROPCAP操作命令获取设备捕捉能力的参数,保存于v4l2_cropcap结构体中,包括bounds(最大捕捉方框的左上角坐标和宽高),defrect

(默认捕捉方框的左上角坐标和宽高)等。

v4l2_format结构体用来设置摄像头的视频制式、帧格式等,在设置这个参数时应先填好v4l2_format的各个域,如type(传输流类型),fmt.pix.width(宽),

fmt.pix.heigth(高),fmt.pix.field(采样区域,如隔行采样),fmt.pix.pixelformat(采

样类型,如YUV4:

2:

2),然后通过VIDIO_S_FMT操作命令设置视频捕捉格式。

如下图所示:

5.1查询并显示所有支持的格式:

VIDIOC_enum_FMT

structv4l2_fmtdesc

u32index;

//要查询的格式序号,应用程序设置

enumv4l2_buf_typetype;

//帧类型,应用程序设置

u32flags;

//是否为压缩格式

u8description[32];

//格式名称

u32pixelformat;

//格式

//保留

显示所有支持的格式

structv4l2_fmtdescfmtdesc;

fmtdesc.index=0;

fmtdesc.type=v4l2_BUF_type_video_CAPTURE;

printf("

Supportformat:

\n"

);

while(ioctl(fd,VIDIOC_enum_FMT,&

fmtdesc)!

=-1)

printf("

\t%d.%s\n"

fmtdesc.index+1,fmtdesc.description);

fmtdesc.index++;

}

5.2查看或设置当前格式:

VIDIOC_G_FMT,VIDIOC_S_FMT

检查是否支持某种格式:

VIDIOC_TRY_FMT

structv4l2_format

unionfmt

structv4l2_pix_formatpix;

//视频设备使用

structv4l2_windowwin;

structv4l2_vbi_formatvbi;

structv4l2_sliced_vbi_formatsliced;

u8raw_data[200];

structv4l2_pix_format

u32width;

//帧宽,单位像素

u32height;

//帧高,单位像素

//帧格式

enumv4l2_fieldfield;

u32bytesperline;

u32sizeimage;

enumv4l2_colorspacecolorspace;

u32priv;

显示当前帧的相关信息

structv4l2_formatfmt;

fmt.type=v4l2_BUF_type_video_CAPTURE;

ioctl(fd,VIDIOC_G_FMT,&

fmt);

printf(“Currentdataformatinformation:

\n\twidth:

%d\n\theight:

%d\n”,

fmt.fmt.pix.width,fmt.fmt.pix.height);

fmtdesc.type=V4L2_BUF_TYPE_video_CAPTURE;

while(ioctl(fd,VIDIOC_enum_FMT,&

fmtdesc)!

=-1)

if(fmtdesc.pixelformat&

fmt.fmt.pix.pixelformat)

printf(“\tformat:

%s\n”,fmtdesc.description);

break;

检查是否支持某种帧格式

fmt.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;

fmt.fmt.pix.pixelformat=V4L2_PIX_FMT_RGB32;

if(ioctl(fd,VIDIOC_TRY_FMT,&

fmt)==-1)if(errno==EINVAL)

printf(“notsupportformatRGB32!

\n”);

6.图像的缩放VIDIOC_CROPCAP

intioctl(intfd,intrequest,structv4l2_cropcap*argp);

intioctl(intfd,intrequest,structv4l2_crop*argp);

intioctl(intfd,intrequest,conststructv4l2_crop*argp);

Cropping和scaling主要指的是图像的取景范围及图片的比例缩放的支持。

Crop就是把得到的数据作一定的裁剪和伸缩,裁剪可以只取样我们可以得到的图像大小的一部分,剪裁的主要参数是位置、长度、宽度。

而scale的设置是通过VIDIOC_G_FMT和VIDIOC_S_FMT来获得和设置当前的image的长度,宽度来实现的。

看下图

我们可以假设bounds是sensor最大能捕捉到的图像范围,而defrect是设备默认的最大取样范围,这个可以通过VIDIOC_CROPCAP的ioctl来获得设备的crap相关的属性v4l2_cropcap,其中的bounds就是这个bounds,其实就是上限。

每个设备都有个默认的取样范围,就是defrect,就是defaultrect的意思,它比bounds要小一些。

这个范围也是通过VIDIOC_CROPCAP的ioctl来获得的v4l2_cropcap结构中的defrect来表示的,我们可以通过VIDIOC_G_CROP和VIDIOC_S_CROP来获取和设置设备当前的crop设置。

6.1设置设备捕捉能力的参数

structv4l2_cropcap

//数据流的类型,应用程序设置

structv4l2_rectbounds;

//这是camera的镜头能捕捉到的窗口大小的局限

structv4l2_rectdefrect;

//定义默认窗口大小,包括起点位置及长,宽的大小,大小以像素为单位

structv4l2_fractpixelaspect;

//定义了图片的宽高比

6.2设置窗口取景参数VIDIOC_G_CROP和VIDIOC_S_CROP

structv4l2_crop

//应用程序设置

structv4l2_rectc;

7.videoinputsandOutputs

VIDIOC_G_INPUT和VIDIOC_S_INPUT用来查询和选则当前的input,一个video设备节点可能对应多个视频源,比如saf7113可以最多支持四路cvbs输入,如果上层想在四个cvbs视频输入间切换,那么就要调用ioctl(fd,VIDIOC_S_INPUT,&

input)来切换。

VIDIOC_G_INPUTandVIDIOC_G_OUTPUT返回当前的vid

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1