【问题标题】:Android studio C++ ndk cameraAndroid studio C++ ndk 摄像头
【发布时间】:2019-01-19 15:34:50
【问题描述】:

我在 android studio 中创建了 C/C++ 项目,我想使用 NDK 摄像头。 我写在我的cpp文件中

#include <camera/NdkCameraMetadata.h>
#include <camera/NdkCameraManager.h>
#include <camera/NdkCameraDevice.h>
#include <jni.h>
#include <string>


extern "C" JNIEXPORT jstring JNICALL
Java_com_example_test_MainActivity_listDevices(JNIEnv* env, jobject)
{
   std::string text;

   ACameraIdList *camList;
   ACameraManager *camManager;

   camManager = ACameraManager_create();

   camera_status_t result = ACameraManager_getCameraIdList(camManager, &camList);

   if (result == ACAMERA_OK)
   {
       text = "Error List devices";
   }
   else
   {
       text = "Device listed";
   }

   return env->NewStringUTF(text.c_str());;
}

但Android工作室正在编写

“无法解析类型 ACameraIdList”

我做错了什么?我只是将此代码添加到 .cpp 文件中,仅此而已。没有更改任何其他文件。

【问题讨论】:

  • 您的目标是哪个平台级别?原生相机 API 需要 24 个。
  • 我安装了 API 级别 24 和 API 级别 28。我有搭载 Android 7.0 的三星 Galaxy A7。但为什么 Android Studio 无法解析这些类型?
  • 我不是说你安装了哪些SDK。我的意思是您为哪个原生 API 级别构建
  • API 级别 24。
  • 好吧,当我尝试它时,我无法重现您描述的问题。如果我将minSdkVersion 设置为低于 24 的值(因为本机相机 API 需要 24 级或更高级别),我确实会在 IDE 中出现“无法旋转”错误。当然你需要链接到 libcamera2ndk,否则你会得到链接错误。

标签: android c++ android-ndk android-camera2


【解决方案1】:

如 cmets 中所述,您需要将 minSDK 设置为 24 或更高。

NdkCameraDevice.h 头文件使用__ANDROID_API__ 标识符检测minSDK:

#if __ANDROID_API__ >= 24
      ...
typedef struct ACameraIdList {
    int numCameras;          ///< Number of camera device Ids
    const char** cameraIds;  ///< list of camera device Ids
} ACameraIdList;
      ...
#endif

这意味着如果 minSDK 低于 24,C 预处理器将省略 ACameraIdList 和其他相关结构和函数的声明。这会导致“无法解析 ACameraIdList 类型”错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    相关资源
    最近更新 更多