Freigeben über


Pinzentriert verarbeitet

Beim Schreiben eines AVStream-Minidrivers stellen Sie Filter bereit, die eines von zwei Verarbeitungsparadigma verwenden: die pinzentrische Verarbeitung oder die filterzentrische Verarbeitung.

Pinzentrische Verarbeitung bedeutet, dass AVStream die Pinprozess-Dispatchroutine des Minidrivers aufruft, wenn neue Frames in der Pinwarteschlange eintreffen.

Filterzentrische Verarbeitung bedeutet, dass AVStream die Filterprozess-Dispatchroutine des Minidrivers aufruft, wenn datenframes auf jedem instanziierten Pin verfügbar sind. Beachten Sie, dass diese Definitionen das Standardverhalten angeben. Minidriver können das Standardverhalten ändern, indem sie Flags in der KSPIN_DESCRIPTOR_EX-Struktur festlegen.

Im Allgemeinen verwenden Softwarefilter filterorientierte Verarbeitung und Hardwarefilter verwenden pinzentrische Verarbeitung. Für instance könnte Hardware, die Daten transformiert oder rendert, Daten über einen pinzentrigen Filter weiterleiten. Es gibt seltene Fälle, in denen diese Rollen umgekehrt werden können.

Zum Bereitstellen eines pinzentrischen Filters stellt der Minidriver einen Zeiger auf eine AVStrMiniPinProcess-Rückrufroutine in jeder KSPIN_DISPATCH Struktur bereit. Geben Sie keinen Verarbeitungsversand in der KSFILTER_DISPATCH-Struktur an.

Wenn der Minidriver die Flageinstellungen in der KSPIN_DESCRIPTOR_EX-Struktur nicht ändert, ruft AVStream die vom Hersteller bereitgestellte AVStrMiniPinProcess-Rückrufroutine in drei Situationen auf:

  • Der Pin wechselt in den minimalen Verarbeitungszustand. Frames müssen bereits in der Warteschlange vorhanden sein, und der Pin muss von kleiner als dem minimalen Verarbeitungszustand in mindestens den minimalen Verarbeitungszustand übergehen.

  • Neue Frames werden eingetroffen. Der Pin muss sich mindestens im minimalen Verarbeitungszustand befinden, und es dürfen keine Frames an oder vor der Spitzenkante vorhanden sein.

  • Minidriver ruft KsPinAttemptProcessing explizit auf.

Standardmäßig ist Pause der minimale Verarbeitungszustand.

Darüber hinaus ruft AVStream den Pinprozess-Dispatch nicht auf, wenn das UND-Gate des Pins geschlossen ist. Wenn Sie die KSGATEXxx-Routinen verwenden, um zusätzliche Off-Eingaben zum AND-Gate des Pins hinzuzufügen, wird ihr Prozessversand für instance nicht aufgerufen.

Wenn AVStream AVStrMiniPinProcess aufruft, stellt es einen Zeiger auf das Anheftobjekt bereit, das über verfügbare Daten verfügt. Der Verarbeitungsversand des Minidrivers kann dann einen Führenden Zeiger abrufen, indem KsPinGetLeadingEdgeStreamPointer aufgerufen wird. Minidriver bearbeiten dann Streamdaten mithilfe der Streamzeiger-API .

Minidriver, die pinzentrische Verarbeitung verwenden, können ändern, wenn AVStream den AVStrMiniPinProcess-Dispatch aufruft, indem sie Flags in der relevanten KSPIN_DESCRIPTOR_EX-Struktur festlegen. Flagbeschreibungen auf der KSPIN_DESCRIPTOR_EX-Referenzseite sind besonders für Anbieter relevant, die pinzentrische Filter implementieren.

Verarbeitungsversuche können fehlschlagen, wenn der Minidriver den Verarbeitungsmutex über KsPinAcquireProcessingMutex hält. Probleme können auch auftreten, wenn der Minidriver ein Gate mithilfe der KSGATE-Aufrufe* direkt bearbeitet.

Der AVStream Simulated Hardware Sample Driver (AVSHwS) in den Windows Driver Kit-Beispielen ist ein pinzentrierter Erfassungstreiber für ein simuliertes Hardwarestück. Das Avshws-Beispiel zeigt, wie Sie DMA über AVStream implementieren.