qt采集摄像头视频并显示LCD的方案,基本如下3种:
1、qt-widget v4l2:
v4l2接口直接获取camera的qbuf,在timer中获取一帧数据后,添加上bmp头信息,然后通过imageWidget->setPixmap()来显示每帧图像;
2、qt-widget Qcamera:
qt使用qcamera空间,new QCameraViewfinder 用于LCD显示,new QCameraImageCapture 用于camera获取,SIGNAL(capture, viewfinder)用于获取camera后通知viewfinder显示。
3、qml-qquick:
camera数据经过gstreamer1.0处理,经过gstreamer1.0-plugin插件:qmlglsink,送到qml-videoItem来显示。
【方案对比】
1、功能性:
如果只是简单显示camera,不用做图像处理(加上图像处理算法)或者视频叠加(融合),不用考虑系统性能,则以上3种方式均可实现功能;
2、CPU资源占用:
CPU占用率高主要体现在:
1)、视频格式转换 qt接收视频格式以及qt显示视频格式之间的转换,如果camera数据格式是yuv,直接给qt,qt内部会软转码成rgb格式输出到lcd。
软转码非常消耗CPU资源。
2)、 图像显示频率 | camera帧率和分辨率
camera帧率和分辨率越大,需要处理的数据越多,则cpu占用率越大。
图像显示频率越高,则qt的显示刷新率越高,消耗的cpu越大。
3、可扩展性:
可扩展性体现在input camera的更换,视频图像处理算法的更换,以及视频输出设备的更换。
【qt-widget v4l2】
缺点:1、timer中获取camera每一帧,并加上bmp头信息,再输出显示,架构不好;并且加上了bmp头信息,冗余;
2、转码在qt内部进行,以软转码的方式占用cpu非常高;
【qt-widget Qcamera】
缺点:1、Qcamera完全封装了camera的视频获取,不能进行视频数据处理(图像处理),视频数据格式转换(YUV->RGB)也是qt内部软件实现;
【qml-qquick】
缺点:需要第三方如gstreamer采集camera得到视频流,通过qt控件qmlglsink来获取视频流;
优点:1、gstreamer可以实现硬件转码(利用gstreamer-plugin的硬件插件支持);
2、gstreamer可以方便实现camera数据处理;
3、qt的趋势在qml;
【本方案】
1路可见光摄像头,经过gstreamer后YUV420(NV12)->IPU(RGBA)->qmlglsink->qt
1路红外摄像头,经过gstreamer-appsink(数据处理)->qmlglsink->qt
qt-quick中GstGLVideoItem来获取qmlglsink的视频流。
【源码】