Freigeben über


Schreiben von AVStream Minidrivern für Hardware

Im vom Hersteller bereitgestellten AVStrMiniDeviceStart sollten AVStream-Minitreiber, die Hardware unterstützen, zuerst die Ressourcenliste analysieren und dann IoConnectInterrupt aufrufen, um eine Interruptdienstroutine (ISR) zu registrieren.

Zusätzliche Schritte sind erforderlich, wenn Ihr Treiber den direkten Speicherzugriff (Direct Memory Access, DMA) unterstützt. Wenn Ihr Treiber DMA implementiert, lesen Sie AVStream DMA-Dienste.

Wenn mehrere Anwendungen gleichzeitig mithilfe Ihres Geräts ein Filterdiagramm erstellen können, müssen Sie darauf achten, Störungen zwischen Graphen zu vermeiden. Wenn Sie einen Graphen in einer Anwendung mit dem Gerät erstellen, dürfen Sie keine Auswirkungen auf eine Anwendung haben, die das Gerät in einem Nicht-Stopp-Zustand verwendet.

Sie können Störungen vermeiden, indem Sie Mikrocode laden, nachdem der Graph in KSSTATE_ACQUIRE übergeht. Dadurch wird ein derzeit ausgeführter Graph geschützt, da ein neuer Graph nicht in KSSTATE_ACQUIRE übergeht, während ein anderer Graph gerade ausgeführt wird. Um Benachrichtigungen über Pinstatusänderungen zu erhalten, geben Sie eine AVStrMiniPinSetDeviceState-Rückrufroutine in der KSPIN_DISPATCH-Struktur an.

Um die Startzeit des Graphen zu minimieren, sollten Sie den Mikrocode jedoch laden, bevor der Graph KSSTATE_ACQUIRE erreicht. In diesem Fall sollten Sie microcode während des Startvorgangs in einem Hintergrundthread mit niedriger Priorität laden. Diese Lösung beeinträchtigt andere Anwendungen nicht, reduziert die Startzeit des Graphen und sollte die Startzeit nicht verlängern, wenn sie asynchron ausgeführt wird.

Laden Sie den Microcode nach dem Start jedoch erst erneut, wenn der Graph KSSTATE_ACQUIRE erreicht, und bearbeiten Sie keine Hardwareregister.

Um zu sehen, wie die Verbindung eines neuen Graphen einen laufenden Graph beeinträchtigen kann, betrachten Sie ein Videoaufnahmegerät, das die Codierung und Decodierung unterstützt, aber nur eine dieser Aufgaben gleichzeitig ausführt. Der Minidriver macht einen Codierungsfilter und einen Decodierungsfilter verfügbar.

Eine Anwendung erstellt ein Filterdiagramm, das den Codierungsfilter enthält. Der Minidriver lädt Mikrocode für die Codierung zur Pinverbindungszeit. Das Filterdiagramm wird gestartet, und die Hardware beginnt mit der Codierung.

Während die Hardware codiert wird, platziert eine andere Anwendung einen Decodierungsfilter in einem Filterdiagramm. Wenn die Decodierungspins verbunden sind, versucht der Minitreiber, die Hardware für die Decodierung zu konfigurieren, bevor die Pins den Status in KSSTATE_ACQUIRE ändern. Diese Neukonfiguration beeinträchtigt das derzeit aktive Codierungsdiagramm und kann zu einer Treiberinstabilität führen.