2016-06-23 13 views
0

Ich versuche, den Kamera-Stream des "neuen Kamera-Framework" Camera2 in eine OpenGL-Textur zu bekommen, aber das Bild bleibt schwarz.Xamarin Android Camera2-Vorschau von OpenGL Textur

Ich arbeite mit Xamarin (aber Java sollte sehr ähnlich sein) und ich verwende das NDK für natives Rendering .. So bekam ich eine GLSurfaceView, die den OpenGL-ES-Kontext erstellt und ich kann Sachen rendern von C++.

Kein ausgecheckt das folgende Beispiel: https://github.com/googlesamples/android-Camera2Basic und von dort würde ich gerne weitermachen.

anstatt das SurfaceTexture von TextureView als Ziel zum CaptureRequestBuilder hinzuzufügen Ich habe ein neues SurfaceTexture mit einem neuen Textur-Handle erstellt.

// C++ 
glActiveTexture(GL_TEXTURE0); 
glGenTextures(1, &m_TextureHandle);  
glBindTexture(GL_TEXTURE_EXTERNAL_OES, m_TextureHandle); 
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0); 

// C# (or Java) 
_SurfaceTexture = new SurfaceTexture(m_TextureHandle); 
_SurfaceTexture.FrameAvailable += SurfaceTextureOnFrameAvailable; 

Die letzte Zeile wird für die eingehenden Frames registriert. hier, um ich zu meiner Rendering-Thread gerade geschickt und rief:

_SurfaceTexture.UpdateTexImage(); 

Bin ich einen wichtigen Schritt fehlt? Ich habe auch versucht, die veraltete Kamera API mit dem gleichen Ergebnis zu verwenden.

Dank Kai

Antwort

0

Das Problem gefunden .. Es wurde durch ungültige OpenGL-Parameter verursacht:/ Während der Suche nach dem Problem habe ich ein kleines Beispiel erstellt. Ich habe hochgeladen, falls jemand interessiert ist: SampleCode (OneDrive)

0

Haben Sie auch Ihre neue SurfaceTexture in der camera2 Aufnahmesitzung Erstellung Liste von Zieloberflächen, statt der Oberfläche des TextureView?

+0

Ja, ich habe es anstelle der Oberfläche von TextureView hinzugefügt, weil ich am Ende die Kontrolle überhaupt nicht will. –

+0

Ich bekomme auch das Ereignis, in dem ich den UpdateTexImage-Aufruf schicke es in der Ereigniswarteschlange der GLSurfaceView drängen ... Dieser Anruf ist auch getan .. –