2

私はカスタムビデオプレーヤーに取り組んでいます。私のアーキテクチャでは、DirectShow /MediaFoundationを組み合わせて使用​​しています。基本的に、私はDSを使用してVOBフレームを取得しています(MFではサポートされていません)。DirectShowからサンプルを取得することはできますが、レンダラーに渡すのに行き詰まります。MFでは、(IMFSampleから)Direct3DSurface9を取得し、IDirect3D9Deviceを使用してバックバッファーに表示します。

DirectShowを使用して、データバッファーオブジェクトとしてIMediaSampleを取得しています。これを変換してIMFSampleとして渡す方法がわかりません。他の人がサンプルからビットマップ情報を取得し、GDI+を使用してレンダリングしているのを見つけました。しかし、私のビデオデータには常にRGBデータが含まれているとは限りません。IMediaSampleからIDirect3DSurface9または多分IMFSampleを取得し、それをレンダリングに渡したいのですが、色空間の変換について気にする必要はありません。

私はこれに不慣れです。うまくいかない場合は訂正してください。ありがとう

4

1 に答える 1

4

IMediaSample上流のデコーダーから持っているDirectShowのは、メモリでバックアップされたバッファーのラッパーに他なりません。その背後にサーフェスはありませんし、存在することもできませんD3D(自分で処理し、カスタム アロケータを提供しない限り、そもそも質問はありません)。したがって、このバッファからMFサンプル バッファにデータをメモリ コピーします。

そこで、変換せずにコピーできるように、バッファー形式 (メディアの種類) を一致させたいという質問に行き着きます。方法の 1 つ (いくつかあるかもしれません) は、最初にMFパイプラインを確立し、ビデオ ハードウェアのバッファーで提供されている正確なピクセル タイプを調べることです。DirectShow次に、それぞれのグラバー初期化または色空間変換フィルターを使用するか、色空間変換DMO/を使用して、このピクセル形式とメディア タイプがパイプラインにあることを確認しますMFT

于 2012-02-07T07:36:23.817 に答える