Android Camera2与NDK本地相机API的比较

5

Android最近宣布本地相机API,他们称其与Java中的android.hardware.camera2类等效。我们何时应该考虑使用NDK / C ++ API?如果我们使用C++代码,是否有性能提升,例如对帧进行预处理?Native API是否允许您插入代码作为HAL3管道的一部分,例如图像处理/计算机视觉代码?

1个回答

6

该API主要供那些没有太多Java组件的应用程序使用,以实现简单的实现。

在一些情况下,如果一个应用程序只是通过JNI将相机图像缓冲区传递到本地代码中,则性能可能会略微提高,但从Java android.media.Image对象访问直接ByteBuffer的开销并不高。但是设置大量Java代码来执行此操作可能很麻烦;例如,OpenCV可以直接在其Android相机包装器中使用NDK,而不是过去OpenCV使用的私有(不保证稳定)本机接口。

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

与Java API不同,NDK API仅支持LIMITED或更好的相机设备;对于LEGACY设备,没有兼容性支持。 它还不支持重新处理,这在NDK API更合理的连续处理应用程序类型中较少使用。


请注意,本机API是在Android-24中添加的。我不确定是否可以将其移植到Android-21或23,即使对于具有非遗留Camera2的设备也是如此。 - Alex Cohn
@alex-cohn 是的--我尝试在我的Nexus 5X上使用它,该设备运行的是API 23,但它并没有起作用。我将设备SDK升级到API 25,现在似乎可以工作了。该设备确实具有非遗留的相机2。 - exifguy
"它没有起作用": 你是否做了一些特殊的向后移植努力?因为很明显它不能直接使用,设备没有预装/system/libs/libcamera2ndk.so。我的问题是是否可能为带有Marshmallow的Nexus 5X构建此库。 - Alex Cohn
1
更新:我已经建立了一个POC项目,https://github.com/alexcohn/native-camera2,其中**libcamera2ndk.so**已经构建为平台23(即API 23)。如果您能在Nexus 5X上尝试它,我将不胜感激。 - Alex Cohn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接