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