estrutura D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC (d3d12video.h)
Representa os elementos de controle de nível de imagem para o comando EncodeFrame associado para codificação HEVC.
Sintaxe
typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC {
D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags;
D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC FrameType;
UINT slice_pic_parameter_set_id;
UINT PictureOrderCountNumber;
UINT TemporalLayerIndex;
UINT List0ReferenceFramesCount;
UINT *pList0ReferenceFrames;
UINT List1ReferenceFramesCount;
UINT *pList1ReferenceFrames;
UINT ReferenceFramesReconPictureDescriptorsCount;
D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC *pReferenceFramesReconPictureDescriptors;
UINT List0RefPicModificationsCount;
UINT *pList0RefPicModifications;
UINT List1RefPicModificationsCount;
UINT *pList1RefPicModifications;
UINT QPMapValuesCount;
INT8 *pRateControlQPMap;
} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC;
Membros
Flags
Uma combinação OR bit a bit de valores da enumeração D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS especificando sinalizadores de configuração para o quadro que está sendo codificado.
FrameType
Um valor da enumeração D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC 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.
slice_pic_parameter_set_id
Um UINT especificando o valor a ser usado nos cabeçalhos de fatia do quadro atual para fazer referência ao PPS.
PictureOrderCountNumber
Um UINT especificando a ordem de exibição do quadro atual.
TemporalLayerIndex
Um UINT especificando 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_HEVC.
List0ReferenceFramesCount
Um UINT especificando 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_HEVC.
pList0ReferenceFrames
Um ponteiro para um UINT matriz 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 especificando 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_HEVC.
pList1ReferenceFrames
Um ponteiro para um UINT matriz 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 especificando 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 lista 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í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.
List0RefPicModificationsCount
Um UINT especificando o número de itens em pList0RefPicModifications.
pList0RefPicModifications
Um ponteiro para uma matriz UINT que contém comandos de modificação para a lista L0.
List1RefPicModificationsCount
Um UINT especificando o número de itens em pList1RefPicModifications.
pList1RefPicModifications
Um ponteiro para uma matriz UINT contendo comandos de modificação para a lista L1.
QPMapValuesCount
Um UINT especificando 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 transmitindo os tamanhos de região quadrada.
Observações
As tabelas a seguir listam os valores de VPS, SPS e PPS esperados para codificação HEVC.
mapeamentos de Level_idc para HEVC
Nível D3D12 | General_level_idc esperado | Anotações |
---|---|---|
D3D12_VIDEO_ENCODER_LEVELS_HEVC_1 | 30 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_2 | 60 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_21 | 63 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_3 | 90 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_31 | 93 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_4 | 120 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_41 | 123 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_5 | 150 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_51 | 153 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_52 | 156 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_6 | 180 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_61 | 183 | Nenhum |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_62 | 186 | Nenhum |
Valores esperados do conjunto de parâmetros de vídeo HEVC
Elemento de sintaxe | Valor padrão esperado | Anotações |
---|---|---|
vps_video_parameter_set_id | Específico do usuário | Nenhum |
vps_base_layer_internal_flag | 0 | Nenhum |
vps_base_layer_available_flag | 0 | Nenhum |
vps_max_layers_minus1 | 0 | Nenhum |
vps_max_sub_layers_minus1 | 0 | Nenhum |
vps_temporal_id_nesting_flag | 1 | Nenhum |
vps_reserved_ffff_16bits | 0xFFFF | Nenhum |
general_profile_space | 0 | Nenhum |
general_tier_flag | 1 para a camada Alta, 0 para a camada Principal | Nenhum |
general_profile_idc | D3D12_VIDEO_ENCODER_PROFILE_HEVC valor de enumeração + 1 | Nenhum |
general_profile_compatibility_flag[general_profile_space] | 1 | Nenhum |
general_progressive_source_flag | 1 | Nenhum |
general_interlaced_source_flag | 0 | Nenhum |
general_non_packed_constraint_flag | 1 | Nenhum |
general_frame_only_constraint_flag | 1 | Nenhum |
general_reserved_zero_44bits | Zeros de 44 bits | Nenhum |
general_level_idc | Consulte a tabela acima | Nenhum |
vps_sub_layer_ordering_info_present_flag | 0 | Nenhum |
vps_max_dec_pic_buffering_minus1[0] | (MaxReferenceFramesInDPB/quadros de referência anteriores/ + 1 /foto de reconhecimento de quadro atual adicional/) - 1/*menos1 para o cabeçalho/; | Nenhum |
vps_max_num_reorder_pics[0] | 0 se não houver quadros B. vps_max_dec_pic_buffering_minus1 caso contrário. | Nenhum |
vps_max_latency_increase_plus1[0] | 1 | Nenhum |
vps_max_layer_id | 0 | Nenhum |
vps_num_layer_sets_minus1 | 0 | Nenhum |
vps_timing_info_present_flag | 0 | Nenhum |
vps_extension_flag | 0 | Nenhum |
Valores esperados do conjunto de parâmetros de sequência HEVC
Elemento de sintaxe | Valor padrão esperado | Anotações | |
---|---|---|---|
sps_video_parameter_set_id | Específico do usuário | Nenhum | |
sps_max_sub_layers_minus1 | O mesmo que no VPS associado | Nenhum | |
sps_temporal_id_nesting_flag | O mesmo que no VPS associado | Nenhum | |
general_profile_space | 0 | Nenhum | |
general_tier_flag | 1 para a camada Alta, 0 para a camada Principal | Nenhum | |
general_profile_idc | D3D12_VIDEO_ENCODER_PROFILE_HEVC valor de enumeração + 1 | Nenhum | |
general_profile_compatibility_flag[general_profile_space] | 1 | Nenhum | |
general_progressive_source_flag | 1 | Nenhum | |
general_interlaced_source_flag | 0 | Nenhum | |
general_non_packed_constraint_flag | 1 | Nenhum | |
general_frame_only_constraint_flag | 1 | Nenhum | |
general_reserved_zero_44bits | Zeros de 44 bits | Nenhum | |
general_level_idc | Consulte a tabela acima | Nenhum | |
chroma_format_idc | 1 | 4.2.0 para NV12 e P010 | |
pic_width_in_luma_samples | std::ceil(sequenceTargetResolution.Width / SubregionBlockPixelsSize)) * SubregionBlockPixelsSize | Use a resolução de quadros atual para D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS. SubregionBlockPixelsSize | |
pic_height_in_luma_samples | std::ceil(sequenceTargetResolution.Height / SubregionBlockPixelsSize)) * SubregionBlockPixelsSize | Use a resolução de quadros atual para D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS. SubregionBlockPixelsSize | |
conformance_window_flag | 0 se a resolução estiver alinhada ao SubregionBlockPixelsSize, caso contrário, 1 | Nenhum | |
conf_win_left_offset | 0 | Somente se conformance_windows_flag = 1 | |
conf_win_right_offset | (sps.pic_width_in_luma_samples - encodeResolution.Width) >> 1 | Somente se conformance_windows_flag = 1 | |
conf_win_top_offset | 0 | Somente se conformance_windows_flag = 1 | |
conf_win_bottom_offset | (sps.pic_height_in_luma_samples - encodeResolution.Height) >> 1 | Somente se conformance_windows_flag = 1 | |
bit_depth_luma_minus8 | 0 para NV12, 2 para P010 | Nenhum | |
bit_depth_luma_minus8 | 0 para NV12, 2 para P010 | Nenhum | |
log2_max_pic_order_cnt_lsb_minus4 | Com base em D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC | Nenhum | |
sps_sub_layer_ordering_info_present_flag | O mesmo que no VPS associado | Nenhum | |
sps_max_dec_pic_buffering_minus1 | O mesmo que no VPS associado | Nenhum | |
sps_max_num_reorder_pics | O mesmo que no VPS associado | Nenhum | |
sps_max_latency_increase_plus1 | O mesmo que no VPS associado | Nenhum | |
log2_min_luma_coding_block_size_minus3 | std::log2(minCuSize) - 3) | Por exemplo, MinCUSize=8 para D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_8x8 | |
log2_diff_max_min_luma_coding_block_size | std::log2(maxCuSize) - std::log2(minCuSize)) | Por exemplo, MaxCUSize=16 para D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_16x16 | |
log2_min_transform_block_size_minus2 | std::log2(minTuSize) – 2) | Por exemplo, MinTuSize=4 para D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_4x4 | |
log2_diff_max_min_transform_block_size | std::log2(maxTuSize) - std::log2(minTuSize)) | Por exemplo, MaxTuSize=16 para D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_16x16 | |
max_transform_hierarchy_depth_inter | Com base em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC | Nenhum | |
max_transform_hierarchy_depth_inter | Com base em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC | Nenhum | |
scaling_list_enabled_flag | 0 | Nenhum | |
amp_enabled_flag | Com base em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_ASYMETRIC_MOTION_PARTITION | Nenhum | |
sample_adaptive_offset_enabled_flag | Com base em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_SAO_FILTER | Nenhum | |
pcm_enabled_flag | 0 | Nenhum | |
num_short_term_ref_pic_sets | 0 | Nenhum | |
long_term_ref_pics_present_flag | Com base em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_LONG_TERM_REFERENCES | Nenhum | |
num_long_term_ref_pics_sps | 0 | Nenhum | |
sps_temporal_mvp_enabled_flag | 0 | Nenhum | |
strong_intra_smoothing_enabled_flag | 0 | Nenhum | |
vui_parameters_present_flag | 0 | Nenhum | |
sps_extension_flag | 0 | Nenhum |
Valores esperados do conjunto de parâmetros de imagem HEVC
Elemento de sintaxe | Valor padrão esperado | Anotações |
---|---|---|
pps_pic_parameter_set_id | Específico do usuário | Nenhum |
pps_seq_parameter_set_id | Específico do usuário | Nenhum |
dependent_slice_segments_enabled_flag | 0 | Nenhum |
output_flag_present_flag | 0 | Nenhum |
num_extra_slice_header_bits | 0 | Nenhum |
sign_data_hiding_enabled_flag | 0 | Nenhum |
cabac_init_present_flag | 1 | Nenhum |
num_ref_idx_lx_default_active_minus1[0] | std::max(static_cast<INT>(pictureControl.List0ReferenceFramesCount) - 1, 0)) | Nenhum |
num_ref_idx_lx_default_active_minus1[1] | std::max(static_cast<INT>(pictureControl.List1ReferenceFramesCount) - 1, 0)) | Nenhum |
init_qp_minus26 | 0 | Nenhum |
constrained_intra_pred_flag | Com base em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_CONSTRAINED_INTRAPREDICTION | Nenhum |
transform_skip_enabled_flag | Com base em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_TRANSFORM_SKIPPING | Nenhum |
cu_qp_delta_enabled_flag | 1 | Nenhum |
diff_cu_qp_delta_depth | 0 | Nenhum |
pps_cb_qp_offset | 0 | Nenhum |
pps_cr_qp_offset | 0 | Nenhum |
pps_slice_chroma_qp_offsets_present_flag | 1 | Nenhum |
weighted_pred_flag | 0 | Não há suporte para previsão ponderada na API |
weighted_bipred_flag | 0 | Não há suporte para previsão ponderada na API |
transquant_bypass_enabled_flag | 0 | Nenhum |
tiles_enabled_flag | 0 | Nenhum |
entropy_coding_sync_enabled_flag | 0 | Nenhum |
pps_loop_filter_across_slices_enabled_flag | Com base em D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_DISABLE_LOOP_FILTER_ACROSS_SLICES | Nenhum |
deblocking_filter_control_present_flag | 1 | Nenhum |
deblocking_filter_override_enabled_flag | 0 | Nenhum |
pps_deblocking_filter_disabled_flag | 0 | Nenhum |
pps_beta_offset_div2 | 0 | Nenhum |
pps_tc_offset_div2 | 0 | Nenhum |
pps_scaling_list_data_present_flag | 0 | Nenhum |
lists_modification_present_flag | 1 se enviar D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC listar modificações. Caso contrário, defina como 0. | Nenhum |
log2_parallel_merge_level_minus2 | 0 | Nenhum |
slice_segment_header_extension_present_flag | 0 | Nenhum |
pps_extension_flag | 0 | Nenhum |
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows Build 22000 |
servidor com suporte mínimo | Windows Build 22000 |
cabeçalho | d3d12video.h |