AVStream 中的流控制门

AVStream 使用逻辑门作为控制流机制。 每个逻辑门都由 KSGATE 结构表示。

AVStream 使用单个 AND 门初始化每个筛选器或引脚。 然后,微型驱动程序可以使用此机制来确定该特定对象何时可以处理数据。 若要检索引脚的处理控制门,微型驱动程序调用 KsPinGetAndGate。 若要检索筛选器的处理控制门,请调用 KsFilterGetAndGate

为了创建新的逻辑门,微型驱动程序调用 KsGateInitializeAndKsGateInitializeOr。 可以使用一个门的输出作为另一个门的输入,从而转发状态转换。 为此,请在这些调用中提供 NextOrGateNextAndGate 参数。

若要关闭逻辑门的现有输入,可以调用 KsGateTurnInputOff。 微型驱动程序可能会发出此调用来停止和关闭活动引脚,或无限期暂停处理。

同样,调用 KsGateTurnInputOn 以打开特定入口的现有输入。

当线程准备好处理时,它会尝试捕获控制处理对象的处理的 AND 门的输入 。 为此,微型驱动程序调用 KsGateCaptureThreshold

如果 AND 门处于打开状态,AVStream 会关闭入口的输入,然后开始处理。 由于门在处理过程中现已关闭,因此其他线程无法捕获 入口输入的 。 一次只能有一个线程处理数据。

若要在不修改门的情况下检查门的状态,微型驱动程序可以调用 KsGateGetStateUnsafe。 但请注意,此函数不处理同步。

若要删除逻辑门,请调用 KsGateTerminateAndKsGateTerminateOr。 要删除的门必须位于门链的开头。

若要将引脚作为输入附加到逻辑门,然后将与输入相同的逻辑门连接到筛选器的 AND 门,请调用 KsPinAttachAndGateKsPinAttachOrGate

确定门状态

对于 AND 门,KSGATE 结构的 Count 成员的值为 1 减去 关闭 输入的数目:

Count = 1 - (关闭 输入数)

如果此值小于或等于零,则门关闭。 如果此值大于零,则门处于打开状态。

对于 OR 门,KSGATE 的 Count 成员的值是入口的输入

Count = (输入) 数

如果此值等于零,则门关闭。 如果 Count 大于零,则门处于打开状态。

AND 门的有效 计数 范围为 1 或更少;OR 门的有效 Count 范围为零或更大。 不要将 Count 设置为无效值; AVStream 不验证微型驱动程序是否已将门设置为有效状态。