Utilisation des contrôles d’affichage vidéo
L’interface IMFVideoDisplayControl contrôle la manière dont le convertisseur vidéo amélioré (EVR) affiche la vidéo à l’intérieur d’une fenêtre d’application. cette interface peut être utilisée dans DirectShow ou Media Foundation. En interne, les contrôles d’affichage vidéo sont fournis par le présentateur par défaut de EVR. Si vous écrivez un présentateur personnalisé, vous pouvez fournir la même interface ou définir une interface personnalisée.
la méthode correcte pour obtenir un pointeur vers l’interface IMFVideoDisplayControl varie selon que vous utilisez la version DirectShow du EVR ou la version Media Foundation. Pour le Media Foundation EVR, cela dépend également de l’utilisation directe du EVR ou de son utilisation par le biais de la session multimédia (qui est plus courante).
Pour obtenir un pointeur vers l’interface IMFVideoDisplayControl , procédez comme suit :
Obtient un pointeur vers l’interface IMFGetService .
si vous utilisez le filtre DirectShow EVR, appelez QueryInterface sur le filtre.
Si vous utilisez directement le récepteur multimédia EVR, appelez QueryInterface sur le récepteur multimédia.
Si vous utilisez la session multimédia, appelez QueryInterface sur la session multimédia.
Si vous utilisez la session de média, attendez que la session multimédia envoie l’événement MESessionTopologyStatus avec la valeur d’État MF _ TOPOSTATUS _ Ready. (Ignorez cette étape dans le cas contraire).
Appelez IMFGetService :: GetService pour accéder à l’interface IMFVideoDisplayControl . L’identificateur de service est un _ service de rendu vidéo Mr _ _ .
Vous pouvez utiliser l’interface IMFVideoDisplayControl pour effectuer les tâches suivantes :
Définissez la fenêtre de découpage.
Définissez les rectangles source et de destination.
Mettez à jour la fenêtre vidéo en réponse aux messages de fenêtre.
Activer ou désactiver le mode plein écran.
Fenêtre de découpage
L’application doit fournir une fenêtre dans laquelle le EVR dessine la vidéo. Pour définir la fenêtre de découpage, appelez IMFVideoDisplayControl :: SetVideoWindow avec un handle vers la fenêtre d’application.
Si vous créez le récepteur multimédia EVR par le biais de son objet d’activation, cette étape n’est pas nécessaire. L’objet d’activation appelle automatiquement SetVideoWindowà l’aide du handle de fenêtre que vous avez fourni dans la fonction MFCreateVideoRendererActivate .
Rectangles de source et de destination
Pendant la lecture, le présentateur prend une partie de l’image vidéo composite et la dessine dans une zone de la fenêtre vidéo. La partie de l’image composite est le rectangle source, tandis que la zone de la fenêtre vidéo est le rectangle de destination.
Le rectangle source est défini à l’aide de coordonnées normalisées où le point (0,0, 0,0) correspond à l’angle supérieur gauche de la vidéo, et (1,0, 1,0) correspond au coin inférieur droit de la vidéo. Le rectangle source peut être n’importe quelle région dans ce rectangle. Le rectangle de destination est spécifié en pixels, par rapport à la zone cliente de la fenêtre. Le rectangle source par défaut est la totalité de l’image, et le rectangle de destination par défaut est un rectangle vide.
Pour définir les rectangles source et de destination, appelez IMFVideoDisplayControl :: SetVideoPosition.
Si vous créez le récepteur multimédia EVR par le biais de son objet d’activation, cette étape n’est pas nécessaire. L’objet d’activation définit automatiquement le rectangle de destination comme étant la totalité de la zone cliente de la fenêtre. Toutefois, vous devez appeler SetVideoPosition si vous souhaitez modifier le rectangle source ou définir un autre rectangle de destination.
Messages de fenêtre
Pendant la lecture, votre application doit répondre à certains messages de fenêtre, comme suit :
WM _ Paint : appelez IMFVideoDisplayControl :: RepaintVideo pour repeindre la vidéo. Évitez également de peindre sur le rectangle de destination pendant que la vidéo est lue, car cela peut provoquer un scintillement.
_Taille du WM : vous devrez peut-être appeler SetVideoPosition pour redimensionner le rectangle de destination.
contrairement au filtre de convertisseur de mixage vidéo (VMR) dans DirectShow, il n’est pas nécessaire d’avertir le EVR quand vous recevez un _ message DISPLAYCHANGE WM.