Google 致力于为黑人社区推动种族平等。查看具体举措

AHardwareBuffer

AHardwareBuffer 是一种封装 gralloc 缓冲区的共享内存。在 Android 10 中,神经网络 API (NNAPI) 支持使用 AHardwareBuffer,以允许驱动程序在不复制数据的情况下完成执行,从而改善应用的性能及耗电量。例如,相机 HAL 堆栈可以使用由相机 NDK 和媒体 NDK API 生成的 AHardwareBuffer 句柄,将 AHardwareBuffer 对象传递给 NNAPI 以处理机器学习工作负载。如需了解详情,请参阅 ANeuralNetworksMemory_createFromAHardwareBuffer

NNAPI 中使用的 AHardwareBuffer 对象通过名为 hardware_bufferhardware_buffer_blobhidl_memory 结构传递给驱动程序。hidl_memory 结构 hardware_buffer_blob 仅表示具有 AHARDWAREBUFFER_FORMAT_BLOB 格式的 AHardwareBuffer 对象。

框架所需的信息在 hidl_memory 结构的 hidl_handle 字段中编码。hidl_handle 字段会封装 native_handle,后者会编码与 AHardwareBuffer 或 Gralloc 缓冲区有关的所有必需元数据。

驱动程序必须正确解码提供的 hidl_handle 字段并访问 hidl_handle 所描述的内存。当调用 getSupportedOperations_1_2getSupportedOperations_1_1getSupportedOperations 方法时,驱动程序应检测它是否能够解码提供的 hidl_handle 并访问 hidl_handle 所描述的内存。如果不支持用于常量操作数的 hidl_handle 字段,那么模型准备必定失败。如果不支持用于执行的输入或输出操作数的 hidl_handle 字段,那么执行必定失败。如果模型准备或执行失败,建议驱动程序返回 GENERAL_FAILURE 错误代码。