Obtener un ANativeWindowBuffer de ANativeWindow_Buffer
Para obtener acceso rápido a píxeles de textura de OpenGL ES 2.0 en Android NDK, quiero usar la extensión eglCreateImageKHR()
.
De acuerdo con la documentación EGL_NATIVE_BUFFER_ANDROID
:
- ¿Hay algún recurso bueno que discuta Android NDK API de una manera algo decente?
- Androide applicatin no puede encontrar la biblioteca jni cuando se instala como aplicación del sistema
- ¿Qué parte de los dispositivos Android beneficia de las optimizaciones de Libjpeg-turbo?
- Callback Listener en Unity - Cómo llamar al método de archivo de script desde UnityPlayerActivity en Android
- JNI cambiar C a C ++
Esta extensión permite usar un búfer de ventana de Android (struct
ANativeWindowBuffer
) como una fuenteEGLImage
.
ANativeWindowBuffer
es una struct
interna utilizada por las clases de framework nativas como GraphicBuffer
. Desafortunadamente, ya que estoy en NDK no tengo acceso directo a estas clases.
El NDK native_window
interfaz me permite pasar un objeto de Surface
Java a través de la NDK. Puedo entonces utilizar ANativeWindow_fromSurface()
para conseguir una manija ANativeWindow*
opaca. Con este puntero puedo llamar ANativeWindow_lock()
para rellenar una estructura del tipo ANativeWindow_Buffer
( ANativeWindow_Buffer
el _
).
Si intento utilizar este &ANativeWindow_Buffer
objeto con eglCreateImageKHR()
falla con EGL_BAD_NATIVE_WINDOW
.
Mi pregunta es: ¿Cómo puedo utilizar ANativeWindow_Buffer
con eglCreateImageKHR()
o, alternativamente, cómo obtener un ANativeWindowBuffer
de ANativeWindow_Buffer
o de ANativeWindow*
.
- Manejo de excepciones de Android JNI
- ¿Cómo obtengo el búfer de la cámara Android en bruto en C con JNI?
- Puente nativo entre Python y Dalvik o AAF
- Mejor opción para representar video para iOS y Android
- Android NDK / JNI: error "No hay reglas para hacer objetivo" al compilar mi proyecto iOS / Android híbrido
- Cómo utilizar bibliotecas extra * .so en Android Studio y NDK
- Android NDK R8E falta stdlib.h
- Falta de correspondencia entre la firma del método y la llamada real
De lo que descubrí al pasar por este camino, ANativeWindow_Buffer
y ANativeWindowBuffer
son tipos completamente diferentes. Bueno, son algo similares, pero definitivamente tan diferentes que no se pueden usar de forma intercambiable.
Si desea comparar, aquí están las definiciones:
-
ANativeWindow_Buffer
: http://androidxref.com/4.4.4_r1/xref/prebuilts/ndk/current/platforms/android-18/arch-arm/usr/include/android/native_window.h -
ANativeWindowBuffer
: http://androidxref.com/4.4.4_r1/xref/system/core/include/system/window.h
Usted notará que tienen algunos campos en común ( width
, height
, stride
, format
). La gran diferencia es que ANativeWindow_Buffer
contiene un puntero a los datos reales, mientras que ANativeWindowBuffer
contiene un identificador opaco del tipo buffer_handle_t
.
Así que si usted descubrió cómo obtener un ANativeWindow_Buffer
, y esperaba que usted estaba bien en su camino a un ANativeWindowBuffer
, usted es … probablemente no. Al menos esa fue mi conclusión. Creo que los nombres muy similares son sólo una broma.
No encontré una manera de crear un ANativeWindowBuffer
del código NDK. Al menos con el uso de sólo APIs compatibles, creo que no es posible. Mi investigación fue con KitKat.
- API de Google Drive para Android (GDAA) getResourceId () devuelve null (problema de temporización)
- Eliminar otra aplicación y borrar los datos