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
Ja, ich habe es anstelle der Oberfläche von TextureView hinzugefügt, weil ich am Ende die Kontrolle überhaupt nicht will. –
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 .. –