estructura D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 (d3d12video.h)
Representa los elementos de control de nivel de imagen del comando EncodeFrame asociado para la codificación H.264.
Sintaxis
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;
Miembros
Flags
Combinación OR bit a bit de valores de la enumeración D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS que especifica marcas de configuración para el marco que se va a codificar.
FrameType
Valor de la enumeración D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 que especifica el tipo de imagen. Asegúrese de que las marcas específicas del códec admiten el tipo especificado. Esta selección debe mantenerse sincronizada con la configuración de la estructura GOP establecida por el host. Tenga en cuenta que el GOP se define en orden de visualización y esta selección de tipo de imagen debe seguir el GOP, pero en orden de codificación.
pic_parameter_set_id
Un UINT que especifica el valor que se va a usar en los encabezados de segmento del marco actual para hacer referencia al PPS.
idr_pic_id
Cuando FrameType** es D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_IDR_FRAME, un UINT que indica el identificador del marco IDR que se va a usar en todos los encabezados de segmentos presentes en el marco.
PictureOrderCountNumber
Un UINT que especifica el orden de presentación del fotograma actual.
FrameDecodingOrderNumber
Un UINT que especifica el orden de descodificación de fotogramas con la semántica indicada por el encabezado de segmento frame_num elemento de sintaxis que se incrementa después de cada imagen de referencia.
TemporalLayerIndex
Un UINT que especifica el número de capa de imagen en la jerarquía temporal. Compruebe el número máximo de capas en D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264.
List0ReferenceFramesCount
Un UINT que especifica el número de referencias de fotogramas anteriores que se usarán para este fotograma. Este valor debe ser coherente con lo que se expone en D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264.
pList0ReferenceFrames
Puntero a una matriz UINT que especifica la lista de fotogramas de referencia anteriores que se van a usar para este fotograma. Cada valor entero de este índice de matriz en pReferenceFramesReconPictureDescriptors para hacer referencia a imágenes guardadas en el DPB.
List1ReferenceFramesCount
Un UINT que especifica el número de referencias de fotograma futuras que se van a usar para este fotograma. Este valor debe ser coherente con lo que se expone en D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264.
pList1ReferenceFrames
Puntero a una matriz UINT que especifica la lista de fotogramas de referencia de fotogramas futuros que se usarán para este fotograma. Cada valor entero de este índice de matriz en pReferenceFramesReconPictureDescriptors para hacer referencia a imágenes guardadas en el DPB.
ReferenceFramesReconPictureDescriptorsCount
Un UINT que especifica el número de entradas en pReferenceFramesReconPictureDescriptors.
pReferenceFramesReconPictureDescriptors
Puntero a una matriz UINT que describe el estado actual del búfer de DPB guardado en D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames. PList0ReferenceFrames y pList1ReferenceFrames enumera índices asignados de referencias pasadas o futuras a esta matriz descriptores.
Esta matriz de descriptores, a su vez, asigna una imagen de referencia para este marco a un índice de recursos en la matriz de imágenes reconstruidas D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames. Además, para cada imagen de referencia, indica el número de orden de codificación y visualización y si es una referencia a largo plazo.
El tamaño de esta matriz siempre coincide con D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames.NumTextures para el comando EncodeFrame asociado.
adaptive_ref_pic_marking_mode_flag
UCHAR que define un modo semántico para el control de referencias de fotogramas.
valor de adaptive_ref_pic_marking_mode_flag | Modo de marcado de imagen de referencia especificado |
---|---|
0 | 1 |
Modo de marcado de imagen de referencia de ventana deslizante: modo de marcado que proporciona un mecanismo primero en salir para imágenes de referencia a corto plazo. | Modo de marcado de imagen de referencia adaptable: modo de marcado de imagen de referencia que proporciona elementos de sintaxis para especificar el marcado de imágenes de referencia como "sin usar para referencia" y para asignar índices de fotogramas a largo plazo. |
RefPicMarkingOperationsCommandsCount
Un UINT que especifica el número de operaciones de marcado de imágenes de referencia asociadas al marco actual. Requiere que adaptive_ref_pic_marking_mode_flag esté establecido en 1.
pRefPicMarkingOperationsCommands
Puntero a una matriz de estructuras D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION que representan la lista de operaciones de marcado de imágenes de referencia asociadas al marco actual. Las operaciones descritas en esta lista deben reflejarse en los descriptores de DPB en consecuencia durante la sesión de codificación.
List0RefPicModificationsCount
Un UINT que especifica el número de elementos en pList0RefPicModifications.
pList0RefPicModifications
Puntero a una matriz de estructuras de D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION que representan la lista de operaciones de modificación de listas de imágenes de referencia para la lista pList0ReferenceFrames .
List1RefPicModificationsCount
Un UINT que especifica el número de elementos de pList1RefPicModifications.
pList1RefPicModifications
Puntero a una matriz de estructuras de D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION que representan la lista de operaciones de modificación de la lista de imágenes de referencia para la lista pList1ReferenceFrames .
QPMapValuesCount
Un UINT que especifica el número de elementos presentes en pRateControlQPMap. Esto debe coincidir con el número de bloques de codificación del marco, redondeando la resolución de fotogramas a los valores alineados más cercanos.
pRateControlQPMap
Puntero a una matriz de Int8 que contiene, en orden de examen de fila o columna, los valores de mapa de QP que se usarán en cada región cuadrada de este marco. Las dimensiones del mapa QP se pueden calcular mediante la resolución actual y D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS. QPMapRegionPixelsSize transmite los tamaños de región cuadrados.
Comentarios
Tenga en cuenta que si el marco actual está marcado como una imagen de referencia, la salida debe contener la imagen reconstruida junto con la secuencia de bits para que el host la coloque en comandos futuros en la lista de referencia de imágenes reconstruidas. Tenga en cuenta que puede haber limitaciones para que algunos tipos de fotogramas se marquen como referencias, compruebe la compatibilidad con características antes de establecer esos valores.
En las tablas siguientes se enumeran los valores de SPS y PPS esperados para la codificación H264.
asignaciones de Level_idc para H264
Nivel D3D12 | Se esperaba level_idc | Notas |
---|---|---|
D3D12_VIDEO_ENCODER_LEVELS_H264_1 | 10 | None |
D3D12_VIDEO_ENCODER_LEVELS_H264_1b | 11 | SPS.constraint_set3 debe 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 del conjunto de parámetros de secuencia H264
Elemento Syntax | Valor predeterminado esperado | Notas |
---|---|---|
profile_idc | Valor de enumeración 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 si usa D3D12_VIDEO_ENCODER_LEVELS_H264_1b |
constraint_set4_flag | 0 | None |
constraint_set5_flag | 0 | None |
reserved_zero_2bits | 0 | None |
level_idc | Consulte la tabla anterior para los niveles H264. | None |
seq_parameter_set_id | Específico del usuario | None |
chroma_format_idc | 1 | Para el uso solo con formatos P010 o 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 | Igual que en D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 | None |
pic_order_cnt_type | Igual que en D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 | Solo los modos 0 y 2 admitidos en esta API |
log2_max_pic_order_cnt_lsb_minus4 | Igual que en D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 | Solo si pic_order_cnt_type == 0 |
max_num_ref_frames | Número máximo de imágenes de referencia usadas en la sesión de codificación | 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 | No se admite ninguna interlace |
direct_8x8_inference_flag | Basado en D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM | None |
frame_cropping_flag | 0 o 1 en función de que la resolución de codificación esté alineada o no sea 16 | None |
frame_cropping_rect_left_offset | 0 | Solo si frame_cropping_flag = 1 |
frame_cropping_rect_right_offset | ((pic_width_in_mbs_minus1+1) * 16 - sequenceTargetResolution.Width) / 2 | Solo si frame_cropping_flag = 1 |
frame_cropping_rect_top_offset | ((pic_height_in_map_units_minus1+1) * 16 - sequenceTargetResolution.Height) / 2 | Solo si frame_cropping_flag = 1 |
frame_cropping_rect_bottom_offset | 0 | Solo si frame_cropping_flag = 1 |
vui_paramenters_present_flag | 0 | None |
Valores esperados del conjunto de parámetros de imagen H264
Elemento Syntax | Valor predeterminado esperado | Notas |
---|---|---|
pic_parameter_set_id | Específico del usuario | None |
seq_parameter_set_id | Específico del usuario | None |
entropy_coding_mode_flag | Basado en D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ENABLE_CABAC_ENCODING | None |
pic_order_present_flag | 0 | Solo compatibilidad con 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 | Basado en D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_CONSTRAINED_INTRAPREDICTION | None |
redundant_pic_cnt_present_flag | 0 | None |
transform_8x8_mode_flag | Basado en D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM | Solo si se usan perfiles altos |
pic_scaling_matrix_present_flag | 0 | None |
second_chroma_qp_index_offset | 0 | None |
Requisitos
Cliente mínimo compatible | Windows Build 22000 |
Servidor mínimo compatible | Windows Build 22000 |
Encabezado | d3d12video.h |