Condividi tramite


Specifica degli intervalli di dati pin

Dopo aver definito una topologia per rappresentare i percorsi dati e i nodi di controllo nei dispositivi, il passaggio successivo consiste nel definire gli intervalli di dati per ogni pin configurabile. Un pin configurabile può essere creato, configurato e connesso a un flusso wave o MIDI sotto il controllo software. Al contrario, esiste una connessione fisica o un pin bridge in modo implicito e non può essere creato né configurato sotto il controllo software.

Prima di connettere un pin configurabile per fungere da sink o origine per un flusso wave o MIDI, il pin deve essere configurato per gestire il formato dati per il flusso. In genere, il pin può essere configurato per accettare uno dei diversi formati di flusso. Ad esempio, un pin di output a onda PCM potrebbe accettare gli intervalli seguenti di parametri di flusso PCM:

  • Frequenza di esempio di 11,025 kHz, 22,05 kHz, 44,1 kHz e 48 kHz

  • Dimensioni di esempio di 8, 16, 24 e 32 bit

  • Qualsiasi numero di canali da 1 a 8

Per ogni tipo di pin configurabile, un driver miniport descrive i vari formati di dati di flusso che il pin può gestire. Questi intervalli di parametri possono essere specificati come matrice di descrittori dell'intervallo di dati, come illustrato nell'esempio di codice seguente.

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
    }
};

Si noti che la matrice nell'esempio precedente contiene un singolo descrittore dell'intervallo PinDataRangesPcm di dati di tipo KSDATARANGE_AUDIO. Più in generale, una matrice di intervalli di dati può contenere un numero arbitrario di descrittori. Ad esempio, un pin wave-output non PCM può supportare entrambi i formati AC-3-over-S/PDIF e WMA Pro-over-S/PDIF. Ognuno di questi due formati viene specificato da un descrittore di intervallo di dati separato. Pertanto, la matrice dell'intervallo di dati del pin contiene almeno due strutture KSDATARANGE_AUDIO.

Un pin configurabile che supporta il formato di flusso musicale da un'applicazione che usa DirectMusic o le funzioni midiInXxx e midiOutXxx di Windows usa un descrittore di intervallo di dati di tipo KSDATARANGE_MUSIC.

Il driver di porta ottiene le informazioni sull'intervallo di dati dal driver miniport e usa queste informazioni, ovunque possibile, per gestire le richieste per informazioni sui formati di dati che ogni pin può supportare. Nel caso di un pin con un semplice intervallo di dati PCM, il driver di porta è in grado di gestire le richieste di intersezione per tale pin. In una richiesta di intersezione un client fornisce un set di intervalli di dati che rappresentano i formati di dati possibili per un flusso. Se possibile, il gestore dell'intersezione del driver di porta seleziona un determinato formato di dati dagli intervalli di dati nella richiesta che rientra anche negli intervalli di dati del pin. Questo formato rappresenta un'intersezione dei due set di intervalli di dati. Di conseguenza, sia il client che il pin possono elaborare un flusso con questo formato. Per intervalli di dati più complessi, il driver miniport può fornire il proprio gestore di intersezione, che il driver di porta usa invece del proprio gestore predefinito. Il gestore di intersezione del driver miniport può consentire qualsiasi requisito di formato che potrebbe essere difficile da esprimere al driver di porta come matrice di intervalli di dati. Per altre informazioni, vedere Gestori intersezione datie più file audio del canale e FILE WAVE.