Поделиться через


структура 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;

Члены

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

Если frameType** D3D12_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. ReferenceFrames. PList0ReferenceFrames и pList1ReferenceFrames перечисляют индексы из прошлых и будущих ссылок в массив дескрипторов.

Этот массив дескрипторов, в свою очередь, сопоставляет эталонный рисунок для этого кадра с индексом ресурсов в воссозданном массиве рисунков D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames. Кроме того, для каждого эталонного рисунка он указывает порядковый номер кодирования и отображения, а также указывает, является ли он долгосрочной ссылкой.

Размер этого массива всегда соответствует 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 Нет
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

Элемент Syntax Ожидаемое значение по умолчанию Примечания
profile_idc Значение перечисления H264_PROFILE_MAIN/H264_PROFILE_HIGH/H264_PROFILE_HIGH10 Нет
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 Нет
seq_parameter_set_id Конкретный пользователь Нет
chroma_format_idc 1 Для использования только в форматах P010 или NV12 YUV 4.2.0
bit_depth_luma_minus8 0 для NV12, 2 для P010 Нет
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 Нет
pic_order_cnt_type То же, что и в D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 В этом API поддерживаются только режимы 0 и 2
log2_max_pic_order_cnt_lsb_minus4 То же, что и в D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 Только если pic_order_cnt_type == 0
max_num_ref_frames Максимальное число эталонных рисунков, используемых в сеансе кодирования Нет
gaps_in_frame_num_value_allowed_flag 0 None
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 None

H264 Picture Parameter Set ожидаемые значения

Элемент Syntax Ожидаемое значение по умолчанию Примечания
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 None
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 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 Нет
constrained_intra_pred_flag На основе D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_CONSTRAINED_INTRAPREDICTION Нет
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 22000
Минимальная версия сервера Сборка Windows 22000
Верхняя часть d3d12video.h