Partager via


Intersection des données

Dans un graphique de filtre audio, un flux audio peut passer de la broche source d’un filtre à la broche réceptrice d’un autre filtre uniquement si les deux broches prennent en charge un format commun pour le flux. De même, un client peut envoyer un flux audio à une broche de sortie sur un filtre ou recevoir un flux audio à partir d’une broche source sur un filtre uniquement si le client et la broche prennent en charge un format de flux commun. Les filtres audio utilisent une technique appelée intersection de données (abrégée de l'intersection d'intervalle de données) pour identifier un format de flux commun à deux broches ou entre un client et une broche.

Par exemple, dans Windows Server 2003, Windows XP, Windows 2000 et Windows Me/98, le pilote système SysAudio utilise la technique d’intersection de données pour construire un graphique de filtre audio en connectant des paires de broches de filtre prenant en charge les formats de données audio compatibles.

Une usine d’épingles définit l'ensemble des formats pris en charge par chaque broche sous forme de tableau de plages de données, où chaque plage de données est une structure de type KSDATARANGE_AUDIO. Une plage de données spécifie un type de format général, qui peut être KSDATAFORMAT_WAVEFORMATEX ou KSDATAFORMAT_DSOUND. En outre, la plage de données spécifie une plage de valeurs pour chacun des paramètres suivants :

  • Bits par échantillon

  • Fréquence d’échantillonnage

  • Nombre de canaux

La structure KSDATARANGE_AUDIO spécifie les valeurs minimales et maximales des plages bits par échantillon et de fréquence d’échantillonnage, mais uniquement un maximum pour la plage de nombre de canaux. Le nombre minimal de canaux est implicitement un.

Le travail de négociation d’un format de données commun pour deux broches consiste à trouver deux plages de données,-une à partir de chaque broche- qui se croisent les unes les autres. Une paire de plages de données se croise si :

  • Ils prennent en charge le même format d’onde général (KSDATAFORMAT_WAVEFORMATEX ou KSDATAFORMAT_DSOUND).

  • Leurs plages bits par échantillon se chevauchent.

  • Leurs plages de fréquences d’échantillonnage se chevauchent.

Comme mentionné précédemment, la structure KSDATAFORMAT_AUDIO implique un modèle matériel dans lequel le nombre minimal de canaux pris en charge par une broche est toujours un. Selon ce modèle, les intervalles de nombre de canaux pour deux broches devraient toujours se chevaucher, car chaque broche prend en charge au moins un canal. Évidemment, une carte matérielle avec un nombre minimal de canaux supérieur à un ne se conforme pas à ce modèle, mais le pilote de l’adaptateur peut inclure un gestionnaire d'intersection de données propriétaire pour traiter ce type de problème (voir l’exemple dans Gestionnaires propriétaires Data-Intersection).

Lors de la recherche d’une paire de plages de données croisées pour les deux broches, le gestionnaire sélectionne un format de données commun dans la région d’intersection comme suit :

  • Le nombre de bits par échantillon est sélectionné dans la région dans laquelle les deux plages bits par échantillon se chevauchent.

  • La fréquence d'échantillonnage est sélectionnée dans la région où se chevauchent les deux plages de fréquence d'échantillonnage.

  • Le nombre de canaux est sélectionné dans la zone où les deux plages de nombre de canaux se chevauchent.

Par exemple, lors de la négociation d’un format commun pour la broche de réception d'un pilote de port audio et la broche source d’un autre filtre (généralement, le pilote système KMixer), SysAudio obtient d’abord le tableau de plages de données de la broche source. SysAudio envoie ensuite une requête KSPROPERTY_PIN_DATAINTERSECTION à la broche de réception et inclut le tableau de plages de données de la broche d'émission avec cette requête. La couche de diffusion en continu du noyau intercepte la requête et appelle de manière itérative le gestionnaire d’intersection de données du pilote de port une fois pour chaque élément successif du tableau de plages de données de la broche source, commençant par le premier élément, jusqu’à ce que le gestionnaire réussisse à trouver une intersection de données.

Avec chaque appel que SysAudio effectue au gestionnaire d'intersection des données du pilote de port, le gestionnaire obtient d'abord le tableau de plages de données du pin récepteur à partir du pilote miniport. Il effectue ensuite une itération dans le tableau, en commençant par le premier élément, jusqu’à ce qu’il réussisse à trouver une intersection entre une plage de données de broche de récepteur et la plage de données de broche source actuelle. Le gestionnaire sélectionne un format commun qui se trouve dans l'intersection des formats disponibles et remet ce format à l'appelant.

À chaque étape de l'itération, le pilote de port appelle le gestionnaire propriétaire d'intersection de données du pilote miniport avec les deux plages de données -- une pour chacune des deux broches. Si, à une étape quelconque, le gestionnaire propriétaire refuse d'effectuer une vérification d’intersection des données entre les deux plages de données, le gestionnaire d’intersection de données du pilote de port procède plutôt à la vérification.

Pour résumer, la recherche d’une intersection entre une plage de données de broche source et une plage de données de broche réceptrice est un processus itératif :

  • Dans la boucle externe, la couche de streaming du noyau effectue une itération à travers les éléments successifs du tableau de plages de données de la broche source, en commençant par le premier élément du tableau.

  • Dans la boucle interne, le pilote de port effectue une itération sur des éléments successifs dans le tableau de la gamme de données de la broche de sortie, en commençant par le premier élément du tableau.

La recherche s’arrête lors de la recherche de la première intersection de données. Ce processus tend à favoriser les éléments vers le début de l'intervalle de données de chaque borne. Lors de la spécification d’un tableau de plages de données pour une broche, un pilote d’adaptateur doit classer les éléments de tableau en plaçant des plages de données pour les formats préférés vers le début du tableau.