Synchronisation des opérations de décodage vidéo
Le mécanisme de synchronisation pour DirectX VA 2.0 est amélioré à partir de la version 1.0 et est plus similaire aux mécanismes de synchronisation utilisés par les opérations Microsoft Direct3D.
Dans DirectX VA 1.0, la synchronisation est effectuée principalement par le décodeur. Avant que le décodeur puisse utiliser une mémoire tampon compressée, il appelle la fonction DdMoCompQueryStatus pour déterminer si la mémoire tampon est disponible (autrement dit, le matériel n’accède pas à la mémoire tampon). Si la mémoire tampon n’est pas disponible, le décodeur doit mettre en veille, interroger ou effectuer une autre opération.
DirectX VA 2.0 utilise le modèle de synchronisation que Direct3D utilise déjà sur les mémoires tampons de vertex et les mémoires tampons d’index. Dans DirectX VA 2.0, la synchronisation est effectuée par le décodeur qui verrouille la mémoire tampon compressée. Si le pilote d’affichage en mode utilisateur tente de verrouiller la mémoire tampon compressée et que la mémoire tampon est en cours d’utilisation, le pilote peut échouer le verrouillage ou renommer la mémoire tampon. Le pilote d’affichage en mode utilisateur demande au gestionnaire de mémoire vidéo de renommer la mémoire tampon lorsque le pilote définit le membre Discard de la structure D3DDDICB_LOCKFLAGS dans un appel à la fonction pfnLockCb . Si le pilote d’affichage en mode utilisateur renomme la mémoire tampon, le pilote retourne un pointeur vers une autre mémoire tampon afin que le décodeur puisse continuer sans être bloqué.
En règle générale, pour DirectX VA 2.0, la synchronisation n’est un problème que si le matériel peut consommer les mémoires tampons compressées directement sans copies de mémoire tampon supplémentaires.