Utilisation des cibles de rendu Direct3D

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est 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.]

Plusieurs sous-types multimédias pour les cibles de rendu Direct3D sont définis pour une utilisation avec VMR-7 et VMR-9. Lorsqu’un filtre amont propose une connexion avec l’un de ces sous-types, il indique au VMR que le rendu doit être effectué sur une cible de rendu Direct3D. Pour VMR-7, il s’agit d’une cible de rendu Direct3D DirectX 7, et pour VMR-9, il s’agit d’une cible de rendu Direct3D DirectX 9. Si le VMR est en mode mixage, la surface sera également une surface de texture Direct3D. Si le VMR n’est pas en mode mixage, la surface sera une surface Direct3D standard. Les formats de pixels ARGB sont uniquement pris en charge lorsque le vmR est en mode mixage. Les sous-types cibles de rendu sont les suivants :

VMR-7 VMR-9
MEDIASUBTYPE_RGB32_D3D_DX7_RT MEDIASUBTYPE_RGB32_D3D_DX9_RT
MEDIASUBTYPE_RGB16_D3D_DX7_RT MEDIASUBTYPE_RGB16_D3D_DX9_RT
MEDIASUBTYPE_ARGB32_D3D_DX7_RT MEDIASUBTYPE_ARGB32_D3D_DX9_RT
MEDIASUBTYPE_ARGB4444_D3D_DX7_RT MEDIASUBTYPE_ARGB4444_D3D_DX9_RT
MEDIASUBTYPE_ARGB1555_D3D_DX7_RT MEDIASUBTYPE_ARGB1555_D3D_DX9_RT

 

Ces types sont définis dans le fichier d’en-tête uuids.h. Les types multimédias MEDIASUBTYPE_RGB32 sont au format RGBx888 et MEDIASUBTYPE_RGB16 types multimédias sont au format RVB565. Pour plus d’informations sur ces formats de pixels, consultez la documentation de DirectX Graphics.

Demande d’une Surface déverrouillée

Le verrouillage et le déverrouillage de surfaces DirectDraw sont des opérations coûteuses en calcul. Lorsque vous utilisez les sous-types de média cible de rendu Direct3D, le filtre amont a besoin que les surfaces soient déverrouillées afin qu’elles puissent fonctionner avec le matériel graphique. Pour éviter une opération de verrouillage-déverrouillage inutile, vmR prend en charge un nouvel indicateur sur la méthode IMemAllocator::GetBuffer, AM_GBF_NODDSURFACELOCK, qui indique au VMR de ne pas verrouiller la surface DirectDraw avant de passer un exemple au filtre amont. Lorsque cet indicateur est utilisé, les appels à IMediaSample::GetPointer échouent, car il n’y a pas de pointeur verrouillé. Pour obtenir l’accès à la surface DirectDraw, le filtre doit appeler QueryInterface sur l’objet IMediaSample retourné et demander l’interface IVMRSurface . De toute évidence, le filtre amont doit s’assurer que la surface n’est pas verrouillée lorsqu’il libère l’exemple dans la liste libre.