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 que especifica o valor a ser usado nos cabeçalhos de fatia do quadro atual para fazer referência ao PPS.
PictureOrderCountNumber
Um UINT que especifica a ordem de exibição do quadro atual.
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_HEVC.
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_HEVC.
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_HEVC.
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 do DPB mantido em D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames. As listas pList0ReferenceFrames e pList1ReferenceFrames mapeiam í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, 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.
List0RefPicModificationsCount
Um UINT que especifica 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 que especifica o número de itens em pList1RefPicModifications.
pList1RefPicModifications
Um ponteiro para uma matriz UINT que contém comandos de modificação para a lista L1.
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 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 que transmite os tamanhos de região quadrada.
Comentários
As tabelas a seguir listam os valores esperados de VPS, SPS e PPS para codificação HEVC.
mapeamentos de Level_idc para HEVC
Nível D3D12 | General_level_idc esperado | Observações |
---|---|---|
D3D12_VIDEO_ENCODER_LEVELS_HEVC_1 | 30 | Corresponde a 3 * sufixo de nível de enumeração 2 dígitos (10) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_2 | 60 | Corresponde a 3 * sufixo de nível de enumeração 2 dígitos (20) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_21 | 63 | Corresponde a 3 * sufixo de nível de enumeração 2 dígitos (21) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_3 | 90 | Corresponde a 3 * sufixo de nível de enumeração 2 dígitos (30) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_31 | 93 | Corresponde a 3 * sufixo de nível 2 de enumeração (31) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_4 1 | 20 | Corresponde a 3 * sufixo de nível de enumeração 2 dígitos (40) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_41 1 | 23 | Corresponde a 3 * sufixo de nível de enumeração 2 dígitos (41) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_5 1 | 50 | Corresponde a 3 * sufixo de nível de enumeração 2 dígitos (50) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_51 1 | 53 | Corresponde a 3 * sufixo de nível de enumeração 2 dígitos (51) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_52 1 | 56 | Corresponde a 3 * sufixo de nível de enumeração 2 dígitos (52) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_6 1 | 80 | Corresponde a 3 * sufixo de nível de enumeração 2 dígitos (60) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_61 1 | 83 | Corresponde a 3 * sufixo de nível de enumeração 2 dígitos (61) |
D3D12_VIDEO_ENCODER_LEVELS_HEVC_62 1 | 86 | Corresponde a 3 * sufixo de nível 2 de enumeração (62) |
Valores esperados do conjunto de parâmetros de vídeo HEVC
Elemento Syntax | Valor padrão esperado | Observaçõ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 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/previous reference frames/ + 1 /additional current frame recon pic/) – 1/*minus1 para header/; | 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 | Observaçõ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 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 a 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 Syntax | Valor padrão esperado | Observaçõ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
Cliente mínimo com suporte | Windows Build 22000 |
Servidor mínimo com suporte | Windows Build 22000 |
Cabeçalho | d3d12video.h |