我正在使用Qt,我可以将来自我的Logitech网络摄像头的视频流封装在QCamera
子类QVideoAbstractSurface
中,并从那里将其提供给视频小部件(特别是{{1} }}) 没有问题。 Afaik视频帧永远不会进入系统内存,这就是我想要的。但是我还想操纵这个视频(添加一些叠加)。要做到这一点,我需要获得每个框架(QCameraViewfinder
),并将其用于例如用于添加叠加层的OpenGL API。
QAbstractVideoBuffer::handle()
问题在于,当我这样做时,bool MyVideoSurface::present(const QVideoFrame& frame)
{
QVariant h = frame.handle();
// ... Manipulate h using OpenGL
// ... Send frame to a video widget
}
无效,无论我如何指定h
。例如。在初始化时我已经
QVideoSurfaceFormat
(相关文档here和here。)我输入的句柄类型并不重要,它们都不是有效的(在某些情况下并不奇怪)。
我有没有办法在没有映射的情况下访问我的网络摄像头视频帧?我对解决方案感到满意,这些解决方案打破了我对哪些Qt类是相关类的假设,但需要覆盖并且需要在GPU上完成。是否能够依赖硬件来访问它们,即我需要提前选择支持此设备的设备?