다음을 통해 공유


D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 구조체(d3d12umddi.h)

D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 구조는 AV1 그림(프레임)의 인코딩을 제어하는 데 필요한 모든 매개 변수를 포함하는 포괄적인 구성 구조입니다.

구문

typedef struct D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 {
  D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAGS           Flags;
  D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095                      FrameType;
  D3D12DDI_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_0095            CompoundPredictionType;
  D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095           InterpolationFilter;
  D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095              FrameRestorationConfig;
  D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095                         TxMode;
  UINT                                                            SuperResDenominator;
  UINT                                                            OrderHint;
  UINT                                                            PictureIndex;
  UINT                                                            TemporalLayerIndexPlus1;
  UINT                                                            SpatialLayerIndexPlus1;
  D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095    ReferenceFramesReconPictureDescriptors[8];
  UINT                                                            ReferenceIndices[7];
  UINT                                                            PrimaryRefFrame;
  UINT                                                            RefreshFrameFlags;
  D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG_0095        LoopFilter;
  D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095  LoopFilterDelta;
  D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG_0095       Quantization;
  D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095 QuantizationDelta;
  D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095                     CDEF;
  UINT                                                            QPMapValuesCount;
  INT16                                                           *pRateControlQPMap;
  D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG_0095             CustomSegmentation;
  D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095                CustomSegmentsMap;
} D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095;

멤버

Flags

인코딩할 프레임의 플래그를 지정하는 D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAGS 열거형입니다.

FrameType

인코딩되는 프레임 형식을 지정하는 D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095 열거형입니다.

CompoundPredictionType

사용할 복합 예측 유형을 지정하는 D3D12DDI_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_0095 열거형입니다. AV1 구문 reference_select 관련됩니다.

InterpolationFilter

현재 프레임의 상호 예측에 사용할 보간 필터를 지정하는 D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095 열거형입니다. 구문 interpolation_filter 관련됩니다.

FrameRestorationConfig

사용할 프레임 복원 구성을 지정하는 D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095 구조체입니다.

TxMode

사용할 변환 모드를 지정하는 D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095 열거형입니다.

SuperResDenominator

슈퍼 해상도에 대한 구성을 나타냅니다. 슈퍼 해상도를 사용하는 경우 AV1 코덱 표준에 정의된 대로 D3D12_VIDEO_ENCODER_AV1_SUPERRES_DENOM_MIN 보다 크거나 같아야 합니다.

OrderHint

현재 프레임 order_hint AV1 구문입니다. ORDERHint 는 AV1 비트스트림에서 주문 힌트를 코딩하지 않더라도 항상 전달되어야 하며 프레임의 표시 순서를 반영해야 합니다.

PictureIndex

이후 프레임에 대한 참조로 고유하게 식별하는 데 사용할 이 프레임의 고유한 그림 인덱스입니다. 이 매개 변수는 AV1 표준 구문과 어떤 식으로든 관련이 없지만 D3D API 클라이언트 구현 추적에만 사용됩니다.

API 클라이언트는 첫 번째 D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME 대해 이 값을 0으로 초기화하고 다음 D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME 때까지 각 후속 프레임에서 하나씩 증가해야 합니다. 이 값은 0으로 다시 설정되고 동일한 프로세스를 따라야 합니다.

OrderHint 는 프레임 및 해당 참조의 고유 식별자로 작동하지 않고 래핑할 수 있는 최대 범위 [0..2^(OrderHintBitsMinus1+1)]가 있으므로 이 용도로 사용할 수 없습니다.

TemporalLayerIndexPlus1

그림 임시 계층 인덱스 및 1. 값이 0이면 임시 확장성이 사용되지 않음을 나타냅니다. 이 값은 [0. 범위 내에 있어야 합니다.D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095. MaxTemporalLayers].

SpatialLayerIndexPlus1

그림 공간 계층 인덱스 및 1 값이 0이면 공간 확장성이 사용되지 않음을 나타냅니다. 이 값은 [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095.MaxSpatialLayers] 범위 내에 있어야 합니다.

ReferenceFramesReconPictureDescriptors[8]

전체의 현재 상태 스냅샷을 설명하는 D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095 구조체 배열(예: 현재 프레임에서 사용되지 않지만 이후 프레임 등에서 사용되는 프레임 포함) DPB 버퍼는 D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0 유지됩니다. ReferenceFrames. 참조 인덱스(예: last, altref 등)는 과거/미래 참조에서 이 설명자 배열로 매핑됩니다. AV1 코덱은 DPB에서 최대 8개의 참조를 허용합니다.

이 설명자 배열은 이 프레임에 대한 참조 그림을 재구성된 그림 배열 D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0.ReferenceFrames의 리소스 인덱스에 매핑합니다.

이 배열의 크기는 항상 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC 일치합니다. 연결된 EncodeFrame 명령에 대한 ReferenceFrames.NumTextures입니다.

ReferenceIndices[7]

ref_frame_idx[i] AV1 구문에 해당합니다. 참조 형식 i의 경우 ReferenceIndices[i]는 현재 프레임 i번째 참조 형식이 DPB에 저장된 ReferenceFramesReconPictureDescriptors 로 [0.7] 사이의 인덱스를 나타냅니다. 즉 , ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]에는 ith 참조 형식에 대한 DPB 설명자가 포함되어 있습니다.

ReferenceIndices[]의 ith 항목은 다음과 같이 각 참조 형식에 해당합니다.

인덱스 i 참조 형식 ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]
0 마지막 마지막에 대한 DPB 설명자
1 Last2 Last2에 대한 DPB 설명자
2 마지막 3 Last3에 대한 DPB 설명자
3 황금 골든용 DPB 설명자
4 Bwdref Bwdref용 DPB 설명자
5 Altref Altref용 DPB 설명자
6 Altref2 Altref2용 DPB 설명자

PrimaryRefFrame

uncompressed_header()의 AV1 요소 구문 primary_ref_frame 해당합니다. 프레임의 시작 부분에 로드해야 하는 CDF 값 및 기타 상태를 포함하는 참조 프레임을 지정합니다. 허용되는 범위는 [0..7]이며 값은 다음과 같습니다.

PrimaryRefFrame 값 AV1 구문 값(primary_ref_frame) 선택한 참조 프레임
0 0 마지막
1 1 Last2
2 2 마지막 3
3 3 황금
4 4 Bwdref
5 5 Altref
6 6 Altref2
7 7(PRIMARY_REF_NONE) 없음

RefreshFrameFlags

refresh_frame_flags AV1 구문 요소에 해당합니다.

LoopFilter

사용할 루프 필터 매개 변수를 지정하는 D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG_0095 구조체입니다.

LoopFilterDelta

사용할 루프 필터 델타 매개 변수를 지정하는 D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095 구조체입니다.

Quantization

사용할 양자화 매개 변수를 지정하는 D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG_0095 구조체입니다.

QuantizationDelta

사용할 수량화 델타 매개 변수를 지정하는 D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095 구조체입니다.

CDEF

사용할 제한된 CDEF(방향 향상 필터링) 매개 변수를 지정하는 D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095 구조체입니다.

QPMapValuesCount

pRateControlQPMap에 있는 요소 수를 포함합니다. 이 값은 프레임의 코딩 블록 수와 일치하여 프레임 해상도를 가장 가까운 정렬 값으로 반올림해야 합니다.

pRateControlQPMap

행/열 검색 순서로 이 프레임의 각 제곱 영역에서 사용할 QP 맵 값을 포함하는 배열입니다. QP 맵 차원은 현재 해상도 및 D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2 사용하여 계산할 수 있습니다. QPMapRegionPixelsSize 제곱 영역 크기를 전달합니다. 델타 QP 값의 범위는 [-255; 255].

CustomSegmentation

사용할 사용자 지정 구분 매개 변수를 지정하는 D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG_0095 구조체입니다. 현재 프레임에 대해 D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM 설정된 경우에만 사용됩니다.

CustomSegmentsMap

현재 프레임에 대해 D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM 설정된 경우에만 사용됩니다. CustomSegmentation.UpdateMap이 설정된 경우 사용할 사용자 지정 구분 맵을 지정하는 D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095 구조체입니다. 그렇지 않으면 세그먼트 맵이 참조 프레임에서 상속됩니다.

설명

DPB Management 기대치

다음은 API 클라이언트와 드라이버가 이 API를 사용할 때 준수해야 하는 계약입니다.

  1. D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME 인코딩하는 경우:

    • PrimaryRefFrame 은 7(PRIMARY_REF_NONE)이어야 합니다.
    • RefreshFrameFlags는 0xFF(AV1 코덱 표준 비트스트림 구문 준수)
    • ReferenceFramesReconPictureDescriptors의 모든 배열 항목에 대해 ReconstructedPictureResourceIndex를 D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
    • ReferenceIndices[7]의 값은 모든 값 [0..7]이 위의 지점에 따라 ReferenceFramesReconPictureDescriptors에서 사용되지 않는 DPB 슬롯을 가리키기 때문에 불분명합니다.
    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0082_0 다음과 같이 채워집니다.
      • NumTexture2Ds = 0
      • ppTexture2Ds = NULL
      • pSubresources = NULL
  2. 참조를 사용하여 프레임 형식을 인코딩하는 경우(예: SWITCH/INTER:

    • PrimaryRefFrame은 프레임의 시작 부분에 로드해야 하는 CDF 값 및 기타 상태를 포함하는 참조 프레임을 지정합니다.

    • RefreshFrameFlags는 인코딩 실행 후 현재 인코딩된 프레임 재구성된 그림이 배치될 ReferenceFramesReconPictureDescriptors DPB 슬롯을 나타내기 위해 적절하게 설정되어야 합니다. 이 값은 API 클라이언트가 현재 프레임의 연결된 그림 헤더에서 REFRESH_FRAME_FLAGS AV1 구문 요소에 대해 코딩할 것과 정확히 일치해야 합니다.

    • 현재 프레임에 대한 ReferenceFramesReconPictureDescriptors 의 배열 항목은 이전 프레임에 대해 표시된 RefreshFrameFlags 를 정확히 따릅니다.

    • ReferenceIndices[7]의 값은 [0..7] 내에 있으며 ReferenceFramesReconPictureDescriptors의 DPB 슬롯을 가리킵니다.

    • ReferenceIndices[7]의 값은 ref_frame_idx 대한 그림 헤더의 API 클라이언트 코드와 정확히 일치해야 합니다.

    • ref_frame_idx AV1 구문 정의에 따라 배열 항목 값이 고유해야 한다는 요구 사항은 없습니다.

    • ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]인 경우 ReconstructedPictureResourceIndex == D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX

      • 이는 참조 그림 i-th가 현재 프레임에 사용되지 않으며 무시되어야 했음을 나타냅니다.
    • 그렇지 않으면 (유효한 ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]. ReconstructedPictureResourceIndex)

      • 이는 참조 i-th가 DPB 슬롯 ReferenceIndices[i]를 가리키고 사용할 재구성된 그림이 D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 나타냅니다. ppTexture2Ds[ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]].ReconstructedPictureResourceIndex]
    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 다음과 같이 채워집니다.

      • NumTexture2Ds = { ReferenceFramesReconPictureDescriptors의 고유 값 수입니다.ReconstructedPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX for j in {0..7} }
      • ppTexture2Ds = { 압축 배열(null 항목 없음) 참조로 사용할 이전에 인코딩된 프레임의 재구성된 그림을 포함하는 }
      • [텍스처 배열 모드만 해당] pSubresources = { 압축 배열(null 항목 없음) 참조로 사용할 이전에 인코딩된 프레임에서 텍스처 배열의 하위 리소스 인덱스를 포함하는 }
  3. 참조 없이 DPB를 지우지 않고 프레임 형식을 인코딩하는 경우(즉. INTRA_ONLY)

    • PrimaryRefFrame 은 7(PRIMARY_REF_NONE)이어야 합니다.

    • RefreshFrameFlags는 인코딩 실행 후 현재 인코딩된 프레임 재구성된 그림이 배치될 ReferenceFramesReconPictureDescriptors DPB 슬롯을 나타내기 위해 적절하게 설정되어야 합니다. 이 값은 API 클라이언트가 현재 프레임의 연결된 그림 헤더에서 REFRESH_FRAME_FLAGS AV1 구문 요소에 대해 코딩할 것과 정확히 일치해야 합니다.

    • 현재 프레임에 대한 ReferenceFramesReconPictureDescriptors 의 배열 항목은 이전 프레임에 대해 표시된 RefreshFrameFlags를 정확히 따릅니다.

    • 참조 전용 프레임에서 참조를 사용하지 않으므로 ReferenceIndices[7]의 값은 무시됩니다.

    • D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 DPB 스냅샷을 포함하며 다음과 같이 채워집니다.

      • NumTexture2Ds = {ReferenceFramesReconPictureDescriptors고유 값 수입니다.ReconstructedPictureResourceIndex[j] != {0..7} } 의 j에 대한 D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
      • ppTexture2Ds = ReferenceFramesReconPictureDescriptors에서 참조한 이전에 인코딩된 프레임의 재구성된 그림을 포함하는 { 압축 배열(null 항목 없음)입니다.{0..7} } 의 j에 대한 ReconstructedPictureResourceIndex[j]
      • [텍스처 배열 모드만 해당] pSubresources = { Compact array(null 항목 없음)는 ReferenceFramesReconPictureDescriptors가 참조한 이전에 인코딩된 프레임의 텍스처 배열의 하위 리소스 인덱스를 포함합니다.{0..7} } 의 j에 대한 ReconstructedPictureResourceIndex[j]

자세한 내용은 D3D12 AV1 비디오 인코딩을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 11 버전 24H2(WDDM 3.2)
머리글 d3d12umddi.h

추가 정보

D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_0082_0