2

私のコードがビデオを生の YCbCr フレームにデコードするビデオ プレーヤーを作成しています。Qt フレームワークを介してこれらを出力する最速の方法は何でしょうか? 画像は HD 形式であるため、データをコピーしすぎないようにしたいと考えています。

QImage へのソフトウェアの色変換が遅くなり、後で GUI に描画するときに QImage が再びコピーされるのではないかと心配しています。

私は QAbstractVideoSurface を見て、コードを実行していますが、VideoWidget の例 ( http://idlebox.net/2010/apidocs/qt-everywhere-opensource-4.7.0. zip/multimedia-videowidget.html )、レンダリングは、RGB でなければならない QImage で QPainter::drawImage を呼び出すことによって行われます。

好ましい解決策は、ハードウェア サーフェスに直接アクセスして、YCbCr をデコードするか、少なくとも RGB 変換 (libswscale を使用) を直接実行できるように思われます。しかし、これを行う方法がわかりません (ただし、OpenGL を使用しないと、無料のスケーリングも可能になります)。

4

1 に答える 1

0

一般的な解決策の 1 つは、テクスチャ マッピングで QGL ウィジェットを使用することです。アプリケーションは、最初のフレームでテクスチャ バッファを割り当て、残りのフレームで update texture を呼び出します。これは純粋な GL 呼び出しであり、Qt はまだテクスチャ操作をサポートしていません。しかし、QGLwidget はコンテナーとして使用できます。

デコードは SSE2 を使用して行われました。お役に立てれば。

于 2014-01-15T06:02:17.087 に答える