IMediaSample(DirectShow)からIDirect3DSurface9/IMFSample(MediaFoundation)へ

私はカスタムビデオプレーヤーで作業しています。私は自分のアーキテクチャでDirectShow/Media Foundationの組み合わせを使用しています。基本的に、私はVOBフレーム(MFでサポートされていない)をつかむためにDSを使用しています。私はDirectShowからサンプルを取得することができますが、レンダラに渡すことに固執しています。 MFでは、Direct3DSurface9(IMFSampleから)を取得し、IDirect3D9Deviceを使用してバックバッファに表示します。

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

私はこれに新しいです。私が間違っていたら私を修正してください。 ありがとう

2

1 答え

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

3
追加された
フォーマットが一致していることを確認するには、適切な初期化シーケンスを用意する必要があります。あるいは、 DShow MF パーツをいくつかの既知のフォーマットに個別に制限して作成し、次に Color Converter DSP msdn.microsoft .com/ja-us/library/windows/desktop /…
追加された 著者 Roman R.,
返信いただきありがとうございます。私が(IMediaSampleの)バッファデータをD3Dサーフェスに取り込みたいとしたら、どのようにすればいいですか?グラバーはレンダラーの前に接続されず、常に接続されていないか、またはデコーダの直前に接続されるため、MFが必要とするフォーマットでサンプルを取得するためにグラバー・アプローチを使用できませんでした。私はここで説明されているアプローチに頼った: codeproject.com/KB/audio-video /VideoImageGrabber.aspx D3DSurface上でどのようにコピーするかについて、私は固執しています。私は 'memcpy'を試みましたが、レンダリング時にフレームデータを見ることができませんでした。
追加された 著者 mots_g,