Обработка, ориентированная на закрепление
При написании мини-драйвера AVStream вы предоставляете фильтры, использующие одну из двух парадигм обработки: обработка, ориентированная на пин-код или фильтрация.
Обработка, ориентированная на закрепление, означает, что AVStream вызывает подпрограмму диспетчера пин-кода мини-накопителя, когда в очередь закрепления поступают новые кадры.
Обработка, ориентированная на фильтрацию, означает, что AVStream вызывает подпрограмму диспетчера процесса фильтрации мини-driver при наличии кадров данных, доступных для каждого экземпляра пин-кода. Обратите внимание, что эти определения определяют поведение по умолчанию; Мини-накопители могут изменять поведение по умолчанию, устанавливая флаги в структуре KSPIN_DESCRIPTOR_EX .
Как правило, программные фильтры используют фильтрацию, а аппаратные фильтры — обработку, ориентированную на пин-код. Например, оборудование, преобразующее или отрисовывающее данные, может направлять данные по фильтру, ориентированному на закрепление. В редких случаях эти роли могут быть отменены.
Для предоставления фильтра, ориентированного на закрепление, мини-driver предоставляет указатель на подпрограмму обратного вызова AVStrMiniPinProcess в каждой структуре KSPIN_DISPATCH ; не предоставляют диспетчеризации обработки в структуре KSFILTER_DISPATCH .
Если мини-диск не изменяет параметры флага в структуре KSPIN_DESCRIPTOR_EX, AVStream вызывает поставляемую поставщиком процедуру обратного вызова AVStrMiniPinProcess в трех ситуациях:
Закрепление переходит в минимальное состояние обработки. Кадры уже должны существовать в очереди, а закрепление должно переходить из состояния обработки меньше минимального в минимальное состояние обработки.
Поступают новые кадры. Закрепление должно находиться по крайней мере в минимальном состоянии обработки и не должно быть кадров на передней границе или перед ней.
Minidriver явно вызывает KsPinAttemptProcessing.
По умолчанию приостановка является минимальным состоянием обработки.
Кроме того, AVStream не вызывает диспетчеризацию процесса закрепления, если шлюз И контакта закрыт. Например, если вы используете подпрограммы KSGATEXxx для добавления дополнительных входных данных в шлюз AND контакта, диспетчеризация процесса вызываться не будет.
Когда AVStream вызывает AVStrMiniPinProcess, он предоставляет указатель на закрепленный объект с доступными данными. Затем диспетчеризация обработки мини-накопителя может получить указатель на передний край , вызвав KsPinGetLeadingEdgeStreamPointer. Затем мини-накопители управляют потоковой передачей данных с помощью API указателя потока .
Мини-накопители, использующие обработку, ориентированную на пин-код, могут изменяться, когда AVStream вызывает диспетчеризацию AVStrMiniPinProcess , устанавливая флаги в соответствующей структуре KSPIN_DESCRIPTOR_EX . Описания флагов на странице справочника по KSPIN_DESCRIPTOR_EX особенно актуальны для поставщиков, реализующих фильтры, ориентированные на пин-код.
Попытки обработки могут завершиться ошибкой, если мини-диск содержит мьютекс обработки через KsPinAcquireProcessingMutex. Проблемы также могут возникнуть, если мини-диск напрямую управляет шлюзом с помощью вызовов KSGATE* .
AvStream Simulated Hardware Sample Driver (AVSHwS) в примерах комплекта драйверов Windows — это драйвер захвата, ориентированный на закрепление, для имитированного оборудования. В примере Avshws показано, как реализовать DMA через AVStream.