estructura D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 (d3d12umddi.h)
La estructura D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 es una estructura de configuración completa que contiene todos los parámetros necesarios para controlar la codificación de una imagen AV1 (marco).
Sintaxis
typedef struct D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095 {
D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAGS Flags;
D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095 FrameType;
D3D12DDI_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_0095 CompoundPredictionType;
D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095 InterpolationFilter;
D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095 FrameRestorationConfig;
D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095 TxMode;
UINT SuperResDenominator;
UINT OrderHint;
UINT PictureIndex;
UINT TemporalLayerIndexPlus1;
UINT SpatialLayerIndexPlus1;
D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095 ReferenceFramesReconPictureDescriptors[8];
UINT ReferenceIndices[7];
UINT PrimaryRefFrame;
UINT RefreshFrameFlags;
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG_0095 LoopFilter;
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095 LoopFilterDelta;
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG_0095 Quantization;
D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095 QuantizationDelta;
D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095 CDEF;
UINT QPMapValuesCount;
INT16 *pRateControlQPMap;
D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG_0095 CustomSegmentation;
D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095 CustomSegmentsMap;
} D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA_0095;
Miembros
Flags
Enumeración D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAGS que especifica las marcas para el marco que se va a codificar.
FrameType
Enumeración D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095 que especifica el tipo de marco que se va a codificar.
CompoundPredictionType
Enumeración D3D12DDI_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_0095 que especifica el tipo de predicción compuesto que se va a usar. Relacionado con la sintaxis de AV1 reference_select.
InterpolationFilter
Enumeración D3D12DDI_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_0095 que especifica el filtro de interpolación que se va a usar para la predicción inter en el marco actual. Relacionado con la sintaxis interpolation_filter.
FrameRestorationConfig
Estructura D3D12DDI_VIDEO_ENCODER_AV1_RESTORATION_CONFIG_0095 que especifica la configuración de restauración de fotogramas que se va a usar.
TxMode
Enumeración D3D12DDI_VIDEO_ENCODER_AV1_TX_MODE_0095 que especifica el modo de transformación que se va a usar.
SuperResDenominator
Indica la configuración de la super resolución. Debe ser mayor o igual que D3D12_VIDEO_ENCODER_AV1_SUPERRES_DENOM_MIN (según lo definido por el estándar de códec AV1) cuando se habilita la super resolución.
OrderHint
Marco actual order_hint sintaxis av1. OrderHint debe pasarse siempre incluso cuando no codice la sugerencia de orden en la secuencia de bits AV1 y debe reflejar el orden de visualización del fotograma.
PictureIndex
Índice de imagen único para este fotograma que se usará para identificarlo de forma única como referencia para fotogramas futuros. Este parámetro no está relacionado de ninguna manera con la sintaxis estándar de AV1, sino que simplemente se usa para el seguimiento de la implementación del cliente de la API D3D en su lugar.
El cliente de API debe inicializar este valor en 0 para el primer D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME e incrementarlo en uno en cada fotograma posterior hasta el siguiente D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME, cuando se debe restablecer a cero y seguir el mismo proceso.
OrderHint no se puede usar para este propósito, ya que tiene un intervalo máximo de [0..2^(OrderHintBitsMinus1+1)]
, que puede encapsular y no funcionar como un identificador único de los marcos y sus referencias.
TemporalLayerIndexPlus1
Índice de capa temporal de imagen más uno. Un valor de cero indica que no se usa la escalabilidad temporal. Este valor debe estar dentro del intervalo [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095. MaxTemporalLayers].
SpatialLayerIndexPlus1
Índice de capa espacial de imagen más uno. Un valor de cero indica que no se usa la escalabilidad espacial. Este valor debe estar dentro del intervalo [0..D3D12DDI_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT_0095.MaxSpatialLayers].
ReferenceFramesReconPictureDescriptors[8]
Matriz de estructuras de D3D12DDI_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR_0095 que describe la instantánea de estado actual del completo (es decir, los fotogramas que no se usan en el marco actual, sino que se usan en fotogramas futuros, etc.) el búfer DPB se mantiene en D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0. ReferenceFrames. Los índices de referencia (es decir, last, altref, etc.) se asignan de referencias anteriores o futuras a esta matriz de descriptores. El códec AV1 permite hasta 8 referencias en el DPB.
Esta matriz de descriptores, a su vez, asigna una imagen de referencia para este marco en un índice de recursos de la matriz de imágenes reconstruida D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_DESC_0082_0.ReferenceFrames.
El tamaño de esta matriz siempre coincide con D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames.NumTextures para el comando EncodeFrame asociado.
ReferenceIndices[7]
Corresponde a la sintaxis ref_frame_idx[i] AV1. Para un tipo de referencia i, ReferenceIndices[i] indica un índice entre [0..7] en ReferenceFramesReconPictureDescriptors donde el tipo de referencia i-th de fotograma actual se almacena en el DPB. En otras palabras, ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]] contiene el descriptor DPB para el tipo de referencia i-th.
La entrada i-th de ReferenceIndices[] corresponde a cada tipo de referencia como se indica a continuación.
Índice i | Tipo de referencia | ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]] |
---|---|---|
0 | Último | Descriptor de DPB para último |
1 | Last2 | Descriptor de DPB para Last2 |
2 | Last3 | Descriptor de DPB para Last3 |
3 | Dorado | Descriptor DPB para Golden |
4 | Bwdref | Descriptor de DPB para Bwdref |
5 | Altref | Descriptor de DPB para Altref |
6 | Altref2 | Descriptor de DPB para Altref2 |
PrimaryRefFrame
Corresponde a la sintaxis del elemento AV1 primary_ref_frame en uncompressed_header(). Especifica qué marco de referencia contiene los valores de CDF y otro estado que se debe cargar al principio del marco. El intervalo permitido es [0..7] y los valores corresponden de la siguiente manera:
Valor primaryRefFrame | Valor de sintaxis de AV1 (primary_ref_frame) | Marco de referencia seleccionado |
---|---|---|
0 | 0 | Último |
1 | 1 | Last2 |
2 | 2 | Last3 |
3 | 3 | Dorado |
4 | 4 | Bwdref |
5 | 5 | Altref |
6 | 6 | Altref2 |
7 | 7 (PRIMARY_REF_NONE) | None |
RefreshFrameFlags
Corresponde al elemento de sintaxis refresh_frame_flags AV1.
LoopFilter
Estructura D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG_0095 que especifica los parámetros de filtro de bucle que se van a usar.
LoopFilterDelta
Estructura D3D12DDI_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG_0095 que especifica los parámetros delta de filtro de bucle que se van a usar.
Quantization
Estructura D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG_0095 que especifica los parámetros de cuantificación que se van a usar.
QuantizationDelta
Estructura D3D12DDI_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG_0095 que especifica los parámetros delta de cuantificación que se van a usar.
CDEF
Estructura D3D12DDI_VIDEO_ENCODER_AV1_CDEF_CONFIG_0095 que especifica los parámetros de filtrado de mejoras direccionales restringidas (CDEF) que se van a usar.
QPMapValuesCount
Contiene el número de elementos presentes en pRateControlQPMap. Este valor 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
Matriz que contiene, en orden de examen de fila o columna, los valores de mapa QP que se van a usar en cada región cuadrada de este marco. Las dimensiones del mapa de QP se pueden calcular mediante la resolución actual y D3D12DDI_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS_0080_2. QPMapRegionPixelsSize que transmite los tamaños de región cuadrados. El intervalo para los valores de QP delta es [-255; 255].
CustomSegmentation
Estructura D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG_0095 que especifica los parámetros de segmentación personalizados que se van a usar. Solo se usa cuando se establece D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM para el marco actual.
CustomSegmentsMap
Solo se usa cuando se establece D3D12DDI_VIDEO_ENCODER_AV1_PICTURE_CONTROL_0095_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM para el marco actual. Estructura D3D12DDI_VIDEO_ENCODER_AV1_SEGMENTATION_MAP_0095 que especifica el mapa de segmentación personalizado que se va a usar si se establece CustomSegmentation.UpdateMap . De lo contrario, el mapa de segmentos se hereda del marco de referencia.
Comentarios
Expectativas de administración de DPB
A continuación se muestra el contrato del cliente de API y el controlador debe cumplir al usar esta API:
Al codificar D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME:
- PrimaryRefFrame debe ser 7 (PRIMARY_REF_NONE)
- RefreshFrameFlags debe ser 0xFF (conforme a la sintaxis de secuencia de bits estándar del códec AV1)
- Para todas las entradas de matriz en ReferenceFramesReconPictureDescriptors, ReconstructedPictureResourceIndex debe establecerse en D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
- Los valores de ReferenceIndices[7] son indistintos, ya que cualquier valor [0..7] apuntará a una ranura DPB sin usar en ReferenceFramesReconPictureDescriptors según el punto anterior.
- D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0082_0 se rellenará como:
- NumTexture2Ds = 0
- ppTexture2Ds = NULL
- pSubresources = NULL
Al codificar un tipo de marco con referencias (es decir, SWITCH/INTER):
PrimaryRefFrame especifica qué marco de referencia contiene los valores de CDF y otro estado que se debe cargar al principio del marco.
RefreshFrameFlags debe establecerse en consecuencia para indicar en qué espacios DPB referenceFramesReconPictureDescriptors se colocará la imagen codificada actual después de la ejecución de la codificación. Este valor debe coincidir exactamente con lo que el cliente de API codificará para refresh_frame_flags elemento de sintaxis AV1 en el encabezado de imagen asociado para el marco actual.
Las entradas de matriz en ReferenceFramesReconPictureDescriptors para el marco actual seguirán exactamente lo que RefreshFrameFlags indicó para el fotograma anterior.
Por ejemplo: si RefreshFrameFlags indica que el marco N actual se colocará en las ranuras 2, 3 y 6, a continuación, en la siguiente llamada EncodeFrame para el marco N+1, el parámetro ReconstructedPictureResourceIndex en las entradas ReferenceFramesReconPictureDescriptors[1], ReferenceFramesReconPictureDescriptors[2], ReferenceFramesReconPictureDescriptors[5] debe apuntar a marco N imagen reconstruida en D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_ 0080.
Tenga en cuenta que esto incluye considerar RefreshFrameFlags=0xFF también para D3D12DDI_VIDEO_ENCODER_AV1_FRAME_TYPE_0095_KEY_FRAME , marcando todas las entradas ReferenceFramesReconPictureDescriptors que apuntan a la imagen reconstruida del fotograma KEY.
Si una imagen (sin fotograma clave) no se marcará con D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_0080_USED_AS_REFERENCE_PICTURE, sus RefreshFrameFlags deben ser cero para indicarlo.
Los valores de ReferenceIndices[7] están dentro de [0..7] y apuntan a ranuras DPB en ReferenceFramesReconPictureDescriptors.
Los valores de ReferenceIndices[7] deben coincidir exactamente con los códigos de cliente de la API en el encabezado de imagen para ref_frame_idx.
Según la definición de sintaxis av1 de ref_frame_idx no es necesario que los valores de entrada de la matriz sean únicos.
Si ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]. ReconstructedPictureResourceIndex == D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX
- Esto indica que la imagen de referencia i-th no se usará para el marco actual y se debe omitir.
De lo contrario ( ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]]. ReconstructedPictureResourceIndex)
- Esto indica que la referencia i-th apuntará a la ranura DPB ReferenceIndices[i] y la imagen reconstruida que se va a usar es D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080. ppTexture2Ds[ReferenceFramesReconPictureDescriptors[ReferenceIndices[i]].ReconstructedPictureResourceIndex]
D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 se rellenará como:
- NumTexture2Ds = {número de valores únicos de ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX para j en {0..7} }
- ppTexture2Ds = { matriz compacta (sin entradas NULL) que contiene la imagen reconstruida de los marcos codificados previamente que se usarán como referencias }
- [Solo modo Matriz de textura] pSubresources = { matriz compacta (sin entradas null) que contiene el índice de subrecurso de la matriz de texturas de los marcos codificados anteriormente que se usarán como referencias }
Al codificar un tipo de marco sin referencias, pero sin borrar el DPB (es decir, INTRA_ONLY)
PrimaryRefFrame debe ser 7 (PRIMARY_REF_NONE)
RefreshFrameFlags debe establecerse en consecuencia para indicar en qué espacios DPB referenceFramesReconPictureDescriptors se colocará la imagen codificada actual después de la ejecución de la codificación. Este valor debe coincidir exactamente con lo que el cliente de API codificará para refresh_frame_flags elemento de sintaxis AV1 en el encabezado de imagen asociado para el marco actual.
Las entradas de matriz en ReferenceFramesReconPictureDescriptors para el marco actual seguirán exactamente lo que RefreshFrameFlags indicó para el fotograma anterior.
Los valores de ReferenceIndices[7] se omiten, ya que el marco intra-only no usa ninguna referencia.
D3D12DDI_VIDEO_ENCODE_REFERENCE_FRAMES_0080 contiene la instantánea de DPB y se rellenará como:
- NumTexture2Ds = {número de valores únicos de ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] != D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX para j en {0..7} }
- ppTexture2Ds = { matriz compacta (sin entradas nulas) que contiene la imagen reconstruida a partir de los marcos codificados previamente a los que hace referencia ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] for j in {0..7} }
- [Solo modo Matriz de textura] pSubresources = { matriz compacta (sin entradas null) que contiene el índice de subrecurso de la matriz de texturas de los marcos codificados anteriormente a los que hace referencia ReferenceFramesReconPictureDescriptors.ReconstructedPictureResourceIndex[j] for j in {0..7} }
Consulte Codificación de vídeo D3D12 AV1 para obtener más información.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 11, versión 24H2 (WDDM 3.2) |
Encabezado | d3d12umddi.h |