Compensación de movimiento

La compensación de movimiento es el término para una fase importante del proceso de descodificación para el vídeo digital comprimido. Muchos dispositivos aceleradores gráficos proporcionan algún tipo de capacidad de aceleración para admitir la descodificación de vídeo comprimido. Dado que el proceso de compensación de movimiento es la parte más frecuente de la descodificación de vídeo, la interfaz del controlador del dispositivo que admite la descodificación de vídeo comprimido se denomina DDI de compensación de movimiento. Además de la compensación de movimiento, algunos dispositivos pueden realizar IDCT (Transformación coseno discreto inversa) y otras funciones de hardware que un descodificador de vídeo de software puede usar para acelerar el proceso de descodificación. La DDI de compensación de movimiento es lo suficientemente flexible como para controlar los dispositivos que también proporcionan estas otras funcionalidades.

Los datos de entrada para un descodificador MPEG de software están bien definidos. Si el descodificador está diseñado para MPEG-2, la entrada está en formato MPEG-2. La salida del descodificador también está bien definida. Es un marco sin comprimir en una variedad de formatos. Sin embargo, los formatos provisionales entre los descodificadores de software y los dispositivos de visualización no están bien definidos, con muchos dispositivos que requieren sus propios formatos de datos propietarios. Por lo tanto, la interfaz del controlador del dispositivo de compensación de movimiento es flexible y los formatos provisionales se describen como GUID. El controlador de pantalla informa de los GUID que representan las funcionalidades que admite y el descodificador de software elige el GUID que mejor se adapte a sus requisitos.

Para habilitar la funcionalidad de compensación de movimiento, el controlador debe realizar los pasos siguientes:

  • Implemente una función DdGetDriverInfo y establezca el miembro GetDriverInfo de la estructura DD_HALINFO para que apunte a esta función cuando se llama a DrvGetDirectDrawInfo . La función DdGetDriverInfo del controlador debe analizar el GUID de GUID_MotionCompCallbacks.

  • Rellene una estructura de DD_MOTIONCOMPCALLBACKS con los punteros de devolución de llamada de controlador adecuados y las marcas de tipo de devolución de llamada establecidas cuando se llama a la función DdGetDriverInfo con el GUID de GUID_MotionCompCallbacks. A continuación, el controlador debe copiar esta estructura inicializada en el búfer asignado por Microsoft DirectDraw al que apunta el miembro lpvData de la estructura DD_GETDRIVERINFODATA y devolver el número de bytes escritos en el búfer en dwActualSize.