Win32 API 日本語リファレンス
ホームMedia.MediaFoundation › IDXVAHD_Device

IDXVAHD_Device

COM
IID95f12dfd-d77e-49be-815f-57d579634d6d継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

Microsoft DirectX Video Acceleration High Definition (DXVA-HD) デバイスを表します。

メソッド 8

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT CreateVideoSurface(DWORD Width, DWORD Height, D3DFORMAT Format, D3DPOOL Pool, DWORD Usage, DXVAHD_SURFACE_TYPE Type, DWORD NumSurfaces, IDirect3DSurface9** ppSurfaces, HANDLE* pSharedHandle)

1 つ以上の Microsoft Direct3D ビデオサーフェスを作成します。

WidthDWORDin各サーフェスの幅 (ピクセル単位)。
HeightDWORDin各サーフェスの高さ (ピクセル単位)。
FormatD3DFORMATinピクセル形式。D3DFORMAT 値または FOURCC コードで指定します。詳細については、Video FOURCCs を参照してください。
PoolD3DPOOLinサーフェスを作成するメモリプール。このパラメーターは、DXVAHD_VPDEVCAPS 構造体の InputPool メンバーと等しくなければなりません。この値を取得するには、IDXVAHD_Device::GetVideoProcessorDeviceCaps メソッドを呼び出します。
UsageDWORDin予約済み。0 に設定します。
TypeDXVAHD_SURFACE_TYPEin作成するサーフェスの種類。DXVAHD_SURFACE_TYPE 列挙体のメンバーで指定します。
NumSurfacesDWORDin作成するサーフェスの数。
ppSurfacesIDirect3DSurface9**outIDirect3DSurface9 ポインターの配列へのポインター。配列の要素数は NumSurfaces パラメーターで指定します。このメソッドは、新しいビデオサーフェスへのポインターで配列を埋めます。呼び出し元はこれらのポインターを解放しなければなりません。
pSharedHandleHANDLE*inoutoptional予約済み。NULL に設定します。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 4 HRESULT GetVideoProcessorDeviceCaps(DXVAHD_VPDEVCAPS* pCaps)

Microsoft DirectX Video Acceleration High Definition (DXVA-HD) デバイスの機能を取得します。

pCapsDXVAHD_VPDEVCAPS*outデバイスの機能を受け取る DXVAHD_VPDEVCAPS 構造体へのポインター。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 5 HRESULT GetVideoProcessorOutputFormats(DWORD Count, D3DFORMAT* pFormats)

Microsoft DirectX Video Acceleration High Definition (DXVA-HD) デバイスがサポートする出力形式のリストを取得します。

CountDWORDin取得する形式の数。このパラメーターは、DXVAHD_VPDEVCAPS 構造体の OutputFormatCount メンバーと等しくなければなりません。この値を取得するには、IDXVAHD_Device::GetVideoProcessorDeviceCaps メソッドを呼び出します。
pFormatsD3DFORMAT*outD3DFORMAT 値の配列へのポインター。配列の要素数は Count パラメーターで指定します。このメソッドは、出力形式のリストで配列を埋めます。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

形式のリストには、D3DFMT_X8R8G8B8 のような D3DFORMAT 値と、'NV12' のような FOURCC コードの両方を含めることができます。詳細については、Video FOURCCs を参照してください。

Examples

// Checks whether a DXVA-HD device supports a specified output format.

HRESULT CheckOutputFormatSupport(
    IDXVAHD_Device          *pDXVAHD,
    const DXVAHD_VPDEVCAPS& caps,
    D3DFORMAT               d3dformat
    )
{
    D3DFORMAT *pFormats = new (std::nothrow) D3DFORMAT[caps.OutputFormatCount];
    if (pFormats == NULL)
    {
        return E_OUTOFMEMORY;
    }

    HRESULT hr = pDXVAHD->GetVideoProcessorOutputFormats(
        caps.OutputFormatCount, 
        pFormats
        );

    if (FAILED(hr)) 
    { 
        goto done; 
    }

    UINT index;
    for (index = 0; index < caps.OutputFormatCount; index++)
    {
        if (pFormats[index] == d3dformat)
        {
            break;
        }
    }
    if (index == caps.OutputFormatCount)
    {
        hr = E_FAIL;
    }

done:
    delete [] pFormats;
    return hr;
}
vtbl 6 HRESULT GetVideoProcessorInputFormats(DWORD Count, D3DFORMAT* pFormats)

Microsoft DirectX Video Acceleration High Definition (DXVA-HD) デバイスがサポートする入力形式のリストを取得します。

CountDWORDin取得する形式の数。このパラメーターは、DXVAHD_VPDEVCAPS 構造体の InputFormatCount メンバーと等しくなければなりません。この値を取得するには、IDXVAHD_Device::GetVideoProcessorDeviceCaps メソッドを呼び出します。
pFormatsD3DFORMAT*outD3DFORMAT 値の配列へのポインター。配列の要素数は Count パラメーターで指定します。このメソッドは、入力形式のリストで配列を埋めます。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

形式のリストには、D3DFMT_X8R8G8B8 のような D3DFORMAT 値と、'NV12' のような FOURCC コードの両方を含めることができます。詳細については、Video FOURCCs を参照してください。

Examples

// Checks whether a DXVA-HD device supports a specified input format.

HRESULT CheckInputFormatSupport(
    IDXVAHD_Device          *pDXVAHD,
    const DXVAHD_VPDEVCAPS& caps,
    D3DFORMAT               d3dformat
    )
{
    D3DFORMAT *pFormats = new (std::nothrow) D3DFORMAT[ caps.InputFormatCount ];
    if (pFormats == NULL)
    {
        return E_OUTOFMEMORY;
    }

    HRESULT hr = pDXVAHD->GetVideoProcessorInputFormats(
        caps.InputFormatCount, 
        pFormats
        );

    if (FAILED(hr)) 
    { 
        goto done; 
    }

    UINT index;
    for (index = 0; index < caps.InputFormatCount; index++)
    {
        if (pFormats[index] == d3dformat)
        {
            break;
        }
    }
    if (index == caps.InputFormatCount)
    {
        hr = E_FAIL;
    }

done:
    delete [] pFormats;
    return hr;
}
vtbl 7 HRESULT GetVideoProcessorCaps(DWORD Count, DXVAHD_VPCAPS* pCaps)

1 つ以上の Microsoft DirectX Video Acceleration High Definition (DXVA-HD) ビデオプロセッサの機能を取得します。

CountDWORDinpCaps 配列の要素数。このパラメーターは、DXVAHD_VPDEVCAPS 構造体の VideoProcessorCount メンバーと等しくなければなりません。この値を取得するには、IDXVAHD_Device::GetVideoProcessorDeviceCaps メソッドを呼び出します。
pCapsDXVAHD_VPCAPS*outDXVAHD_VPCAPS 構造体の配列へのポインター。このメソッドは、ドライバーがサポートするビデオプロセッサの機能でこれらの構造体を埋めます。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 8 HRESULT GetVideoProcessorCustomRates(GUID* pVPGuid, DWORD Count, DXVAHD_CUSTOM_RATE_DATA* pRates)

Microsoft DirectX Video Acceleration High Definition (DXVA-HD) ビデオプロセッサがサポートするカスタムレートのリストを取得します。カスタムレートは、フレームレート変換や逆テレシネ変換 (IVTC) に使用されます。

pVPGuidGUID*inクエリするビデオプロセッサを識別する GUID。この GUID は、IDXVAHD_Device::GetVideoProcessorCaps メソッドで取得した DXVAHD_VPCAPS 構造体のいずれかの VPGuid メンバーの値と等しくなければなりません。
CountDWORDin取得するレートの数。このパラメーターは、当該ビデオプロセッサの DXVAHD_VPCAPS 構造体の CustomRateCount メンバーと等しくなければなりません。
pRatesDXVAHD_CUSTOM_RATE_DATA*outDXVAHD_CUSTOM_RATE_DATA 構造体の配列へのポインター。配列の要素数は Count パラメーターで指定します。このメソッドは、カスタムレートのリストで配列を埋めます。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 9 HRESULT GetVideoProcessorFilterRange(DXVAHD_FILTER Filter, DXVAHD_FILTER_RANGE_DATA* pRange)

Microsoft DirectX Video Acceleration High Definition (DXVA-HD) デバイスがサポートするイメージフィルターの値の範囲を取得します。

FilterDXVAHD_FILTERinイメージフィルターの種類。DXVAHD_FILTER 列挙体のメンバーで指定します。
pRangeDXVAHD_FILTER_RANGE_DATA*outDXVAHD_FILTER_RANGE_DATA 構造体へのポインター。このメソッドは、指定されたフィルターの値の範囲でこの構造体を埋めます。

戻り値

このメソッドは HRESULT を返します。指定できる値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドが成功しました。
E_INVALIDARG
Filter パラメーターが無効であるか、またはデバイスが指定されたフィルターをサポートしていません。

解説(Remarks)

デバイスがどのイメージフィルターをサポートしているかを調べるには、DXVAHD_VPDEVCAPS 構造体の FilterCaps メンバーを確認します。この値を取得するには、IDXVAHD_Device::GetVideoProcessorDeviceCaps メソッドを呼び出します。

vtbl 10 HRESULT CreateVideoProcessor(GUID* pVPGuid, IDXVAHD_VideoProcessor** ppVideoProcessor)

Microsoft DirectX Video Acceleration High Definition (DXVA-HD) ビデオプロセッサを作成します。

pVPGuidGUID*in作成するビデオプロセッサを識別する GUID。この GUID は、IDXVAHD_Device::GetVideoProcessorCaps メソッドで取得した DXVAHD_VPCAPS 構造体のいずれかの VPGuid メンバーの値と等しくなければなりません。
ppVideoProcessorIDXVAHD_VideoProcessor**outIDXVAHD_VideoProcessor インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放しなければなりません。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IDXVAHD_Device "{95F12DFD-D77E-49BE-815F-57D579634D6D}"
#usecom global IDXVAHD_Device IID_IDXVAHD_Device "{}"
#comfunc global IDXVAHD_Device_CreateVideoSurface              3 int,int,int,int,int,int,int,sptr,sptr
#comfunc global IDXVAHD_Device_GetVideoProcessorDeviceCaps     4 var
#comfunc global IDXVAHD_Device_GetVideoProcessorOutputFormats  5 int,var
#comfunc global IDXVAHD_Device_GetVideoProcessorInputFormats   6 int,var
#comfunc global IDXVAHD_Device_GetVideoProcessorCaps           7 int,var
#comfunc global IDXVAHD_Device_GetVideoProcessorCustomRates    8 var,int,var
#comfunc global IDXVAHD_Device_GetVideoProcessorFilterRange    9 int,var
#comfunc global IDXVAHD_Device_CreateVideoProcessor            10 var,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。