Поделиться через


Обработка, ориентированная на закрепление

При написании мини-драйвера 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.