次の方法で共有


IDirect3DDeviceManager9::GetVideoService メソッド (dxva2api.h)

DirectX ビデオ アクセラレーション (DXVA) サービス インターフェイスを取得します。

構文

HRESULT GetVideoService(
  [in]  HANDLE hDevice,
  [in]  REFIID riid,
  [out] void   **ppService
);

パラメーター

[in] hDevice

Direct3D デバイスへのハンドル。 デバイス ハンドルを取得するには、 IDirect3DDeviceManager9::OpenDeviceHandle を呼び出します。

[in] riid

要求したインターフェイスのインターフェイス ID (IID: Interface Identifier)。 Direct3D デバイスは、次の DXVA サービス インターフェイスをサポートする場合があります。

[out] ppService

要求されたインターフェイスへのポインターを受け取ります。 呼び出し元はインターフェイスを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。 有効な値を次の表に示しますが、これ以外にもあります。

リターン コード 説明
S_OK
メソッドが成功しました。
DXVA2_E_NEW_VIDEO_DEVICE
デバイス ハンドルが無効です。
DXVA2_E_NOT_AVAILABLE
Direct3D デバイスでは、ビデオ アクセラレーションはサポートされていません。
DXVA2_E_NOT_INITIALIZED
Direct3D デバイス マネージャーが初期化されませんでした。 デバイスの所有者は 、IDirect3DDeviceManager9::ResetDevice を呼び出す必要があります。
E_HANDLE
指定したハンドルは Direct3D デバイス ハンドルではありません。

解説

メソッドが DXVA2_E_NEW_VIDEO_DEVICEを返す場合は、 IDirect3DDeviceManager9::CloseDeviceHandle を呼び出してハンドルを閉じ、もう一度 OpenDeviceHandle を呼び出して新しいハンドルを取得します。 IDirect3DDeviceManager9::ResetDevice メソッドは、開いているすべてのデバイス ハンドルを無効にします。

HRESULT GetVideoProcessorService(
    IDirect3DDeviceManager9 *pDeviceManager,
    IDirectXVideoProcessorService **ppVPService
    )
{
    *ppVPService = NULL;

    HANDLE hDevice;

    HRESULT hr = pDeviceManager->OpenDeviceHandle(&hDevice);
    if (SUCCEEDED(hr))
    {
        // Get the video processor service 
        HRESULT hr2 = pDeviceManager->GetVideoService(
            hDevice, 
            IID_PPV_ARGS(ppVPService)
            );

        // Close the device handle.
        hr = pDeviceManager->CloseDeviceHandle(hDevice);

        if (FAILED(hr2))
        {
            hr = hr2;
        }
    }

    if (FAILED(hr))
    {
        SafeRelease(ppVPService);
    }

    return hr;
}

要件

   
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー dxva2api.h

関連項目

DXVA ビデオ処理

Direct3D デバイス マネージャー

DirectX ビデオ アクセラレータ 2.0

IDirect3DDeviceManager9