Microsoft DirectX 8.0

IAMVideoAccelerator インターフェイス

IAMVideoAccelerator インターフェイスによって、ビデオ デコーダ フィルタはビデオ アクセラレータ機能にアクセスできる。オーバーレイ ミキサー フィルタの入力ピンは、このインターフェイスをサポートしている。ビデオ デコーダ フィルタがこのインターフェイスでメソッドを呼び出す場合、デコーダの出力ピンで IAMVideoAcceleratorNotify インターフェイスをサポートしている必要がある。アプリケーションが、このインターフェイスでメソッドを呼び出す必要はない。

注 :   このインターフェイスは Microsoft® Windows® 2000 で使用できる。

ビデオ デコーダ フィルタの接続に関するイベントの順序を次に示す。

  1. フィルタ グラフ マネージャが、ビデオ デコーダ フィルタの出力ピンで IPin::Connect メソッドを呼び出す。
  2. ビデオ デコーダは、オーバーレイ ミキサーの入力ピンで IAMVideoAccelerator::GetVideoAcceleratorGUIDs メソッドを呼び出して、ビデオ アクセラレータの GUID のリストを取得できる。これは、オーバーレイ ミキサーが受け付けるビデオ アクセラレータ フォーマットを示す。
  3. ビデオ デコーダは、指定されたビデオ アクセラレータの GUID に関して IAMVideoAccelerator::GetUncompFormatsSupported を呼び出し、提示する適切なピクセル フォーマットを確認する。
  4. ビデオ デコーダは、オーバーレイ ミキサーの入力ピンで IPin::ReceiveConnection メソッドを呼び出し、メディア タイプのサブタイプとしてビデオ アクセラレータの GUID を指定する。この呼び出し内で、オーバーレイ ミキサーは、デコーダ フィルタの出力ピンで次のメソッドを呼び出す。
  5. ビデオ デコーダは IAMVideoAccelerator::GetCompBufferInfo を呼び出して、前に指定されたビデオ アクセラレータの GUID に関連付けられている圧縮済みデータバッファに関する情報を取得する。

動的なフォーマットの変更をサポートするために、フィルタが接続され、実行されている間に次の手順も実行できる。

操作中に、ビデオ デコーダが次の手順を実行する。

  1. 圧縮されていない各データバッファに関して、IAMVideoAccelerator::BeginFrame を呼び出して出力フレームの処理を開始する。
  2. 圧縮されていないデータをビデオ アクセラレータに送るために、デコーダが次のメソッドを呼び出す。
  3. フレーム処理を終了するために、IAMVideoAccelerator::EndFrame を呼び出す。
  4. フレームを表示するために、IAMVideoAccelerator::DisplayFrame を呼び出す。

GetBuffer メソッドでバッファをロックする前に、ビデオ デコーダは、そのバッファを更新する任意の圧縮解除操作が完了したかどうかを確認する必要がある。DisplayFrame についても同様に、ビデオ デコーダがそのフレームを更新するすべての圧縮解除操作が完了しているかどうかを確認する必要がある。

要件

Videoacc.h が必要である。

vtable 順のメソッド

IUnknown メソッド説明
QueryInterface サポートされているインターフェイスへのポインタを取得する。
AddRef 参照カウントをインクリメントする。
Release 参照カウントをデクリメントする。
IAMVideoAccelerator methods説明
GetVideoAcceleratorGUIDs 受け付けられるビデオ アクセラレータ フォーマットの GUID のリストを取得する。
GetUncompFormatsSupported 指定されたビデオ アクセラレータ フォーマットのレンダリングに使用できるピクセル フォーマットのリストを取得する。
GetInternalMemInfo ビデオ アクセラレータの GUID、圧縮されていないデータのサイズ、およびピクセル フォーマットに基づいて、圧縮されていないデータのメモリ要件に関する情報を取得する。
GetCompBufferInfo 圧縮済みバッファの情報を取得する。
GetInternalCompBufferInfo ピンが接続された後に呼び出され、接続するタイプが指定されていると、圧縮済みバッファの情報を取得する。
BeginFrame フレーム処理を開始する。
EndFrame フレーム処理を終了し、各種のデータをビデオ アクセラレータ ドライバに渡す。
GetBuffer 指定されたインデックスおよびタイプの圧縮済みバッファを取得する。
ReleaseBuffer 処理後に圧縮済みバッファを解放する。
Execute 圧縮解除操作を実行する。
QueryRenderStatus 一連のマクロ ブロックのデコード状態を照会する。
DisplayFrame デコード済みフレームを表示する。

IAMVideoAccelerator::GetVideoAcceleratorGUIDs

IAMVideoAccelerator

受け付けられるビデオ アクセラレータ フォーマットの GUID のリストを取得する。

構文

HRESULT GetVideoAcceleratorGUID(
  LPDWORD pdwNumGuidsSupported,
  LPGUID pGuidsSupported
);

パラメータ

pdwNumGuidsSupported
[in] [out] pGuidsSupported が NULL の場合、pdwNumGuidsSupported はサポートされているビデオ アクセラレータ フォーマットの GUID の数を返す。NULL ではない場合、このパラメータは pGuidsSupported に返される GUID の最大数へのポインタとなる。サポートされているビデオ アクセラレータ フォーマットがこの数よりも少ない場合、pdwNumGuidsSupported は実際に返された GUID の数に更新される。
pGuidsSupported
[in] [out] このパラメータが NULL ではない場合、サポートされている GUID がこの配列に返される。その配列のサイズは、バイト単位で少なくとも sizeof(GUID) * (*pdwNumGuidsSupported) である。

戻り値

インターフェイスの実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。

E_FAIL失敗。
E_INVALIDARG引数が無効。
E_NOTIMPLメソッドがサポートされていない。
E_POINTERNull ポインタ引数。
S_OK成功。

IAMVideoAccelerator::GetUncompFormatsSupported

IAMVideoAccelerator

指定されたビデオ アクセラレータ フォーマットのレンダリングに使用できるピクセル フォーマットのリストを取得する。

構文

HRESULT GetUncompFormatsSupported(
    const GUID *pGuid,
    LPDWORD pdwNumFormatsSupported,
    LPDDPIXELFORMAT pFormatsSupported
);

パラメータ

pGuid
[in] ビデオ アクセラレータの GUID へのポインタ。
pdwNumFormatsSupported
[in] [out] pFormatsSupported が NULL の場合、pdwNumFormatsSupported には、pGuid で定義されているビデオ アクセラレータ フォーマットから変換可能なピクセル フォーマットの数が返される。NULL ではない場合、このパラメータは pFormatsSupported に返されるピクセル フォーマットの数である。メソッドが戻ると、このパラメータは実際に返されたピクセル フォーマットの数になる。
pFormatsSupported
[in] [out] DDPIXELFORMAT 構造体へのポインタ。このパラメータが NULL ではない場合、最大 *pdwNumFormatsSupported 個のピクセル フォーマットがこの配列にコピーされる。バッファのサイズは、少なくとも *pdwNumFormatsSupported * sizeof(DDPIXELFORMAT) である。

戻り値

インターフェイスの実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。

E_FAIL失敗。
E_INVALIDARG引数が無効。
E_NOTIMPLメソッドがサポートされていない。
E_POINTERNull ポインタ引数。
S_OK成功。

IAMVideoAccelerator::GetInternalMemInfo

IAMVideoAccelerator

ビデオ アクセラレータの GUID、圧縮されていないデータのサイズ、およびピクセル フォーマットに基づいて、圧縮されていないデータのメモリ要件に関する情報を取得する。

構文

HRESULT GetInternalMemInfo(
    const GUID *pGuid,
    const AMVAUncompDataInfo *pamvaUncompDataInfo,
    LPAMVAInternalMemInfo pamvaInternalMemInfo
);

パラメータ

pGuid
[in] ビデオ アクセラレータの GUID へのポインタ。
pamvaUncompDataInfo
[in] 圧縮されていないデータのサイズとピクセル フォーマットの情報を含む AMVAUncompDataInfo 構造体へのポインタ。
pamvaInternalMemInfo
[in] [out] スクラッチ メモリ要件に関する情報を含む AMVAInternalMemInfo 構造体へのポインタ。

戻り値

インターフェイスの実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。

E_FAIL失敗。
E_INVALIDARG引数が無効。
E_NOTIMPLメソッドがサポートされていない。
E_POINTERNull ポインタ引数。
S_OK成功。

IAMVideoAccelerator::GetCompBufferInfo

IAMVideoAccelerator

圧縮済みバッファ情報を取得する。

構文

HRESULT GetCompBufferInfo(
    const GUID *pGuid,
    const AMVAUncompDataInfo *pamvaUncompDataInfo,
    LPDWORD pdwNumTypesCompBuffers,
    LPAMVACompBufferInfo pamvaCompBufferInfo
);

パラメータ

pGuid
[in] ビデオ アクセラレータ フォーマットの GUID へのポインタ。
pamvaUncompDataInfo
[in] 圧縮されていないデータのサイズおよびピクセル フォーマットの情報を含む AMVAUncompDataInfo 構造体へのポインタ。
pdwNumTypesCompBuffers
[in] [out] DWORD 型 の変数へのポインタ。pamvaCompBufferInfo が NULL ではない場合、このパラメータは、圧縮されていないバッファ タイプの数を取得する。NULL の場合、入力であれば、このパラメータは返される圧縮済みバッファ タイプの最大数を指定し、出力であれば、圧縮済みバッファ タイプの実際の数を取得する。
pamvaCompBufferInfo
[out] NULL 以外の場合、最大pdwNumTypesCompBuffers 個の AMVACompBufferInfo 構造体が返される。このデータには、サーフェスの作成に使用される幅、高さ、ピクセル フォーマット、DirectDraw 機能、およびサーフェスが占有するサイズ (バイト単位) が含まれる。

戻り値

インターフェイスの実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。

E_FAIL失敗。
E_INVALIDARG引数が無効。
E_NOTIMPLメソッドがサポートされていない。
E_POINTERNull ポインタ引数。
S_OK成功。

注意

このメソッドは、DirectDraw を使用して、必要なタイプのビデオ アクセラレータ サーフェスを作成するために必要な情報を返す。ビデオ アクセラレータ ドライバで、複数の圧縮済みバッファ タイプ (たとえば、ビデオ アクセラレータ データと逆離散コサイン変換 [IDCT] データ) がサポートされている場合がある。

IAMVideoAccelerator::GetInternalCompBufferInfo

IAMVideoAccelerator

ピンが接続された後に呼び出され、接続するタイプが指定されていると、圧縮済みバッファの情報を取得する。

構文

HRESULT GetInternalCompBufferInfo(
    LPDWORD pdwNumTypesCompBuffers,
    LPAMVACompBufferInfo pamvaCompBufferInfo
);

パラメータ

pdwNumTypesCompBuffers
[in] [out] DWORD 型の変数へのポインタ。pamvaCompBufferInfo が NULL ではない場合、このパラメータは圧縮されていないバッファ タイプの数を取得する。NULL の場合、入力であれば、このパラメータは返される圧縮済みバッファ タイプの最大数を指定し、出力であれば、圧縮済みバッファ タイプの実際の数を取得する。
pamvaCompBufferInfo
[out] NULL 以外の場合、最大 pdwNumTypesCompBuffers 個の AMVACompBufferInfo 構造体が返される。このデータには、サーフェスの作成に使用される幅、高さ、ピクセル フォーマット、DirectDraw 機能、およびサーフェスが占有するサイズ (バイト単位) が含まれる。

戻り値

インターフェイスの実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。

E_FAIL失敗。
E_INVALIDARG引数が無効。
E_NOTIMPLメソッドがサポートされていない。
E_POINTERNull ポインタ引数。
S_OK成功。

注意

ビデオ アクセラレータ ドライバで、複数の圧縮済みバッファ タイプ (たとえば、ビデオ アクセラレータ データと逆離散コサイン変換 [IDCT] データ) がサポートされている場合がある。

IAMVideoAccelerator::BeginFrame

IAMVideoAccelerator

フレーム処理を開始する。

構文

HRESULT BeginFrame(
    const AMVABeginFrameInfo *pamvaBeginFrameInfo
    );

パラメータ

pamvaBeginFrameInfo
[in] フレーム処理の開始に必要な情報を含む AMVABeginFrameInfo 構造体へのポインタ。

戻り値

インターフェイスの実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。

E_FAIL失敗。
E_INVALIDARG引数が無効。
E_NOTIMPLメソッドがサポートされていない。
E_POINTERNull ポインタ引数。
S_OK成功。

注意

このメソッドは、ピンが接続された後にのみ呼び出すことができる。

AMVABeginFrameInfo 構造体には、転送先バッファのインデックスが含まれる。有効なインデックス値は、0 から dwActualUncompSurfacesAllocated–1 の範囲である。dwActualUncompSurfacesAllocated の値は IAMVideoAcceleratorNotify::SetUncompSurfacesInfo を呼び出して取得する。

使用されるフレーム メモリがこのフレーム インデックスで最後に使用されたメモリと異なる場合があるので、デコーダがそのフレームの初期コンテンツに関する引き継ぎは行わないようにする。

空いているフレーム バッファがないと、このメソッドの呼び出しは処理中の操作をブロックする場合がある。

IAMVideoAccelerator::EndFrame

IAMVideoAccelerator

フレーム処理を終了し、各種のデータをビデオ アクセラレータ ドライバに渡す。

構文

HRESULT EndFrame(
    const AMVAEndFrameInfo *pEndFrameInfo
);

パラメータ

pEndFrameInfo
[in] ビデオ アクセラレータ ドライバに渡す各種のデータが含まれる AMVAEndFrameInfo 構造体へのポインタ。

戻り値

インターフェイスの実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。

E_FAIL失敗。
E_INVALIDARG引数が無効。
E_NOTIMPLメソッドがサポートされていない。
E_POINTERNull ポインタ引数。
S_OK成功。

IAMVideoAccelerator::GetBuffer

IAMVideoAccelerator

指定されたインデックスおよびタイプの圧縮済みバッファを取得する。

構文

HRESULT GetBuffer(
    DWORD dwTypeIndex,
    DWORD dwBufferIndex,
    BOOL bReadOnly,
    LPVOID *ppBuffer,
    LONG *lpStride
);

パラメータ

dwTypeIndex
[in] ビデオ アクセラレータ ドライバでサポートされているサーフェス タイプへの 0 を基準とするインデックス、または 0xFFFFFFFF。「注意」を参照すること。
dwBufferIndex
[in] タイプ内のバッファ インデックス。有効範囲は、0 から AMVACompBufferInfo 構造体の dwNumCompBuffers メンバの値までである。
bReadOnly
[in] バッファが更新されるかどうかを示すブール値。TRUE の場合、バッファは更新されず、ビジーな参照フレームにアクセスできる。
ppBuffer
[out] 圧縮済みデータが格納されるバッファへのポインタ。このバッファのサイズは、GetInternalCompBufferInfo メソッドから dwSurfaceTypeIndex エントリに返される AMVACompBufferInfo 構造体の dwBytesToAllocate メンバによって確定される。
lpStride
[out] この圧縮タイプと互換性のあるストライド。通常、このストライドは、AMVACompBufferInfo 構造体の dwWidthToCreate メンバと等しい。出力ディスプレイ バッファまたはその他の圧縮されていないタイプについては、dwWidthToCreate と等しくない場合もあることに注意する。

戻り値

インターフェイスの実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。

E_FAIL失敗。
E_INVALIDARG引数が無効。
E_NOTIMPLメソッドがサポートされていない。
E_POINTERNull ポインタ引数。
S_OK成功。

注意

このメソッドは、単一のバッファをロックし、バッファへのアクセスを取得する。バッファはタイプとそのタイプ内のインデックスによって識別される。IAMVideoAccelerator::GetInternalCompBufferInfo メソッドは pdwNumTypesCompBuffers パラメータにタイプ数を返す。これによって dwTypeIndex の有効範囲が定義される。各タイプに対して、AMVACompBufferInfo 構造体の dwNumCompBuffers メンバはバッファの数を与える。これによって dwBufferIndex の有効範囲が定義される。dwTypeIndexdwBufferIndex には両方とも 0 を基準とするオフセットを指定することに注意すること。

また、タイプ インデックス 0xFFFFFFFF を使用して出力バッファへのポインタを取得する方法もある。現在、これは BeginFrame の呼び出しと EndFrame の呼び出しの間でのみ有効である。この場合、バッファ インデックスは、最後の BeginFrame 呼び出しに渡された AMVABeginFrameInfo 構造体の dwDestSurfaceIndex メンバと等しい必要がある。

フィルタのピンが接続されていないと、このメソッドは失敗する。

圧縮済みバッファがすべて解放されるまで、このスレッドが Win16 ロックまたは DirectDraw ロックを保持することがある。

IAMVideoAccelerator::ReleaseBuffer

IAMVideoAccelerator

処理後に圧縮済みバッファを解放する。

構文

HRESULT ReleaseBuffer(
    DWORD dwTypeIndex,
    DWORD dwBufferIndex
);

パラメータ

dwTypeIndex
[in] ビデオ アクセラレータ ドライバでサポートされているサーフェス タイプへの 0 を基準とするインデックス、または 0xFFFFFFFF。
dwBufferIndex
[in] タイプ内のバッファ インデックス。有効範囲は、0 からAMVACompBufferInfo 構造体の dwNumCompBuffers メンバの値までである。

戻り値

インターフェイスの実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。

E_FAIL失敗。
E_INVALIDARG引数が無効。
E_NOTIMPLメソッドがサポートされていない。
E_POINTERNull ポインタ引数。
S_OK成功。

注意

このメソッドは、ピンの接続後に呼び出した場合にのみ有効である。このメソッドを呼び出すと、単一のバッファのロックが解除される。ビデオ デコーダは、バッファがこれ以上必要ない場合に、Execute が呼び出された後にこのメソッドを呼び出す。この呼び出しの後、バッファ ポインタは無効になることに注意すること。

IAMVideoAccelerator::Execute

IAMVideoAccelerator

圧縮解除操作を実行する。

構文

HRESULT Execute(
    DWORD dwFunction,
    LPVOID lpPrivateInputData,
    DWORD cbPrivateInputData,
    LPVOID lpPrivateOutputData,
    DWORD cbPrivateOutputData,
    DWORD dwNumBuffers,
    const AMVABUFFERINFO *pamvaBufferInfo
);

パラメータ

dwFunction
[in] 関数番号。引数がデフォルトであるか、または指定しない場合は、ゼロになる。
lpPrivateInputData
[in] ドライバに渡されるプライベート入力データへのポインタ。
cbPrivateInputData
[in] プライベート入力データの長さ。
lpPrivateOutputData
[in] ドライバに渡されるプライベート出力データへのポインタ。
cbPrivateOutputData
[in] プライベート データ バッファの長さ。
dwNumBuffers
[in] AMVABUFFERINFO 構造体の数
pamvaBufferInfo
[in] 渡される AMVABUFFERINFO 構造体のリストへのポインタ。

戻り値

インターフェイスの実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。

E_FAIL失敗。
E_INVALIDARG引数が無効。
E_NOTIMPLメソッドがサポートされていない。
E_POINTERNull ポインタ引数。
S_OK成功。

注意

このメソッドは、ピンの接続後に呼び出した場合にのみ有効である。

関連付けられているバッファのリストは、関数番号 (デフォルトは 0) および圧縮解除操作を説明する必要なプライベート データと共に渡される。たとえば、圧縮が解除された参照フレーム情報はバッファ リストに渡される。バッファ リストの順序は重要で、実行される特定の圧縮解除操作によって定義される。

プライベート データはドライバに渡すこともドライバから受け取ることもできる。

IAMVideoAccelerator::QueryRenderStatus

IAMVideoAccelerator

一連のマクロ ブロックのデコード状態を照会する。

構文

HRESULT QueryRenderStatus(
    DWORD dwTypeIndex,
    DWORD dwBufferIndex,
    DWORD dwFlags
);

パラメータ

dwTypeIndex
[in] テストされるバッファのタイプ インデックス。
dwBufferIndex
[in] テストされるバッファのバッファ インデックス。
dwFlags
[in] 実行される照会のタイプを示すフラグ。ゼロの場合、サーフェスを更新に使用しても安全かどうかがテストされる。AMVA_QUERYRENDERSTATUSF_READ の場合、サーフェスを読み取りに使用しても安全かどうかがテストされる。

戻り値

HRESULT 値を返す。操作が完了した場合は S_OK、操作が進行中の場合は E_PENDING を返す。操作が失敗すると、このメソッドは別の失敗コードを返す。このコードには、次の標準的な定数の 1 つか、または一覧に示されていないその他の値が含まれる。

E_FAIL失敗。
E_INVALIDARG引数が無効。
E_NOTIMPLメソッドがサポートされていない。
E_POINTERNull ポインタ引数。
S_OK成功。

注意

このメソッドを呼び出すと、進行状況と失敗が報告される。

IAMVideoAccelerator::DisplayFrame

IAMVideoAccelerator

デコード済みフレームを表示する。

構文

HRESULT DisplayFrame(
    DWORD dwFlipToIndex,
    IMediaSample *pMediaSample
);

パラメータ

dwFlipToIndex
[in] 表示する圧縮解除されたフレームのサーフェス インデックス。
pMediaSample
[in] 開始と停止のタイム スタンプが含まれる IMediaSample 構造体へのポインタ。

戻り値

インターフェイスの実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。

E_FAIL失敗。
E_INVALIDARG引数が無効。
E_NOTIMPLメソッドがサポートされていない。
E_POINTERNull ポインタ引数。
S_OK成功。

注意

このメソッドは、ピンの接続後に呼び出した場合にのみ有効である。この呼び出しはほかの操作をブロックしない。

ビデオ デコーダは、インデックスが dwFlipToIndex であるサーフェスに対して EndFrame を呼び出した後に、このメソッドを呼び出す。このインデックスは、前に BeginFrame の呼び出しで渡された AMVABeginFrameInfo 構造体の dwDestSurfaceIndex メンバの値である必要がある。