다음을 통해 공유


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 타일로 인코딩된 프레임이 지정된 경우 드라이버는 EncodeFrame 인수의 요청된 타일에 해당하는 압축 비트스트림에 K decode_tile() AV1 구문 요소를 씁니다.

그런 다음 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 콜백을 업데이트해야 합니다.