Compartilhar via


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