Processamento centrado em pin

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

O processamento centrado em pin significa que o AVStream chama a rotina de expedição do processo de fixação do minidriver quando novos quadros chegam na fila de pinos.

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

Em geral, os filtros de software usam o processamento centrado em filtro e os filtros de hardware usam o processamento centrado em pin. Por exemplo, o hardware que transforma ou renderiza dados pode rotear dados em um filtro centrado em pin. Há casos raros em que essas funções podem ser revertidas.

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

Se o minidriver não modificar as configurações de sinalizador na estrutura KSPIN_DESCRIPTOR_EX, o AVStream chamará a rotina de retorno de chamada AVStrMiniPinProcess fornecida pelo fornecedor em três situações:

  • O pino faz a transição para o estado mínimo de processamento. Os quadros já devem existir na fila e o pino deve fazer a transição de menor que o estado mínimo de processamento para pelo menos o estado mínimo de processamento.

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

  • O Minidriver chama explicitamente KsPinAttemptProcessing.

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

Além disso, o AVStream não chamará a expedição do processo de fixação se o portão AND do pino estiver fechado. Se você usar as rotinas KSGATEXxx para adicionar entradas adicionais desativadas ao portão AND do pino, por exemplo, a expedição do processo não será chamada.

Quando o AVStream chama AVStrMiniPinProcess, ele fornece um ponteiro para o objeto pin que tem dados disponíveis. A expedição de processamento do minidriver pode adquirir um ponteiro de borda à esquerda chamando KsPinGetLeadingEdgeStreamPointer. Em seguida, os minidrivers manipulam dados de fluxo usando a API do ponteiro de fluxo .

Minidrivers que usam processamento centrado em pin podem modificar quando o AVStream chama a expedição AVStrMiniPinProcess definindo sinalizadores na estrutura de KSPIN_DESCRIPTOR_EX relevante. As descrições de sinalizador na página de referência KSPIN_DESCRIPTOR_EX são particularmente relevantes para fornecedores que estão implementando filtros centrados em pin.

As tentativas de processamento poderão falhar se o minidriver estiver mantendo o mutex de processamento por meio de KsPinAcquireProcessingMutex. Também poderão surgir problemas se o minidriver manipular diretamente um portão usando as chamadas KSGATE* .

O AVSHwS (Driver de Exemplo de Hardware Simulado) do AVStream nos exemplos do Kit de Driver do Windows é um driver de captura centrado em pino para uma parte simulada do hardware. O exemplo Avshws mostra como implementar o DMA por meio do AVStream.