Conseils d’implémentation de DShow Bridge pour les appareils UVC

Cette rubrique fournit des conseils d’implémentation pour la configuration du pont DShow pour les caméras et les appareils conformes à la spécification de la classe vidéo USB (UVC). La plateforme utilise les descripteurs de système d’exploitation Microsoft de la norme de bus USB pour configurer DShow Bridge. Les descripteurs de système d’exploitation des propriétés étendues sont une extension des descripteurs standard USB et sont utilisés par les périphériques USB pour retourner des propriétés d’appareil spécifiques à Windows qui ne sont pas activées par le biais de spécifications standard.

Vue d’ensemble

La pile Microsoft Camera Capture comprend une pile d’infrastructure héritée appelée DirectShow et une infrastructure moderne appelée Multimedia Foundation. Les IVS et les oem ont dû écrire des composants pour leurs appareils afin de satisfaire les deux pipelines.

DShow Bridge a été écrit dans le but de relier le pipeline DShow à la plateforme Media Foundation. Cela active de vrais pilotes universels afin que les IHVs et les OEM puissent écrire des pilotes qui peuvent s’exécuter avec les applications MediaFoundation et DShow sur Windows version 1607 et ultérieure. Avec l’option d’option DShow Bridge activée, une application DShow et des applications de partage peuvent partager simultanément le même matériel d’appareil photo.

Les IVS et les oem peuvent avoir besoin d’une exemption des stratégies qui régissent le pipeline DShow. Les partenaires peuvent activer les fonctionnalités suivantes à l’aide des descripteurs de système d’exploitation :

  • Opting in ou out of DShow Bridge : l’appareil peut accepter ou refuser le pont vers un pipeline mieux adapté à ses besoins. Le pipeline moderne est documenté de manière plus approfondie et utilise les fonctionnalités ajoutées au système d’exploitation sur plusieurs versions. Le pipeline hérité, en mode maintenance, est en retard.

  • Décompression MJPEG dans FrameServer : FrameServer est un service virtualisant un appareil photo. Cela permet de partager les épingles de l’appareil entre plusieurs clients. Les architectures ayant un décompresseur Media Foundation optimisé peuvent utiliser cette fonctionnalité pour décoder MJPEG dans FrameServer. Les formats multimédias traduits non compressés (YUY2) sont proposés aux applications multiples. Le flux n’est décompressé qu’une seule fois pour plusieurs clients possibles. Cela améliore les performances des applications. Le diagramme suivant montre le pipeline de capture de caméra :

pipeline de capture de caméra.

Les oem et les IHVs empaquetant leurs périphériques de caméra USB peuvent utiliser la spécification de descripteur de caractéristiques de système d’exploitation des propriétés étendues du bus USB pour configurer DShow Bridge sans recourir à des modifications de fichier INF pour leur pilote UVC.

Les descripteurs de système d’exploitation permettent aux appareils de définir des propriétés de Registre pour les périphériques USB ou les appareils composites.

Pour configurer DShow Bridges à l’aide des descripteurs de système d’exploitation USB, le logiciel hôte doit créer la clé de Registre suivante pour chaque interface de périphérique USB :

HKLM\SYSTEM\CurrentControlSet\Enum\USB\<DeviceVID&PID>\<DeviceInstance>\Device Parameters

DWORD : EnableDshowRedirection

La valeur de Registre EnableDshowRedirection est une valeur de masque de bits qui peut être utilisée pour configurer DShow Bridge comme décrit dans le tableau ci-dessous.

Masque de bits Description Notes
0x00000001 Choisir DShow Bridge 0 – Désinscription
1 – Accepter
0x00000002 Activer le décodage MJPEG une fois dans FrameServer (voir la note ci-dessous) 0 – Type de média compressé MJPEG exposé (aucune opération)
1 – Exposer les types de médias non compressés traduits à partir de MJPEG (YUY2)

Notes

Active le décodage MJPEG une fois dans FrameServer, puis les formats multimédias traduits non compressés (YUY2) sont proposés à plusieurs applications. Le flux n’est décompressé qu’une seule fois pour plusieurs clients possibles. Cela améliore les performances des applications.

Exemples de dispositions

Des exemples sont inclus ci-dessous pour les spécifications suivantes :

  • Spécification des descripteurs étendus du système d’exploitation Microsoft 1.0

  • Spécification des descripteurs Microsoft OS 2.0

Spécification des descripteurs de propriété étendue du système d’exploitation Microsoft version 1.0

Le descripteur de système d’exploitation des propriétés étendues a deux composants

  • Section d’en-tête de longueur fixe

  • Une ou plusieurs sections de propriétés personnalisées de longueur variable, qui suivent la section d’en-tête

Section d'en-tête

La section en-tête décrit l’ensemble du descripteur de propriétés étendues, y compris la longueur totale et le numéro de version.

Offset Champ Taille (en octets) Valeur Description
0 dwLength 4 0x0000004c 76 décimaux
4 bcdVersion 2 0x0100 Version 1.0
6 Windex 2 0x005 Descripteur de système d’exploitation de propriété étendue
8 wCount 2 0x0001 Une propriété personnalisée

Custom Property Section (descripteur 1.0)

Le descripteur de système d’exploitation de propriété étendue du périphérique HID USB a une section de propriété personnalisée pour créer la clé de Registre EnableDshowRedirection DWORD.

Offset Champ Taille (en octets) Valeur
0 dwSize 4 0x00000042 (66 octets pour cette propriété)
4 dwPropertyDataType 4 0x00000004 (REG_DWORD_LITTLE_ENDIAN)
8 wPropertyNameLength 2 0x0030
10 bPropertyName 48 EnableDshowRedirection (chaîne Unicode)
58 dwPropertyDataLength 4 0x00000004 (Sizeof(DWORD))
62 bPropertyData 4 0x00000001 (données DWORD)

Spécification des descripteurs Microsoft OS 2.0

Cet exemple montre comment les jeux de descripteurs Microsoft 2.0 peuvent être utilisés pour fournir une seule valeur de Registre DWORD d’EnableDshowRedirection qui s’applique aux versions de Windows.

Custom Property Section (descripteur 2.0)

Offset Champ Taille (en octets) Valeur
0 wLength 2 Longueur en octets de ce descripteur
4 wDescriptorType 2 0x00000004 (REG_DWORD_LITTLE_ENDIAN)
8 wPropertyDataType 2 0x0030
wPropertyNameLength 2
10 PropertyName Variable Longueur du nom de la propriété
58 dwPropertyDataLength 2 Longueur des données de propriété
62 PropertyData Variable Données de propriété
UCHAR Example2\_MSOS20DescriptorSetForFutureWindows\[0x48\] =
{
    //
    // Microsoft OS 2.0 Descriptor Set Header
    //
    0x0A, 0x00,                 // wLength - 12 bytes
    0x00, 0x00,                 // MSOS20_SET_HEADER_DESCRIPTOR
    0x00, 0x00, 0x0?, 0x06,     // dwWindowsVersion – 0x06030000 for future Windows version
    0x4A, 0x00,                 // wTotalLength – 72 bytes

    //
    // Microsoft OS 2.0 Registry Value Feature Descriptor
    //
    0x3E, 0x00,                 // wLength - 62 bytes
    0x04, 0x00,                 // wDescriptorType – 5 for Registry Property
    0x04, 0x00,                 // wPropertyDataType - 4 for REG_DWORD
    0x30, 0x00,                 // wPropertyNameLength – 48 bytes
    0x45, 0x00, 0x6E, 0x00,     // Property Name - "EnableDshowRedirection"
    0x61, 0x00, 0x62, 0x00,
    0x6C, 0x00, 0x65, 0x00,
    0x44, 0x00, 0x73, 0x00,
    0x68, 0x00, 0x6F, 0x00,
    0x77, 0x00, 0x52, 0x00,
    0x65, 0x00, 0x64, 0x00,
    0x69, 0x00, 0x72, 0x00,
    0x65, 0x00, 0x63, 0x00,
    0x74, 0x00, 0x69, 0x00,
    0x6F, 0x00, 0x6E, 0x00,
    0x00, 0x00, 0x00, 0x00,
    0x04, 0x00,                 // wPropertyDataLength – 4 bytes
    0x00, 0x00, 0x00, 0x00      // PropertyData – 0x00000003 (DShow Bridge is enabled and MJPEG is decoded in FrameServer)
}

Ressources

Descripteurs de système d’exploitation Microsoft pour les périphériques USB

Pilote parent générique USB (Usbccgp.sys)

Spécification USB