每个 AVStream 筛选器实例都有关联的筛选器控件互斥体。 此互斥体用于将对象层次结构的访问从筛选器向下同步到单个引脚。 筛选器和引脚的创建和销毁与此互斥体同步。
只有在持有筛选器控制互斥体时,对象层次结构才会从特定的筛选器实例开始向下保持稳定。 因此,微型驱动程序在使用 KsXxxGetFirstChildXxx 和 KsXxxGetNextSiblingXxx 函数遍历筛选器级别以下的对象层次结构之前,必须先获取滤波器控制互斥体。
过滤器互斥体还用于同步状态转换。
AVStream 在处理需要层次结构保持稳定的属性时(例如在执行描述符修改时),将获取筛选器控制互斥体。
请注意,一个单独的过滤器控制互斥体用于每个筛选器下的对象层级结构。 这意味着,当微型驱动程序调用带有管脚对象的函数时,管脚对象使用其父级的筛选器控制互斥体。
AVStream 在调用以下微型驱动程序提供的例程时代表微型驱动程序保存筛选器控件互斥体:
与设备互斥体类似,筛选器控制互斥体不得以递归方式获取。 例如,如果 AVStream 在线程 A 的上下文中为 Create 调度发出回调,微型驱动程序稍后会尝试从线程 A 中获取互斥体,线程 A 具有自身的死锁。
如果执行以下任一操作,可能会发生死锁:
尝试从进程例程中获取筛选器控件互斥体。
尝试从睡眠或唤醒回调中获取过滤器控件互斥体。
若要操作筛选器控件的互斥体,请使用以下函数:
KsAcquireControl、 KsFilterAcquireControl、 KsPinAcquireControl、 KsReleaseControl、 KsFilterReleaseControl、 KsPinReleaseControl