Partager via


Compensation de mouvement

La compensation de mouvement est le terme d’une étape importante du processus de décodage de la vidéo numérique compressée. De nombreux périphériques accélérateurs graphiques fournissent un certain type de capacité d’accélération pour prendre en charge le décodage vidéo compressé. Étant donné que le processus de compensation de mouvement est la partie la plus fréquemment prise en charge du décodage vidéo, l’interface du pilote de périphérique qui prend en charge le décodage vidéo compressé est appelée DDI de compensation de mouvement. En plus de la compensation de mouvement, certains appareils peuvent effectuer IDCT (Inverse Discrete Cosin transformation) et d’autres fonctions matérielles qu’un décodeur vidéo logiciel peut utiliser pour accélérer le processus de décodage. Le DDI de compensation de mouvement est suffisamment flexible pour gérer les appareils qui fournissent également ces autres fonctionnalités.

Les données d’entrée d’un décodeur MPEG logiciel sont bien définies. Si le décodeur est conçu pour MPEG-2, l’entrée est au format MPEG-2. La sortie du décodeur est également bien définie. Il s’agit d’une image non compressée dans divers formats. Toutefois, les formats intermédiaires entre les décodeurs logiciels et les périphériques d’affichage ne sont pas bien définis, de nombreux appareils nécessitant leurs propres formats de données propriétaires. Par conséquent, l’interface du pilote de périphérique de compensation de mouvement est flexible et les formats intermédiaires sont décrits en tant que GUID. Le pilote d’affichage indique les GUID qui représentent les fonctionnalités qu’il prend en charge, et le décodeur logiciel choisit le GUID qui correspond le mieux à ses besoins.

Pour activer la fonctionnalité de compensation de mouvement, le pilote doit effectuer les étapes suivantes :

  • Implémentez une fonction DdGetDriverInfo et définissez le membre GetDriverInfo de la structure DD_HALINFO pour qu’il pointe vers cette fonction lorsque DrvGetDirectDrawInfo est appelé. La fonction DdGetDriverInfo du pilote doit analyser le GUID GUID_MotionCompCallbacks.

  • Renseignez une structure de DD_MOTIONCOMPCALLBACKS avec les pointeurs de rappel de pilote et les indicateurs de type de rappel appropriés définis lorsque la fonction DdGetDriverInfo est appelée avec le GUID GUID_MotionCompCallbacks. Le pilote doit ensuite copier cette structure initialisée dans la mémoire tampon allouée par Microsoft DirectDraw vers laquelle pointe le membre lpvData de la structure DD_GETDRIVERINFODATA et retourner le nombre d’octets écrits dans la mémoire tampon dans dwActualSize.