AVStream의 흐름 제어 게이트
AVStream은 제어 흐름 메커니즘으로 논리 게이트를 사용합니다. 각 논리 게이트는 KSGATE 구조체로 표시됩니다.
AVStream은 각 필터 또는 핀을 단일 AND 게이트로 초기화합니다. 그런 다음 미니 드라이버는 이 메커니즘을 사용하여 특정 개체가 데이터를 처리할 수 있는 시기를 결정할 수 있습니다. 핀에 대한 처리 제어 게이트를 검색하기 위해 미니 드라이버는 KsPinGetAndGate를 호출합니다. 필터에 대한 처리 제어 게이트를 검색하려면 KsFilterGetAndGate를 호출합니다.
새 논리 게이트를 만들기 위해 미니드라이버에서 KsGateInitializeAnd 또는 KsGateInitializeOr를 호출합니다. 한 게이트의 출력을 다른 게이트에 대한 입력으로 사용하여 상태 전환을 전달할 수 있습니다. 이렇게 하려면 다음 호출에서 NextOrGate 또는 NextAndGate 매개 변수를 입력합니다.
논리 게이트에 대한 기존 입력을 닫기 위해 KsGateTurnInputOff를 호출할 수 있습니다. 미니 드라이버는 활성 핀을 중지 및 닫거나 무기한 처리를 일시 중단하기 위해 이 호출을 수행할 수 있습니다.
마찬가지로 KsGateTurnInputOn 을 호출하여 특정 게이트에 대한 기존 입력을 엽니다.
스레드를 처리할 준비가 되면 처리 개체 에 대한 처리를 제어하는 AND 게이트의 입력에서 를 캡처하려고 시도합니다. 이를 위해 미니드라이버에서 KsGateCaptureThreshold를 호출합니다.
AND 게이트가 열려 있으면 AVStream은 게이트에 대한 입력을 끄고 처리를 시작합니다. 이제 처리 중에 게이트가 닫혀 있으므로 다른 스레드는 게이트의 입력 에서 를 캡처할 수 없습니다. 한 번에 하나의 스레드만 데이터를 처리할 수 있습니다.
게이트의 상태 수정하지 않고 검사 미니드라이버에서 KsGateGetStateUnsafe를 호출할 수 있습니다. 그러나 이 함수는 동기화를 처리하지 않습니다.
논리 게이트를 삭제하려면 KsGateTerminateAnd 또는 KsGateTerminateOr를 호출합니다. 삭제하는 게이트는 게이트 체인의 시작 부분에 있어야 합니다.
핀을 논리 게이트에 입력으로 연결한 다음 입력과 동일한 논리 게이트를 필터의 AND 게이트에 연결하려면 KsPinAttachAndGate 또는 KsPinAttachOrGate를 호출합니다.
게이트 상태 확인
AND 게이트의 경우 KSGATE 구조체의 Count 멤버 값은 1에서 off 입력 수를 뺀 값입니다.
Count = 1 - ( off inputs의 수)
이 값이 0보다 작거나 같으면 게이트가 닫힙니다. 이 값이 0보다 크면 게이트가 열립니다.
OR 게이트의 경우 KSGATE의 Count 멤버 값은 게이트 에 대한 입력의 개수입니다.
Count = (입력의 수)
이 값이 0과 같으면 게이트가 닫힙니다. Count가 0보다 크면 게이트가 열립니다.
AND 게이트의 유효한 개수 범위는 하나 이하입니다. OR 게이트의 유효한 개수 범위는 0 이상입니다. Count를 잘못된 값으로 설정하지 마세요. AVStream은 미니드라이버가 게이트를 유효한 상태로 설정했는지 확인하지 않습니다.