Compartilhar via


Portões de controle de fluxo no AVStream

O AVStream usa portões lógicos como um mecanismo de fluxo de controle. Cada portão lógico é representado por uma estrutura KSGATE .

O AVStream inicializa cada filtro ou pino com uma única porta AND. Um minidriver pode usar esse mecanismo para determinar quando esse objeto específico pode processar dados. Para recuperar o portão de controle de processamento de um pino, o minidriver chama KsPinGetAndGate. Para recuperar o portão de controle de processamento de um filtro, chame KsFilterGetAndGate.

Para criar novas portas lógicas, o minidriver chama KsGateInitializeAnd ou KsGateInitializeOr. Você pode usar a saída de um portão como uma entrada para outro portão, encaminhando assim transições de estado. Para fazer isso, forneça um parâmetro NextOrGate ou NextAndGate nessas chamadas.

Para fechar uma entrada existente em um portão lógico, você pode chamar KsGateTurnInputOff. O minidriver pode fazer essa chamada para parar e fechar um pino ativo ou suspender o processamento por um período indefinido de tempo.

Da mesma forma, chame KsGateTurnInputOn para abrir uma entrada existente em um portão específico.

Quando um thread está pronto para ser processado, ele tenta capturar o na entrada do portão AND que controla o processamento do objeto de processamento. Para fazer isso, o minidriver chama KsGateCaptureThreshold.

Se o portão AND estiver aberto, o AVStream desativa uma entrada para o portão e o processamento começa. Como o portão agora está fechado durante o processamento, nenhum outro thread pode capturar a entrada na porta. Somente um thread pode processar dados por vez.

Para marcar o status de um portão sem modificá-lo, o minidriver pode chamar KsGateGetStateUnsafe. Observe, no entanto, que essa função não manipula a sincronização.

Para excluir um portão lógico, chame KsGateTerminateAnd ou KsGateTerminateOr. O portão que você está excluindo deve estar no início de uma cadeia de portões.

Para anexar um pino como uma entrada a um portão lógico e conectar o mesmo portão lógico que a entrada à porta AND de um filtro, chame KsPinAttachAndGate ou KsPinAttachOrGate.

Determinando o status do portão

Para um portão AND, o valor do membro Count da estrutura KSGATE é um menos o número de entradas desativadas :

Contagem = 1 – (número de entradas desativadas )

Se esse valor for menor ou igual a zero, o portão será fechado. Se esse valor for maior que zero, o portão estará aberto.

Para um portão OR, o valor do membro Count de KSGATE é o número de entradas no portão:

Count = ( número de entradas)

Se esse valor for igual a zero, o portão será fechado. Se Count for maior que zero, o portão estará aberto.

Os portões AND têm um intervalo de contagem válido de um ou menos; Os portões OR têm um intervalo de contagem válido de zero ou superior. Não defina Contagem como valores inválidos; O AVStream não verifica se um minidriver definiu o portão como um estado válido.