Formatos de dados do KS e intervalos de dados

Os pinos KS especificam formatos de dados e intervalos usando as estruturas KSDATAFORMAT e KSDATARANGE . Um formato de dados especifica um único atributo de um fluxo de dados, por exemplo, um tamanho de amostragem de áudio de 16 bits. Um intervalo de dados especifica vários formatos, por exemplo, um intervalo de amostragem de áudio de 16 a 24 bits.

Um minidriver inclui uma matriz de estruturas KSDATARANGE em cada estrutura KSPIN_DESCRIPTOR que ele fornece. Os formatos fornecidos pela Microsoft são enumerados em ksmedia.h.

Uma estrutura KSDATARANGE tem os mesmos membros que uma estrutura KSDATAFORMAT; no entanto, o minidriver pode especificar valores curinga para os membros principais de formato, subformatação e especificador de KSDATARANGE.

Os minidrivers usam versões estendidas dessas estruturas para definir valores específicos da mídia. Para ler sobre como isso funciona na captura de áudio e vídeo, consulte: Formatos de dados de áudio e intervalos de dados e Selecionar um formato de fluxo.

Os clientes usam as seguintes propriedades para consultar o suporte ao formato de dados de pinos instanciados por uma determinada fábrica de pinos no filtro:

  • KSPROPERTY_PIN_DATARANGES. O filtro KS relata todos os intervalos de dados com suporte por pinos instanciados pela fábrica de pinos. Isso inclui todos os formatos de dados aos quais o pin pode dar suporte.

  • KSPROPERTY_PIN_CONSTRAINEDDATARANGES. O filtro KS relata todos os intervalos de dados com suporte por pinos instanciados pela fábrica de pinos, considerando o estado atual do driver interno.

  • KSPROPERTY_PIN_PROPOSEDATAFORMAT. Os clientes podem usar essa propriedade para consultar se os pinos instanciados pelo pin factory dão suporte a um formato de dados específico.

  • KSPROPERTY_PIN_DATAINTERSECTION. Os clientes podem usar essa propriedade para oferecer uma variedade de formatos de dados.

Depois que um pin é instanciado, um cliente de modo de usuário pode determinar o formato de dados atual ou solicitar uma alteração do formato de dados por meio de KSPROPSETID_Connection solicitações de propriedade. Por exemplo, o cliente usa KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT para determinar se um pin dá suporte a um determinado formato de dados. O cliente usa KSPROPERTY_CONNECTION_DATAFORMAT para alterar o formato de dados.

Os minidrivers e clientes do KS podem negociar dinamicamente formatos de dados. Quando o formato de dados de um fluxo é alterado, o minidriver especifica o sinalizador KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY no membro OptionsFlags de um KSSTREAM_HEADER. O minidriver passa o novo formato de dados em si, descrito em uma estrutura KSDATAFORMAT , no buffer de dados correspondente.