estrutura D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 (d3d12video.h)
Representa os elementos de controle de nível de imagem para o comando EncodeFrame associado para codificação H.264.
Sintaxe
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;
Membros
Flags
Uma combinação OR bit a bit de valores da enumeração D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS especificando sinalizadores de configuração para o quadro que está sendo codificado.
FrameType
Um valor da enumeração D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 especificando o tipo de imagem. Verifique se os sinalizadores específicos do codec dão suporte ao tipo especificado. Essa seleção deve ser mantida em sincronia com a configuração da estrutura GOP definida pelo host. Observe que o GOP é definido em ordem de exibição e essa seleção de tipo de imagem deve seguir o GOP, mas na ordem de codificação.
pic_parameter_set_id
Um UINT que especifica o valor a ser usado nos cabeçalhos de fatia do quadro atual para fazer referência ao PPS.
idr_pic_id
Quando FrameType** é D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_IDR_FRAME, um UINT indicando o identificador do quadro IDR a ser usado em todos os cabeçalhos de fatias presentes no quadro.
PictureOrderCountNumber
Um UINT que especifica a ordem de exibição do quadro atual.
FrameDecodingOrderNumber
Um UINT que especifica a ordem de decodificação de quadro com semântica, conforme indicado pelo cabeçalho de fatia frame_num elemento de sintaxe que incrementa após cada imagem de referência.
TemporalLayerIndex
Um UINT que especifica o número da camada de imagem na hierarquia temporal. Verifique o número máximo de camadas em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264.
List0ReferenceFramesCount
Um UINT que especifica o número de referências de quadros anteriores a serem usadas para esse quadro. Esse valor deve ser coerente com o que foi exposto em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264.
pList0ReferenceFrames
Um ponteiro para uma matriz UINT que especifica a lista de quadros de referência de quadros anteriores a serem usados para esse quadro. Cada valor inteiro nessa matriz indicia em pReferenceFramesReconPictureDescriptors para referenciar imagens mantidas no DPB.
List1ReferenceFramesCount
Um UINT que especifica o número de referências de quadro futuras a serem usadas para esse quadro. Esse valor deve ser coerente com o que foi exposto em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264.
pList1ReferenceFrames
Um ponteiro para uma matriz UINT que especifica a lista de quadros de referência de quadros futuros a serem usados para esse quadro. Cada valor inteiro nessa matriz indicia em pReferenceFramesReconPictureDescriptors para referenciar imagens mantidas no DPB.
ReferenceFramesReconPictureDescriptorsCount
Um UINT que especifica o número de entradas em pReferenceFramesReconPictureDescriptors.
pReferenceFramesReconPictureDescriptors
Um ponteiro para uma matriz UINT que descreve o estado atual do buffer DPB mantido em D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames. Os pList0ReferenceFrames e pList1ReferenceFrames listam o mapa de índices de referências passadas/futuras para essa matriz de descritores.
Essa matriz de descritores, por sua vez, mapeia uma imagem de referência para esse quadro em um índice de recursos na matriz de imagens reconstruída D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames. Além disso, para cada imagem de referência, indica o número da ordem de codificação e exibição e se é uma referência de longo prazo.
O tamanho dessa matriz sempre corresponde a D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames.NumTextures para o comando EncodeFrame associado.
adaptive_ref_pic_marking_mode_flag
Um UCHAR definindo um modo semântico para o tratamento de referência de quadro.
adaptive_ref_pic_marking_mode_flag valor | Modo de marcação de imagem de referência especificado |
---|---|
0 | 1 |
Modo de marcação de imagem de referência de janela deslizante: um modo de marcação que fornece um mecanismo de primeira saída para imagens de referência de curto prazo. | Modo de marcação de imagem de referência adaptável: um modo de marcação de imagem de referência que fornece elementos de sintaxe para especificar a marcação de imagens de referência como "não usadas para referência" e atribuir índices de quadro de longo prazo. |
RefPicMarkingOperationsCommandsCount
Um UINT que especifica o número de imagens de referência que marcam operações associadas ao quadro atual. Requer que adaptive_ref_pic_marking_mode_flag seja definido como 1.
pRefPicMarkingOperationsCommands
Um ponteiro para uma matriz de estruturas D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION que representam a lista de imagens de referência que marcam operações associadas ao quadro atual. As operações descritas por essa lista precisam ser refletidas nos descritores do DPB adequadamente durante a sessão de codificação.
List0RefPicModificationsCount
Um UINT que especifica o número de itens em pList0RefPicModifications.
pList0RefPicModifications
Um ponteiro para uma matriz de estruturas D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION que representam a lista de operações de modificação de lista de imagens de referência para a lista pList0ReferenceFrames .
List1RefPicModificationsCount
Um UINT que especifica o número de itens em pList1RefPicModifications.
pList1RefPicModifications
Um ponteiro para uma matriz de estruturas D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION que representam a lista de operações de modificação da lista de imagens de referência para a lista pList1ReferenceFrames .
QPMapValuesCount
Um UINT que especifica o número de elementos presentes em pRateControlQPMap. Isso deve corresponder ao número de blocos de codificação no quadro, arredondando a resolução do quadro para os valores alinhados mais próximos.
pRateControlQPMap
Um ponteiro para uma matriz de Int8 que contém, na ordem de verificação de linha/coluna, os valores de mapa de QP a serem usados em cada região quadrada para esse quadro. As dimensões do mapa QP podem ser calculadas usando a resolução atual e D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS. QPMapRegionPixelsSize transmitindo os tamanhos de região quadrada.
Comentários
Observe que, se o quadro atual for marcado como uma imagem de referência, a saída deverá conter a imagem reconstruída junto com o bitstream para que o host a coloque em comandos futuros na lista de referência de imagens reconstruídas. Observe que pode haver limitações para alguns tipos de quadro a serem marcados como referências, marcar suporte a recursos antes de definir esses valores.
As tabelas a seguir listam os valores de SPS e PPS esperados para codificação H264.
Level_idc mapeamentos para H264
Nível D3D12 | Level_idc esperado | Observações |
---|---|---|
D3D12_VIDEO_ENCODER_LEVELS_H264_1 | 10 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_1b | 11 | SPS.constraint_set3 deve ser 1 |
D3D12_VIDEO_ENCODER_LEVELS_H264_11 | 11 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_12 | 12 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_13 | 13 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_2 | 20 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_21 | 21 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_22 | 22 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_3 | 30 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_31 | 31 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_32 | 32 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_4 | 40 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_41 | 41 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_42 | 42 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_5 | 50 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_51 | 51 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_52 | 52 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_6 | 60 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_61 | 61 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_H264_62 | 62 | Nenhum |
Valores esperados do conjunto de parâmetros de sequência H264
Elemento Syntax | Valor padrão esperado | Observações |
---|---|---|
profile_idc | Valor de enumeração de H264_PROFILE_MAIN/H264_PROFILE_HIGH/H264_PROFILE_HIGH10 | Nenhum |
constraint_set0_flag | 0 | Nenhum |
constraint_set1_flag | 0 | Nenhum |
constraint_set2_flag | 0 | Nenhum |
constraint_set3_flag | 0 | 1 se estiver usando D3D12_VIDEO_ENCODER_LEVELS_H264_1b |
constraint_set4_flag | 0 | Nenhum |
constraint_set5_flag | 0 | Nenhum |
reserved_zero_2bits | 0 | Nenhum |
level_idc | Consulte a tabela acima para níveis H264 | Nenhum |
seq_parameter_set_id | Específico do usuário | Nenhum |
chroma_format_idc | 1 | Somente para uso com formatos P010 ou NV12 YUV 4.2.0 |
bit_depth_luma_minus8 | 0 para NV12, 2 para P010 | Nenhum |
qpprime_y_zero_transform_bypass_flag | 0 | Nenhum |
seq_scaling_matrix_present_flag | 0 | Nenhum |
log2_max_frame_num_minus4 | O mesmo que em D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 | Nenhum |
pic_order_cnt_type | O mesmo que em D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 | Somente os modos 0 e 2 com suporte nesta API |
log2_max_pic_order_cnt_lsb_minus4 | O mesmo que em D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 | Somente se pic_order_cnt_type == 0 |
max_num_ref_frames | Número máximo de imagens de referência usadas na sessão de codificação | Nenhum |
gaps_in_frame_num_value_allowed_flag | 0 | Nenhum |
pic_width_in_mbs_minus1 | std::ceil(sequenceTargetResolution.Width / 16.0)) - 1; | Nenhum |
pic_height_in_map_units_minus1 | std::ceil(sequenceTargetResolution.Height / 16.0)) - 1; | Nenhum |
frame_mbs_only_flag | 0 | Sem suporte de entrelaçamento |
direct_8x8_inference_flag | Com base em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM | Nenhum |
frame_cropping_flag | 0 ou 1, dependendo da resolução de codificação ser 16 alinhada ou não | Nenhum |
frame_cropping_rect_left_offset | 0 | Somente se frame_cropping_flag = 1 |
frame_cropping_rect_right_offset | ((pic_width_in_mbs_minus1+1) * 16 - sequenceTargetResolution.Width) / 2 | Somente se frame_cropping_flag = 1 |
frame_cropping_rect_top_offset | ((pic_height_in_map_units_minus1+1) * 16 – sequenceTargetResolution.Height) / 2 | Somente se frame_cropping_flag = 1 |
frame_cropping_rect_bottom_offset | 0 | Somente se frame_cropping_flag = 1 |
vui_paramenters_present_flag | 0 | Nenhum |
Valores esperados do Conjunto de Parâmetros de Imagem H264
Elemento de sintaxe | Valor padrão esperado | Observações |
---|---|---|
pic_parameter_set_id | Específico do usuário | Nenhum |
seq_parameter_set_id | Específico do usuário | Nenhum |
entropy_coding_mode_flag | Com base em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ENABLE_CABAC_ENCODING | Nenhum |
pic_order_present_flag | 0 | Suporte somente para pic_cnt_type = 0, 2 |
num_slice_groups_minus1 | 0 | Nenhum |
num_ref_idx_l1_active_minus1 | std::max(static_cast<INT>(pictureControl.List0ReferenceFramesCount) - 1, 0) | Nenhum |
num_ref_idx_l0_active_minus1 | std::max(static_cast<INT>(pictureControl.List1ReferenceFramesCount) - 1, 0) | Nenhum |
weighted_pred_flag | 0 | Nenhum |
weighted_bipred_idc | 0 | Nenhum |
pic_init_qp_minus26 | 0 | Nenhum |
pic_init_qs_minus26 | 0 | Nenhum |
chroma_qp_index_offset | 0 | Nenhum |
deblocking_filter_control_present_flag | 1 | Nenhum |
constrained_intra_pred_flag | Com base em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_CONSTRAINED_INTRAPREDICTION | Nenhum |
redundant_pic_cnt_present_flag | 0 | Nenhum |
transform_8x8_mode_flag | Com base em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM | Somente se estiver usando Perfis altos |
pic_scaling_matrix_present_flag | 0 | Nenhum |
second_chroma_qp_index_offset | 0 | Nenhum |
Requisitos
Cliente mínimo com suporte | Windows Build 22000 |
Servidor mínimo com suporte | Windows Build 22000 |
Cabeçalho | d3d12video.h |