다음을 통해 공유


D3D12 AV1 비디오 인코딩

Direct3D12 비디오 인코딩 기능은 Windows 11 버전 24H2(WDDM 3.2)부터 AV1 인코딩을 지원하도록 확장되었습니다. 이 문서에서는 기존 D3D12 비디오 인코딩 DDI에서 AV1 인코딩을 지원하기 위해 수정 및 새 구조가 필요한 확장 지점을 설명합니다. 애플리케이션 수준 세부 정보를 비롯한 자세한 내용은 AV1 D3D12 비디오 인코딩 사양을 참조하세요.

속도 제어를 위한 확장

다음 기존 열거형은 속도 제어 및 속도 제어 지원을 위한 확장으로 업데이트됩니다.

D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAG_0096_ENABLE_EXTENSION1_SUPPORT이 사용하도록 설정되면, 확장 속도 제어 구조가 D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS_0080_2.pConfiguration_XXX에 사용됩니다. 그렇지 않으면, D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAGS_0080 참조 페이지에 설명된 테이블에 따라 사용하지 않도록 설정된 경우 레거시 구조가 사용됩니다.

비디오 인코딩 지원 확장

기존 비디오 관련 프레임워크는 드라이버가 AV1 비디오 인코딩 지원 및 기능을 보고할 수 있도록 확장되었습니다. 이 섹션에서는 AV1 비디오 인코딩 지원을 쿼리하고 보고하는 데 사용되는 추가되거나 업데이트된 구조 및 열거형을 나열합니다.

인코딩 작업

AV1에 대한 예상 비트스트림 헤더 값

드라이버/호스트 헤더 코딩 책임

K 타일이 포함된 인코딩된 프레임이 지정된 경우 드라이버는 압축된 비트스트림에 K decode_tile() AV1 구문 요소를 작성하며, 이 요소는 EncodeFrame 인수의 요청된 타일에 해당합니다.

API 클라이언트는 그런 다음 tile_start_and_end_present_flag/tg_start/tg_end 요소를 사용하여 tile_group_obu() AV1 구문 요소를 작성한 후, 타일을 원하는 대로 타일 그룹으로 정렬해야 하며, 이때 타일은 순차적으로 배치되어야 합니다. tile_size_minus_1 요소는 관련 타일 D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA 정보에서 코딩되고 decode_tile() 요소는 압축된 비트스트림 버퍼에서 복사됩니다. 마지막으로 각 tile_group_obu()는 OBU_TILE_GROUP 형식의 open_bitstream_unit() 요소 주위에 래핑되고 OBU_FRAME_HEADER 앞에 추가됩니다. 단일 타일 그룹의 경우 OBU_FRAME 형식을 대신 사용할 수 있습니다.

API 클라이언트는 현재 프레임에서 obu_extension_flag를 \!(TemporalLayerIndexPlus1 || SpatialLayerIndexPlus1)로 유추하고, 필요한 경우 open_bitstream_unit() 내에서 temporal_id와 spatial_id를 코딩할 책임이 있습니다.

EncodeFrame 제출은 D3D12 인코딩 API에 구현된 다른 코덱과 마찬가지로 인코딩 순서로 제공됩니다.

해상도 변경 및 공간 확장성

드라이버가 D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RESOLUTION_RECONFIGURATION_AVAILABLE를 보고하는 경우라 해도, 여전히 키 프레임의 해상도 변경에만 적용됩니다.

활성 시퀀스 헤더에는 사용 중인 연결된 ID3D12VideoEncoderHeap에 있는 최대 해상도로 설정된 max_frame_*_minus_1 구문이 있어야 합니다. 연결된 ID3D12VideoEncoderHeap에 있는 해상도를 사용하는 다른 프레임은 frame_size()의 AV1 구문 frame_size_override_flag 사용하여 해상도 변경을 전달할 수 있습니다.

D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_SWITCH_FRAME 지원되는 경우:

  • 참조 프레임은 인코딩되는 현재 스위치 프레임보다 높거나 같은 해상도를 가리킵니다.
  • 다른 해상도는 모두 사용 중인 연결된 ID3D12VideoEncoderHeap에 있어야 합니다.

마찬가지로 공간 확장성이 지원되는 경우 참조 프레임의 다양한 해상도가 사용 중인 연결된 ID3D12VideoEncoderHeap에 모두 있어야 합니다.

속도 제어 참고 사항

D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_QVBR1_0096.ConstantQualityTarget에 허용되는 범위는 [0..63]입니다. 가장 낮은 값은 최고 품질을 생성합니다.

일반적으로 D3D12DDI_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_RATE_CONTROL_RECONFIGURATION_AVAILABLE 품질과 속도 조정에 적용되며, 다양한 속도 제어 모드의 속도 제어 매개 변수인 CBR, VBR 및 QVBR의 일정한 QP, 비트 전송률 및 품질 수준에 적용됩니다. 드라이버는 지원되지 않는 다른 속도 제어 매개 변수 재구성에 대해 D3D12DDI_VIDEO_ENCODER_OUTPUT_METADATA_0083_0.EncodeErrorFlags 에서 D3D12DDI_VIDEO_ENCODER_ENCODE_ERROR_FLAG_0082_0_RECONFIGURATION_REQUEST_NOT_SUPPORTED를 반환할 수 있습니다.

인코딩 작업 API

AV1 인코딩 작업을 지원하기 위해 확장으로 다음 구조 및 열거형이 추가되거나 업데이트됩니다.

또한, AV1 인코딩을 위해 도입된 AV1 전용 분석 버퍼 레이아웃을 처리할 수 있도록 드라이버의 기존 PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 콜백을 업데이트해야 합니다.