2

いくつかのフルPALビデオ(720x576 @ 25)をYUV 4:2:2からRGBにリアルタイムで変換する必要があり、それぞれのサイズをカスタム変更する必要があります。これを行う例を見たので、GPUを使用することを考えました(4:4:4であるため、bppはソースと運命で同じです)-http: //www.fourcc.org/ソース/YUV420P-OpenGL-GLSLang.c

ただし、GPUを使用した経験がなく、何ができるかわかりません。この例では、私が理解しているように、ビデオフレームをYUVに変換して、画面に表示します。

代わりに処理されたフレームを取得することは可能ですか?それをGPUに送信し、変換して、メインメモリに再度送信することは、努力する価値がありますか、それともパフォーマンスを低下させますか?

私がウィンドウで作業していると仮定すると、少しプラットフォーム固有であるため、GPUがウィンドウに直接描画できるようにウィンドウからOpenGLまたはDirectDrawサーフェスを取得することは可能ですか?

4

2 に答える 2

2

本当の問題は、これから何を得たいと思っているのかということです。

ビデオを受信して​​いるフレームレートで、Intel Performance Primitivesのようなものを使用して、必要ないくつかの操作を実行し、ストリームに簡単に追いつくことができます。

GPUプログラミングの方法を学びたい場合、これは実装できる非常に簡単な問題です。

GPUからメモリへのリードバックを実行することにより、処理されたフレームを取得することができます。実際のメカニズムは、使用するAPI(OpenGL、DirectX、CUDA、OpenCL)によって異なります。私ははるかに高い解像度のビデオでそれを行いましたが、それでも25fpsのストリームに追いつきました。ただし、これはすべて、使用するハードウェアによって異なります。

DirectXとOpenGLはどちらも、レンダリングターゲットとしてWindowsサーフェスを使用するための優れたチュートリアルを備えています。

于 2010-03-30T13:18:50.747 に答える
2

私は実際にこれをCのCUDAとCのpthread用にプログラムしました(ただし、楽しみのために)そしてGPUは非常に高速に動作するため、データの返送に時間の50〜80%を費やしていることがわかりました毎回GPUのメモリを完全にいっぱいにしても。このため、CPUはGPUとほぼ同じ速度でこの作業を行いました。ご存知かもしれませんが、この問題は非常にスレッドフレンドリーであるため、最新のハードウェアでは、メモリ帯域幅が最大の問題です。

CPUとしてCorei7を使用し、グラフィックカードとしてGeForce 8800GT /GTX285を使用してこれをテストしました。GTX285は1920x1080ビデオのafaik1500fpsを処理したので、何を選択しても、物事は非常に高速になります。

于 2010-03-30T13:56:23.743 に答える