Négociation de type de support EVR

[Le composant décrit sur cette page, Convertisseur vidéo amélioré, est une fonctionnalité héritée. Il a été remplacé par le Convertisseur vidéo simple (SVR) exposé à travers des composants MediaPlayer et IMFMediaEngine. Pour lire du contenu vidéo, vous devez envoyer des données dans l’un de ces composants et les autoriser à instancier le nouveau convertisseur vidéo. Ces composants ont été optimisés pour Windows 10 et Windows 11. Microsoft recommande vivement (si possible) que le nouveau code utilise MediaPlayer ou les API de bas niveau IMFMediaEngine pour lire des médias vidéo dans Windows au lieu de l’EVR. Microsoft recommande, si possible, la réécriture du code existant qui utilise les API héritées pour être à jour avec les nouvelles API.]

Cette rubrique décrit comment le convertisseur vidéo amélioré (EVR) valide les types de supports.

  • Pour le filtre DirectShow EVR, la négociation de type se produit lorsque les broches du filtre sont connectées.

  • Pour le récepteur multimédia EVR, les types de supports sont définis via l’interface IMFMediaTypeHandler sur les récepteurs de flux. En règle générale, le chargeur de topologie négocie les types de supports, bien que l’application puisse également définir les types multimédias directement.

L’EVR ne signale aucun type de média préféré. Le client doit tester les types de supports jusqu’à ce qu’il trouve un type acceptable. Le type de média du flux de référence doit être défini avant que les types puissent être définis sur l’un des sous-flux.

Pour le flux de référence, le mélangeur EVR obtient une liste des formats cibles de rendu DirectX Video Acceleration (DXVA) compatibles. Le présentateur EVR utilise cette liste pour sélectionner le format de la chaîne d’échange Direct3D. Si aucun format cible de rendu compatible n’est trouvé, l’EVR rejette le type de média.

Pour les sous-flux, le mélangeur EVR interroge si l’appareil DXVA prend en charge ce format de sous-flux en combinaison avec le format cible de rendu sélectionné pour le flux de référence. Par conséquent, les formats de sous-flux disponibles peuvent changer en fonction du flux de référence.

Voici le processus plus en détail. Ces détails ne sont pas importants pour la plupart des applications, mais peuvent être utiles si vous écrivez un mélangeur personnalisé ou un présentateur.

Pour le flux de référence, la négociation se produit comme suit :

  1. L’EVR appelle IMFTransform::SetInputType sur le mélangeur.

  2. Le mélangeur convertit le type de média en description DXVA 2.0 à l’aide de la structure DXVA2_VideoDesc.

  3. Le mixeur appelle IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids pour obtenir la liste des GUID du processeur vidéo.

  4. Pour chaque GUID du processeur vidéo, le mélangeur appelle IDirectXVideoProcessorService::GetVideoProcessorRenderTargets pour obtenir les formats cibles de rendu pris en charge.

  5. L’EVR appelle IMFVideoPresenter::ProcessMessage sur le présentateur avec le message MFVP_MESSAGE_INVALIDATEMEDIATYPE. Ce message entraîne la sélection d’un nouveau format par le présentateur.

  6. Le présentateur appelle IMFTransform::GetOutputAvailableType pour obtenir la liste des formats de sortie disponibles à partir du mélangeur. Le mélangeur génère cette liste à partir des formats obtenus à l’étape 4.

  7. Le présentateur sélectionne un format et appelle IMFTransform::SetOutputType sur le mélangeur.

Pour les sous-flux, le processus est plus simple :

  1. L’EVR appelle IMFTransform::SetInputType sur le mélangeur.

  2. Le mélangeur appelle IDirectXVideoProcessorService::GetVideoProcessorSubStreamFormats pour obtenir la liste des formats de sous-flux disponibles.

  3. Si le format proposé est contenu dans cette liste, l’EVR accepte le type d’entrée.

Convertisseur vidéo amélioré