如何在不映射到系统内存的情况下访问视频帧数据?

时间:2016-03-15 20:09:29

标签: c++ qt video overlay gpu

我正在使用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

(相关文档herehere。)我输入的句柄类型并不重要,它们都不是有效的(在某些情况下并不奇怪)。

我有没有办法在没有映射的情况下访问我的网络摄像头视频帧?我对解决方案感到满意,这些解决方案打破了我对哪些Qt类是相关类的假设,但需要覆盖并且需要在GPU上完成。是否能够依赖硬件来访问它们,即我需要提前选择支持此设备的设备?

0 个答案:

没有答案