Microsoft DirectX 8.0

IMediaObjectInPlace インターフェイス

このインターフェイスは、データが存在する場所でデータを処理するためのメソッドを備えている。以下の条件が満たされていれば、Microsoft® DirectX® Media Object (DMO) はこのインターフェイスを公開できる。

このインターフェイスは、最適化されたデータ処理手段を提供する。アプリケーションは、IMediaObject::ProcessInput メソッドと IMediaObject::ProcessOutput メソッドを呼び出す代わりに、1 つの Process メソッドを呼び出す。ただし、このインターフェイスを実装する DMO は、必ず IMediaObject インターフェイスも実装する必要がある。したがって、アプリケーションにはこのインターフェイスを使用する義務はなく、DMO がこのインターフェイスを実装することも保証されない。

Vtable 順のメソッド

IUnknown メソッド説明
QueryInterfaceサポートされているインターフェイスを指すポインタを取得する。
AddRef参照カウントをインクリメントする。
Release参照カウントをデクリメントする。
IMediaObjectInPlace メソッド説明
Processデータのブロックを処理する。
Clone現在の状態の DMO のコピーを作成する。
GetLatencyこの DMO によって生じる待機時間を取得する。

IMediaObjectInPlace::Process

IMediaObjectInPlace インターフェイス

データのブロックを処理する。アプリケーションは入力データのブロックを指すポインタを供給する。DMO は指定された場所でデータを処理する。

構文

HRESULT Process(
    ULONG ulSize,
    BYTE *pData
    REFERENCE_TIME refTimeStart,
    DWORD dwFlags
);

パラメータ

ulSize
[in] バイト単位で表すデータのサイズ。
pData
[in, out] サイズが ulSize のバッファを指すポインタ。入力時にはバッファに入力データが格納される。メソッドが正常に終了すると、バッファには出力データが格納される。
refTimeStart
[in] データの開始タイム。
dwFlags
[in] DMO_INPLACE_NORMAL または DMO_INPLACE_ZERO のいずれか。詳細については、「注意」を参照すること。

戻り値

HRESULT 値を返す。以下の値をとる。

S_FALSE成功。処理するデータがまだある。
S_TRUE成功。処理するデータが残っていない。
E_FAIL失敗。

注意

メソッドが失敗すると、バッファに不要データが残ることがある。アプリケーションはバッファの内容を使ってはいけない。

DMO は、入力データの長さを超える出力データを生成することがある。この現象は "エフェクト テール" と呼ばれる。たとえば、残響エフェクトは、入力が無音になった後も継続する。DMO でエフェクト テールが発生すると、このメソッドは S_FALSE を返す。

アプリケーションに処理する入力データがある間は、dwFlags パラメータを DMO_INPLACE_NORMAL に設定して Process メソッドを呼び出す。この呼び出しが S_FALSE を返したら、入力バッファをゼロにして、DMO_INPLACE_ZERO フラグを設定し、Process を再び呼び出す。DMO はゼロなったバッファにエフェクト テールを格納する。戻り値が、DMO がエフェクト テールの処理を終了したことを示す S_TRUE になるまで、この方法で Process の呼び出しを繰り返す。

DMO でエフェクト テールが発生しなければ、このメソッドは常に S_TRUE (またはエラー コード) を返す。

IMediaObjectInPlace::Clone

IMediaObjectInPlace インターフェイス

現在の状態の DMO のコピーを作成する。

構文

HRESULT Clone(
    IMediaObjectInPlace **ppMediaObject
);

パラメータ

ppMediaObject
[out] 新しい DMO の IMediaObjectInPlace インターフェイスを受け取るポインタのアドレス。

戻り値

成功すれば S_OK を返す。それ以外の場合は、エラーの原因を示す HRESULT 値を返す。

注意

メソッドが成功すると、メソッドが返す IMediaObjectInPlace インターフェイスには未処理の参照カウントが残る。インターフェイスを使い終わったら、必ずインターフェイスを解放すること。

IMediaObjectInPlace::GetLatency

IMediaObjectInPlace インターフェイス

この DMO によって生じる待機時間を取得する。

構文

HRESULT GetLatency(
    REFERENCE_TIME *pLatencyTime
);

パラメータ

pLatencyTime
[out] 待機時間を 100 ナノ秒単位で受け取る変数を指すポインタ。

戻り値

成功すれば S_OK を返す。それ以外の場合は、エラーの原因を示す HRESULT 値を返す。

注意

このメソッドは、各バッファを処理するのに必要な平均時間を返す。通常、この値は、プロセッサ速度および CPU 負荷などの実行時環境の要因に依存する。このメソッドを実装する方法の 1 つは、DMO が履歴データに基づいて稼働平均値を記録する方法である。