Interseções de intervalo de dados no AVStream
Um formato de dados é um único conjunto de parâmetros que descrevem algum aspecto de uma conexão. Por exemplo, um formato de dados de áudio pode especificar um determinado formato de áudio em amostras X por segundo e bits Y por exemplo.
Um intervalo de dados especifica uma sequência de parâmetros válidos. Por exemplo, um intervalo de dados de áudio pode especificar um determinado formato de áudio em amostras A-B por segundo e bits C-D por exemplo.
O minidriver fornece uma lista de intervalos de dados compatíveis com um pin específico no membro DataRanges da estrutura de KSPIN_DESCRIPTOR correspondente.
No AVStream, os minidrivers podem fornecer seus próprios manipuladores de interseção de intervalo de dados fornecendo um ponteiro para uma rotina de retorno de chamada fornecida pelo minidriver no membro IntersectHandler de um KSPIN_DESCRIPTOR_EX. Para permitir que o AVStream intersecione os intervalos, defina esse membro como NULL. Consulte AVStrMiniIntersectHandlerEx para saber como definir a rotina de retorno de chamada.
Se um minidriver fornecer um manipulador de interseção, quando uma interseção precisar ser feita, o minidriver receberá dois intervalos de dados que correspondem ao tipo principal, subformulário e especificador. Além disso, os atributos necessários dos intervalos de dados correspondem.
Se os intervalos se cruzarem e o espaço de buffer suficiente for fornecido no parâmetro Data da rotina de retorno de chamada AVStrMiniIntersectHandlerEx , a rotina de interseção escolherá um formato na interseção e o retornará ao chamador no buffer apontado por Dados.
Se os dois intervalos de dados não se cruzarem, o manipulador retornará STATUS_NO_MATCH.
Se o minidriver tiver especificado uma expedição AVStrMiniPinSetDataFormat , o AVStream chamará essa expedição para informar ao minidriver que o AVStream está definindo um formato específico no pino. Forneça um ponteiro para a rotina de retorno de chamada AVStrMiniPinSetDataFormat no membro SetDataFormat da estrutura KSPIN_DISPATCH . (Minidrivers que são clientes da classe de fluxo recebem SRB_SET_DATA_FORMAT em vez de AVStrMiniPinSetDataFormat.)
O minidriver pode recusar um formato proposto retornando STATUS_NO_MATCH de AVStrMiniPinSetDataFormat.
Além da chamada inicial para AVStrMiniPinSetDataFormat antes de o pin ser criado, o minidriver pode receber uma segunda chamada AVStrMiniPinSetDataFormat pouco antes da transição do pino para o estado RUN. Se o cliente da classe AVStream ou de fluxo for um minidriver de captura de vídeo e você receber essa notificação, essa expedição conterá os parâmetros reais da superfície. Se possível, o minidriver não deve falhar nesta segunda alteração de formato. Não suponha que uma segunda chamada de expedição ocorra.
O minidriver deve capturar dados em qualquer formato contido na última expedição bem-sucedida de AVStrMiniPinSetDataFormat .