AVStream 中的篩選控制項 Mutex
每個 AVStream 篩選實例都有相關聯的篩選控制項 Mutex。 這個 Mutex 是用來同步處理從篩選向下到個別針腳的物件階層存取。 建立和解構篩選和針腳會與此 Mutex 同步處理。
物件階層保證 只有在 保留篩選控制項 Mutex 時,才會從特定篩選實例向下穩定。 因此,minidriver 必須先取得篩選控制項 Mutex,才能使用 KsXxxGetFirstChildXxx 和 KsXxxGetNextSiblingXxx 函式周遊篩選層級下方的物件階層。
篩選控制項 Mutex 也可用來同步處理狀態轉換。
AVStream 會在處理需要階層保持穩定的屬性時取得篩選控制項 Mutex,例如執行描述元修改時。
請注意,單一篩選控制項 Mutex 會用於每個個別篩選下的物件階層。 這表示,當 minidriver 呼叫具有 pin 物件的函式時,pin 物件會使用其父系的篩選控制項 Mutex。
AVStream 會在呼叫下列 minidriver 提供的常式時,代表 minidriver 保存篩選控制項 Mutex:
與裝置 Mutex 類似,篩選控制項 Mutex 不得以遞迴方式取得。 例如,如果 AVStream 線上程 A 的內容中 建立分派 的 minidriver 回呼,而 minidriver 稍後會嘗試從執行緒 A 內取得 Mutex,執行緒 A 本身就會死結。
如果您執行下列其中一個動作,就會發生死結:
嘗試從進程常式內取得篩選控制項 Mutex。
嘗試從睡眠或喚醒回呼內取得篩選控制項 Mutex。
若要操作篩選控制項 Mutex,請使用下列函式:
KsAcquireControl、 KsFilterAcquireControl、 KsPinAcquireControl、 KsReleaseControl、 KsFilterReleaseControl、 KsPinReleaseControl