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
:
- Error de segmentación en la biblioteca nativa cuando se ejecuta bajo Android antes de 4.0.3
- ¿Es posible eliminar símbolos de una biblioteca compartida creada con Android NDK?
- ¿Está proporcionando una implementación para todos los métodos nativos requeridos?
- JNI de Android no encuentra archivos de encabezado de biblioteca estándar de C ++
- Javah Error android.app.Activity not found
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*
.
- No se pudo cargar la aplicación Android NDK
- Utilizar C ++ con Android ndk / jni
- Env-> FindClass función devuelve null
- Matriz de bytes de retorno en jni android?
- Cómo agregar un servicio de sistema a Android Framework
- Android, genera archivos de encabezado jni con javah, muestra error que no puede encontrar org.opencv.core.Mat
- JNI ERROR DETECTADO EN APLICACIÓN: entrada no es válida UTF-8 modificado: byte de inicio ilegal 0xfc.
- Cómo incluir bibliotecas compartidas precompiladas en apk con eclipse
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