2013-07-31 30 views
2

我正在写一个视频播放器,我的代码将视频解码为原始YCbCr帧。 什么是通过Qt框架输出这些信息的最快方法?我想 避免复制数据太多,因为图像是高清格式。高性能视频输出与Qt

恐怕软件颜色转换成QImage会很慢,后来QImage会在绘制到GUI时再次被复制。

我有看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

我对此也很感兴趣。这是迄今为止我发现的最好方法,但我想知道是否有更好的方法。 http://stackoverflow.com/questions/1242005/what-is-the-most-efficient-way-to-display-decoded-video-frames-in-qt –

+0

什么平台?你在GPU中解码? –

+0

声子? - https://qt-project.org/doc/qt-4.8/phonon-overview.html –

回答

0

一个常见的解决方案是使用QGL Widget与纹理映射。应用程序在第一帧分配纹理缓冲区,然后在剩余帧中调用更新纹理。这是纯粹的GL调用,Qt不支持纹理操作。但QGLwidget可以用作容器。

使用SSE2进行解码。希望这可以帮助。