D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 구조체(d3d12video.h)
H.264 인코딩에 연결된 EncodeFrame 명령에 대한 그림 수준 컨트롤 요소를 나타냅니다.
구문
typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 {
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS Flags;
D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 FrameType;
UINT pic_parameter_set_id;
UINT idr_pic_id;
UINT PictureOrderCountNumber;
UINT FrameDecodingOrderNumber;
UINT TemporalLayerIndex;
UINT List0ReferenceFramesCount;
UINT *pList0ReferenceFrames;
UINT List1ReferenceFramesCount;
UINT *pList1ReferenceFrames;
UINT ReferenceFramesReconPictureDescriptorsCount;
D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264 *pReferenceFramesReconPictureDescriptors;
UCHAR adaptive_ref_pic_marking_mode_flag;
UINT RefPicMarkingOperationsCommandsCount;
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION *pRefPicMarkingOperationsCommands;
UINT List0RefPicModificationsCount;
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION *pList0RefPicModifications;
UINT List1RefPicModificationsCount;
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION *pList1RefPicModifications;
UINT QPMapValuesCount;
INT8 *pRateControlQPMap;
} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264;
멤버
Flags
인코딩되는 프레임에 대한 구성 플래그를 지정하는 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS 열거형의 값의 비트 OR 조합입니다.
FrameType
그림 형식을 지정하는 D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 열거형의 값입니다. 코덱별 플래그가 지정된 형식을 지원하는지 확인합니다. 이 선택은 호스트가 설정한 GOP 구조 구성과 동기화된 상태로 유지되어야 합니다. GOP는 표시 순서로 정의되며 이 그림 형식 선택은 GOP를 따라야 하지만 인코딩 순서로 수행되어야 합니다.
pic_parameter_set_id
PPS를 참조하기 위해 현재 프레임의 조각 헤더에 사용할 값을 지정하는 UINT 입니다.
idr_pic_id
FrameType**이 D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_IDR_FRAME 경우 프레임에 있는 모든 조각 헤더에 사용할 IDR 프레임의 식별자를 나타내는 UINT입니다.
PictureOrderCountNumber
현재 프레임 표시 순서를 지정하는 UINT 입니다.
FrameDecodingOrderNumber
각 참조 그림 다음에 증가되는 구문 요소 frame_num 조각 머리글에 표시된 대로 의미 체계를 사용하여 프레임 디코딩 순서를 지정하는 UINT 입니다.
TemporalLayerIndex
임시 계층 구조에서 그림 계층 번호를 지정하는 UINT 입니다. D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264 최대 계층 수를 확인합니다.
List0ReferenceFramesCount
이 프레임에 사용할 과거 프레임 참조 수를 지정하는 UINT 입니다. 이 값은 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264 노출된 값과 일치해야 합니다.
pList0ReferenceFrames
이 프레임에 사용할 과거 프레임 참조 프레임 목록을 지정하는 UINT 배열에 대한 포인터입니다. 이 배열 인덱스의 각 정수 값은 pReferenceFramesReconPictureDescriptors 로 변환되어 DPB에 보관된 그림을 참조합니다.
List1ReferenceFramesCount
이 프레임에 사용할 이후 프레임 참조 수를 지정하는 UINT 입니다. 이 값은 D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264 노출된 값과 일치해야 합니다.
pList1ReferenceFrames
이 프레임에 사용할 이후 프레임 참조 프레임 목록을 지정하는 UINT 배열에 대한 포인터입니다. 이 배열 인덱스의 각 정수 값은 pReferenceFramesReconPictureDescriptors 로 변환되어 DPB에 보관된 그림을 참조합니다.
ReferenceFramesReconPictureDescriptorsCount
pReferenceFramesReconPictureDescriptors의 항목 수를 지정하는 UINT입니다.
pReferenceFramesReconPictureDescriptors
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC 유지되는 DPB 버퍼의 현재 상태를 설명하는 UINT 배열에 대한 포인터입니다. ReferenceFrames. pList0ReferenceFrames 및 pList1ReferenceFrames는 과거/미래 참조에서 이 설명자 배열로 인덱스 맵을 나열합니다.
이 설명자 배열은 이 프레임에 대한 참조 그림을 재구성된 그림 배열 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC 리소스 인덱스에 매핑합니다. ReferenceFrames. 또한 각 참조 그림에 대해 인코딩 및 표시 주문 번호와 장기 참조인지 여부를 나타냅니다.
이 배열의 크기는 항상 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC 일치합니다. 연결된 EncodeFrame 명령에 대한 ReferenceFrames.NumTextures입니다.
adaptive_ref_pic_marking_mode_flag
프레임 참조 처리에 대한 의미 체계 모드를 정의하는 UCHAR 입니다.
adaptive_ref_pic_marking_mode_flag 값 | 지정된 참조 그림 표시 모드 |
---|---|
0 | 1 |
슬라이딩 윈도우 참조 그림 표시 모드: 단기 참조 그림에 대한 첫 실행 메커니즘을 제공하는 표시 모드입니다. | 적응형 참조 그림 표시 모드: 참조 그림의 표시를 "참조에 사용되지 않음"으로 지정하고 장기 프레임 인덱스를 할당하는 구문 요소를 제공하는 참조 그림 표시 모드입니다. |
RefPicMarkingOperationsCommandsCount
현재 프레임과 연결된 작업을 표시하는 참조 그림 수를 지정하는 UINT 입니다. adaptive_ref_pic_marking_mode_flag 1로 설정해야 합니다.
pRefPicMarkingOperationsCommands
현재 프레임과 연결된 작업을 표시하는 참조 그림 목록을 나타내는 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION 구조체 배열에 대한 포인터입니다. 이 목록에서 설명하는 작업은 인코딩 세션 중에 적절하게 DPB 설명자에 반영되어야 합니다.
List0RefPicModificationsCount
pList0RefPicModifications의 항목 수를 지정하는 UINT입니다.
pList0RefPicModifications
pList0ReferenceFrames 목록에 대한 참조 그림 목록 수정 작업 목록을 나타내는 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION 구조체 배열에 대한 포인터입니다.
List1RefPicModificationsCount
pList1RefPicModifications의 항목 수를 지정하는 UINT입니다.
pList1RefPicModifications
pList1ReferenceFrames 목록에 대한 참조 그림 목록 수정 작업 목록을 나타내는 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION 구조체 배열에 대한 포인터입니다.
QPMapValuesCount
pRateControlQPMap에 있는 요소 수를 지정하는 UINT입니다. 프레임 해상도를 가장 가까운 정렬 값으로 반올림하여 프레임의 코딩 블록 수와 일치해야 합니다.
pRateControlQPMap
이 프레임의 각 제곱 영역에 사용할 QP 맵 값을 행/열 스캔 순서로 포함하는 Int8 배열에 대한 포인터입니다. QP 맵 차원은 현재 해상도 및 D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS 사용하여 계산할 수 있습니다 . QPMapRegionPixelsSize 제곱 지역 크기를 전달합니다.
설명
현재 프레임이 참조 그림으로 표시된 경우 재구성된 그림 참조 목록의 이후 명령에 배치하려면 호스트의 비트스트림과 함께 재구성된 그림이 출력에 포함되어야 합니다. 이러한 값을 설정하기 전에 일부 프레임 형식을 참조로 표시하고 기능 지원을 검사 제한 사항이 있을 수 있습니다.
다음 표에는 H264 인코딩에 필요한 SPS 및 PPS 값이 나열되어 있습니다.
H264에 대한 Level_idc 매핑
D3D12 수준 | 예상 level_idc | 참고 |
---|---|---|
D3D12_VIDEO_ENCODER_LEVELS_H264_1 | 10 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_1b | 11 | SPS.constraint_set3 1이어야 합니다. |
D3D12_VIDEO_ENCODER_LEVELS_H264_11 | 11 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_12 | 12 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_13 | 13 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_2 | 20 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_21 | 21 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_22 | 22 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_3 | 30 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_31 | 31 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_32 | 32 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_4 | 40 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_41 | 41 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_42 | 42 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_5 | 50 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_51 | 51 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_52 | 52 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_6 | 60 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_61 | 61 | 없음 |
D3D12_VIDEO_ENCODER_LEVELS_H264_62 | 62 | 없음 |
H264 시퀀스 매개 변수 집합 예상 값
구문 요소 | 예상 기본값 | 참고 |
---|---|---|
profile_idc | H264_PROFILE_MAIN/H264_PROFILE_HIGH/H264_PROFILE_HIGH10 열거형 값 | 없음 |
constraint_set0_flag | 0 | 없음 |
constraint_set1_flag | 0 | 없음 |
constraint_set2_flag | 0 | 없음 |
constraint_set3_flag | 0 | D3D12_VIDEO_ENCODER_LEVELS_H264_1b 사용하는 경우 1 |
constraint_set4_flag | 0 | 없음 |
constraint_set5_flag | 0 | 없음 |
reserved_zero_2bits | 0 | 없음 |
level_idc | H264 수준에 대해서는 위의 표를 참조하세요. | 없음 |
seq_parameter_set_id | 사용자별 | 없음 |
chroma_format_idc | 1 | P010 또는 NV12 YUV 4.2.0 형식으로만 사용 |
bit_depth_luma_minus8 | NV12의 경우 0, P010의 경우 2 | 없음 |
qpprime_y_zero_transform_bypass_flag | 0 | 없음 |
seq_scaling_matrix_present_flag | 0 | 없음 |
log2_max_frame_num_minus4 | Same as in D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 | 없음 |
pic_order_cnt_type | Same as in D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 | 이 API에서 지원되는 모드 0 및 2만 |
log2_max_pic_order_cnt_lsb_minus4 | Same as in D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 | pic_order_cnt_type == 0인 경우에만 |
max_num_ref_frames | 인코딩 세션에서 사용되는 최대 참조 그림 수 | 없음 |
gaps_in_frame_num_value_allowed_flag | 0 | 없음 |
pic_width_in_mbs_minus1 | std::ceil(sequenceTargetResolution.Width / 16.0)) - 1; | 없음 |
pic_height_in_map_units_minus1 | std::ceil(sequenceTargetResolution.Height / 16.0)) - 1; | 없음 |
frame_mbs_only_flag | 0 | 인터레이스 지원 없음 |
direct_8x8_inference_flag | D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM 기반 | 없음 |
frame_cropping_flag | 인코딩 해상도에 따라 0 또는 1이 16으로 정렬되었거나 정렬되지 않음 | 없음 |
frame_cropping_rect_left_offset | 0 | frame_cropping_flag = 1인 경우에만 |
frame_cropping_rect_right_offset | ((pic_width_in_mbs_minus1+1) * 16 - sequenceTargetResolution.Width) / 2 | frame_cropping_flag = 1인 경우에만 |
frame_cropping_rect_top_offset | ((pic_height_in_map_units_minus1+1) * 16 - sequenceTargetResolution.Height) / 2 | frame_cropping_flag = 1인 경우에만 |
frame_cropping_rect_bottom_offset | 0 | frame_cropping_flag = 1인 경우에만 |
vui_paramenters_present_flag | 0 | 없음 |
H264 그림 매개 변수 집합 예상 값
구문 요소 | 예상 기본값 | 참고 |
---|---|---|
pic_parameter_set_id | 사용자별 | 없음 |
seq_parameter_set_id | 사용자별 | 없음 |
entropy_coding_mode_flag | D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ENABLE_CABAC_ENCODING 기반 | 없음 |
pic_order_present_flag | 0 | pic_cnt_type 대한 지원만 = 0, 2 |
num_slice_groups_minus1 | 0 | 없음 |
num_ref_idx_l1_active_minus1 | std::max(static_cast<INT>(pictureControl.List0ReferenceFramesCount) - 1, 0) | 없음 |
num_ref_idx_l0_active_minus1 | std::max(static_cast<INT>(pictureControl.List1ReferenceFramesCount) - 1, 0) | 없음 |
weighted_pred_flag | 0 | 없음 |
weighted_bipred_idc | 0 | 없음 |
pic_init_qp_minus26 | 0 | 없음 |
pic_init_qs_minus26 | 0 | 없음 |
chroma_qp_index_offset | 0 | 없음 |
deblocking_filter_control_present_flag | 1 | 없음 |
constrained_intra_pred_flag | D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_CONSTRAINED_INTRAPREDICTION 기반 | 없음 |
redundant_pic_cnt_present_flag | 0 | 없음 |
transform_8x8_mode_flag | D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM 기반 | 상위 프로필을 사용하는 경우에만 |
pic_scaling_matrix_present_flag | 0 | 없음 |
second_chroma_qp_index_offset | 0 | 없음 |
요구 사항
지원되는 최소 클라이언트 | Windows 빌드 22000 |
지원되는 최소 서버 | Windows 빌드 22000 |
머리글 | d3d12video.h |