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 减去 关闭 输入的数目:
Count = 1 - (关闭 输入数)
如果此值小于或等于零,则门关闭。 如果此值大于零,则门处于打开状态。
对于 OR 门,KSGATE 的 Count 成员的值是入口的输入 数 :
Count = (输入) 数
如果此值等于零,则门关闭。 如果 Count 大于零,则门处于打开状态。
AND 门的有效 计数 范围为 1 或更少;OR 门的有效 Count 范围为零或更大。 不要将 Count 设置为无效值; AVStream 不验证微型驱动程序是否已将门设置为有效状态。