Erste Schritte mit der Unterstützung von Hardwarecodecs in AVStream
Ab Windows 7 stellt Windows Media Foundation AVStream-basierte Medienkomponenten als User-Mode Media Foundation Transforms (MFTs) dar.
Mit dieser Funktion können Anbieter hardwarebasierte Decoder, Encoder und Videoprozessoren als MFTs darstellen, die wiederum auf Anwendungsebene bearbeitet werden können.
Das AVStream-Modell bleibt in Windows 7 unverändert und erfordert nur einige Ergänzungen des Minitreibers, um diese Funktionalität zu ermöglichen.
Die Transcodierungstopologie ist im folgenden Diagramm dargestellt:
Um eine optimale Leistung zu erzielen, sollte die Medienverarbeitung, die in der unteren Zeile des Diagramms angezeigt wird, in dedizierter Hardware erfolgen. In diesem Szenario wird dedizierte Transcodierungshardware als Secured Hardware Encoder Decoder (SHED) bezeichnet. SheD kann entweder als Plug-In-Modul für die Hauptplatine oder als integriertes Feature auf dem Displayadapter verpackt werden.
Windows 7 unterstützt weiterhin die softwarebasierte Transcodierung. Da das System jedoch die Transcodierung auf dedizierter Hardware anstelle der CPU ausführt, verbessert eine SHED-basierte Lösung die Benutzerfreundlichkeit im Vergleich zu einer softwarebasierten Lösung erheblich.
Wie im vorherigen Diagramm gezeigt, können Clients im Benutzermodus mithilfe der IMFTransform-Schnittstelle, die für jedes MFT verfügbar gemacht wird, auf die Benutzermodustransformationen zugreifen. IMFTransform ist in Vista und höheren Versionen von Windows verfügbar, aber der Mechanismus zum Verfügbarmachen der hardwarebasierten Medienverarbeitung für Benutzermodusanwendungen ist erst ab Windows 7 verfügbar.
Das vom System bereitgestellte Modul Device Proxy oder Devproxy hat dieselbe Rolle wie KSProxy im DirectShow-Streamingmodell. Devproxy vermittelt die Kommunikation zwischen Ks.sys im Kernelmodus und MFT-Komponenten im Benutzermodus.
Die resultierende umschlossene Hardwaremedienverarbeitungsfunktion wird als Geräteproxy-MFT bezeichnet. Um diesen Mechanismus zu nutzen, sollte ein AVStream-Minitreiber die folgenden Schritte ausführen:
Machen Sie Transformationsfunktionen als einzelne KS-Filter verfügbar, die Teil des AVStream-Minitreibers sind. Wenn das Gerät beispielsweise über Funktionen zur Decodierung, Codierung und Videoverarbeitung verfügt, sollten diese Funktionen als drei unterschiedliche KS-Filter dargestellt werden.
Encoder: Wird verwendet, um ein unkomprimiertes Format in ein komprimiertes Format zu konvertieren.
Decoder: Wird verwendet, um von einem komprimierten Format in ein unkomprimiertes Format zu konvertieren, das NV12 enthalten muss.
Videoprozessor: Wird zum Ausführen von Skalierung, Interlacing/De-Interlacing und Formatkonvertierung verwendet. Fügen Sie keine Videoverarbeitungsunterstützung in den Decoder- oder Encoderfilter ein.
Microsoft empfiehlt Anbietern dringend, hardwarebasierte Skalierungsunterstützung bereitzustellen. Wenn Sie sich jedoch dafür entscheiden, keine hardwarebasierte Skalierungsunterstützung bereitzustellen, können Sie die vom System bereitgestellte Videoverarbeitungs-MFT verwenden, um Skalierungsvorgänge mit geringerer Leistung durchzuführen. Wenn Sie keine hardwarebasierte Skalierungsunterstützung bereitstellen, fügt der Media Foundation-Topologie-Generator die vom System bereitgestellte Skalierungs-MFT automatisch in die Topologie ein.
Registrieren Sie die Medienverarbeitungs-KS-Filter unter einer der folgenden KS-Kategorien, die in Windows 7 und höheren Versionen von Windows verfügbar sind:
Darüber hinaus sind die folgenden Kategorien auch für die Verwendung in anderen Transcodierungsszenarien definiert:
Media Foundation-Anwendungen können dann die MFTEnumEx-Funktion verwenden, um die Geräte aufzulisten, die als MFTs registriert sind, indem sie die zuvor genannten Kategorien verwenden.