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