- 100 名前:sage [2008/11/21(金) 15:23:39 ]
- DirectShowでデコードした動画をOpenGLのテクスチャに流し込むプログラムを書いています。
CBaseVideoRendererを派生させてOpenGLのテクスチャを更新する自作フィルタを作成し、 それは動作しているのですがパフォーマンスに不満があります。 OpenGLでのテクスチャのアップデートにはPBOを使用しているのですが、この場合アップデー トを行うバッファはOpenGL側から指示されます。 一方、CBaseVideoRendererのDoRenderSample()メソッドでは、デコードされたデータへの ポインタは前段のデコーダーから与えられます。 そのため、DoRenderSample(IMediaSample * pSample)内でpSample->GetPointer()で得られた バッファからPBOのバッファへのmemcopy()を行う必要があり、結構なオーバーヘッドとなっ ています。 OpenGLから与えられたバッファアドレスを前段のデコーダの書き出しバッファとして指定で きれば、この無意味な転送はなくなると思うのですが、こういった指定をする方法はないで しょうか? IMediaSampleではPutPointer()は使えなくなっているようですが、なにかうまくデコーダの バッファをレンダラ側から扱う方法は無いものでしょうか?
|

|