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;

Members

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 na ordem de exibição e essa seleção de tipo de imagem deve seguir o GOP, mas em 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 especificando a lista de quadros de referência de quadros anteriores a serem usados para esse quadro. Cada valor inteiro nesta matriz indicia em pReferenceFramesReconPictureDescriptors para referenciar imagens mantidas no DPB.

List1ReferenceFramesCount

Um UINT que especifica o número de referências futuras de quadro 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 especificando a lista de quadros de referência de quadro futuros a serem usados para esse quadro. Cada valor inteiro nesta 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. O pList0ReferenceFrames e pList1ReferenceFrames listam o mapa de índices de referências passadas/futuras nessa 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ídas D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames. Além disso, para cada imagem de referência, ela 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 D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames.NumTextures para o comando EncodeFrame associado.

adaptive_ref_pic_marking_mode_flag

Um UCHAR que define 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 entrada 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 operações de marcação de imagens de referência associadas ao quadro atual. Requer que adaptive_ref_pic_marking_mode_flag esteja 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 operações de marcação de imagens de referência associadas ao quadro atual. As operações descritas por essa lista precisam ser refletidas nos descritores 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 de 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 pList0ReferenceFrames .

List1RefPicModificationsCount

Um UINT que especifica o número de itens em pList1RefPicModifications.

pList1RefPicModifications

Um ponteiro para uma matriz de estruturas de 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 de QP podem ser calculadas usando a resolução atual e D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS. QPMapRegionPixelsSize que transmite os tamanhos de região quadrada.

Observações

Observe que, se o quadro atual estiver marcado como uma imagem de referência, a saída deverá conter a imagem reconstruída juntamente 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 que alguns tipos de quadro sejam marcados como referências, verifique o suporte ao recurso antes de definir esses valores.

As tabelas a seguir listam os valores de SPS e PPS esperados para codificação H264.

mapeamentos de Level_idc para H264

Nível D3D12 Level_idc esperado Anotações
D3D12_VIDEO_ENCODER_LEVELS_H264_1 10 None
D3D12_VIDEO_ENCODER_LEVELS_H264_1b 11 SPS.constraint_set3 deve ser 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 21 None
D3D12_VIDEO_ENCODER_LEVELS_H264_22 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

Valores esperados do conjunto de parâmetros de sequência H264

Elemento de sintaxe Valor padrão esperado Anotações
profile_idc Valor de enumeração de 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 se estiver usando D3D12_VIDEO_ENCODER_LEVELS_H264_1b
constraint_set4_flag 0 None
constraint_set5_flag 0 None
reserved_zero_2bits 0 None
level_idc Consulte a tabela acima para níveis H264 None
seq_parameter_set_id Específico do usuário None
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 None
qpprime_y_zero_transform_bypass_flag 0 None
seq_scaling_matrix_present_flag 0 None
log2_max_frame_num_minus4 O mesmo que em D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 None
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 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 Sem suporte para entrelaçamento
direct_8x8_inference_flag Com base em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM None
frame_cropping_flag 0 ou 1, dependendo da resolução de codificação ser 16 alinhada ou não None
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 None

Valores esperados do Conjunto de Parâmetros de Imagem H264

Elemento de sintaxe Valor padrão esperado Anotações
pic_parameter_set_id Específico do usuário None
seq_parameter_set_id Específico do usuário None
entropy_coding_mode_flag Com base em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ENABLE_CABAC_ENCODING None
pic_order_present_flag 0 Suporte somente para 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 Com base em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_CONSTRAINED_INTRAPREDICTION None
redundant_pic_cnt_present_flag 0 None
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 None
second_chroma_qp_index_offset 0 None

Requirements

Requirement Value
Cliente mínimo suportado Windows Build 22000
Servidor mínimo compatível Windows Build 22000
Header d3d12video.h