Décodage de la vidéo
Le runtime Microsoft Direct3D appelle les fonctions DecodeBeginFrame et DecodeEndFrame du pilote d’affichage en mode utilisateur pour indiquer une période entre ces appels de fonction que le pilote d’affichage en mode utilisateur peut décoder de la vidéo. Avant que le pilote d’affichage en mode utilisateur puisse effectuer des opérations de décodage vidéo, le runtime Microsoft Direct3D doit appeler la fonction SetDecodeRenderTarget du pilote d’affichage en mode utilisateur pour définir la surface cible de rendu pour ces opérations de décodage. Toutefois, l’appel à SetDecodeRenderTarget peut se produire uniquement en dehors de la période de début et de fin.
En mode protégé et dans l’appel à DecodeBeginFrame, le runtime Direct3D définit ou modifie une clé de contenu Va DirectX dans une variable vers laquelle pointe le membre pPVPSetKey de la structure D3DDDIARG_DECODEBEGINFRAME . L’appareil de décodage utilise cette clé pour les transferts protégés des mémoires tampons DirectX VA compressées pour cette trame et les images suivantes.
Note Le runtime Direct3D définit le pointeur pPVPSetKey uniquement pour modifier ou définir la clé. Pour conserver la clé définie précédemment en cours d’utilisation, le runtime définit le pointeur sur NULL pour éviter un rechargement de la même clé potentiellement fastidieux. Le pilote n’élimine pas les paramètres redondants. Une application de décodeur doit éviter les paramètres redondants.
Une fois que la surface cible de rendu pour les opérations de décodage est définie, le pilote d’affichage en mode utilisateur peut recevoir des appels à sa fonction DecodeExecute pour effectuer des opérations de décodage vidéo entre la période de début et la période de fin.
Dans les appels à DecodeExecute, tous les types de mémoire tampon spécifiés dans les membres CompressedBufferType des structures DXVADDI_DECODEBUFFERDESC du tableau pCompressedBuffers de la structure D3DDDIARG_DECODEEXECUTE ne sont pas utilisés pour chaque GUID de décodage spécifié par le membre hDecode de D3DDDIARG_DECODEEXECUTE. Par exemple, les mémoires tampons de contrôle de segment (D3DDDIFMT_SLICECONTROLDATA), de quantisation inverse (D3DDDIFMT_INVERSEQUANTIZATIONDATA) et de flux binaire (D3DDDIFMT_BITSTREAMDATA) sont requises uniquement pour le traitement du décodage de longueur variable (VLD), et la mémoire tampon de déblocage-contrôle (D3DDDIFMT_DEBLOCKINGDATA) n’est pas du tout utilisée par MPEG-2.
En mode protégé, les mémoires tampons qui ont été chiffrées pour un transfert protégé avec une clé de contenu contiennent un pointeur vers les valeurs de compteur initiales dans leurs descripteurs de mémoire tampon (autrement dit, dans les variables vers lesquelles les membres pCipherCounter des structures DXVADDI_DECODEBUFFERDESC pointent). Chaque appel à la fonction DecodeExecute du pilote d’affichage en mode utilisateur doit effectuer un transfert protégé de ces mémoires tampons vers la mémoire vidéo locale avant que DecodeExecute utilise les données des tampons dans l’opération de décodage. Toutefois, il n’existe aucun plan pour chiffrer les mémoires tampons compressées DirectX VA de types autres que les types de différences résiduelles (D3DDDIFMT_RESIDUALDIFFERENCEDATA) et de flux de bits (D3DDDIFMT_BITSTREAMDATA).