структура D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC (d3d12video.h)
Представляет элементы управления на уровне рисунка для связанной команды кодировщика Кодирование кадра для кодирования HEVC.
Синтаксис
typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC {
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags;
D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC FrameType;
UINT slice_pic_parameter_set_id;
UINT PictureOrderCountNumber;
UINT TemporalLayerIndex;
UINT List0ReferenceFramesCount;
UINT *pList0ReferenceFrames;
UINT List1ReferenceFramesCount;
UINT *pList1ReferenceFrames;
UINT ReferenceFramesReconPictureDescriptorsCount;
D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC *pReferenceFramesReconPictureDescriptors;
UINT List0RefPicModificationsCount;
UINT *pList0RefPicModifications;
UINT List1RefPicModificationsCount;
UINT *pList1RefPicModifications;
UINT QPMapValuesCount;
INT8 *pRateControlQPMap;
} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC;
Члены
Flags
Побитовое сочетание ЗНАЧЕНИй из перечисления D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS, указывающее флаги конфигурации для закодированного кадра.
FrameType
Значение перечисления D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC, указывающее тип рисунка. Убедитесь, что флаги, относящиеся к кодеку, поддерживают указанный тип. Этот выбор должен храниться в синхронизации с конфигурацией структуры GOP, заданной узлом. Обратите внимание, что GOP определен в порядке отображения, и этот выбор типа изображения должен соответствовать GOP, но в порядке кодирования.
slice_pic_parameter_set_id
UINT указание значения, используемого в заголовках среза текущего кадра для ссылки на PPS.
PictureOrderCountNumber
UINT указание текущего порядка отображения кадров.
TemporalLayerIndex
UINT указание номера слоя рисунка в темпоральной иерархии. Проверьте максимальное количество слоев в D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC.
List0ReferenceFramesCount
UINT указание количества прошлых ссылок на кадр, которые будут использоваться для этого кадра. Это значение должно быть согласовано с тем, что было предоставлено в D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC.
pList0ReferenceFrames
Указатель на массив UINT, указывающий список прошлых эталонных кадров для этого кадра. Каждое целочисленное значение в этих индексах массива в pReferenceFramesReconPictureDescriptors для ссылки на изображения, хранящиеся в DPB.
List1ReferenceFramesCount
UINT указание количества будущих ссылок на кадр, которые будут использоваться для этого кадра. Это значение должно быть согласовано с тем, что было предоставлено в D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC.
pList1ReferenceFrames
Указатель на массив UINT, указывающий список будущих эталонных кадров, используемых для этого кадра. Каждое целочисленное значение в этих индексах массива в pReferenceFramesReconPictureDescriptors для ссылки на изображения, хранящиеся в DPB.
ReferenceFramesReconPictureDescriptorsCount
UINT указание количества записей в pReferenceFramesReconPictureDescriptors.
pReferenceFramesReconPictureDescriptors
Указатель на массив UINT UINT, описывающий текущее состояние буфера DPB, сохраненного в D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. Ссылочные кадры. pList0ReferenceFrames и pList1ReferenceFrames перечисляет сопоставления индексов из прошлых и будущих ссылок в этот массив дескрипторов.
Этот массив дескрипторов, в свою очередь, сопоставляет эталонный рисунок этого кадра с индексом ресурсов в восстановленном массиве рисунков D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. Ссылочные кадры. Кроме того, для каждого эталонного рисунка он указывает кодирование и номер заказа на отображение, а также указывает, является ли он долгосрочной ссылкой.
Размер этого массива всегда соответствует D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames.NumTextures для связанной команды EncodeFrame.
List0RefPicModificationsCount
UINT, указывающий количество элементов в pList0RefPicModifications.
pList0RefPicModifications
Указатель на массив UINT , содержащий команды изменения для списка L0.
List1RefPicModificationsCount
UINT указание количества элементов в pList1RefPicModifications.
pList1RefPicModifications
Указатель на массив UINT, содержащий команды изменения для списка L1.
QPMapValuesCount
UINT указание количества элементов, присутствующих в pRateControlQPMap. Это должно соответствовать количеству блоков кода в кадре, округляя разрешение кадра до ближайших выровненных значений.
pRateControlQPMap
Указатель на массив Int8, содержащий значения карты QP в каждом квадратном регионе для этого кадра. Измерения карты QP можно вычислить с помощью текущего разрешения и D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS. QPMapRegionPixelsSize передачи размеров квадратной области.
Замечания
В следующих таблицах перечислены ожидаемые значения VPS, SPS и PPS для кодирования HEVC.
сопоставления Level_idc для HEVC
Уровень D3D12 | Ожидаемые general_level_idc | Примечания |
---|---|---|
D3D12_VIDEO_ENCODER_LEVELS_HEVC_1 | 30 | Соответствует 3 * суффикс уровня перечисления 2 цифры (10) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_2 | 60 | Соответствует 3 * суффикс уровня перечисления 2 цифры (20) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_21 | 63 | Соответствует 3 * суффикс уровня перечисления 2 цифры (21) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_3 | 90 | Соответствует 3 * суффикс уровня перечисления 2 цифры (30) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_31 | 93 | Соответствует 3 * суффикс уровня перечисления 2 цифры (31) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_4 | 20 | Соответствует 3 * суффикс уровня перечисления 2 цифры (40) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_41 | 23 | Соответствует 3 * суффикс уровня перечисления 2 цифры (41) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_5 | 50 | Соответствует 3 * суффикс уровня перечисления 2 цифры (50) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_51 | 53 | Соответствует 3 * суффикс уровня перечисления 2 цифры (51) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_52 | 56 | Соответствует 3 * суффикс уровня перечисления 2 цифры (52) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_6 | 80 | Соответствует 3 * суффикс уровня перечисления 2 цифры (60) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_61 | 83 | Соответствует 3 * суффикс уровня перечисления 2 цифры (61) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_62 | 86 | Соответствует 3 * суффикс уровня перечисления 2 цифры (62) |
Ожидаемые значения набора параметров видео HEVC
Элемент Синтаксиса | Ожидаемое значение по умолчанию | Примечания |
---|---|---|
vps_video_parameter_set_id | Конкретный пользователь | Никакой |
vps_base_layer_internal_flag | 0 | Никакой |
vps_base_layer_available_flag | 0 | Никакой |
vps_max_layers_minus1 | 0 | Никакой |
vps_max_sub_layers_minus1 | 0 | Никакой |
vps_temporal_id_nesting_flag | 1 | Никакой |
vps_reserved_ffff_16bits | 0xFFFF | Никакой |
general_profile_space | 0 | Никакой |
general_tier_flag | 1 для высокого уровня, 0 для основного уровня | Никакой |
general_profile_idc | значение перечисления D3D12_VIDEO_ENCODER_PROFILE_HEVC + 1 | Никакой |
general_profile_compatibility_flag[general_profile_space] | 1 | Никакой |
general_progressive_source_flag | 1 | Никакой |
general_interlaced_source_flag | 0 | Никакой |
general_non_packed_constraint_flag | 1 | Никакой |
general_frame_only_constraint_flag | 1 | Никакой |
general_reserved_zero_44bits | 44-разрядные нули | Никакой |
general_level_idc | См. таблицу выше | Никакой |
vps_sub_layer_ordering_info_present_flag | 0 | Никакой |
vps_max_dec_pic_buffering_minus1[0] | (MaxReferenceFramesInDPB/предыдущие эталонные кадры/ + 1 /дополнительный текущий макет кадра/) - 1/*минус1 для заголовка/; | Никакой |
vps_max_num_reorder_pics[0] | Значение 0, если кадры B отсутствуют. vps_max_dec_pic_buffering_minus1 в противном случае. | Никакой |
vps_max_latency_increase_plus1[0] | 1 | Никакой |
vps_max_layer_id | 0 | Никакой |
vps_num_layer_sets_minus1 | 0 | Никакой |
vps_timing_info_present_flag | 0 | Никакой |
vps_extension_flag | 0 | Никакой |
Ожидаемые значения параметров последовательности HEVC
Элемент Синтаксиса | Ожидаемое значение по умолчанию | Примечания | |
---|---|---|---|
sps_video_parameter_set_id | Конкретный пользователь | Никакой | |
sps_max_sub_layers_minus1 | То же, что и в связанных виртуальных машинах | Никакой | |
sps_temporal_id_nesting_flag | То же, что и в связанных виртуальных машинах | Никакой | |
general_profile_space | 0 | Никакой | |
general_tier_flag | 1 для высокого уровня, 0 для основного уровня | Никакой | |
general_profile_idc | значение перечисления D3D12_VIDEO_ENCODER_PROFILE_HEVC + 1 | Никакой | |
general_profile_compatibility_flag[general_profile_space] | 1 | Никакой | |
general_progressive_source_flag | 1 | Никакой | |
general_interlaced_source_flag | 0 | Никакой | |
general_non_packed_constraint_flag | 1 | Никакой | |
general_frame_only_constraint_flag | 1 | Никакой | |
general_reserved_zero_44bits | 44-разрядные нули | Никакой | |
general_level_idc | См. таблицу выше | Никакой | |
chroma_format_idc | 1 | 4.2.0 для NV12 и P010 | |
pic_width_in_luma_samples | std::ceil(sequenceTargetResolution.Width /BlockPixelsSize)) *BlockPixelsSize | Используйте текущее разрешение кадров для D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS. BlockPixelsSize | |
pic_height_in_luma_samples | std::ceil(sequenceTargetResolution.Height /BlockPixelsSize)) *BlockPixelsSize | Используйте текущее разрешение кадров для D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS. BlockPixelsSize | |
conformance_window_flag | Значение 0, если разрешение выровнено по протоколуBlockPixelsSize, 1 в противном случае | Никакой | |
conf_win_left_offset | 0 | Только если conformance_windows_flag = 1 | |
conf_win_right_offset | (sps.pic_width_in_luma_samples — encodeResolution.Width) >> 1 | Только если conformance_windows_flag = 1 | |
conf_win_top_offset | 0 | Только если conformance_windows_flag = 1 | |
conf_win_bottom_offset | (sps.pic_height_in_luma_samples — encodeResolution.Height) >> 1 | Только если conformance_windows_flag = 1 | |
bit_depth_luma_minus8 | 0 для NV12, 2 для P010 | Никакой | |
bit_depth_luma_minus8 | 0 для NV12, 2 для P010 | Никакой | |
log2_max_pic_order_cnt_lsb_minus4 | На основе D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC | Никакой | |
sps_sub_layer_ordering_info_present_flag | То же, что и в связанных виртуальных машинах | Никакой | |
sps_max_dec_pic_buffering_minus1 | То же, что и в связанных виртуальных машинах | Никакой | |
sps_max_num_reorder_pics | То же, что и в связанных виртуальных машинах | Никакой | |
sps_max_latency_increase_plus1 | То же, что и в связанных виртуальных машинах | Никакой | |
log2_min_luma_coding_block_size_minus3 | std::log2(minCuSize) - 3) | Например, MinCUSize=8 для D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_8x8 | |
log2_diff_max_min_luma_coding_block_size | std::log2(maxCuSize) — std::log2(minCuSize)) | Например, MaxCUSize=16 для D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_16x16 | |
log2_min_transform_block_size_minus2 | std::log2(minTuSize) - 2) | Например, MinTuSize=4 для D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_4x4 | |
log2_diff_max_min_transform_block_size | std::log2(maxTuSize) — std::log2(minTuSize)) | Например, MaxTuSize=16 для D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_16x16 | |
max_transform_hierarchy_depth_inter | На основе D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC | Никакой | |
max_transform_hierarchy_depth_inter | На основе D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC | Никакой | |
scaling_list_enabled_flag | 0 | Никакой | |
amp_enabled_flag | На основе D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_ASYMETRIC_MOTION_PARTITION | Никакой | |
sample_adaptive_offset_enabled_flag | На основе D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_SAO_FILTER | Никакой | |
pcm_enabled_flag | 0 | Никакой | |
num_short_term_ref_pic_sets | 0 | Никакой | |
long_term_ref_pics_present_flag | На основе D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_LONG_TERM_REFERENCES | Никакой | |
num_long_term_ref_pics_sps | 0 | Никакой | |
sps_temporal_mvp_enabled_flag | 0 | Никакой | |
strong_intra_smoothing_enabled_flag | 0 | Никакой | |
vui_parameters_present_flag | 0 | Никакой | |
sps_extension_flag | 0 | Никакой |
Ожидаемые значения параметров рисунка HEVC
Элемент Синтаксиса | Ожидаемое значение по умолчанию | Примечания |
---|---|---|
pps_pic_parameter_set_id | Конкретный пользователь | Никакой |
pps_seq_parameter_set_id | Конкретный пользователь | Никакой |
dependent_slice_segments_enabled_flag | 0 | Никакой |
output_flag_present_flag | 0 | Никакой |
num_extra_slice_header_bits | 0 | Никакой |
sign_data_hiding_enabled_flag | 0 | Никакой |
cabac_init_present_flag | 1 | Никакой |
num_ref_idx_lx_default_active_minus1[0] | std::max(static_cast<INT>(pictureControl.List0ReferenceFramesCount) — 1, 0)) | Никакой |
num_ref_idx_lx_default_active_minus1[1] | std::max(static_cast<INT>(pictureControl.List1ReferenceFramesCount) — 1, 0)) | Никакой |
init_qp_minus26 | 0 | Никакой |
constrained_intra_pred_flag | На основе D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_CONSTRAINED_INTRAPREDICTION | Никакой |
transform_skip_enabled_flag | На основе D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_TRANSFORM_SKIPPING | Никакой |
cu_qp_delta_enabled_flag | 1 | Никакой |
diff_cu_qp_delta_depth | 0 | Никакой |
pps_cb_qp_offset | 0 | Никакой |
pps_cr_qp_offset | 0 | Никакой |
pps_slice_chroma_qp_offsets_present_flag | 1 | Никакой |
weighted_pred_flag | 0 | Нет поддержки взвешированного прогнозирования в API |
weighted_bipred_flag | 0 | Нет поддержки взвешированного прогнозирования в API |
transquant_bypass_enabled_flag | 0 | Никакой |
tiles_enabled_flag | 0 | Никакой |
entropy_coding_sync_enabled_flag | 0 | Никакой |
pps_loop_filter_across_slices_enabled_flag | На основе D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_DISABLE_LOOP_FILTER_ACROSS_SLICES | Никакой |
deblocking_filter_control_present_flag | 1 | Никакой |
deblocking_filter_override_enabled_flag | 0 | Никакой |
pps_deblocking_filter_disabled_flag | 0 | Никакой |
pps_beta_offset_div2 | 0 | Никакой |
pps_tc_offset_div2 | 0 | Никакой |
pps_scaling_list_data_present_flag | 0 | Никакой |
lists_modification_present_flag | 1, если отправка D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC перечисляет изменения. В противном случае задано значение 0. | Никакой |
log2_parallel_merge_level_minus2 | 0 | Никакой |
slice_segment_header_extension_present_flag | 0 | Никакой |
pps_extension_flag | 0 | Никакой |
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows Build 22000 |
минимальный поддерживаемый сервер | Windows Build 22000 |
заголовка | d3d12video.h |