Partager via


Mélange non carré

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Cette rubrique s’applique à Windows XP Service Pack 2 ou version ultérieure.

Lorsque le VMR-9 mélange deux flux ou plus, la mise à l’échelle peut se produire à deux points : lorsque le mélangeur combine les flux d’entrée et lorsque l’allocator-présentateur restitue l’image composite.

Opérations de mélange vmr

Les versions précédentes de VMR-9 compositeaient toujours les flux d’entrée à l’aide d’un format de pixels carré (1:1), même s’il n’y avait qu’un seul flux vidéo. Si le flux d’entrée avait des pixels non carrés, cela provoquait une opération de mise à l’échelle inutile. La mise à l’échelle doit bien sûr être évitée autant que possible, car elle dégrade la qualité de l’image finale.

À compter de Windows XP Service Pack 2, VMR-9 prend en charge deux façons différentes d’éviter le problème de double mise à l’échelle :

  • Implémentez un présentateur d’allocator personnalisé et prenez en charge l’interface IVMRSurfaceAllocatorEx9 .
  • Utilisez le mode mélange non carré.

Cette section décrit le mode de mélange non carré. Les applications peuvent combiner les deux techniques.

Fonctionnement du mélange non carré

En mode mélange non carré, le VMR-9 sélectionne un flux d’entrée comme taille cible et PAR. Le mélangeur de VMR ne met pas à l’échelle la vidéo à partir de ce flux ou de tout autre flux avec la même taille d’image et la même par. Les flux avec une taille ou des proportions différentes sont mis à l’échelle pour correspondre au PAR cible et sont mis à l’échelle pour s’adapter à la taille d’image de sortie finale.

Le choix des flux dépend du mode de mixage actuel :

  • Le mode de mixage YUV est limité à un seul flux vidéo sur l’épingle 0. (Les autres broches peuvent avoir une sous-image ou des flux légende fermés.) Par conséquent, VMR-9 sélectionne toujours l’épingle 0 pour la taille d’image cible et par.
  • En mode mélange RVB, le VMR sélectionne le flux avec la plus grande taille d’image. S’il y en a plusieurs, il sélectionne celui avec l’ordre de plan le plus élevé ; et s’il y a toujours une liaison, il sélectionne le flux avec le numéro d’épingle le plus bas.

Exemples d’opérations

Exemple 1. Le flux 0 est de 720 x 480 pixels avec des proportions d’image de 16:9. Stream 1 est un 640 x 480 pixels avec un rapport d’image de 4:3.

Dans cet exemple, le flux 0 ayant la taille d’image la plus élevée, le VMR choisit ce flux, quel que soit le mode de mixage RVB ou YUB. Le PAR est 32:27 (16:9 / 720:480), ce qui signifie que l’image doit être étirée horizontalement selon ce rapport pour produire le rapport d’image 16:9 correct.

Pour correspondre au PAR cible, le mélangeur VMR met à l’échelle le flux 1 en fonction du rapport inverse (27:32), ce qui donne une image 540 x 480. Les deux flux sont ensuite composites sur une surface. Pour afficher correctement l’image résultante, le présentateur de l’allocateur doit étirer l’image horizontalement pour qu’elle s’adapte aux proportions d’image 16:9.

exemple 1.

Exemple 2. Le flux 0 est de 720 x 480 pixels avec des proportions d’image de 16:9. Stream 1 est un 1 024 x 768 pixels avec un rapport d’image de 4:3.

Si le VMR-9 utilise le mode de mixage YUV, il sélectionne toujours le flux 0. Par conséquent, il étire le flux de 1 à 540 x 480 pixels, pour correspondre au PAR du flux 0.

Si le VMR-9 utilise le mode de mélange RVB, il sélectionne le flux 1 comme cible, car ce flux a la taille d’image la plus élevée. Il étend le flux 0 à une taille d’image de 1 024 x 576 pixels. Notez que dans ce cas, l’image composite a un PAR de 1:1, de sorte que l’allocator-presenter n’a pas à corriger pour les pixels non carrés. (Il peut encore être nécessaire d’étendre la vidéo pour prendre en compte le rectangle de destination.)

Utilisation du mode de mélange non carré

Le mode mélange non carré est recommandé si l’une des conditions suivantes est remplie :

  • Votre application n’envoie jamais plus d’un flux vidéo au VMR-9.
  • Votre application restitue les fichiers DVD, télévision ou ms-dvr. Vous devez également utiliser le mode mixte YUV dans ce cas, si le matériel graphique le prend en charge.

Si votre application combine plusieurs flux vidéo qui peuvent avoir des tailles d’image ou des proportions de pixels variables, le mode de mixage carré par défaut est recommandé.

Pour configurer le mode de mélange non carré, le graphique de filtre doit être arrêté et toutes les broches d’entrée doivent être déconnectées sur le VMR-9. Appelez ensuite IVMRMixerControl9::SetMixingPrefs avec l’indicateur MixerPref9_NonSquareMixing :

DWORD dwPrefs;
pMixControl->GetMixingPrefs(&dwPrefs);  
dwPrefs |= MixerPref9_NonSquareMixing;
pMixControl->SetMixingPrefs(dwPrefs);

Notes

Si vous combinez l’indicateur MixerPref9_NonSquareMixing avec l’indicateur MixerPref9_ARAdjustXorY, vmR-9 ignore l’indicateur MixerPref9_ARAdjustXorY.

 

Si votre application utilise un présentateur-allocator personnalisé avec un mode de mélange non carré, n’oubliez pas que l’image composite peut avoir une PAR non carrée. L’allocator-presenter doit mettre à l’échelle l’image à un carré (1:1) PAR.

Bitmaps statiques

Si vous utilisez l’interface IVMRMixerBitmap9 pour fusionner une bitmap statique dans la vidéo, vous devez considérer la bitmap comme un deuxième flux vidéo dans le cadre du mode de mixage VMR.

Le VMR traite la bitmap comme ayant le même PAR que la cible. Il ne met pas à l’échelle la bitmap pour s’ajuster aux proportions de pixels de la cible. Dans la configuration par défaut du VMR, la cible a une par 1:1, qui correspond à la plupart des bitmaps. En mode mélange non carré, la cible peut avoir des pixels non carrés. Pour s’assurer que la bitmap s’affiche correctement, l’application doit fournir une image dont le PAR correspond au PAR cible.

Utilisation du mode de mixage VMR