DXVAHDDDI_STREAM_DATA 구조체(d3dumddi.h)

DXVAHDDDI_STREAM_DATA 구조체는 처리되는 입력 스트림을 설명합니다.

구문

typedef struct _DXVAHDDDI_STREAM_DATA {
  [in] BOOL              Enable;
  [in] UINT              OutputIndex;
  [in] UINT              InputFrameOrField;
  [in] UINT              PastFrames;
  [in] UINT              FutureFrames;
  [in] DXVAHDDDI_SURFACE *pPastSurfaces;
  [in] DXVAHDDDI_SURFACE InputSurface;
  [in] DXVAHDDDI_SURFACE *pFutureSurfaces;
} DXVAHDDDI_STREAM_DATA;

멤버

[in] Enable

입력 스트림을 사용할 수 있는지 여부를 지정하는 부울 값입니다. 런타임에서 사용하도록 설정하는 입력 스트림 수는 드라이버가 DXVAHDDDI_VPDEVCAPS 구조체의 MaxStreamStates 멤버에서 설정하는 수보다 많을 수 없습니다.

[in] OutputIndex

구성된 출력 프레임의 0부터 시작하는 순환 프레임 인덱스 번호입니다.

[in] InputFrameOrField

처리되는 입력 프레임 또는 필드의 0부터 시작하는 프레임 번호입니다.

[in] PastFrames

과거 참조 프레임의 수입니다. 이 숫자는 드라이버가 DXVAHDDDI_VPCAPS 구조체의 PastFrames 멤버에서 설정하는 수보다 작지 않아야 합니다.

[in] FutureFrames

이후 참조 프레임의 수입니다. 이 숫자는 드라이버가 DXVAHDDDI_VPCAPS 구조체의 FutureFrames 멤버에서 설정하는 숫자보다 작지 않아야 합니다.

[in] pPastSurfaces

과거 참조 표면을 설명하는 DXVAHDDDI_SURFACE 구조체의 배열입니다.

[in] InputSurface

입력 화면을 설명하는 DXVAHDDDI_SURFACE 구조체입니다.

[in] pFutureSurfaces

향후 참조 표면을 설명하는 DXVAHDDDI_SURFACE 구조체의 배열입니다.

설명

드라이버는 pPastSurfaces, InputSurfacepFutureSurfaces 멤버가 풀 형식에서 지정하는 표면을 할당해야 하며, 드라이버가 DXVAHDDDI_VPDEVCAPS 구조체의 InputPool 멤버에서 설정하고 다음 표면 유형 중 하나를 사용하여 지정해야 합니다. 그렇지 않으면 드라이버의 VideoProcessBltHD 함수가 오류를 반환합니다.

  • DXVAHD_SURFACE_TYPE_VIDEO_INPUT 또는 DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE 형식으로 만든 비디오 화면입니다.
  • DXVA2_VideoDecodeRenderTarget 형식으로 만들어진 디코딩 렌더링 대상 표면입니다.
  • 오프 스크린 일반 표면.
OutputIndex 멤버는 출력의 프레임 인덱스 번호를 나타내는 0부터 시작하는 순환 번호입니다. 드라이버는 이 출력 인덱스 정보를 사용하여 특정 패턴 또는 주기에서 비디오 처리를 수행합니다. 특히 드라이버가 디인터레이싱, 프레임 속도 변환 및 역 텔레신을 수행하는 경우. 예를 들어 다음과 같은 출력 인덱스 패턴을 사용하여 드라이버는 표시된 비디오 처리를 수행합니다.
  • 일반 및 절반 속도로 프로그레시브 형식:

    OutputIndex = 0, 0,...

  • 2/1 사용자 지정 속도의 점진적 형식(이중 프레임 속도 변환, OutputFrames=2):

    OutputIndex = 0, 1, 0, 1,...

  • 표준 속도로 인터레이스된 형식:

    OutputIndex = 0, 1, 0, 1,... (0: 첫 번째 필드, 1: 두 번째 필드)

  • 절반 속도로 인터레이스된 형식:

    OutputIndex = 0, 0,... (예를 들어 첫 번째 필드와 두 번째 필드는 하나의 프레임에 혼합됩니다.)

  • 4/5 사용자 지정 속도로 인터레이스됨(3:2 역 텔레신, OutputFrames=4):

    OutputIndex = 0, 1, 2, 3, 0, 1, 2, 3,... (0:A, 1:B, 2:C, 3:D 필름 프레임)

InputFrameOrField 멤버는 입력 화면의 프레임 또는 필드 번호를 나타내는 0부터 시작하는 숫자입니다. 예를 들어 다음 입력 프레임 또는 필드 번호로 드라이버는 표시된 비디오 처리를 수행할 수 있습니다.
  • 일반 속도로 프로그레시브 형식 및 인터레이스 형식:

    InputFrameOrField = 0, 1, 2,...

  • 점진적 형식 및 인터레이스 형식(절반 속도):

    InputFrameOrField = 0, 2, 4,...

  • 4/5 사용자 지정 속도로 인터레이스된 형식(3:2 역 텔레신, OutputFrames=4 및 InputFrameOrField=10):

    InputFrameOrField = 0, 0, 0, 0, 0, 10, 10, 10, 20, 20, 20,...

  • 4/15 사용자 지정 속도로 인터레이스된 형식(8:7 역 텔레신, OutputFrames=2 및 InputFrameOrField=15):

    InputFrameOrField = 0, 0, 15, 15, 30, 30,...

애플리케이션은 드라이버가 내부 처리 상태를 다시 설정할 수 있도록 프레임 형식 또는 출력 속도가 변경될 때 OutputIndexInputFrameOrField 멤버를 모두 다시 설정해야 합니다. 프레임 형식 또는 출력 속도 변경에 대한 자세한 내용은 DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATADXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA 참조하세요.

그러나 드라이버가 정상 속도와 절반 속도( DXVAHDDDI_OUTPUT_RATE 열거형의 값) 사이를 전환하는 경우 드라이버는 다시 설정할 필요가 없습니다.

다음 프로세스 시간에 OutputIndexInputFrameOrField 멤버가 모두 변경되지 않은 상태로 유지되면 드라이버는 스트림 처리에서 프레임이 변경되지 않았다고 결정합니다(예: 일시 중지됨). 따라서 드라이버는 캐시된 데이터를 사용하여 프레임을 최적화할 수 있습니다.

드라이버는 참조 프레임이 적게 제공되기 때문에 덜 집약적인 비디오 처리 방법으로 대체해야 합니다. 참조 샘플이 제공되지 않으면 드라이버가 Bob 인터레이스 해제로 대체되어야 합니다.

애플리케이션은 드라이버가 요청하는 참조 프레임보다 과거 및 이후 참조 프레임을 덜 제공할 수 있습니다. 예를 들어 애플리케이션은 다음 조건에서 더 적은 참조 프레임을 제공할 수 있습니다.

  • 프레임 시퀀스의 시작 또는 끝에 있습니다.
  • 프로그레시브와 인터레이스 간 전환.
  • 일반 또는 절반 속도 점진적 스트림입니다.
  • 고품질의 인터레이스 해제가 필요하지 않은 하위 비디오 스트림
  • 프레임 드롭에서 복구하고 프레임 속도를 유지하기 위해 참조 프레임을 제한합니다.
  • 입력에서 프레임 삭제(예: 디코더의 프레임 삭제).
과거 및 이후 참조 프레임은 모두 pPastSurfacespFutureSurfaces 배열 멤버에 이전 프레임에서 최신 프레임까지 임시 순서로 지속적으로 제공됩니다. 예를 들어 배열의 요소 순서는 다음 예제와 같습니다.

pPastSurfaces [] = {..., T-3, T-2, T-1}

InputSurface = T

pFutureSurfaces [] = {T+1, T+2, T+3,...}

입력 및 참조 프레임은 OutputIndexInputFrameOrField 멤버 증가로 현재 위치를 통해 향후 위치에서 과거 위치로 위치를 변경합니다. 예를 들어 입력 화면은 드라이버가 다음 비디오 처리를 수행할 때 OutputIndexInputFrameOrField 증가로 변경됩니다.

  • 일반 속도의 프로그레시브 형식:

    OutputIndex = 0, 0, 0,...

    InputFrameOrField = 0, 1, 2,...

    InputSurface = T, T+1, T+2,...

  • 표준 속도로 인터레이스된 형식:

    OutputIndex = 0, 1, 0, 1, 0, 1,...

    InputFrameOrField = 0, 1, 2, 3, 4, 5,...

    InputSurface = T, T, T+1, T+1, T+2, T+2,...

  • 절반 속도로 인터레이스된 형식:

    OutputIndex = 0, 0, 0,...

    InputFrameOrField = 0, 2, 4,...

    InputSurface = T, T+1, T+2,...

  • 4/5 사용자 지정 속도로 인터레이스된 형식(3:2 역 텔레신, OutputFrames=4 및 InputFrameOrField=10):

    OutputIndex = 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3,...

    InputFrameOrField = 0, 0, 0, 0, 0, 10, 10, 10, 20, 20, 20,...

    InputSurface = T, T, T, T, T+5, T+5, T+5, T+5, T+10, T+10, T+10, T+10,...

  • 4/15 사용자 지정 속도로 인터레이스된 형식(8:7 역 텔레신, OutputFrames=2 및 InputFrameOrField=15):

    OutputIndex = 0, 1, 0, 1, 0, 1,...

    InputFrameOrField = 0, 0, 15, 15, 30, 30,...

    InputSurface = T, T, T+7, T+7, T+15, T+15,... (T+7 프레임에는 15번째 필드가 포함되어 있습니다.)

다음 의사 코드 예제에서는 초당 30프레임(60개 필드)이 인터레이스된 콘텐츠인 3:2 풀다운에서 IVTC(Inverse Telecine)를 수행하는 동안 애플리케이션(APP)과 드라이버(DRV) 간의 상호 작용을 보여 줍니다.
-[60i -> 60p]
DRV: VPGuid[0] requests 1 past and 2 future reference frames.
APP: Creates VPGuid[0] video processor and set output rate to normal.
APP: Decodes frame 0(A0:A1), 1(A0:B1), 2(B0:C1), 3(C0:C1), 4(D0:D1), ...
    :
-APP: VPBltHD(frame x, 0, 1, 2), InputFrameOrField=0, OutputIndex=0
DRV: Bob [0(A0)+0(A1)] = A'
-APP: VPBltHD(frame x, 0, 1, 2), InputFrameOrField=1, OutputIndex=1
DRV: Weave [0(A1)+1(A0)] = A
-APP: VPBltHD(frame 0, 1, 2, 3), InputFrameOrField=2, OutputIndex=0
DRV: Weave [1(A0)+0(A1)] = A
-APP: VPBltHD(frame 0, 1, 2, 3), InputFrameOrField=3, OutputIndex=1
DRV: Weave [1(B1)+2(B0)] = B
-APP: VPBltHD(frame 1, 2, 3, 4), InputFrameOrField=4, OutputIndex=0
DRV: Weave [2(B0)+1(B1)] = B
-APP: VPBltHD(frame 1, 2, 3, 4), InputFrameOrField=5, OutputIndex=1
DRV: Weave [2(C1)+3(C0)] = C
-APP: VPBltHD(frame 2, 3, 4, 5), InputFrameOrField=6, OutputIndex=0
DRV: Weave [3(C0)+3(C1)] = C
-APP: VPBltHD(frame 2, 3, 4, 5), InputFrameOrField=7, OutputIndex=1
DRV: Weave [3(C1)+3(C0)] = C
-APP: VPBltHD(frame 3, 4, 5, 6), InputFrameOrField=8, OutputIndex=0
DRV: Weave [4(D0)+4(D1)] = D
-APP: VPBltHD(frame 3, 4, 5, 6), InputFrameOrField=9, OutputIndex=1
DRV: Weave [4(D1)+4(D0)] = D
    :
-[60i -> 24p]
DRV: VPGuid[1] requests 4 future reference frames.
DRV: Exports CustomRate=4/5, OutputFrames=4, InputInterlaced=TRUE, InputFramesOrFields=10.
APP: Creates VPGuid[1] video processor and set output rate to 4/5 custom rate.
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=0
DRV: Bob [0(A0)+0(A1)] = A' (playback or speed mode) or Weave [0(A0)+0(A1)] = A (quality mode)
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=1
DRV: Weave [1(B1)+2(B0)] = B
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=2
DRV: Weave [3(C0)+3(C1)] = C
-APP: VPBltHD(frame 0, 1, 2, 3, 4), InputFrameOrField=0, OutputIndex=3
DRV: Weave [4(D0)+4(D1)] = D
-APP: VPBltHD(frame 5, 6, 7, 8, 9), InputFrameOrField=10, OutputIndex=0
DRV: Weave [0(A0)+0(A1)] = A
    :

요구 사항

요구 사항
지원되는 최소 클라이언트 DXVAHDDDI_STREAM_DATA Windows 7 운영 체제부터 지원됩니다.
머리글 d3dumddi.h(D3dumddi.h 포함)

추가 정보

DXVAHDDDI_OUTPUT_RATE

DXVAHDDDI_STREAM_STATE_FRAME_FORMAT_DATA

DXVAHDDDI_STREAM_STATE_OUTPUT_RATE_DATA

DXVAHDDDI_SURFACE

DXVAHDDDI_VPCAPS

DXVAHDDDI_VPDEVCAPS

VideoProcessBltHD