In-Place処理
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
特定のデータ変換は、データを直接変更することで実現できます。 これはイン プレース 処理と呼ばれます。 多くのオーディオとビデオの効果は、この方法で行うことができます。 DMO でインプレース処理がサポートされている場合は、 IMediaObjectInPlace インターフェイスが公開されます。 インプレース処理は、通常、出力に個別のバッファーを使用するよりも効率的です。 (主な例外の 1 つは、バッファーがビデオ メモリに存在する場合です。このような場合、読み取り操作は書き込み操作よりもはるかに遅いので、インプレース処理はお勧めしません)。
データをインプレース処理するために、クライアントは ProcessInput と ProcessOutput を個別に呼び出すのではなく、IMediaObjectInPlace::P rocess メソッドを 1 回呼び出します。 Process メソッドは同期的です。すべての処理は、呼び出し内で行われます。 また、インプレース処理では IMediaBuffer オブジェクトは使用されません。 Process メソッドは、メモリ バッファーへのポインターを直接受け取ります。
インプレース処理をサポートする DMO では、ProcessInput メソッドや ProcessOutput メソッドを含む IMediaObject インターフェイスを実装する必要があります。 クライアントは、インプレース処理を使用するか、個別のバッファーを使用するかを選択できます。 ただし、2 種類の処理を混在させる必要はありません。 Process を呼び出す場合は、ProcessInput または ProcessOutput を呼び出さないでください。その逆も同様です。
効果の尾
インプレース DMO では、入力が停止した後に追加の出力が作成される場合があります。 これは エフェクト テールと呼ばれます。 たとえば、入力が無音になると、リバーブ効果が継続します。 効果の末尾がある場合、 Process メソッドはS_FALSEを返します。 アプリケーションがすべてのデータを処理したら、 Process メソッドに空のバッファーを送信することで、効果の末尾を生成できます。
関連トピック