지원되는 DXVA-HD 형식 확인

지원되는 입력 형식 확인

Microsoft DXVA-HD(DirectX Video Acceleration High Definition) 디바이스에서 지원하는 입력 형식 목록을 얻으려면 다음을 수행합니다.

  1. IDXVAHD_Device::GetVideoProcessorDeviceCaps를 호출하여 디바이스 기능을 가져옵니다.
  2. DXVAHD_VPDEVCAPS 구조체의 InputFormatCount 멤버를 확인합니다. 이 멤버는 지원되는 입력 형식의 수를 제공합니다.
  3. InputFormatCount 크기의 D3DFORMAT 값 배열을 할당합니다.
  4. 이 배열을 IDXVAHD_Device::GetVideoProcessorInputFormats 메서드에 전달합니다 . 메서드는 배열을 입력 형식 목록으로 채웁니다.

다음은 이러한 단계를 보여 주는 코드입니다.

// 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;
}

지원되는 출력 형식 확인

DXVA-HD 디바이스에서 지원하는 출력 형식 목록을 얻으려면 다음을 수행합니다.

  1. IDXVAHD_Device::GetVideoProcessorDeviceCaps를 호출하여 디바이스 기능을 가져옵니다.
  2. DXVAHD_VPDEVCAPS 구조체의 OutputFormatCount 멤버를 확인합니다. 이 멤버는 지원되는 입력 형식의 수를 제공합니다.
  3. OutputFormatCount 크기의 D3DFORMAT 값 배열을 할당합니다.
  4. 이 배열을 IDXVAHD_Device::GetVideoProcessorOutputFormats 메서드에 전달합니다 . 메서드는 출력 형식 목록으로 배열을 채웁니다.

다음은 이러한 단계를 보여 주는 코드입니다.

// 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;
}

DXVA-HD