我正在编写一个视频播放器,我的代码将视频解码为原始YCbCr帧。 通过Qt框架输出这些内容的最快方法是什么?我想要 避免因图像是高清格式而过多地复制数据。
我担心软件颜色转换为QImage的速度会很慢,以后在绘制到GUI时会再次复制QImage。
我看过QAbstractVideoSurface甚至有运行代码, 但是无法掌握这是如何更快,因为在VideoWidget示例中 (http://idlebox.net/2010/apidocs/qt-everywhere-opensource-4.7.0.zip/multimedia-videowidget.html),渲染仍然通过调用QPainter :: drawImage来完成 QImage,必须是RGB。
在我看来,首选解决方案是直接访问硬件表面 我可以解码YCbCr或至少直接进行RGB转换(使用libswscale)。 但我看不出我怎么做到这一点(没有使用OpenGL,这会给我 尽管如此,也可以自由扩展。
答案 0 :(得分:0)
一个常见的解决方案是使用带有纹理映射的QGL Widget。应用程序在第一帧上分配纹理缓冲区,然后在剩余帧中调用更新纹理。这是纯GL调用,Qt还不支持纹理操作。但是QGLwidget可以用作容器。
使用SSE2进行解码。希望这会有所帮助。