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 확장이 추가되기 전에 지원되는 형식)의 경우 확인된 버퍼 메모리 레이아웃이 변경되지 않습니다.
WrittenSubregionsCount 형식의 요소는 압축 된 출력 비트스트림에 기록된 순서대로 각 타일을 나타내는 D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_METADATA_0083_0.
호출자는 ResolveEncoderOutputMetadata에 대한 H264/HEVC 레이아웃을 통해 확인된 메타데이터 버퍼의 최대 크기를 유추할 수 있습니다.
- maxSliceNumber = D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2.MaxSubregionsNumber;
- MaxEncoderOutputMetadataResolvedBufferSize = sizeof(D3D12DDI_VIDEO_ENCODER_OUTPUT_METADATA_0083_0) + (maxSliceNumber * sizeof(D3D12DDI_VIDEO_ENCODER_FRAME_SUBREGION_METADATA_0083_0))
AV1 코덱에 대한 ResolvedLayoutEncoderMetadataDrvBuffer
WINDOWS 11 버전 24H2(WDDM 3.2)에 추가된 AV1 인코딩(pInputArguments-EncoderCodec>는 D3D12DDI_VIDEO_ENCODER_CODEC_0095_AV1 동일)의 경우 드라이버는 추가된 AV1 관련 확인된 버퍼 레이아웃을 사용해야 합니다.
메모리 레이아웃은 다음과 같이 정의됩니다.
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 |