다음을 통해 공유


DXVA-HD 상태 설정

비디오 처리 중에 Microsoft DXVA-HD(DirectX 비디오 가속 고화질) 디바이스는 한 프레임에서 다음 프레임으로 영구 상태를 유지합니다. 각 상태에는 문서화된 기본값이 있습니다. 디바이스를 구성한 후 기본값에서 변경하려는 모든 상태를 설정합니다. 각 프레임을 처리하기 전에 변경해야 하는 상태를 업데이트합니다.

참고

이 디자인은 DXVA-VP와 다릅니다. DXVA-VP에서 애플리케이션은 각 프레임을 사용하여 모든 VP 매개 변수를 지정해야 합니다.

 

디바이스 상태는 다음 두 가지 범주로 구분됩니다.

  • 스트림 상태는 각 입력 스트림을 개별적으로 적용합니다. 각 스트림에 다른 설정을 적용할 수 있습니다.
  • Blit 상태는 전체 비디오 처리 블릿에 전역적으로 적용됩니다.

다음 스트림 상태가 정의됩니다.

스트림 상태 설명
DXVAHD_STREAM_STATE_D3DFORMAT 입력 비디오 형식입니다.
DXVAHD_STREAM_STATE_FRAME_FORMAT 인터레이스.
DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE 입력 색 공간입니다. 이 상태는 입력 스트림에 대한 RGB 색 범위 및 YCbCr 전송 매트릭스를 지정합니다.
DXVAHD_STREAM_STATE_OUTPUT_RATE 출력 프레임 속도. 이 상태는 프레임 속도 변환을 제어합니다.
DXVAHD_STREAM_STATE_SOURCE_RECT 원본 사각형입니다.
DXVAHD_STREAM_STATE_DESTINATION_RECT 대상 사각형입니다.
DXVAHD_STREAM_STATE_ALPHA 평면 알파.
DXVAHD_STREAM_STATE_PALETTE 색상표. 이 상태는 palettized 입력 형식에만 적용됩니다.
DXVAHD_STREAM_STATE_LUMA_KEY Luma 키.
DXVAHD_STREAM_STATE_ASPECT_RATIO 픽셀 가로 세로 비율입니다.
DXVAHD_STREAM_STATE_FILTER_Xxxx 이미지 필터 설정. 드라이버는 밝기, 대비 및 기타 이미지 필터를 지원할 수 있습니다.

 

다음 블릿 상태가 정의됩니다.

블릿 상태 설명
DXVAHD_BLT_STATE_TARGET_RECT 대상 사각형입니다.
DXVAHD_BLT_STATE_BACKGROUND_COLOR 배경색.
DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE 출력 색 공간입니다.
DXVAHD_BLT_STATE_ALPHA_FILL 알파 채우기 모드입니다.
DXVAHD_BLT_STATE_CONSTRICTION 수축. 이 상태는 디바이스가 출력을 다운샘플링하는지 여부를 제어합니다.

 

스트림 상태를 설정하려면 IDXVAHD_VideoProcessor::SetVideoProcessStreamState 메서드를 호출합니다 . blit 상태를 설정하려면 IDXVAHD_VideoProcessor::SetVideoProcessBltState 메서드를 호출합니다. 이러한 두 메서드에서 열거형 값은 설정할 상태를 지정합니다. 상태 데이터는 애플리케이션이 void* 형식으로 캐스팅하는 상태별 데이터 구조를 사용하여 제공됩니다.

다음 코드 예제에서는 스트림 0의 입력 형식 및 대상 사각형을 설정하고 배경색을 검은색으로 설정합니다.

HRESULT SetDXVAHDStates(HWND hwnd, D3DFORMAT inputFormat)
{
    // Set the initial stream states.

    // Set the format of the input stream

    DXVAHD_STREAM_STATE_D3DFORMAT_DATA d3dformat = { inputFormat };

    HRESULT hr = g_pDXVAVP->SetVideoProcessStreamState(
        0,  // Stream index
        DXVAHD_STREAM_STATE_D3DFORMAT,
        sizeof(d3dformat),
        &d3dformat
        );

    if (SUCCEEDED(hr))
    { 
        // For this example, the input stream contains progressive frames.

        DXVAHD_STREAM_STATE_FRAME_FORMAT_DATA frame_format = { DXVAHD_FRAME_FORMAT_PROGRESSIVE };
        
        hr = g_pDXVAVP->SetVideoProcessStreamState(
            0, // Stream index
            DXVAHD_STREAM_STATE_FRAME_FORMAT,
            sizeof(frame_format),
            &frame_format
            );
    }

    if (SUCCEEDED(hr))
    { 
        // Compute the letterbox area.

        RECT rcDest;
        GetClientRect(hwnd, &rcDest);

        RECT rcSrc;
        SetRect(&rcSrc, 0, 0, VIDEO_WIDTH, VIDEO_HEIGHT);

        rcDest = LetterBoxRect(rcSrc, rcDest);

        // Set the destination rectangle, so the frame is displayed within the 
        // letterbox area. Otherwise, the frame is stretched to cover the 
        // entire surface.

        DXVAHD_STREAM_STATE_DESTINATION_RECT_DATA DstRect = { TRUE, rcDest };

        hr = g_pDXVAVP->SetVideoProcessStreamState(
            0, // Stream index 
            DXVAHD_STREAM_STATE_DESTINATION_RECT,
            sizeof(DstRect),
            &DstRect
            );
    }

    if (SUCCEEDED(hr))
    { 
        DXVAHD_COLOR_RGBA rgbBackground = { 0.0f, 0.0f, 0.0f, 1.0f };  // RGBA

        DXVAHD_BLT_STATE_BACKGROUND_COLOR_DATA background = { FALSE, rgbBackground };

        hr = g_pDXVAVP->SetVideoProcessBltState(
            DXVAHD_BLT_STATE_BACKGROUND_COLOR,
            sizeof (background),
            &background
            );
    }

    return hr;
}

DXVA-HD