Freigeben über


Pin-zentrierte Verarbeitung

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

Pin-zentrierte Verarbeitung bedeutet, dass AVStream die Pin-Prozess-Dispatch-Routine des Minidrivers aufruft, wenn neue Frames in der Pinwarteschlange ankommen.

Die filter-orientierte Verarbeitung bedeutet, dass AVStream die Filterprozess-Routine des Minidrivers aufruft, wenn Datenframes für jeden instanziierten Pin verfügbar sind. Beachten Sie, dass diese Definitionen das Standardverhalten angeben; Minidriver können das Standardverhalten ändern, indem Flags in der KSPIN_DESCRIPTOR_EX-Struktur festgelegt werden.

Im Allgemeinen verwenden Softwarefilter eine filterorientierte Verarbeitung und Hardwarefilter eine pinzentrierte Verarbeitung. Beispielsweise können Hardware, die Daten transformiert oder rendert, Daten an einen pinzentrierten Filter weiterleiten. Es gibt selten Fälle, in denen diese Rollen umgekehrt werden können.

Um einen pinzentrierten Filter zu liefern, stellt der Minidriver einen Zeiger auf eine AVStrMiniPinProcess-Rückrufroutine in jeder KSPIN_DISPATCH Struktur bereit ; stellen Sie keinen Verarbeitungsversand in der KSFILTER_DISPATCH Struktur zur Verfügung.

Wenn der Minidriver die Flageinstellungen in der KSPIN_DESCRIPTOR_EX-Struktur nicht ändert, ruft AVStream die vom Anbieter 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 weniger als dem minimalen Verarbeitungszustand in mindestens den minimalen Verarbeitungszustand wechseln.

  • Die neuen Frames sind angekommen. Der Pin muss sich im mindestens minimalen Verarbeitungszustand befinden, und es dürfen keine Frames an oder vor der Vorderkante vorhanden sein.

  • Minidriver ruft KsPinAttemptProcessing explizit auf.

Standardmäßig ist "Pause" der minimale Verarbeitungszustand.

Darüber hinaus ruft AVStream den Pin-Prozess-Dispatch nicht auf, wenn das UND-Gatter des Pins geschlossen ist. Wenn Sie die KSGATEXxx-Routinen verwenden, um dem AND-Gate des Pins zusätzliche AUS Eingaben hinzuzufügen, wird beispielsweise Ihr Prozessdispatch nicht aufgerufen.

Wenn AVStream AVStrMiniPinProcess aufruft, stellt es einen Zeiger auf das Pinobjekt bereit, das über verfügbare Daten verfügt. Der Verarbeitungsversand des Minidrivers kann dann einen führenden Edgezeiger durch Aufrufen von KsPinGetLeadingEdgeStreamPointer abrufen. Minidriver manipulieren dann die Datenströme mithilfe der Datenstromzeiger-API.

Minidriver, die pinzentrierte Verarbeitung verwenden, können ändern, wann AVStream den AVStrMiniPinProcess-Dispatcher aufruft, indem Flags in der entsprechenden KSPIN_DESCRIPTOR_EX-Struktur festgelegt werden. Auf der KSPIN_DESCRIPTOR_EX-Referenzseite sind die Flag-Beschreibungen besonders für Anbieter relevant, die pinzentrierte Filter implementieren.

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

Der AVStream Simulated Hardware Sample Driver (AVSHwS) in den Windows Driver Kit-Beispielen ist ein pinzentrierter Aufnahmetreiber für ein simuliertes Hardwarestück. Im Beispiel "Avshws" wird gezeigt, wie DMA über AVStream implementiert wird.