每個 AVStream 篩選執行個體都有相關聯的篩選控制 Mutex。 此互斥鎖用來同步存取物件階層,從篩選器到個別的針。 篩選和接點的建立和銷毀受到此互斥鎖的同步控制。
當保留篩選控制互斥鎖時,物件階層僅在特定篩選執行個體以下保證穩定。 因此,迷你驅動程式必須先取得篩選控制的 Mutex,才能使用 KsXxxGetFirstChildXxx 和 KsXxxGetNextSiblingXxx 函式來遍歷篩選層級之下的物件階層。
篩選控制互斥鎖也用於同步處理狀態轉換。
AVStream 會在處理需要階層穩定的屬性時取得篩選器控制互斥鎖,例如執行描述符修改時。
請注意,單一篩選控制互斥鎖會用於每個個別篩選器下的物件階層。 這表示當迷你驅動程式呼叫包含Pin物件的函式時,Pin物件會使用其父系篩選的控制互斥鎖。
AVStream 會在呼叫下列迷你驅動程式提供的常式時,代表迷你驅動程式保留篩選控制互斥鎖:
與裝置互斥鎖類似,篩選控制互斥鎖不可遞迴取得。 例如,如果 AVStream 在執行緒 A 的上下文中針對 Create 分派回呼至迷你驅動程式,而迷你驅動程式稍後嘗試從執行緒 A 內取得互斥體,則執行緒 A 會導致自我死結。
如果您執行下列任一操作,則可能會發生死結:
嘗試在處理例程內取得過濾器控制互斥鎖。
嘗試在睡眠或喚醒回調中取得過濾器控制互斥鎖。
若要操作篩選器控制鎖,請使用下列函式:
KsAcquireControl、 KsFilterAcquireControl、 KsPinAcquireControl、 KsReleaseControl、 KsFilterReleaseControl、 KsPinReleaseControl