Videoportbasierte Aufzeichnung
Aufnahmegeräte, die auf Videoports basieren, müssen einen Videoport-Pin bereitstellen, der eine Verbindung mit dem Videoport-Manager herstellt. Der Videoport-Pin ermöglicht hardwarebasierten Transport, den Vorschaudatenstrom ohne CPU- oder Peripheriekomponentenverbindung (PCI)-Bus-Overhead anzuzeigen. Ein separater Pin bietet Aufnahmefunktionen (z. B. wenn aufgenommenes Video auf den Datenträger geschrieben werden muss). Während des Aufnahmevorgangs werden die Aufnahmepuffer dem Anzeigetreiber bereitgestellt, der den Puffer durch Busmaster ausfüllt. Die Interaktion zwischen dem Aufnahme-Minidriver und dem Anzeigetreiber wird weiter unten in diesem Abschnitt und im Kernelmodus-Videotransport ausführlich beschrieben.
Auf Systemen, die Microsoft Windows 98 SE oder Windows 2000 ausführen, unterstützt der Overlay-Mixerfilter (Teil des Video port Manager-Filters in späteren Betriebssystemen) keine Videoportverbindungen auf sekundären Monitoren. Die Pinverbindung schlägt in diesem Fall fehl. Videoportverbindungen auf sekundären Monitoren werden auf Systemen unterstützt, auf denen Windows Millennium Edition (Windows Me) und Windows XP ausgeführt werden.
Wenn ein Gerät die VBI-Erfassung unterstützt, werden in der Regel zwei zusätzliche Pins verfügbar gemacht: VPVBI und VBI. Der Videoport-Manager-Filter verwendet den VPVBI-Pin, um Videoportoberflächen für die VBI-Aufnahme zuzuweisen. Der VBI-Pin selbst stellt die rohen VBI-Beispiele bereit.
Das folgende Diagramm zeigt die separaten Pfade für die VPVBI- und VBI-Erfassung.
Eigenschaftensätze, die für diese Art von Filterdiagramm spezifisch sind, sind KSPROPSETID_VPConfig und KSPROPSETID_VPVBIConfig und PROPSETID_ALLOCATOR_CONTROL.
Verwenden der Videoporterweiterungen (VPEs)
Hinweis: Die folgenden Absätze gelten nur für Betriebssysteme, die der nächsten Version von Windows Vista vorausgehen. VPE ist in Windows Vista deaktiviert, wenn der Anzeigetreiber das neue Windows Vista Driver Display Model (LDDM) verwendet.
Minidriver für die Videoaufnahme können die DxApi-Funktion verwenden, um mit dem Video-Miniporttreiber zu kommunizieren, um das Übertragen von Streamingvideos über den Videoportbus zwischen der Aufnahmehardware und der Anzeigehardware zu ermöglichen. Der Datenstrom besteht aus sequenziellen Feldern von NTSC-, PAL- oder SECAM-Videofeldern und kann Leerzeichen (VBI) und Zeitcodedaten (horizontale Synchronisierung und vertikale Synchronisierung) enthalten. Videostreammerkmale, einschließlich Dimension, Farbformat, Häufigkeit, Skalierung und Zuschneiden, werden über die VPE DirectDraw-Schnittstelle im Benutzermodus konfiguriert. Nachdem das Streaming gestartet wurde, wird DxApi dann im Kernelmodus aufgerufen, um einzelne Frames zu erfassen. Um Anzeigeänderungen zu unterstützen, z. B. Änderungen in der Auflösung oder beim Wechseln zu oder von Eingabeaufforderungen im Vollbildmodus, müssen sich Minidriver für die Videoaufnahme auch bei dem Video-Miniporttreiber registrieren, damit sie auf solche Anzeigeänderungsereignisse reagieren können.
Die VPEs und die DxApi-Funktion wurden mit DirectX 5.0 in DirectDraw DDI eingeführt. DxApi wird vom Video-Miniporttreiber in Windows 2000 und höheren Betriebssystemen unterstützt. Ein Miniporttreiber für virtuelle Anzeige (miniVDD) unterstützt DxApi in den Betriebssystemen Windows 98 und Windows Me. Um den Kernelmodus-Videotransport mithilfe von DxApi zu aktivieren, muss ein WDM-Videoaufnahme-Minidriver die Headerdatei ddkmapi.h (DirectDraw Kernelmodus-API) und eine Verknüpfung mit der dxapi.lib-Bibliothek enthalten. Die DxApi-Bibliothek verwendet Funktionen, die von dxapi.sys exportiert werden. DxApi.sys ist nur verfügbar, wenn DirectDraw geladen wird, da DxApi Teil der VPEs für directDraw DDI ist.
DxApi ist eine einzelne Kernelmodus-API, die von DxApi.sys verfügbar gemacht wird. Die Videoporterweiterung ist eine Benutzermodus-API, die von DDraw.dll verfügbar gemacht wird. Ein Videoaufnahme-Minidriver muss mehrere verschiedene Aufrufe an DxApi ausführen, um die Videoporthardware so einzurichten und zu konfigurieren, dass sie ordnungsgemäß gestreamt wird.
DxApi ist eine einzelne Funktion, die mehrere Funktionsbezeichner kapselt. Minidriver übergeben den gewünschten Funktionsbezeichner im ersten Argument an DxApi. Die verbleibenden Argumente für DxApi gelten für die minidriver-zugeordneten Puffer für die Strukturen, die Funktionsbezeichnern und Längen von Puffern entsprechen. Das Verhalten der Funktionen und die Größe und das Format der Eingabe- und Ausgabepuffer hängen vom angegebenen Funktionsbezeichner ab. Dieses Verhalten wird in dxApi-Funktion und -Bezeichnern dokumentiert.
WdK stellt zwei Beispieltreiber bereit, die zeigen, wie die DxApi-Funktionalität implementiert wird. Das ATIWDM-Beispiel erfordert, dass bestimmte Hardware für den Betrieb vorhanden ist. Das TestCap-Beispiel erfordert keine Hardware und funktioniert auf allen Plattformen. Sie können das GraphEdt-Tool verwenden, um mit beiden Beispielen zu interagieren.
Die gängigen Funktionen, die ein Videoaufnahme-Minidriver aufrufen muss, sind die folgenden:
Öffnen Sie ein Handle für Den Kernelmodus DirectDraw (DxApi-Funktionsbezeichner auf DD_DXAPI_OPENDIRECTDRAW festgelegt). Dieser Vorgang muss bei IRQL = PASSIVE_LEVEL ausgeführt werden.
Rufen Sie die Kernelmodusfunktionen des Hardwarevideoports ab (DxApi-Funktionsbezeichner auf DD_DXAPI_GETKERNELCAPS festgelegt).
Registrieren Sie Rückrufe zum Behandeln von DirectDraw-Ereignissen, z. B. Modusschalter zu einer Eingabeaufforderung im Vollbildmodus (DxApi-Funktionsbezeichner auf DD_DXAPI_REGISTER_CALLBACK festgelegt).
Öffnen eines Handles für DirectDraw-Oberflächen (DxApi-Funktionsbezeichner auf DD_DXAPI_OPENSURFACE festgelegt).
Aufheben der Registrierung von Rückrufen (DxApi-Funktionsbezeichner auf DD_DXAPI_UNREGISTER_CALLBACK festgelegt).
Schließen von Handles an Oberflächen sowie an Kernelmodus DirectDraw (DxApi-Funktionsbezeichner auf DD_DXAPI_CLOSEHANDLE festgelegt)
Untergeordnete Videoportgeräte und Energieverwaltung
Untergeordnete Videoportgeräte, z. B. TV-Tuner und Display-Kombinationsadapter, können Stromzustandsübergänge blockieren, wenn der Minidriver verwendet wird. Die Sperrung des Stromzustandsübergangs tritt auf, wenn der Minidriver aktiv verwendet wird (Pins oder Filter sind geöffnet). Wenn der Minidriver geladen wird, aber keine Pins oder Filter verwendet wird, treten Stromzustandsübergänge von S0 (vollständig eingeschaltet) zu niedrigeren Leistungszuständen (z. B. S1, S2, S3 und S4) auf. Das Blockieren des Übergangs des Energiezustands erfolgt nur bei Stream-Klassen-Minidrivern, die Clients untergeordneter Videoportgeräte sind.
Eine WHQL-Verzichtserklärung ist für Geräte verfügbar, die diese Kriterien erfüllen, sodass Anbieter weiterhin ein Logo erhalten können.