Windows下让Qt5 QCamera响应UVC摄像头硬件按钮拍图
QCamera相机类提供了一些基本的功能,包括拍照和录制功能(Windows不支持录制视频),但也有很多接口是没有封装的,比如有些UVC摄像头有物理按键,可以进行拍图等操作,但是QCamera没法响应硬件按钮的拍图操作。
网络上的相关代码都是直接封装平台库(如Windows的DirectShow,Linux的V4L2)来支持硬件按钮,比如我之前参考的一些:
https://www.jianshu.com/p/a67b8cfc57c5
https://gitee.com/fsfzp888/UVCCapture/
https://github.com/GoodRon/QtWebcam
https://github.com/liuleidong/UVCCaptureDemo
但是自己封装出来的效果不是太好,总有一些奇怪的BUG。后来查看Qt5文档和源码,QCamera在Windows平台也是封装的DirectShow,代码路径:
Qt\qt-everywhere-src-5.15.2\qtmultimedia\src\plugins\directshow
既然如此,想让QCamera响应硬件按钮的拍图操作,只需要修改下directshow这个插件即可,而其他的视频渲染等功能就不用自己封装了。视频预览和拍图的接口是差不多的,只需要把预览的接口复制粘贴一份稍加修改。(如果要扩展其他功能,也是直接修改相关源码即可)
先在directshowcameraglobal.h加一个GUID声明PIN_CATEGORY_STILL(因为文本不好标注哪些是新增的,所以用的截图,图中红色为新增代码):
在dscamerasession.h和cpp代码里搜m_previewSampleGrabber和m_nullRendererFilter,然后复制粘贴修改一份。有一点不同的就是,预览的接口如果操作失败是直接返回false,但是硬件拍图我们不能直接返回,因为有的相机本身就没对应的接口,直接跳过就好了。
dscamerasession.h:
dscamerasession.cpp:
DirectShowSampleGrabber::bufferAvailable信号表示有数据来了,连接该信号进行处理,然后使用imageCaptured将图片信号发送出去即可。我这里偷懒发的空图,然后在主程序里判断是否为空再主动触发一次拍图。
if (!m_stillSampleGrabber) {m_stillSampleGrabber = new DirectShowSampleGrabber(this);connect(m_stillSampleGrabber, &DirectShowSampleGrabber::bufferAvailable,this, [this](){qDebug()<<"Still capture bufferAvailable";emit imageCaptured(-1, QImage());});}
void UVCCamera::onImageCaptured(int id, const QImage &preview)
{//判断是否是我们在plugins里触发的if (preview.isNull()) {if (id == -1)capture(); //主动拍图return;}//... ...
}
Windows下让Qt5 QCamera响应UVC摄像头硬件按钮拍图相关推荐
- Windows下 QT 使用directdshow对UVC摄像头控制
QT使用QCamera配合QCameraViewfinder就可以显示UVC摄像头图像 (详细看QT示例,搜索camera) 如果需要UVC原始数据就使用QVideoProbe 但是QT没有做对UVC ...
- windows下opencv同时开启两个摄像头采集程序
亲测可用的代码,至于为什么把 VideoCapture cap(1);//写成全局变量,方便写其他C程序 VideoCapture capcap(2); Mat frame; Mat frame2; ...
- Windows下的QT系统开发环境搭建
QT是一款由Qt Company开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊 ...
- 简明Hadoop配置(3)——windows下eclipse连接虚拟机
在windows下配置,还需要当心IP地址和eclipse配置时的问题,这需要单独说一下. 在Ubuntu下eclipse新建hadoopIP直接填localhost就好,但是在windows下肯定是 ...
- Windows下虚拟UVC摄像头开发演示
最近在windows10 x64下开发了一个USB虚拟总线驱动,该驱动可接收上位机的指令动态创建或卸载UVC摄像头. UVC摄像头的数据通过上位机下发给驱动,驱动再给视频播放软件,这样就可以实现视频的 ...
- windows下给定多个openNi的Uri,匹配与uri对应的Uvc RGB设备
1.问题描述: 在瀚维医疗项目中,客户给定两台deeyea(OpenNi+Uvc)设备,在windows平台下分别固定在不同的usb端口上,同时给定了两个设备的uri,默认给定的第一个设备的uri为左 ...
- 乐视三合一体感摄像头--基本信息及windows下部分开发
乐视三合一体感摄像头--基本信息及windows下部分开发 Introduction 基本信息 Windows下使用 安装驱动 使用openNI 使用imageJ 调用RGB图像 Q: 参考资料 In ...
- windows访问uvc摄像头扩展单元api库分享
分享一个自己封装的windows通过dshow接口访问uvc扩展单元的dll库,采用vs2017编译,分别编译了x86,x64的debug和release版本,可直接调用,api调用方法如下: (1) ...
- linux系统USB摄像头反应慢,Linux下OpenCV打开USB接口的UVC摄像头及索引号是202的原因...
一般来说,USB的UVC摄像头在Linux平台下通过V4L驱动来使用.OpenCV打开USB的UVC摄像头一般也通过V4L驱动来打开.打开方法网上都有,一般就是通过VideoCapture的open( ...
最新文章
- java执行linux shell命令,并拿到返回值
- NYOJ 116 士兵杀敌(二)
- linux日志分析与痕迹清理
- Linux MISC 驱动实验
- python 通过ip获取城市_python 根据ip获取地理位置
- 每天都用微信聊天,但你可能不知道它还隐藏着这些超实用的功能
- c语言中同级运算符的运算顺序,二 如何学习C语言的运算符和运算顺序
- mysql5.6源码自动安装脚本
- G1垃圾回收器总结一
- rgb矩阵Android程序,Android ColorMatrixColorFilter
- Spring解析@ComponentScan注解的执行流程
- 十天学会单片机(2)点亮一个发光管
- 高通QMI_WWAN驱动详解
- 在文档阅读器上为 PDF 文档生成多级目录
- eclipse中添加subclipse插件
- stm32 HC05驱动
- 像素、分辨率、尺寸概念与关系
- 关于浮点型误差的解决方法
- 红楼梦词频统计,词云生成
- Mac 和 iPad 产品线要合并?苹果高管回应了
热门文章
- 使用matlab设计电机控制器,matlab实验五直流电机拖动系统控制器设计.doc
- 来了!娱乐篇!一文带你了解那些适合日常使用的开源工具和应用(娱乐篇)
- android支付宝客户端html5网页偶尔无法自动关闭问题
- 迅雷一直提示“正在开始”“正在停止”的解决方案
- fireworks快捷键
- Express框架介绍_李孟_新浪博客
- 事和书的感悟_李孟_新浪博客
- 拆分体提示工具未形成相交_下面哪一项不是一般模型拆分原则( ) (1.0分)_学小易找答案...
- Linux操作系统下,在终端打印出闪烁的星星图案
- 精益生产管理的优势特点以及工具步骤