Мьютекс управления фильтрами в AVStream

Каждый экземпляр фильтра AVStream имеет связанный мьютекс управления фильтром. Этот мьютекс используется для синхронизации доступа к иерархии объектов из фильтра вплоть до отдельных контактов. Создание и уничтожение фильтров и пинов синхронизируются с этим мьютексом.

Иерархия объектов гарантируется стабильной только от определенного экземпляра фильтра и ниже при удержании мьютекса управления фильтром. Соответственно, минидрайвер должен получить мьютекс элемента управления фильтра перед обходом иерархии объектов ниже уровня фильтра с помощью функций KsXxxGetFirstChildXxx и KsXxxGetNextSiblingXxx.

Мьютекс элемента управления фильтра также используется для синхронизации переходов состояния.

AVStream получает мьютекс элемента управления фильтра при обработке свойств, требующих стабильности иерархии, например при изменении дескриптора.

Имейте в виду, что для иерархии объектов под каждым отдельным фильтром используется единый мьютекс управления фильтром. Это означает, что объект пина использует мьютекс элемент контроля фильтра родительского элемента, когда минидрайвер вызывает функцию с объектом пина.

AVStream содержит управляющий мьютекс фильтра от имени минидрайвера, когда он вызывает следующие подпрограммы, предоставляемые минидрайвером:

Аналогично мьютексу устройства, мьютекс элемента управления фильтра не должен быть получен рекурсивно. Если, например, AVStream выполняет обратный вызов к минидрайверу для обработчика "создания" в контексте потока A, и минидрайвер позже пытается получить мьютекс из потока A, поток A входит в состояние взаимной блокировки с самим собой.

Взаимоблокировка может произойти, если выполнить одно из следующих действий:

  • Попробуйте получить мьютекс управления фильтром из процедуры выполнения.

  • Старайтесь получить мьютекс контроля фильтра из обратного вызова сна или пробуждения.

Для управления мьютексом элемента управления фильтра используйте следующие функции:

KsAcquireControl, KsFilterAcquireControl, KsPinAcquireControl, KsReleaseControl, KsFilterReleaseControl, KsPinReleaseControl