私のアプリケーション (QT/OpenGL) は、25fps で IP カメラから一連のビデオをアップロードし、それを適用して処理する必要があります。
- 各ビデオには、デモザイク フィルター、シャープ化フィルター、LUT、および歪みドキュメントが含まれます。
- 次に、以前に処理された 1 つまたは複数のフレームを選択して、opengl (テクスチャ プロジェクションなど) でレンダリングする必要があります。
- 次に、いくつかのウィジェット (QGLWidget) に結果を表示し、ピクセルを読み取ってムービー ファイルに書き込む必要があります。
私は PBO と FBO の長所と短所を理解しようとしています。あなたの助けを借りて検証したい次のアーキテクチャを思い浮かべます。
- ビデオごとに 1 つのスレッドを作成して、バッファ (画像の配列) にキャプチャします。ビデオ用のバッファが 1 つあります。
- a) フレームを GPU にアップロードする、b) フィルターを GPU に適用する、c) コンポジションを適用してテクスチャにレンダリングすることを目的とした Upload-filter-render スレッドを作成します。
- GUI スレッドに、前の手順で作成したテクスチャをウィジェットでレンダリングさせます。
Upload-Frames-to-GPUプロセスの場合、各ビデオに PBO (おそらく 2 つの PBOS) を使用して、フレームを非同期的にロードするのが最善の方法だと思います。
Apply-Filter-info-GPUには、Render-to-Texture を行うのに最適と思われる FBO を使用したいと考えています。最初に PBO によってアップロードされたテクスチャをバインドし、次に別のテクスチャ (フィルター処理された画像) にレンダリングします。FBO を 1 つだけ使用して、ビデオのアップロードに応じてバインディング テクスチャ入力とバインディング テクスチャ ターゲットを変更するか、アップロードするビデオと同じ数の FBOS を使用するかはわかりません。
最後に、結果をウィジェットに表示するために、FBO によってレンダリングされた最終的なテクスチャを使用します。ムービー ファイルに書き込むために、PBO を使用して GPU から CPU にピクセルを非同期的にコピーします。
それは正しいようですか?