Spécification de plages de données d’épingle

Après avoir défini une topologie pour représenter les chemins de données et les nœuds de contrôle de vos appareils, l’étape suivante consiste à définir les plages de données pour chaque broche configurable. Une broche configurable peut être créée, configurée et connectée à un flux wave ou MIDI sous contrôle logiciel. En revanche, une connexion physique ou une broche de pont existe implicitement et ne peut ni être créée ni configurée sous contrôle logiciel.

Avant de connecter une broche configurable pour servir de récepteur ou de source pour un flux wave ou MIDI, la broche doit être configurée pour gérer le format de données du flux. En règle générale, la broche peut être configurée pour accepter l’un des différents formats de flux. Par exemple, une broche de sortie d’onde PCM peut accepter les plages suivantes de paramètres de flux PCM :

  • Taux d’échantillonnage de 11,025 kHz, 22,05 kHz, 44,1 kHz et 48 kHz

  • Tailles d’exemples de 8, 16, 24 et 32 bits

  • Nombre de canaux compris entre 1 et 8

Pour chaque type de broche configurable, un pilote miniport décrit les différents formats de données de flux que la broche peut gérer. Ces plages de paramètres peuvent être spécifiées sous la forme d’un tableau de descripteurs de plage de données, comme illustré dans l’exemple de code suivant.

static KSDATARANGE_AUDIO PinDataRangesPcm[] =
{
    {
        {
            sizeof(KSDATARANGE_AUDIO),
            0,
            0,
            0,
            STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
            STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
            STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
        },
        8,       // Maximum number of channels
        8,       // Minimum number of bits-per-sample
        32,      // Maximum number of bits-per-channel
        11025,   // Minimum rate
        48000    // Maximum rate
    }
};

Notez que le PinDataRangesPcm tableau de l’exemple précédent contient un seul descripteur de plage de données de type KSDATARANGE_AUDIO. Plus généralement, un tableau de plages de données peut contenir un nombre arbitraire de descripteurs. Par exemple, une broche de sortie d’onde non PCM peut prendre en charge les formats AC-3-over-S/PDIF et WMA Pro-over-S/PDIF. Chacun de ces deux formats est spécifié par un descripteur de plage de données distinct. Par conséquent, le tableau de plage de données de la broche contiendrait au moins deux structures KSDATARANGE_AUDIO.

Une broche configurable qui prend en charge le format de flux de musique d’une application qui utilise DirectMusic ou les fonctions multimédias Windows midiInXxx et midiOutXxx utilise un descripteur de plage de données de type KSDATARANGE_MUSIC.

Le pilote de port obtient les informations de plage de données du pilote miniport et utilise ces informations, dans la mesure du possible, pour gérer les demandes d’informations sur les formats de données que chaque broche peut prendre en charge. Dans le cas d’une broche avec une plage de données PCM simple, le pilote de port est en mesure de gérer les demandes d’intersection pour cette broche. Dans une demande d’intersection, un client fournit un ensemble de plages de données qui représentent des formats de données possibles pour un flux. Si possible, le gestionnaire d’intersection du pilote de port sélectionne un format de données particulier à partir des plages de données de la requête qui se trouve également dans les plages de données de son code pin. Ce format représente une intersection des deux ensembles de plages de données. Par conséquent, le client et le code pin peuvent traiter un flux avec ce format. Pour les plages de données plus complexes, le pilote miniport peut fournir son propre gestionnaire d’intersection, que le pilote de port utilise ensuite au lieu de son propre gestionnaire par défaut. Le gestionnaire d’intersections du pilote miniport peut prendre en charge toutes les exigences de format qui peuvent être difficiles à exprimer au pilote de port en tant que tableau de plages de données. Pour plus d’informations, consultez Gestionnaires d’intersection de données et données audio à plusieurs canaux et fichiers WAVE.