Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在不映射到系统内存的情况下访问视频帧数据?_C++_Qt_Video_Overlay_Gpu - Fatal编程技术网

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

C++ 如何在不映射到系统内存的情况下访问视频帧数据?,c++,qt,video,overlay,gpu,C++,Qt,Video,Overlay,Gpu,我正在使用Qt,我可以将我的Logitech网络摄像头中的视频流封装在QCamera子类QVideoAbstractSurface中,并从那里将其馈送到视频小部件(特别是QCameraViewfinder)中,而不会出现问题。抱歉,视频帧永远不会进入系统内存,这就是我想要的。然而,我想进一步操纵这个视频(添加一些覆盖)。为此,对于每个帧,我需要获取句柄(QAbstractVideoBuffer::handle()),并将其与OpenGL API一起使用,以添加覆盖 bool MyVideoSur

我正在使用Qt,我可以将我的Logitech网络摄像头中的视频流封装在
QCamera
子类
QVideoAbstractSurface
中,并从那里将其馈送到视频小部件(特别是
QCameraViewfinder
)中,而不会出现问题。抱歉,视频帧永远不会进入系统内存,这就是我想要的。然而,我想进一步操纵这个视频(添加一些覆盖)。为此,对于每个帧,我需要获取句柄(
QAbstractVideoBuffer::handle()
),并将其与OpenGL API一起使用,以添加覆盖

bool MyVideoSurface::present(const QVideoFrame& frame)
{
    QVariant h = frame.handle();
    // ... Manipulate h using OpenGL 
    // ... Send frame to a video widget
}
问题是,当我这样做时,
h
无效,无论我如何指定
QVideoSurfaceFormat
。例如,在初始化之前,我已经

QVideoSurfaceFormat qsvf(surfaceSize, pixelFormat, QAbstractVideoBuffer::GLTextureHandle);
mVideoSurface->start(qsvf); // MyVideoSurface instance
(相关文档和。)输入什么句柄类型并不重要,它们都无效(在某些情况下毫不奇怪)

我有没有办法在没有映射的情况下访问我的网络摄像头视频帧?我很高兴解决方案打破了我关于哪些Qt类是相关类的任何特定假设,但需要有重叠,需要在GPU上完成。访问它们的能力是否取决于硬件,即我需要提前选择一个支持此功能的设备