Compartir a través de


elementos de procesamiento de IDCT de Low-Level

La interfaz DE VA de DirectX admite varias formas de controlar la transformación discreta de coseno de bajo nivel (IDCT). Hay dos tipos fundamentales de operación:

  • IDCT fuera del host: pasar macrobloques de coeficientes de transformación al acelerador de IDCT externo, reconstrucción de imágenes y recorte de reconstrucción.

  • IDCT basado en host: realizar un IDCT en el host y pasar bloques de resultados de dominio espacial al acelerador para la reconstrucción y el recorte de reconstrucción de imágenes externas.

En ambos casos, el proceso básico de cuantificación inversa, la saturación del intervalo pre-IDCT, el control de discrepancia MPEG-2 (si es necesario) y el desplazamiento dentro del controlador de dominio (si es necesario) se realizan en el host. En ambos casos, la reconstrucción final de la imagen y el recorte de reconstrucción se realizan en el acelerador.

En los pasos siguientes se definen los procesos de cuantificación inversa, saturación pre-IDCT, control de falta de coincidencia, desplazamiento intra-DC, IDCT, reconstrucción de imágenes y recorte de reconstrucción. La estructura DXVA_QmatrixData carga los datos de matriz de cuantificación inversa para la descodificación de imágenes de vídeo comprimido. (Los valores de BPP, WT y HT deben ser iguales a 8, a menos que se especifique lo contrario en la estructura DXVA_PictureParameters ).

  1. Realice la cuantificación inversa según sea necesario (incluida la aplicación de cualquier matriz de ponderación de cuantificación inversa) para crear un conjunto de valores de coeficiente de IDCT F"(u,v) a partir de índices de cuantificación codificados entropía. Esto lo realiza el host.

  2. Saturar cada valor de coeficiente reconstruido F"(u,v) del bloque de coeficiente de transformación para obtener un valor F'(u,v) dentro del intervalo permitido restringido, tal como se define en la fórmula siguiente. Esto lo realiza el host. Fórmula para el cálculo de saturación de PRE-IDCT.

  3. Realice un control de falta de coincidencia para MPEG-2. (Esta fase de procesamiento solo es necesaria para MPEG-2). El control de falta de coincidencia se realiza sumando los valores saturados de todos los coeficientes del bloque macro (esto equivale a XORing sus bits menos significativos). Si la suma es par, 1 se resta del valor saturado del último coeficiente F'(WT-1,HT-1). Si la suma es impar, el valor saturado de F'(WT-1,HT-1) se utiliza tal como está, sin alteración. Los valores de coeficiente que se crean después de la saturación y el control de falta de coincidencia se conocen como F(u,v) en esta documentación. Esto lo realiza el host. MPEG-1 tiene una forma diferente de control de discrepancia que consiste en modificar el valor más o menos 1 para cada coeficiente que, de lo contrario, tendría un valor par después de la cuantificación inversa. H.263 no requiere el control de discrepancia descrito en esta sección. En cualquier caso, el control de discrepancia es responsabilidad del host si es necesario. Fórmula para el cálculo del control no coincidente.

  4. Agregue un desplazamiento intra-DC (si es necesario) a todos los bloques intra, por lo que todos los bloques intra representan una diferencia con respecto a un valor de predicción de referencia espacial de 2(BPP-1). Este desplazamiento es necesario para todos los estándares de codificación de vídeo a los que se hace referencia (H.261, H.263, MPEG-1, MPEG-2 y MPEG-4), excepto cuando HostResidDiff es 1 y el miembro bConfigIntraResidUnsigned de la estructura DXVA_ConfigPictureDecode es 1. El desplazamiento intra DC tiene el valor (2(BPP-1)) * sqrt(WT H T) en el dominio de transformación. Este valor es 1024 en todos los casos excepto MPEG-4, lo que permite que BPP sea mayor que 8. Esto lo realiza el host.

  5. Realice la transformación de coseno discreta inversa (IDCT) en el host o en el acelerador. El IDCT se especifica mediante la fórmula siguiente, donde: C(u) = 1 para u = 0; en caso contrario, C(u) = sqrt(2) C(v) = 1 para v = 0; en caso contrario, C(v) = sqrt(2) x e y son las coordenadas espaciales horizontales y verticales en el dominio de píxel u y v son las coordenadas horizontales y verticales de frecuencia de transformación WT y HT son el ancho y alto del bloque de transformación (por lo general, ambos son 8).

  6. Agregue la información residual del dominio espacial al valor de predicción compensado por movimiento de los bloques que no sontrados o al valor de referencia constante de los bloques intra para realizar la reconstrucción de imágenes en el acelerador. El valor de referencia constante de los bloques intra es 2(BPP-1), excepto cuando HostResidDiff (bit 10 del miembro wMBtype del DXVA_MBctrl_P_HostResidDiff_1) es 1 y el miembro bConfigIntraResidUnsigned de la estructura DXVA_ConfigPictureDecode es 1. En el último caso, la constante es cero.

  7. Recorte la reconstrucción de la imagen en un intervalo de cero a (2BPP)-1 y almacene los valores finales de muestra de imagen resultantes en el acelerador.