Android 7 GraphicBuffer可直接访问OpenGL纹理内存
移动设备为CPU和GPU共享内存的唯一方式是使用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
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)