2016-03-29 12 views
2

Ich arbeite an einem Projekt, das Bildschirm erfasst und codiert. Ich kann den Bildschirm bereits mit der Desktop-Duplizierungs-API (Win8 +) erfassen. Unter Verwendung der API kann ich ID3D11Texture2D Texturen erhalten und sie von der GPU zur CPU übertragen und libx264 dann benutzen, um sie zu kodieren.Hardware H264 Codierung ID3D11Texture2D mit Media Foundation

Das Ziehen von Texturen von der GPU zur CPU kann jedoch ein Flaschenhals sein, der die fps möglicherweise verringert. Außerdem belegt libx264 CPU-Zyklen (abhängig von der Qualität), um Frames zu codieren. Ich bin auf der Suche nach Codierung ID3D11Texture2D Texturen in GPU selbst anstatt CPU für die Codierung als Optimierung zu verwenden.

Ich habe bereits die Dokumentation und einige Beispielcodes überprüft, aber ich hatte keinen Erfolg. Ich würde mich freuen, wenn mich jemand auf eine Ressource hinweisen könnte, die genau das tut, was ich zuverlässig möchte.

Antwort

2

Video-Encoder, Hardware und Software sind möglicherweise in verschiedenen Formfaktoren verfügbar. Windows selbst bietet erweiterbare APIs mit einer Auswahl an Encodern, und dann sind möglicherweise zusätzliche Encoder als Bibliotheken und SDKs verfügbar. Sie verwenden bereits eine solche Bibliothek (x264). Hardware-Encoder sind typischerweise herstellerspezifisch und hängen von der verfügbaren Hardware ab, die direkt in den Prozess der Codierung involviert ist. Wenn Sie an einer Lösung für eine bestimmte Hardware interessiert sind, kann es sinnvoll sein, nach dem entsprechenden SDK zu suchen.

Ansonsten ist die typische generische Schnittstelle für Hardware-unterstützte Videokodierung in Windows Media Foundation Transform (MFT). Microsoft bietet nur Software-H.264-Videoencoder, die keine Vorteile gegenüber x264 bieten, außer der Tatsache, dass sie die MFT-Schnittstelle mit anderen Optionen teilt. Video-Hardware-Treiber würden jedoch häufig zusätzliche MFTs für die verfügbare Hardware installieren, die mehr MFTs hinzufügen, die durch Hardware-Implementierung unterstützt werden. Beispiele hierfür sind:

  • Intel® Quick Sync Video H.264 Encoder MFT
  • NVIDIA H.264 Encoder MFT
  • AMDh264Encoder

von verschiedenen Herstellern angeboten, sie eine ähnliche Funktionalität bieten und Die Verwendung dieser MFTs zum Kodieren von H.264 ist eine gute Möglichkeit, Hardware-Video-Kodierung mit einer großen Auswahl an Hardware zu nutzen. auch

Siehe:

0

Sie müssen prüfen, Textur zwischen GPU-Encoder und DirectX möglich, wenn Sharing ist.

Ich weiß, dass es möglich ist, Textur zwischen Nvidia Decoder und DirectX zu teilen, weil ich es erfolgreich gemacht habe. Nvidia hat einige Interoperabilität, schauen Sie also zuerst, ob Sie die Textur teilen können, um alle Dinge in der GPU zu erledigen.

Mit Nvidia können Sie dies tun: Nvidia Decoding-> DirectX Display in GPU.

Überprüfen Sie, ob DirectX Display-> Nvidia Enconding möglich ist (zu wissen, nvidia bietet Interop)

Für Intel und ATI, ich weiß nicht, ob sie Interop mit DirectX bieten.

Die Hauptsache ist zu prüfen, ob Sie Ihre DirectX-Textur mit der GPU-Encodertextur verknüpfen können.