Compartilhar via


Especificando intervalos de dados de fixação

Depois de definir uma topologia para representar os caminhos de dados e os nós de controle em seus dispositivos, a próxima etapa é definir os intervalos de dados para cada pino configurável. Um pino configurável pode ser criado, configurado e conectado a uma onda ou fluxo MIDI sob controle de software. Por outro lado, uma conexão física ou um pino de ponte existe implicitamente e não pode ser criado nem configurado sob controle de software.

Antes de conectar um pino configurável para servir como um coletor ou fonte para uma onda ou fluxo MIDI, o pino deve ser configurado para manipular o formato de dados do fluxo. Normalmente, o pin pode ser configurado para aceitar um dos vários formatos de fluxo. Por exemplo, um pin de saída de onda do PCM pode aceitar os seguintes intervalos de parâmetros de fluxo pcm:

  • Taxas de exemplo de 11,025 kHz, 22,05 kHz, 44,1 kHz e 48 kHz

  • Tamanhos de exemplo de 8, 16, 24 e 32 bits

  • Qualquer número de canais de 1 a 8

Para cada tipo de pino configurável, um driver de miniporta descreve os vários formatos de dados de fluxo que o pino pode manipular. Esses intervalos de parâmetros podem ser especificados como uma matriz de descritores de intervalo de dados, conforme mostrado no exemplo de código a seguir.

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

Observe que a PinDataRangesPcm matriz no exemplo anterior contém um único descritor de intervalo de dados do tipo KSDATARANGE_AUDIO. Em geral, uma matriz de intervalo de dados pode conter um número arbitrário de descritores. Por exemplo, um pino de saída de onda não PCM pode dar suporte aos formatos AC-3-over-S/PDIF e WMA Pro-over-S/PDIF. Cada um desses dois formatos é especificado por um descritor de intervalo de dados separado. Portanto, a matriz de intervalo de dados do pino conteria pelo menos duas estruturas KSDATARANGE_AUDIO.

Um pin configurável que dá suporte ao formato de fluxo de música de um aplicativo que usa o DirectMusic ou as funções midiInXxx e midiOutXxx de multimídia do Windows usa um descritor de intervalo de dados do tipo KSDATARANGE_MUSIC.

O driver de porta obtém as informações de intervalo de dados do driver de miniporta e usa essas informações, sempre que possível, para lidar com solicitações de informações sobre os formatos de dados aos quais cada pino pode dar suporte. No caso de um pino com um intervalo de dados PCM simples, o driver de porta é capaz de lidar com as solicitações de interseção para esse pino. Em uma solicitação de interseção, um cliente fornece um conjunto de intervalos de dados que representam possíveis formatos de dados para um fluxo. Se possível, o manipulador de interseção do driver de porta escolhe um formato de dados específico dos intervalos de dados na solicitação que também se enquadram nos intervalos de dados de seu pino. Esse formato representa uma interseção dos dois conjuntos de intervalos de dados. Portanto, o cliente e o pino podem processar um fluxo com esse formato. Para intervalos de dados mais complexos, o driver de miniporto pode fornecer seu próprio manipulador de interseção, que o driver de porta usa em vez de seu próprio manipulador padrão. O manipulador de interseção do driver de miniporto pode permitir quaisquer requisitos de formato que possam ser difíceis de expressar para o driver de porta como uma matriz de intervalos de dados. Para obter mais informações, consulte Manipuladores de interseção de dados e dados de áudio de vários canais e arquivos WAVE.