6

目的は、ビデオ処理と外部アプリケーションへの同期のためのカスタム MFT を実装することです。の詳細は重要ではありません。最初のステップとして達成したいことは、DXVA ビデオ処理または DXVA-HD を使用して MFT を稼働させることです。私はそうすることができませんでした。

ソース入力ノード (Web カメラ)、MFT (MFT_Grayscale の例)、および EVR を使用してトポロジの構築を開始しました。これを小さなアプリケーションに含めました。トポロジーは機能し、カメラからモノクロ ストリームを確認できました。ここで、MF_Grayscale の例のコードを変更して、DXVA ビデオ処理をサポートし、VideoProcessBlt メソッドによって提供されるハードウェア アクセラレーションを使用できるようにします。Microsoft のドキュメントには細かな情報が記載されていますが、MFT を実行することはできませんでした。

私がこれまでにやったこと:

  • メソッドGetAttributesで、この MFT が であることを示しますMF_SA_D3D_AWARE
  • メソッドProcessMessageでは、メッセージMFT_MESSAGE_SET_D3D_MANAGERを処理してデバイス ハンドル aIDirect3DDeviceManager9およびを取得しますIDirectXVideoProcessorService
  • この方法では、https://msdn.microsoft.com/en-us/library/windows/desktop/ms694235(v=vs.85).aspxSetInputTypeで説明されている方法を使用し て DXVA2_VideoDesc 構造を取得し、次のコード https : //msdn.microsoft.com/en-us/library/windows/desktop/cc307964(v=vs.85).aspx を使用してビデオ処理デバイスを作成します。さらに、次を使用してサーフェスを作成します IDirectXVideoProcessorService->CreateSurface
  • メソッドGetOutputStreamInfoでは、dwFlags変数は次のようになります。

pStreamInfo->dwFlags = MFT_OUTPUT_STREAM_PROVIDES_SAMPLES | MFT_OUTPUT_STREAM_WHOLE_SAMPLES | MFT_OUTPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER | MFT_OUTPUT_STREAM_FIXED_SAMPLE_SIZE;

ここまでは大丈夫そうです。今、私の質問(これ以上具体的に言えなくて申し訳ありません):

  • GetOutputAvailableType/SetOutputTypeメソッドを適応させる必要がありますか?

  • このProcessInputメソッドでは、 を取得してIMFSampleを抽出しIMFMediaBufferます。IDirect3DSurface9関数呼び出しによると、バッファが a を管理していません。バッファーのデータを Direct3D サーフェスに memcpy する必要がありますか?

  • 開始点を作成するProcessOutput方法では、受信フレームを出力に転送したいと考えています。VideoProcessBlt入力から出力まで 1:1 のブリットを作成する必要があります。ドキュメントには次のように記載されています。

    現在使用されていない使用可能なサーフェスを取得します。

サーフェスが使用中かどうかを判断するにはどうすればよいですか?

  • サーフェスを出力するにはどうすればよいですか? またはを使用する必要がありますMFCreateVideoSampleFromSurfaceMFCreateDXSurfaceBuffer

  • 残念ながら、私は本当に迷っており、ドキュメントを使用して進歩することができません.

現在の状況では、ビデオ出力が表示されず (ウィンドウにはデフォルトのウィンドウの背景色があります)、Web カメラは最初のフレームの後にフレームのキャプチャを停止します (LED がオフになります)。その上、何も起こりません - アプリケーションは何も表示せずに実行を続けます)。

誰かが私を助けてくれることを願っています。また、誰かが DXVA ビデオ処理または DXVA-HD を使用した MFT のサンプル コードを教えてくれれば幸いです。私は何も見つけることができませんでした...

ありがとう

4

2 に答える 2

1

Media Foundation のサンプルを入手する最も簡単な方法は、 http://www.microsoft.com/en-us/download/details.aspx?id=から「Microsoft Windows SDK for Windows 7 and .NET Framework 4」をダウンロードしてインストールすることです。 8279 . サンプルをインストールし、'v7.1/Samples/Multimedia/MediaFoundation' に配置します。Media Foundation のサンプルは Microsoft の Code Gallery サイトにあると思われますが、見つけられませんでした。サンプルは、Windows SDK リリースに含まれなくなりました。

あなたの質問に直接関連するサンプルは、おそらく Decoder、DXVA_HD、DXVA2_VideoProc、EVRPresenter、MPEG1Source、および topoedit です。

現在、同じ問題のいくつかに苦しんでいるため、これ以上サポートを提供できません。

于 2015-04-04T23:05:52.363 に答える