Microsoft DirectX 8.0

IDMOVideoOutputOptimizations インターフェイス

Microsoft® DirectX® Media Object (DMO) のビデオ最適化をサポートする。

アプリケーションは、このインターフェイスを使って、DMO との間でビデオ出力最適化をネゴシエートできる。DMO は、アプリケーションからのサポートを必要とする最適化を実行できるときに、このインターフェイスを公開する。アプリケーションは、DMO の優先機能を DMO に照会し、その機能を提供することを承諾または拒否することができる。DMO は、アプリケーションが最適化を拒否した場合でも出力を処理する必要がある。

たとえば、ビデオ デコーダは、前の出力フレームにデルタを適用することによって出力フレームを生成することがある。照会を受けると、ビデオ デコーダは、出力バッファを使って前のフレームを供給するようにアプリケーションに要求する。アプリケーションはこの要求を承諾することも拒否することもできる。

ビデオ最適化は、出力ストリームごとに個別にネゴシエートされる。

以下の疑似コードはアプリケーションが DMO とネゴシエートする方法を示している。

IDMOVideoOutputOptimizations *pVidOpt;
// DMO に対して IDMOVideoOutputOptimizations を照会する (表示されていない) 。

BOOL  bWantsPreviousBuffer = FALSE;
DWORD wFlags;
pVidOpt->QueryOperationModePreferences(0,&dwFlags);

if (dwFlags & DMO_VOSF_NEEDS_PREVIOUS_SAMPLE) 
{
    // 要求を承諾する。		
    pVidOpt->SetOperationMode(0, DMO_VOSF_NEEDS_PREVIOUS_SAMPLE);
    bWantsPreviousBuffer = TRUE;
}

// ループ処理
while (there is input)
{
    ProcessInput(0, ...);
    if (bWantsPreviousBuffer)
pDMO->ProcessOutput(0, ...) // 前回と同じバッファを使う。
    else
pDMO->ProcessOutput(0, ...) // 新しいバッファを使ってもよい。
}	

Vtable 順のメソッド

IUnknown メソッド説明
QueryInterfaceサポートされているインターフェイスを指すポインタを取得する。
AddRef参照カウントをインクリメントする。
Release参照カウントをデクリメントする。
IDMOVideoOutputOptimizations メソッド説明
QueryOperationModePreferencesDMO の優先最適化機能を取得する。
SetOperationMode現在有効な最適化機能を DMO に通知する。
GetCurrentOperationMode現在有効な最適化機能を取得する。
GetCurrentSampleRequirementsアプリケーションが既に承諾した機能がある場合に、次のサンプルを処理するのに必要な最適化機能を取得する。

IDMOVideoOutputOptimizations::QueryOperationModePreferences

IDMOVideoOutputOptimizations インターフェイス

DMO の優先最適化機能を取得する。

構文

HRESULT QueryOperationModePreferences(
ULONG ulOutputStreamIndex,
    DWORD *pdwRequestedCapabilities
);

パラメータ

ulOutputStreamIndex
DMO の出力ストリームのゼロベースのインデックス。
pdwRequestedCapabilities
要求されている DMO の機能を受け取る変数を指すポインタ。返される値は、DMO_VIDEO_OUTPUT_STREAM_FLAGS 列挙の 0 個以上のフラグのビット単位の論理和である。

戻り値

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

S_OK成功
DMO_E_INVALIDSTREAMINDEX無効なストリーム インデックス
E_POINTERNULL ポインタ引数

IDMOVideoOutputOptimizations::SetOperationMode

IDMOVideoOutputOptimizations インターフェイス

現在有効な最適化機能を DMO に通知する。

構文

HRESULT SetOperationMode(
ULONG ulOutputStreamIndex,
    DWORD dwEnabledFeatures
);

パラメータ

ulOutputStreamIndex
DMO の出力ストリームのゼロベースのインデックス。
dwEnabledFeatures
DMO_VIDEO_OUTPUT_STREAM_FLAGS 列挙の 0 個以上のフラグのビット単位の論理和。

戻り値

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

S_OK成功
DMO_E_INVALIDSTREAMINDEX無効なストリーム インデックス
E_INVALIDARG無効な引数

注意

このメソッドを呼び出す前に、QueryOperationModePreferences メソッドを呼び出して、DMO が要求している機能を調べる。その後、このメソッドを呼び出して、どの機能を提供するかを DMO に通知する。いずれの機能も提供しない場合は、このメソッドを呼び出す必要はない。DMO は、いずれかの機能が提供されるものとは見なさない。

アプリケーションは、承諾した機能をすべて提供する必要がある。ただし、一部の機能については、DMO がすべてのサンプルについて機能を要求しないことがある。DMO が次のサンプルについて省略できる機能があるかどうかを調べるには、GetCurrentSampleRequirements メソッドを呼び出す。これにより、DMO は、1 つのサンプルに対して、承諾済みの機能を放棄することができる。

ストリーミングが始まる前に、さらにこのメソッドを呼び出すと、前の呼び出しはオーバーライドされる。複数の機能を設定するには、1 回のメソッド呼び出しで機能を設定する必要がある。ストリーミングが始まると、このメソッドはエラーを返す。ストリーミングは、アプリケーションが少なくとも 1 つの入力ストリームに対して IMediaObject::ProcessInput を呼び出したときに始まる。

ストリーミングが終了すれば、アプリケーションは機能をネゴシエートできる。ストリーミングは、アプリケーションが IMediaObject::Flush メソッドを呼び出したとき、または、すべての入力ストリームに対して IMediaObject::Discontinuity を呼び出した後、残っているすべての出力を処理したときに終了する。

IDMOVideoOutputOptimizations::GetCurrentOperationMode

IDMOVideoOutputOptimizations インターフェイス

現在有効な最適化機能を取得する。

構文

HRESULT GetCurrentOperationMode(
ULONG ulOutputStreamIndex,
    DWORD *pdwEnabledFeatures
);

パラメータ

ulOutputStreamIndex
DMO の出力ストリームのゼロベースのインデックス。
pdwEnabledFeatures
現在の機能を受け取る変数を指すポインタ。返される値は、DMO_VIDEO_OUTPUT_STREAM_FLAGS 列挙の 0 個以上のフラグのビット単位の論理和である。

戻り値

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

S_OK成功
DMO_E_INVALIDSTREAMINDEX無効なストリーム インデックス
E_POINTERNULL ポインタ引数

IDMOVideoOutputOptimizations::GetCurrentSampleRequirements

IDMOVideoOutputOptimizations インターフェイス

アプリケーションが既に承諾した機能がある場合に、次のサンプルを処理するのに必要な最適化機能を取得する。

構文

HRESULT GetCurrentSampleRequirements(
ULONG ulOutputStreamIndex,
    DWORD *pdwRequestedFeatures
);

パラメータ

ulOutputStreamIndex
DMO の出力ストリームのゼロベースのインデックス。
pdwRequestedFeatures
必要な機能を受け取る変数を指すポインタ。返される値は、DMO_VIDEO_OUTPUT_STREAM_FLAGS 列挙の 0 個以上のフラグのビット単位の論理和である。

戻り値

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

S_OK成功
DMO_E_INVALIDSTREAMINDEX無効なストリーム インデックス
E_POINTERNULL ポインタ引数

注意

アプリケーションは、SetOperationMode メソッドを呼び出した後、承諾したすべての機能を提供する必要がある。ただし、一部の機能については、DMO がすべてのサンプルに対して必要としないことがある。DMO は、このメソッドを利用して、1 つのサンプルに対して、承諾済みの機能を放棄することができる。

アプリケーションは、サンプルを処理する前にこのメソッドを呼び出す。DMO は、次のサンプルを処理するために特定の機能を必要としない場合、その機能に対応するフラグを pdwRequestedFeatures パラメータから削除する。次のサンプルに限って、アプリケーションは、その機能を無視できる。このメソッドの結果は、IMediaObject::ProcessOutput メソッドに対する次の呼び出しに対してのみ有効である。

DMO は、SetOperationMode メソッドで承諾されたフラグのみを返す。つまり、このメソッドを使って新しい機能を動的に有効にすることはできない。