다음을 통해 공유


PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 콜백 함수(d3d12umddi.h)

PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 콜백 함수는 인코딩 작업의 출력 메타데이터를 읽을 수 있는 형식으로 resolve 명령을 기록합니다.

구문

PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 Pfnd3d12ddiVideoEncodeResolveOutputMetadata00820;

void Pfnd3d12ddiVideoEncodeResolveOutputMetadata00820(
  [in]  D3D12DDI_HCOMMANDLIST hDrvCommandList,
  [in]  const D3D12DDI_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS_0080_2 *pInputArguments,
  [out] const D3D12DDI_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS_0082_0 *pOutputArguments
)
{...}

매개 변수

[in] hDrvCommandList

명령 목록의 드라이버 데이터에 대한 핸들입니다. 드라이버는 이 메모리 영역을 사용하여 명령 목록과 관련된 내부 데이터 구조를 저장합니다.

[in] pInputArguments

이 콜백에 대한 입력 인수를 포함하는 D3D12DDI_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS_0080_2 구조체에 대한 포인터입니다.

[out] pOutputArguments

이 콜백의 출력을 저장할 D3D12DDI_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS_0082_0 구조체에 대한 포인터입니다.

반환 값

없음

설명

모든 인코더의 경우 드라이버는 ResolvedLayoutEncoderMetadataDrvBuffer의 메모리에 모든 레이아웃 정보를 연속적으로 배치해야 합니다. API 클라이언트는 인코더 유형(드라이버 수준의 D3D12DDI_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS_0080_2.EncoderCodec )에 따라 이 메타데이터를 구문 분석합니다.

H264/HEVC 코덱에 대한 ResolvedLayoutEncoderMetadataDrvBuffer

H264 및 HEVC 인코더(AV1 확장이 추가되기 전에 지원되는 형식)의 경우 확인된 버퍼 메모리 레이아웃이 변경되지 않습니다.

  • D3D12DDI_VIDEO_ENCODER_OUTPUT_METADATA_0083_0 구조체

  • WrittenSubregionsCount 형식의 요소는 압축 된 출력 비트스트림에 기록된 순서대로 각 타일을 나타내는 D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_METADATA_0083_0.

  • 호출자는 ResolveEncoderOutputMetadata에 대한 H264/HEVC 레이아웃을 통해 확인된 메타데이터 버퍼의 최대 크기를 유추할 수 있습니다.

AV1 코덱에 대한 ResolvedLayoutEncoderMetadataDrvBuffer

WINDOWS 11 버전 24H2(WDDM 3.2)에 추가된 AV1 인코딩(pInputArguments-EncoderCodec>는 D3D12DDI_VIDEO_ENCODER_CODEC_0095_AV1 동일)의 경우 드라이버는 추가된 AV1 관련 확인된 버퍼 레이아웃을 사용해야 합니다.

  • 메모리 레이아웃은 다음과 같이 정의됩니다.

    • D3D12DDI_VIDEO_ENCODER_OUTPUT_METADATA_0083_0 구조체

    • WrittenSubregionsCount 형식의 요소는 압축 된 출력 비트스트림에 기록된 순서대로 각 타일을 나타내는 D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_METADATA_0083_0.

      • bSize = tile_size_minus_1 + 1 + bStartOffset
      • bStartOffset = 이 타일을 기준으로 건너뛸 바이트이며 실제 비트스트림으로 코딩된 타일 크기는 tile_size_minus_1 = (bSize - bStartOffset - 1)입니다.
      • bHeaderSize = 0
      • i-th 타일은 오프셋 = [sum j = (0, (i-1)){ 타일[j].bSize }] + 타일[i].bStartOffset을 사용하여 compressed_bitstream[offset]에서 읽습니다.
    • 인코딩된 프레임 타일 그리드 구조를 나타내는 D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES_0095 구조체

    • D3D12DDI_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_0095 GPU에서 EncodeFrame 의 실행 후에만 가져온 인코딩 메타데이터 값을 나타내는 구조입니다.

  • 호출자는 ResolveEncoderOutputMetadata의 AV1 레이아웃을 통해 확인된 메타데이터 버퍼의 최대 크기를 유추할 수 있습니다.

    • MaxTiles = D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2.MaxSubregionsNumber;
    • MaxEncoderOutputMetadataResolvedBufferSize = sizeof(D3D12DDI_VIDEO_ENCODER_OUTPUT_METADATA_0083_0) + (MaxTiles * sizeof(D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_METADATA_0083_0)); + sizeof(D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES_0095) + sizeof(D3D12DDI_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_0095)

일반 정보는 D3D12 비디오 인코딩을 참조하세요.

요구 사항

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

추가 정보

PFND3D12DDI_VIDEO_ENCODE_FRAME_0082_0