Android Camera2 与 NDK 原生相机 API

Android Camera2 vs NDK Native Camera API

Android 最近 announced native Camera API 根据他们的说法相当于 Java android.hardware.camera2 class。我们什么时候应该考虑使用 NDK / C++ API ?如果我们使用 C++ 代码,是否有任何性能改进——比如预处理帧?他们原生 API 是否允许您插入可以作为 HAL3 管道一部分的代码,例如图像处理/计算机视觉代码?

为了简化实施,API 主要供没有太多 Java 组件的应用程序使用。

对于应用程序只是通过 JNI 将相机图像缓冲区传递到本机代码的用例,性能可能稍微好一些,但是从 Java android.media.Image 对象访问直接 ByteBuffers 的开销不是很高。但是设置一堆 Java 代码来做到这一点可能很烦人;例如,OpenCV 可以在其 Android 相机包装器中直接使用 NDK,而不是 OpenCV 过去使用的私有(不保证稳定)本机接口。

它也可以用作其他本机系统组件获取相机数据的稳定接口,主要用于各种 OEM 扩展。

NDK API 对实际图像处理管道的控制并不比 Java 多。

主要缺点是与 Java API 不同,NDK API 仅支持 LIMITED 或更好的相机设备;没有对 LEGACY 设备的兼容性支持。它还不支持重新处理,这种处理不太常用于 NDK API 更有意义的连续处理应用程序。