Android NDK C ++ camera2 API:ACameraManager_getCameraIdList返回0个摄像头

时间:2018-04-08 08:25:51

标签: android api android-ndk android-camera2

我正在尝试使用NDK camera2 API(来自abi level 24)创建C ++ Android原生相机包装器。我使用我找到的示例创建了一些代码段代码,并将其编译为目标API级别24并在Android 7.1手机上运行:

ACameraManager *cameraManager = ACameraManager_create();
VB(cameraManager!=nullptr, "Could not create CameraManager.");
camera_status = ACameraManager_getCameraIdList(cameraManager, &m_camera_id_list);

if (camera_status != ACAMERA_OK) {

    LOGE("Failed to get camera id list (reason: %d)\n", camera_status);
    return ERR_CAMERAAPI_UNKNOWN_ERROR;
}

if (m_camera_id_list->numCameras < 1) {
    LOGE("No camera device detected.\n");
    return ERR_CAMERAAPI_UNKNOWN_ERROR;
}

当我在小米mi4c Android 7.1手机上运行这个天真的代码时,我得到一个空的相机列表。

我还尝试在同一部手机上运行使用Java camera2 API创建的代码片段,它可以执行相同的操作:

import android.hardware.camera2.CameraDevice; 
Activity activity = getActivity();
CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);

String[] cameraIds = manager.getCameraIdList()
manager.openCamera(cameraIds[0], mStateCallback, mBackgroundHandler);

这次我在逻辑上看到它实际上找到了两个相机并打印出它们的分辨率。

我的清单当然包含以下几行:

<uses-sdk android:minSdkVersion="24" />
<uses-feature android:name="android.hardware.camera2" android:required="true" />
<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false" />
<uses-permission android:name="android.permission.CAMERA"/>

我批准了权限请求。

有没有人知道为什么在使用Java camera2 API时会找到手机摄像头,但在使用NDK camera2 API时却找不到它们?

1 个答案:

答案 0 :(得分:2)

如果

,则NDK camera2支持无效
CameraCharacteristics.get(INFO_SUPPORTED_HARDWARE_LEVEL) == INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY

这可能是小米mi4c的情况。