структура D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 (d3d12video.h)

Представляет элементы управления уровня рисунка для связанной команды EncodeFrame для кодировки H.264.

Синтаксис

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;

Members

Flags

Побитовое сочетание ЗНАЧЕНИй из перечисления D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS , указывающее флаги конфигурации для закодированного кадра.

FrameType

Значение перечисления D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 , указывающее тип рисунка. Убедитесь, что флаги, относящиеся к кодеку, поддерживают указанный тип. Этот выбор должен храниться в синхронизации с конфигурацией структуры GOP, заданной узлом. Обратите внимание, что GOP определен в порядке отображения, и этот выбор типа изображения должен соответствовать GOP, но в порядке кодирования.

pic_parameter_set_id

UINT, указывающий значение, используемое в заголовках среза текущего кадра для ссылки на PPS.

idr_pic_id

Если FrameTypeD3D12_VIDEO_ENCODER_FRAME_TYPE_H264_IDR_FRAME, UINT , указывающий идентификатор кадра IDR, который будет использоваться во всех заголовках среза, присутствующих в кадре.

PictureOrderCountNumber

UINT, указывающий текущий порядок отображения кадров.

FrameDecodingOrderNumber

UINT, указывающий порядок декодирования кадра с семантикой, как указано заголовком среза frame_num элемент синтаксиса, который увеличивается после каждого эталонного рисунка.

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

UINT, указывающий количество записей в pReferenceFramesReconPictureDescriptors.

pReferenceFramesReconPictureDescriptors

Указатель на массив 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 .

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

UINT, указывающий количество элементов в pList0RefPicModifications.

pList0RefPicModifications

Указатель на массив структур D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION , представляющих список операций изменения списка ссылочных рисунков для списка pList0ReferenceFrames .

List1RefPicModificationsCount

UINT, указывающий количество элементов в pList1RefPicModifications.

pList1RefPicModifications

Указатель на массив D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION структур, представляющих список операций изменения списка ссылочных рисунков для списка pList1ReferenceFrames .

QPMapValuesCount

UINT, указывающий количество элементов, присутствующих в pRateControlQPMap. Это должно соответствовать количеству блоков кода в кадре, округляя разрешение кадра до ближайших выровненных значений.

pRateControlQPMap

Указатель на массив Int8 , содержащий в порядке сканирования строк или столбцов, значения карты QP для каждого квадратного региона для этого кадра. Измерения карты QP можно вычислить с помощью текущего разрешения и D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS. QPMapRegionPixelsSize , передавая размеры квадратной области.

Замечания

Обратите внимание, что если текущий кадр помечается как эталонный рисунок, выходные данные должны содержать восстановленный рисунок вместе с бит-потоком для размещения его в будущих командах в восстановленном списке ссылок на рисунки. Обратите внимание, что некоторые типы кадров могут быть помечены как ссылки, перед установкой этих значений проверьте поддержку функций.

В следующих таблицах перечислены ожидаемые значения SPS и PPS для кодирования H264.

сопоставления Level_idc для H264

Уровень D3D12 Ожидаемые level_idc Примечания.
D3D12_VIDEO_ENCODER_LEVELS_H264_1 10 None
D3D12_VIDEO_ENCODER_LEVELS_H264_1b 11 SPS.constraint_set3 должно быть 1
D3D12_VIDEO_ENCODER_LEVELS_H264_11 11 None
D3D12_VIDEO_ENCODER_LEVELS_H264_12 12 None
D3D12_VIDEO_ENCODER_LEVELS_H264_13 13 None
D3D12_VIDEO_ENCODER_LEVELS_H264_2 20 None
D3D12_VIDEO_ENCODER_LEVELS_H264_21 двадцать один None
D3D12_VIDEO_ENCODER_LEVELS_H264_22 двадцать два None
D3D12_VIDEO_ENCODER_LEVELS_H264_3 30 None
D3D12_VIDEO_ENCODER_LEVELS_H264_31 31 None
D3D12_VIDEO_ENCODER_LEVELS_H264_32 32 None
D3D12_VIDEO_ENCODER_LEVELS_H264_4 40 None
D3D12_VIDEO_ENCODER_LEVELS_H264_41 41 None
D3D12_VIDEO_ENCODER_LEVELS_H264_42 42 None
D3D12_VIDEO_ENCODER_LEVELS_H264_5 50 None
D3D12_VIDEO_ENCODER_LEVELS_H264_51 51 None
D3D12_VIDEO_ENCODER_LEVELS_H264_52 52 None
D3D12_VIDEO_ENCODER_LEVELS_H264_6 60 None
D3D12_VIDEO_ENCODER_LEVELS_H264_61 61 None
D3D12_VIDEO_ENCODER_LEVELS_H264_62 62 None

Ожидаемые значения параметров последовательности H264

Элемент Синтаксиса Ожидаемое значение по умолчанию Примечания.
profile_idc Перечисление значения H264_PROFILE_MAIN/H264_PROFILE_HIGH/H264_PROFILE_HIGH10 None
constraint_set0_flag 0 None
constraint_set1_flag 0 None
constraint_set2_flag 0 None
constraint_set3_flag 0 1 при использовании D3D12_VIDEO_ENCODER_LEVELS_H264_1b
constraint_set4_flag 0 None
constraint_set5_flag 0 None
reserved_zero_2bits 0 None
level_idc См. таблицу выше для уровней H264 None
seq_parameter_set_id Конкретный пользователь None
chroma_format_idc 1 Для использования только с форматами P010 или NV12 YUV 4.2.0
bit_depth_luma_minus8 0 для NV12, 2 для P010 None
qpprime_y_zero_transform_bypass_flag 0 None
seq_scaling_matrix_present_flag 0 None
log2_max_frame_num_minus4 То же, что и в D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 None
pic_order_cnt_type То же, что и в D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 Только режимы 0 и 2, поддерживаемые в этом API
log2_max_pic_order_cnt_lsb_minus4 То же, что и в D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 Только если pic_order_cnt_type == 0
max_num_ref_frames Максимальное количество ссылочных рисунков, используемых в сеансе кодирования None
gaps_in_frame_num_value_allowed_flag 0 None
pic_width_in_mbs_minus1 std::ceil(sequenceTargetResolution.Width / 16.0)) - 1; None
pic_height_in_map_units_minus1 std::ceil(sequenceTargetResolution.Height / 16.0)) - 1; None
frame_mbs_only_flag 0 Нет поддержки переплета
direct_8x8_inference_flag На основе D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM None
frame_cropping_flag 0 или 1 в зависимости от разрешения кодирования с выравниванием 16 или нет None
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 None

Ожидаемые значения параметра рисунка H264

Элемент Синтаксиса Ожидаемое значение по умолчанию Примечания.
pic_parameter_set_id Конкретный пользователь None
seq_parameter_set_id Конкретный пользователь None
entropy_coding_mode_flag На основе D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ENABLE_CABAC_ENCODING None
pic_order_present_flag 0 Поддержка только pic_cnt_type = 0, 2
num_slice_groups_minus1 0 None
num_ref_idx_l1_active_minus1 std::max(static_cast<INT>(pictureControl.List0ReferenceFramesCount) — 1, 0) None
num_ref_idx_l0_active_minus1 std::max(static_cast<INT>(pictureControl.List1ReferenceFramesCount) — 1, 0) None
weighted_pred_flag 0 None
weighted_bipred_idc 0 None
pic_init_qp_minus26 0 None
pic_init_qs_minus26 0 None
chroma_qp_index_offset 0 None
deblocking_filter_control_present_flag 1 None
constrained_intra_pred_flag На основе D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_CONSTRAINED_INTRAPREDICTION None
redundant_pic_cnt_present_flag 0 None
transform_8x8_mode_flag На основе D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM Только при использовании высоких профилей
pic_scaling_matrix_present_flag 0 None
second_chroma_qp_index_offset 0 None

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows Build 22000
минимальный поддерживаемый сервер Windows Build 22000
Header d3d12video.h