Puertas de control de flujo en AVStream

AVStream usa puertas lógicas como mecanismo de flujo de control. Cada puerta lógica se representa mediante una estructura KSGATE .

AVStream inicializa cada filtro o patilla con una sola puerta AND. A continuación, un minidriver puede usar este mecanismo para determinar cuándo ese objeto específico puede procesar datos. Para recuperar la puerta de control de procesamiento de un pin, el minidriver llama a KsPinGetAndGate. Para recuperar la puerta de control de procesamiento de un filtro, llame a KsFilterGetAndGate.

Para crear nuevas puertas lógicas, el minidriver llama a KsGateInitializeAnd o KsGateInitializeOr. Puede usar la salida de una puerta como entrada a otra puerta, con lo que se reenvía las transiciones de estado. Para ello, proporcione un parámetro NextOrGate o NextAndGate en estas llamadas.

Para cerrar una entrada existente en una puerta lógica, puede llamar a KsGateTurnInputOff. El minidriver puede realizar esta llamada para detener y cerrar un pin activo, o suspender el procesamiento durante un período de tiempo indefinido.

De forma similar, llame a KsGateTurnInputOn para abrir una entrada existente en una puerta específica.

Cuando un subproceso está listo para procesarse, intenta capturar el en la entrada de la puerta AND que controla el procesamiento del objeto de procesamiento. Para ello, el minidriver llama a KsGateCaptureThreshold.

Si la puerta AND está abierta, AVStream desactiva una entrada a la puerta y comienza el procesamiento. Puesto que la puerta ahora está cerrada durante el procesamiento, ningún otro subproceso puede capturar en la entrada de la puerta. Solo un subproceso puede procesar datos a la vez.

Para comprobar el estado de una puerta sin modificarla, el minidriver puede llamar a KsGateGetStateUnsafe. Sin embargo, tenga en cuenta que esta función no controla la sincronización.

Para eliminar una puerta lógica, llame a KsGateTerminateAnd o KsGateTerminateOr. La puerta que se va a eliminar debe estar al principio de una cadena de puertas.

Para adjuntar un pin como entrada a una puerta lógica y, a continuación, conectar la misma puerta lógica que la entrada a la puerta AND de un filtro, llame a KsPinAttachAndGate o KsPinAttachOrGate.

Determinar el estado de la puerta

Para una puerta AND, el valor del miembro Count de la estructura KSGATE es uno menos el número de entradas desactivadas :

Recuento = 1 - (número de entradas desactivadas )

Si este valor es menor o igual que cero, se cierra la puerta. Si este valor es mayor que cero, la puerta está abierta.

Para una puerta OR, el valor del miembro Count de KSGATE es el número de entradas de la puerta:

Count = (número de entradas )

Si este valor es igual a cero, se cierra la puerta. Si Count es mayor que cero, la puerta está abierta.

Las puertas AND tienen un intervalo de recuento válido de uno o menos; O las puertas tienen un intervalo de recuento válido de cero o superior. No establezca Count en valores no válidos; AVStream no comprueba que un minidriver haya establecido la puerta en un estado válido.