android高效读图方式——Hardwarebuffer读图

安卓上有许许多多使用OpenGL来渲染的原因,比方说做特效/动画/硬解/人脸识别等等。渲染完成后如何从gpu中把数据快速读取出来也是高效图像处理中的重要的一环。

相对于glReadPixel的同步读取方式,安卓GLES3.0提供了更高效快速的Hardwarebuffer读图方式,Hardwarebuffer读图其原理与常用的GraphicBuffer比较类似,其实现的都是cpu数据与textureId之间的数据映射。(GraphicBuffer常用于SurfaceTexture中,例如相机使用SurfaceTexture预览数据,此时底层相机数据就是使用GraphicBuffer上传到opengl)

此处就不赘述hardwarebuffer的具体使用,主要是从安卓源码角度分析一下hardwarebuffer过程中同步参数如何使用。

  • AHardwareBuffer_lock方法可用于将textureId图像映射到具体的outVirtualAddress地址上,其中该方法的第三个参数,fence用于cpu和gpu之间的数据同步,通常为使用eglDupNativeFenceFDANDROID方法将EGLSyncKHR转换为文件描述符来得到。

  • 文件描述符通常需要在使用完成后调用close来关闭,跟踪系统代码后发现AHardwareBuffer_lock方法内部有过针对该描述符的close,所以调用该方法后无需再close

相关推荐

  1. Android NFC

    2024-06-07 00:30:05       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 00:30:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 00:30:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 00:30:05       87 阅读
  4. Python语言-面向对象

    2024-06-07 00:30:05       96 阅读

热门阅读

  1. Facebook海外企业广告账户是什么?有什么优势?

    2024-06-07 00:30:05       31 阅读
  2. Emacs Verilog Mode 简单使用指南

    2024-06-07 00:30:05       35 阅读
  3. 【Qt快速入门(一)】- Qt简介

    2024-06-07 00:30:05       27 阅读
  4. js平滑滚动元素使其可见

    2024-06-07 00:30:05       33 阅读
  5. C++在构造函数中使用new

    2024-06-07 00:30:05       31 阅读
  6. zs6d配置-2

    2024-06-07 00:30:05       27 阅读
  7. 7-14 字节序(Endianness)---PTA实验C++

    2024-06-07 00:30:05       30 阅读
  8. 自然语言处理中的BERT模型深度剖析

    2024-06-07 00:30:05       32 阅读
  9. C++day3

    C++day3

    2024-06-07 00:30:05      30 阅读
  10. 用增之Google GA4F

    2024-06-07 00:30:05       31 阅读
  11. 前端经验:导出表格为excel并设置样式

    2024-06-07 00:30:05       33 阅读
  12. 维纳运动的概念

    2024-06-07 00:30:05       35 阅读