AVStream 中的篩選控制項 Mutex

每個 AVStream 篩選實例都有相關聯的篩選控制項 Mutex。 這個 Mutex 是用來同步處理從篩選向下到個別針腳的物件階層存取。 建立和解構篩選和針腳會與此 Mutex 同步處理。

物件階層保證 只有在 保留篩選控制項 Mutex 時,才會從特定篩選實例向下穩定。 因此,minidriver 必須先取得篩選控制項 Mutex,才能使用 KsXxxGetFirstChildXxxKsXxxGetNextSiblingXxx 函式周遊篩選層級下方的物件階層。

篩選控制項 Mutex 也可用來同步處理狀態轉換。

AVStream 會在處理需要階層保持穩定的屬性時取得篩選控制項 Mutex,例如執行描述元修改時。

請注意,單一篩選控制項 Mutex 會用於每個個別篩選下的物件階層。 這表示,當 minidriver 呼叫具有 pin 物件的函式時,pin 物件會使用其父系的篩選控制項 Mutex。

AVStream 會在呼叫下列 minidriver 提供的常式時,代表 minidriver 保存篩選控制項 Mutex:

與裝置 Mutex 類似,篩選控制項 Mutex 不得以遞迴方式取得。 例如,如果 AVStream 線上程 A 的內容中 建立分派 的 minidriver 回呼,而 minidriver 稍後會嘗試從執行緒 A 內取得 Mutex,執行緒 A 本身就會死結。

如果您執行下列其中一個動作,就會發生死結:

  • 嘗試從進程常式內取得篩選控制項 Mutex。

  • 嘗試從睡眠或喚醒回呼內取得篩選控制項 Mutex。

若要操作篩選控制項 Mutex,請使用下列函式:

KsAcquireControlKsFilterAcquireControlKsPinAcquireControlKsReleaseControlKsFilterReleaseControlKsPinReleaseControl