AVStream 中的筛选器控件互斥

每个 AVStream 筛选器实例都有一个关联的筛选器控件互斥体。 此互斥体用于将对对象层次结构的访问从筛选器向下同步到单个引脚。 筛选器和引脚的创建和销毁会与此互斥体同步。

在保留筛选器控件互斥关系时,对象层次结构保证 仅在 特定筛选器实例向下保持稳定。 因此,微型驱动程序在使用 Ks Xxx GetFirstChildXxxKsXxx GetNextSibling Xxx 函数遍历筛选器级别以下的对象层次结构之前,必须获取筛选器控件互斥体。

筛选器控件互斥体还用于同步状态转换。

AVStream 在处理需要层次结构保持稳定的属性(例如在执行描述符修改时)时获取筛选器控件互斥体。

请注意,单个筛选器控件互斥体用于每个单独筛选器下的对象层次结构。 这意味着,当微型驱动程序使用固定对象调用函数时,固定对象使用其父级筛选器控件互斥体。

AVStream 在调用以下微型驱动程序提供的例程时代表微型驱动程序保留筛选器控件互斥体:

与设备互斥体类似,不得以递归方式获取筛选器控件互斥体。 例如,如果 AVStream 在线程 A 的上下文中为 创建 调度对微型驱动程序进行回调,而微型驱动程序稍后尝试从线程 A 内部获取互斥,则线程 A 与自身发生死锁。

如果执行下列操作之一,则可能发生死锁:

  • 尝试从进程例程中获取筛选器控件互斥体。

  • 尝试从睡眠或唤醒回调中获取筛选器控件互斥体。

若要操作筛选器控件互斥体,请使用以下函数:

KsAcquireControlKsFilterAcquireControlKsPinAcquireControlKsReleaseControlKsFilterReleaseControlKsPinReleaseControl