Fabriques d’épingles

Les fabriques d’épingles d’un filtre audio décrivent toutes les broches que le filtre peut instancier. Comme mentionné précédemment, un pilote de miniport audio stocke les informations d’épingle dans un tableau de structures PCPIN_DESCRIPTOR . Chaque structure spécifie une fabrique de broches, et une fabrique de broches est identifiée par son index dans le tableau. Cet index est fréquemment appelé ID d’épingle.

Une structure PCPIN_DESCRIPTOR contient une table Automation et une structure KSPIN_DESCRIPTOR .

La structure KSPIN_DESCRIPTOR contient les informations suivantes sur les broches dans la fabrique de broches :

  • Sens relatif du filtre du flux de données

  • Sens relatif du filtre du flux de communication (Dans toutes les versions actuelles de Windows, les filtres KS utilisent des irps pour la communication.)

  • Catégorie d’épingler

  • Nom convivial

  • Fonctionnalités de l’instance

  • Fonctionnalités de format de données

Les membres Category et Name de la structure spécifient la catégorie d’épingle et le nom convivial de la fabrique d’épingles. Pour chaque fabrique de broches dans le filtre, le pilote miniport spécifie une combinaison de GUID catégorie et nom qui identifient de manière unique la fabrique de broches. Si plusieurs fabriques de broches partagent la même valeur Category , chaque fabrique d’épingles a une valeur Name qui la distingue des autres. Si une seule fabrique de broches a une valeur Category particulière, cette valeur est suffisante pour identifier la fabrique de broches, et la valeur Name de cette fabrique de broche peut être définie sur NULL. Pour obtenir un exemple de codage, consultez Exposition de la topologie de filtre. Pour plus d’informations sur les catégories d’épingles, consultez Pin Category Property.

Une fabrique de broches spécifie la plage de formats de données qu’elle prend en charge en tant que tableau de structures KSDATARANGE étendues :

  • Une fabrique de broches qui prend en charge une plage de formats de données wave ou DirectSound pour son flux d’entrée ou de sortie spécifie un tableau de structures KSDATARANGE_AUDIO .

  • Une fabrique de broches qui prend en charge une plage de formats de données MIDI ou DirectMusic pour son flux d’entrée ou de sortie spécifie un tableau de structures KSDATARANGE_MUSIC .

KSDATARANGE_AUDIO et KSDATARANGE_MUSIC sont des versions étendues de KSDATARANGE. Pour obtenir des exemples des deux types de plages de données, consultez Formats de données audio et Plages de données.

Avant de connecter une broche récepteur sur un filtre à une broche source sur un autre filtre, un générateur de graphiques (par exemple, le pilote système SysAudio) peut rechercher dans les plages de données un format compatible. Le générateur de graphiques appelle généralement le gestionnaire d’intersection de données du filtre, ce qui permet au filtre lui-même de choisir un format compatible.

Un filtre peut avoir plusieurs fabriques de broches, et une fabrique de broches peut prendre en charge plusieurs instances de broche.

  • Le fait d’avoir plusieurs fabriques d’épingles sur un filtre est utile pour distinguer les chemins de données distincts pour les différents types de données qui transitent par le filtre. Par exemple, une fabrique de broches peut prendre en charge les flux de données PCM, et une autre fabrique de broches peut prendre en charge les flux AC-3.

  • Un filtre unique peut prendre en charge le rendu et la capture de flux simultanément. Les chemins de rendu et de capture ont des ensembles distincts de fabriques de filtres.

  • Le fait d’avoir plusieurs instances de broche sur une fabrique de broches récepteur implique fréquemment un mélange, auquel cas le filtre contient un nœud SUM (KSNODETYPE_SUM).

Comme les filtres, les broches sont des objets de noyau et sont identifiées par des handles de noyau. Le handle d’une broche instance est créé en appelant KsCreatePin. En tant qu’objet noyau, une broche peut être spécifiée en tant que cible d’un IRP. Un client du pilote spécifie la poignée de broche lors de l’envoi d’une requête IOCTL à une broche.

Lors de la création d’un graphique de filtre audio, SysAudio lie un filtre à un autre en connectant leurs broches. Une broche source d’un filtre peut être connectée à la broche récepteur d’un autre filtre. Les données et les runtimes d’intégration à partir de la broche source sont transmises à la broche récepteur via cette connexion. Pour établir la connexion, un générateur de graphiques (généralement SysAudio) crée d’abord la broche source en appelant KsCreatePin , puis crée la broche récepteur en appelant à nouveau KsCreatePin . Toutefois, dans le deuxième appel, le client spécifie que la nouvelle broche de récepteur doit être connectée à la broche source qui a été créée lors du premier appel.