Android 7 GraphicBuffer可直接访问OpenGL纹理内存

Android 7 GraphicBuffer可直接访问OpenGL纹理内存,android,performance,opengl-es,android-ndk,android-7.0-nougat,Android,Performance,Opengl Es,Android Ndk,Android 7.0 Nougat,移动设备为CPU和GPU共享内存的唯一方式是使用GrphicBuffer。但由于安卓7限制了对私有本机lib(包括gralloc)的访问,因此不可能再使用它了。问题是,有没有其他方法可以直接访问纹理的像素数据 我知道,使用PBO(像素缓冲区对象)也可以做类似的事情。但它仍然会进行额外的内存复制,这是不可取的。特别是如果我们知道,有办法做到零拷贝 有许多应用程序使用了此功能,因为它可以极大地提高性能。我想现在很多开发者都被这个问题困住了。我认为你可以使用SurfaceTexture,Surface

移动设备为CPU和GPU共享内存的唯一方式是使用
GrphicBuffer
。但由于安卓7限制了对私有本机lib(包括gralloc)的访问,因此不可能再使用它了。问题是,有没有其他方法可以直接访问纹理的像素数据

我知道,使用PBO(像素缓冲区对象)也可以做类似的事情。但它仍然会进行额外的内存复制,这是不可取的。特别是如果我们知道,有办法做到零拷贝


有许多应用程序使用了此功能,因为它可以极大地提高性能。我想现在很多开发者都被这个问题困住了。

我认为你可以使用SurfaceTexture,SurfaceTexture可以通过MediaCore创建,SurfaceTexture可以通过MediaCore直接编码。这个计划可以在每帧视频中以2ms-5ms的速度处理1080p视频。

自从Android 8/API 26(很抱歉没有Android 7…)

GrphicBuffer()
的ALT

本机硬件缓冲区API允许您 直接分配缓冲区以创建自己的管道 跨进程缓冲区管理。您可以分配一个硬件缓冲区 并使用它通过 eglGetNativeClientBufferANDROID扩展

NDK的最低版本为15c(2017年7月)

Android NDK,第15c版(2017年7月)
为Android 8.0添加了本机API。
*硬件缓冲区API

android/hardware\u buffer\u jni.h
位于目录
(NDK)/sysroot/usr/include/

参考文献:
NDK-(android/hardware\u buffer\u jni.h)
Android/Java-
相关文章

注意:适用于Android 7/API 24
本机API指南也在

API级别24增加了对EGL_KHR_可变_呈现_缓冲区的支持, ANDROID\u创建\u本地\u客户端\u缓冲区,以及 ANDROID\前端\缓冲区\自动\刷新扩展

并且是一个EGL扩展,它包含
eglCreateNativeClientBufferANDROID()
,返回
EGLClientBuffer
。(EGL/eglext.h)