Как получить ANativeWindow из SurfaceTexture в NDK

#android #android-ndk

#Android #android-ndk

Вопрос:

У меня есть некоторый код OpenGL ES, который был отображен в a GLSurfaceView , и в настоящее время я модифицирую его для работы с любым SurfaceView и TextureView .

Общий элемент, который мне нужен из обоих в моем машинном коде, таков: ANativeWindow .

Для SurfaceView я получил это, перейдя Surface к:

 m_jwindow = ANativeWindow_fromSurface(env, surface);
  

Для TextureView , я беру SurfaceTexture , и в API 14 я могу использовать это:

 m_jwindow = ANativeWindow_fromSurfaceTexture(env, surface);
  

Однако эта функция была удалена в Jellybean. Что заставляет меня задуматься, как я могу получить ANativeWindow из SurfaceTexture API 16 ?

Ответ №1:

Что вам нужно сделать в API 16 , это создать объект Surface, передав SurfaceTexture в качестве аргумента конструктору (который был введен в API 14). Передайте эту поверхность ANativeWindow_fromSurface() как обычно.

Ответ №2:

Я не знаю, может ли кто-нибудь это увидеть.

во-первых, включите surface_texture.h

используйте ASurfaceTexture_fromSurfaceTexture(JNIEnv *env, jobject surfacetexture) , чтобы получить ASurfaceTexture*

затем используйте ASurfaceTexture_acquireANativeWindow(ASurfaceTexture *st) , чтобы получить ANativeWindow*

обязательно отпустите его после того, как все будет сделано. ASurfaceTexture_release(ASurfaceTexture *st)

ссылка: https://developer.android.google.cn/ndk/reference/group/surface-texture