質問: IMediaSample(DirectShow)からIDirect3DSurface9/IMFSample(MediaFoundation)へ 私はカスタムビデオプレーヤーで作業しています。私は自分のアーキテクチャでDirectShow/Media Foundationの組み合わせを使用しています。基本的に、私はVOBフレーム(MFでサポートされていない)をつかむためにDSを使用しています。私はDirectShowからサンプルを取得することができますが、レンダラに渡すことに固執しています。 MFでは、Direct3DSurface9(IMFSampleから)を取得し、IDirect3D9Deviceを使用してバックバッファに表示します。 DirectShowを使用して、データバッファオブジェクトとしてIMediaSampleを取得しています。私はIMFSampleとして変換して渡す方法を知らない。私は、サンプルからビットマップ情報を取得し、GDI +を使ってレンダリングする人を見つけました。しかし、私のビデオデータは常にRGBデータを持っているとは限りません。 IMediaSampleからIDirect3DSurface9または多分IMFSampleを取得し、それをレンダリングのために渡したいと思います。ここでは、色空間の変換について気にする必要はありません。 私はこれに新しいです。私が間違っていたら私を修正してください。 ありがとう
回答: `IMediaSample` you have from upstream decoder in `DirectShow` is nothing but a wrapper over memory backed buffer. There is no and cannot be any `D3D` surface behind it (unless you take care of it on your own and provide a custom allocator, in which case you would not have a question in first place). Hence, you are to memory-copy data from this buffer into `MF` sample buffer. そこでは、バッファフォーマット(メディアタイプ)が一致するように、変換せずにコピーできるという質問になります。まず、 `MF` パイプラインを確立し、ビデオハードウェア上のバッファでどのようなピクセルタイプが提供されているのかを調べる方法の1つは、グラバーの初期化または色空間変換フィルタを使用するか、または色空間変換 `DMO` /`を使用して、このピクセル形式とメディアタイプを `DirectShow` MFT` 。