Fonctionnalités de dessin matériel
[La fonctionnalité associée à cette page, Video Compression Manager, est une fonctionnalité héritée. Microsoft recommande vivement que le nouveau code n’utilise pas cette fonctionnalité.]
Certains convertisseurs peuvent dessiner directement sur le matériel vidéo, car ils décompressent les trames vidéo. Ces convertisseurs retournent l’indicateur VIDCF_DRAW en réponse à la fonction ICGetInfo . Lorsque vous utilisez ce type de renderer, votre application n’a pas besoin de gérer les données décompressées. Il permet au convertisseur de conserver les données décompressées pour le dessin.
Si votre application utilise un renderer avec des fonctionnalités de dessin, elle doit gérer les tâches suivantes :
- Sélectionnez un renderer.
- Spécifiez les formats d’image.
- Initialisez le convertisseur.
- Dessinez les données.
- Contrôler les paramètres de dessin.
Sélection du convertisseur
La macro ICDrawOpen ouvre un convertisseur qui peut dessiner des images avec le format spécifié. Elle retourne un handle d’un renderer s’il réussit, ou zéro dans le cas contraire. Cette macro utilise la fonction ICLocate pour ouvrir le convertisseur.
Spécification des formats d’image
Étant donné que votre application n’a pas besoin de dessiner les données décompressées, elle ne nécessite pas de format de sortie spécifique. Toutefois, il doit s’assurer que le convertisseur peut dessiner à l’aide du format d’entrée à l’aide du message ICM_DRAW_QUERY (ou utiliser la macro ICDrawQuery ). Ce message ne peut pas déterminer si un convertisseur peut dessiner une bitmap. Si votre application doit déterminer si le convertisseur peut dessiner la bitmap, utilisez ce message avec la fonction ICDrawBegin .
Votre application peut avoir un renderer suggérer un format d’entrée à l’aide de la fonction ICDrawSuggestFormat . Cette fonction est utilisée lorsqu’un convertisseur sépare les fonctionnalités de dessin des fonctionnalités de décompression. La plupart des applications utilisant les fonctions de dessin n’ont pas besoin de déterminer le format de sortie.
Initialisation du renderer
La fonction ICDrawBegin initialise un renderer et lui indique la destination du dessin. Cette fonction peut également effectuer les tâches suivantes :
- Déterminez si le convertisseur prend en charge un format d’entrée spécifique.
- Spécifiez si l’opération de dessin occupe une fenêtre ou la totalité de l’écran.
- Spécifiez la partie de l’image à afficher à l’aide du rectangle source.
- Définissez la vitesse de lecture de la séquence d’images.
Certains convertisseurs souhaitent mettre en mémoire tampon les données compressées pour fonctionner plus efficacement. Votre application peut envoyer le message ICM_GETBUFFERSWANTED (ou utiliser la macro ICGetBuffersWanted ) pour déterminer le nombre de mémoires tampons que le convertisseur demande. Votre application doit précharger ces mémoires tampons et les envoyer au convertisseur avant de dessiner.
Dessin des données
Vous pouvez utiliser la fonction ICDraw pour décompresser les données pour le dessin. Toutefois, le convertisseur ne commence pas à dessiner des données tant que votre application n’a pas envoyé le message ICM_DRAW_START (ou utilise la macro ICDrawStart ). Lorsque votre application appelle cette fonction, le convertisseur commence à dessiner les images à la vitesse spécifiée par le paramètre dwRate divisé par le paramètre dwScale ; ces paramètres ont été fournis lorsque l’application initialisait le convertisseur à l’aide de la fonction ICDrawBegin . Le dessin continue jusqu’à ce que votre application envoie le message ICM_DRAW_STOP (ou utilise la macro ICDrawStop ).
Notes
Si un convertisseur met en mémoire tampon les données avant le dessin, votre application ne doit pas utiliser la macro ICDrawStart tant qu’elle n’a pas envoyé le nombre d’images retournées par le convertisseur pour la macro ICGetBuffersWanted .
Le paramètre lTimed’ICDraw spécifie la durée de dessin d’une image. Le convertisseur divise cet entier par l’échelle de temps spécifiée avec ICDrawBegin pour obtenir l’heure réelle. Les heures des fonctions ICDraw sont relatives à ICDrawStart. ICDrawStart définit l’horloge sur zéro. Par exemple, si votre application spécifie 1 000 pour l’échelle de temps et 75 pour l’heure, le convertisseur dessine l’image 75 millisecondes dans la séquence.
Contrôle des paramètres de dessin
Vous pouvez surveiller l’horloge d’un convertisseur en envoyant le message ICM_DRAW_GETTIME (ou utiliser la macro ICDrawGetTime ), et vous pouvez définir l’horloge d’un convertisseur qui peut dessiner des données en envoyant le message ICM_DRAW_SETTIME (ou en utilisant la macro ICDrawSetTime ).
Pour modifier la position actuelle pendant le dessin d’un convertisseur, votre application peut envoyer le message ICM_DRAW_WINDOW (ou utiliser la macro ICDrawWindow ) pour repositionner la fenêtre. Les applications utilisent généralement ce message chaque fois que la fenêtre change.
Si la fenêtre de lecture obtient un message de palette de réalisation, votre application doit envoyer le message ICM_DRAW_REALIZE (ou utiliser la macro ICDrawRealize ) pour que le convertisseur réalise à nouveau la palette en vue de la lecture. Les applications peuvent modifier la palette en envoyant le message ICM_DRAW_CHANGEPALETTE (ou en utilisant la macro ICDrawChangePalette ) et obtenir la palette actuelle en envoyant le message ICM_DRAW_GET_PALETTE .
Certains convertisseurs doivent être spécifiquement chargés d’afficher les images qui leur sont passées. L’envoi du message ICM_DRAW_RENDERBUFFER (ou l’utilisation de la macro ICDrawRenderBuffer ) entraîne le dessin du cadre par ces convertisseurs.