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;
}
관련 항목