一文看懂Camera Id(slotId,physicalCameraId,logicalCameraId,frameworkCameraId)

本文介绍了在CameraHAL/ISP开发中常见的四种CameraId类型:slotId(传感器ID),physicalCameraId(物理传感器标识),logicalCameraId(逻辑ID,单摄或多摄),以及frameworkCameraId(框架可用的ID)。着重讲解了这些ID之间的映射关系及其变化情况,以实现框架与HAL层的解耦。
摘要由CSDN通过智能技术生成

目录

概述

Camera Id分类

slotId(sensorId)

physicalCameraId

logicalCameraId

frameworkCameraId


概述

做Camera HAL/ISP开发过程中,经常会遇到几种camera id的映射、转换,本文简要介绍经常会涉及到的几种camera id。

Camera Id分类

camera id主要分为四种:slotId(sensorId),physicalCameraId,logicalCameraId,frameworkCameraId。

slotId(sensorId)

  • sensor位置标识,对于每个sensor其值固定
  • 不会根据sensor probe是否成功或sort sensor等原因而改变
  • 与驱动dtsi中的slotId匹配
  • 不一定连续

physicalCameraId

  • 表征实际物理sensor,与slotId做映射
  • 根据sensor probe是否成功或sort sensor等原因而改变
  • 连续

logicalCameraId

  • 逻辑Id(单摄,多摄),即与一个或多个logicalCameraId对应
  • 一个physicalCameraId也可能根据不同的场景用法对应几个logicalCameraId
  • 包括了所有可能的组合,即使不对外暴露
  • 连续

frameworkCameraId

  • app通过getCameraIdList接口获取到的cameraId
  • 不包括不对外暴露的camera id,比如三方相机、仅hal内使用的camera id等不在frameworkCameraId范围内
  • 存在frameworkCameraId到logicalCameraId的映射,这样是为了将framework与hal层解耦。
  • 连续

 

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果出现"supportsCameraApi: Unknown camera ID 1"的错误,这表明您的代码无法识别相机ID 1。您可以尝试按照以下步骤检查和解决问题: 1. 检查相机是否可用:您可以使用`Camera.getNumberOfCameras()`方法检查设备上可用的相机数量,然后选择相机ID。例如,如果设备上只有一个相机,则可以选择使用相机ID 0。 2. 设置正确的相机ID:在使用相机之前,您需要为相机分配一个唯一的ID并将其设置为当前相机ID。例如,您可以使用以下代码设置前置摄像头: ``` Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); for (int i = 0; i < Camera.getNumberOfCameras(); i++) { Camera.getCameraInfo(i, cameraInfo); if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { mCameraId = i; break; } } mCamera = Camera.open(mCameraId); ``` 3. 检查相机API是否支持:在使用相机之前,您需要检查设备是否支持您所需的相机API。例如,如果您需要使用Camera2 API,但是设备不支持,则您需要使用传统的Camera API。您可以使用以下代码检查设备是否支持Camera2 API: ``` CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); String[] cameraIds = manager.getCameraIdList(); for (String cameraId : cameraIds) { CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); Integer level = characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL); if (level == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL || level == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED) { // 设备支持Camera2 API } else { // 设备不支持Camera2 API } } ``` 如果您仍然无法解决问题,可以尝试查看日志信息,以便更好地理解问题所在。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值