2016-12-06 18 views
0

私はYUY2形式の画像ストリームを持っています。私はこれらの画像をQQuickItemにペイントしたいので、Qt Quick 2で使うことができます。QQuickItemをすぐに再ペイントする方法は?

私はパフォーマンスに問題があるので、私の質問はC++で書かれたQMLオブジェクトを再描画する最も簡単な方法です。ビデオのレンダリング専用のオブジェクトがありますか?私はQQuickPaintedItemを継承したクラスを作成して試してみました何


。私はYUY2イメージをRGBA8888フォーマットに変換した後、QImageを使ってロードし、QPainterを使ってペイントしました。 QQuickPaintedItemが大きい場合、たとえば1000x1000より大きい場合は効率的ではないことが判明しました。ずっと速い方法は、QImageQPixmapに変換してからQPainterを使ってペイントすることでした。今はややうまくいくが、速い方法があるかもしれない?例えば、画像の変換は処理が遅すぎるようです。

+3

'QQuickPaintedItem'を使用すると、パフォーマンスは向上しません。カスタムジオメトリとシンプルなシェーダを使用して、希望のテクスチャで四角形を塗りつぶすアイテムを実装できます。アイテムに新しいテクスチャを送ります。表示とスケーリングは非常に速くなります。すでに例があるかもしれません。また、 'QQuickFramebufferObject'を使用してレンダーサブオブジェクトからテクスチャを更新することもできます。 –

+0

@KubaOber助けてくれてありがとう。お望みなら、あなたのコメントを回答として投稿し、私はそれを受け入れます。 –

答えて

0

私はこれをQQuickItemと定義したupdatePaintNode関数(最初のアイデアはKuba Ober'sコメント)を使って動作させています。

This example私は多くの手助けをしました。その中でNoisyNodeクラスは背景(静止画像)をレンダリングし、Graphがそれを使用しています。私はそれらの2つのクラスを私のプロジェクトに取り入れ、それらを自分のニーズに適応させました。私は1080x1920ピクセル、30fpsの表示に問題はなかった。私はビデオを表示することを理解しているので、最終的にYUVをRGBに変換する必要がありますので、すぐにこれを行い、RGBAピクセルの配列で作業しました。

関連する問題