Négociation de type multimédia EVR

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

  • 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 multimédias 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 multimédias, 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 multimédias 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 la liste des formats cibles de rendu DirectX Video Accélération (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 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 mélangeur 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::P rocessMessage 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é