2016-03-22 5 views
1

Ich versuche, die GPU zu verwenden, um Videoverarbeitung zu machen. Ich war bisher erfolgreich darin, die Bilder aus einem Video zu extrahieren und sie mit der GPU zu verarbeiten. Bitte denken Sie daran, dass ich eine vollständige OpenGL-Noob bin.Videoframe von GPU-Textur speichern

Ich bin jedoch auf folgenden Flaschenhals gestossen: den fertigen Frame von der GPU holen und in ein Video aufnehmen.

Ich kenne this Beispiel, aber es entspricht nicht genau meinen Bedürfnissen.

Mein openGL Kontext ist javax.microedition.khronos.egl.EGLContext, die mich daran hindert, Texturen zwischen dem beschriebenen durch Bigflake Beispiel und Mine zu teilen, die die Textur i, um das Video schreiben möchten, enthält.

Gibt es eine Möglichkeit, die MediaCodec-Encoderdaten direkt von der GPU zu speisen? Aus meinen Nachforschungen geht hervor, dass man eine vom Geber selbst zur Verfügung gestellte Oberfläche nur als Quelle unter Verwendung der this Methode einstellen kann.

Kann ich irgendwie meine Textur auf die Oberfläche des Encoders zeichnen?

Ich werde versuchen, weitere Details auf Anfrage zur Verfügung zu stellen.

+0

Meinst du - du hast keine Kontrolle über den EGL-Kontext-Erstellungsschritt (dh EGL_RECORDABLE_ANDROID-Flag kann nicht in der aktuellen Konfiguration hinzugefügt werden)? – prabindh

+0

Zwei unterschiedliche Kontexte werden mit unterschiedlichen Konfigurationen benötigt. Eine zum Extrahieren und Verarbeiten von Rahmen und eine zum Schreiben der neuen Filmdatei. Ich kann keine Texturen zwischen den beiden teilen. – Rakatan

+0

Warum benötigen Sie zwei Kontexte mit unterschiedlichen Konfigurationen? EGLSurface nicht mit Surface zusammenführen, sie sind unabhängig. – fadden

Antwort

1

Ich habe meinen EGL10 Context durch einen EGL10 ersetzt, wie @fadden vorgeschlagen hat.

Ich teilte dann diesen Kontext mit dem von der CodecInputSurface wie in this Beispiel erstellt.

Der wichtigste Schritt bestand darin, die gemeinsame Textur auf die durch den zweiten Kontext definierte Oberfläche zu rendern. Ich tat dies mit Hilfe von this Antwort.

Ich hoffe, dass dies für jeden anderen hilfreich sein kann, werde ich versuchen, zu klären, wenn gewünscht.

Danke nochmal an fadden für seine Hilfe :).