Verwenden von WDDM Capture in DirectShow

Dieses Thema gilt für Windows Vista und höher.

Einige Grafikkarten verfügen über integrierte Videoaufnahmefunktionen. Auf diesen Karten werden aufgezeichnete Videoframes im Videospeicher (VRAM) platziert. Vor Windows Vista gab es keinen Standardmechanismus für die Verarbeitung der Frames, während sie in VRAM verblieben sind. Stattdessen mussten die Daten in den Systemspeicher kopiert, verarbeitet und dann zur Anzeige wieder in VRAM kopiert werden. In Windows Vista unterstützt DirectShow jetzt einen Mechanismus, um die Videoframes in VRAM in der verarbeitungspipeline von der Erfassung bis zur Anzeige zu halten.

Der KsProxy-Filter bestimmt, ob der Treiber die VRAM-Oberflächenerfassung unterstützt, indem er den Treiber nach der EIGENSCHAFT KSPROPERTY _ PREFERRED CAPTURE SURFACE abfragt. _ _ (Diese Eigenschaft ist in der Windows Driver Kit-Dokumentation dokumentiert.) Wenn der Treiber die VRAM-Oberflächenerfassung unterstützt, ordnet KsProxy eine spezielle Art von Medienbeispiel zu, das einen Zeiger auf eine Direct3D-Oberfläche enthält.

Als Nächstes bestimmt KsProxy wie folgt, ob der Downstreamfilter DirectX Video Acceleration (DXVA) 2.0 unterstützt:

  1. KsProxy fragt den downstream-Eingabepin für die SCHNITTSTELLE VOMGETSERVICE ab.
  2. Wenn der Pin DIE Stecknadel FÜRGETService verfügbar macht, ruft KsProxy ÜBERGETService::GetService für die IDirect3DDeviceManager-Schnittstelle auf. Der Dienstbesendiger ist MR _ VIDEO _ ACCELERATION _ SERVICE.

Beide Schnittstellen sind in der Media Foundation SDK-Dokumentation dokumentiert.

Wenn der Downstreamfilter DXVA 2.0 nicht unterstützt, ordnet KsProxy einen zusätzlichen Systemspeicherpuffer zu. Dieser Puffer wird verwendet, um die Videoframes aus VRAM in den Systemspeicher zu kopieren. Die IMediaSample::GetPointer-Methode des Medienbeispiels gibt einen Zeiger auf diesen Systemspeicherpuffer zurück.

Wenn jedoch der Downstreamfilter DXVA 2.0 unterstützt, ordnet KsProxy keinen Systemspeicherpuffer zu. In diesem Fall gibt die GetPointer-Methode E _ NOTIMPL zurück. Stattdessen wird erwartet, dass der Downstreamfilter direkt auf die Direct3D-Oberfläche des Beispiels zugreift. Es gibt zwei Möglichkeiten für den Downstreamfilter, einen Zeiger auf die Oberfläche abzurufen, die beide gleichwertig sind:

Themen zur erweiterten Erfassung