uvc设备通过v4l2驱动( QT项目)

GITHUB :源代码

其中uvc免驱设备可以是:usb摄像头、hdmi转usb视频采集卡 

v4l2的驱动过程:

视频设备获取-> 属性设定-> 采集方式设定-> 图像数据获取-> 视频设备关闭

v4l2开发中常用的命令标识符

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

v4l2获取缓存数据过程

length: 614400 offset:          0     --  
Buffer 0 mapped at address 0x7fffe05ba000.

length: 614400 offset:     614400     --  
Buffer 1 mapped at address 0x7fffe0524000.

length: 614400 offset:    1228800     --  
Buffer 2 mapped at address 0x7fffe048e000.

length: 614400 offset:    1843200     --  
Buffer 3 mapped at address 0x7fffe03f8000.

length: 614400 offset:    2457600     --  
Buffer 4 mapped at address 0x7fffe0362000.

length: 614400 offset:    3072000     --  
Buffer 5 mapped at address 0x7fffe02cc000.

buffer 0 -> queued!
buffer 1 -> queued!
buffer 2 -> queued!
buffer 3 -> queued!
buffer 4 -> queued!
buffer 5 -> queued!


MainWindow窗口

//MainWindow CLASS:
connect(timer, SIGNAL(timeout()), this, SLOT(update())); //SLOT

//data format
aa.append((const char *)&bf, 14);  //bi(BIT MAP FILE HEADER) 14bit address
aa.append((const char *)&bi, 40);  //bf(BIT MAP INFO HEADER) 40bit address
aa.append((const char *)rgb_frame_buffer, bi.biSizeImage);  //24bit image data

// The QPixmap class is an off-screen image representation that can be used as a paint device
pix.loadFromData(aa); //QPixmap pix;
//a IMAGE display in ui.label 
ui->label->setPixmap(pix);  //display

运行结果

uvc设备通过v4l2驱动( QT项目)_第1张图片

你可能感兴趣的:(QT,camera)