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


Написание мини-драйверов AVStream для оборудования

В предоставленном поставщиком AVStrMiniDeviceStart мини-накопители AVStream, поддерживающие оборудование, должны сначала проанализировать список ресурсов, а затем вызвать IoConnectInterrupt , чтобы зарегистрировать подпрограмму обслуживания прерываний (ISR).

Если драйвер поддерживает прямой доступ к памяти (DMA), необходимо выполнить дополнительные действия. Если драйвер реализует DMA, см. статью Службы AVStream DMA.

Если несколько приложений могут одновременно создавать граф фильтра с помощью вашего устройства, необходимо позаботиться о том, чтобы предотвратить помехи между графами. В частности, если вы создаете граф в приложении с помощью устройства, вы не должны мешать приложению, которое использует устройство в состоянии нон-стоп.

Вы можете избежать помех, загрузив микрокод после перехода графа в KSSTATE_ACQUIRE. Это обеспечит защиту текущего графа, так как новый граф не будет переходить в KSSTATE_ACQUIRE пока выполняется другой граф. Чтобы получать уведомления об изменениях состояния закрепления, укажите подпрограмму обратного вызова AVStrMiniPinSetDeviceState в структуре KSPIN_DISPATCH .

Однако, чтобы свести к минимуму время запуска графа, вы можете загрузить микрокод до того, как граф достигнет KSSTATE_ACQUIRE. В этом случае рекомендуется загружать микрокод в фоновом потоке с низким приоритетом во время загрузки. Это решение не влияет на работу других приложений, сокращает время начала графа и не должно удлинять время загрузки, если выполняется асинхронно.

Однако после загрузки не перезагружайте микрокод и не управляйте аппаратными регистрами, пока граф не достигнет KSSTATE_ACQUIRE.

Чтобы узнать, как подключение нового графа может помешать работающему графу, рассмотрим устройство захвата видео, которое поддерживает кодирование и декодирование, но выполняет только одну из этих задач за раз. Мини-диск предоставляет фильтр кодирования и фильтр декодирования.

Приложение создает граф фильтра, содержащий фильтр кодирования. Мини-отвертка загружает микрокод для кодирования во время соединения с закреплением. График фильтров запускается, а оборудование начинает кодирование.

Пока оборудование кодируется, другое приложение помещает фильтр декодирования в граф фильтра. Когда контакты декодирования подключены, перед изменением состояния контактов на KSSTATE_ACQUIRE мини-driver пытается настроить оборудование для декодирования. Такая перенастройка влияет на текущий активный граф кодирования и может привести к нестабильной работе драйвера.