Partilhar via


Processamento centrado em pinos

Ao escrever um minidriver AVStream, você fornece filtros que usam um dos dois paradigmas de processamento: processamento centrado em pinos ou processamento centrado em filtros.

O processamento centrado em pinos significa que o AVStream chama a rotina de despacho do processo de pinos do minidriver quando novos quadros chegam na fila de pinos.

O processamento centrado em filtros significa que o AVStream chama a rotina de despacho do processo de filtro do minidriver quando há quadros de dados disponíveis em cada pino instanciado. Observe que essas definições especificam o comportamento padrão; Minidrivers podem modificar o comportamento padrão definindo sinalizadores na estrutura KSPIN_DESCRIPTOR_EX .

Em geral, os filtros de software usam processamento centrado em filtros e os filtros de hardware usam processamento centrado em pinos. Por exemplo, o hardware que transforma ou processa dados pode rotear dados em um filtro centrado em pinos. Há casos raros em que esses papéis podem ser invertidos.

Para fornecer um filtro centrado em pinos, o minidriver fornece um ponteiro para uma rotina de retorno de chamada AVStrMiniPinProcess em cada estrutura KSPIN_DISPATCH; não forneça um despacho de processamento na estrutura KSFILTER_DISPATCH.

Se o minidriver não modificar as configurações do sinalizador na estrutura KSPIN_DESCRIPTOR_EX, o AVStream invocará a rotina de retorno de chamada AVStrMiniPinProcess disponibilizada pelo fabricante em três circunstâncias:

  • O pino transita para o estado mínimo de processamento. Os quadros já devem existir na fila e o pino deve passar de menos do que o estado mínimo de processamento para, pelo menos, o estado mínimo de processamento.

  • Novos quadros chegam. O pino deve estar pelo menos no estado mínimo de processamento e não deve haver quadros na borda dianteira ou à frente.

  • Minidriver chama explicitamente KsPinAttemptProcessing.

Por padrão, pausa é o estado mínimo de processamento.

Além disso, o AVStream não chama o processamento do pino se o portão AND do pino estiver fechado. Se utilizar as rotinas KSGATEXxx para adicionar entradas adicionais de desligamento ao portão AND do pino, o processo de despacho não será chamado.

Quando o AVStream chama AVStrMiniPinProcess, ele fornece um ponteiro para o objeto de pino que tem dados disponíveis. O despacho de processamento do minidriver pode então adquirir um ponteiro de ponta chamando KsPinGetLeadingEdgeStreamPointer. Em seguida, os minidrivers manipulam os dados de fluxo usando a API de ponteiro de fluxo.

Os minidrivers que usam processamento centrado em pinos podem modificar quando o AVStream chama o despacho AVStrMiniPinProcess definindo sinalizadores na estrutura KSPIN_DESCRIPTOR_EX relevante. As descrições de flags na página de referência do KSPIN_DESCRIPTOR_EX são particularmente relevantes para fornecedores que implementam filtros centrados em pinos.

As tentativas de processamento podem falhar se o minidriver estiver a manter o mutex de processamento através do KsPinAcquireProcessingMutex. Problemas também podem surgir se o minidriver manipular diretamente um portão usando as chamadas KSGATE* .

O AVStream Simulated Hardware Sample Driver (AVSHwS) nos exemplos do Kit de Driver do Windows é um driver de captura centrado em pinos para uma peça simulada de hardware. O exemplo Avshws mostra como implementar o DMA por meio do AVStream.