如何在 NDK 中获取相机方向

Posted

技术标签:

【中文标题】如何在 NDK 中获取相机方向【英文标题】:How get camera orientation in NDK 【发布时间】:2018-12-03 13:47:25 【问题描述】:

我从项目的 NDK 端的 ARCore 获取 NDK_Image。 由于相机方向,我的 AImage 正在旋转。

如何获取 NDK 内的相机方向值

在相机 NDK 文档中,我发现了这个 ACAMERA_JPEG_ORIENTATION

它甚至给出了一个代码示例:

private int getJpegOrientation(CameraCharacteristics c, int deviceOrientation) 
    if (deviceOrientation == android.view.OrientationEventListener.ORIENTATION_UNKNOWN) return 0;
    int sensorOrientation = c.get(CameraCharacteristics.SENSOR_ORIENTATION);
    // Round device orientation to a multiple of 90
deviceOrientation = (deviceOrientation + 45) / 90 * 90;
    // Reverse device orientation for front-facing cameras
    boolean facingFront = c.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT;
    if (facingFront) deviceOrientation = -deviceOrientation;
    // Calculate desired JPEG orientation relative to camera orientation to make
    // the image upright relative to the device orientation
    int jpegOrientation = (sensorOrientation + deviceOrientation + 360) % 360;
    return jpegOrientation;

但它没有解释如何使用,我找不到CameraCharascteristics的库。

这将是一个关于的很好的示例。谢谢!

【问题讨论】:

【参考方案1】:

这个Java 示例代码是错误的。

在 C++ 中,您可以使用标签 ACAMERA_SENSOR_ORIENTATION 和标签 ACAMERA_LENS_FACING 调用 ACameraManager_getCameraCharacteristics()

OrientationEventListener.ORIENTATION_UNKNOWN 是 constant -1。 CameraCharacteristics.LENS_FACING_FRONT 或 ACAMERA_LENS_FACING_FRONT 是 0

【讨论】:

可能你是对的,但我还没有找到样本,如何使用它。我需要在每个参数中设置什么。如果您有一个样本或指南会很棒。如果没有,请不要担心,我会继续搜索并在我可以使用后回到这里正确使用 =)

以上是关于如何在 NDK 中获取相机方向的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中获取方向(如北、西)

使用相机时如何获取设备的方向?

我的Android进阶之旅如何在NDK开发的时候定位Native层的内存泄漏?

我的Android进阶之旅如何在NDK开发的时候定位Native层的内存泄漏?

检测 iPhone 相机方向

从 NDK 中获取 SurfaceTexture 的 GL 上下文