OpenHarmony开发者论坛

标题: rk3568 openharmony 6.1双摄像头(前后摄)camera_host_config.hcs要如何配置,相机应用才能看到2个摄像头,并能够来回切换? [打印本页]

作者: andyang    时间: 2026-6-26 17:12
标题: rk3568 openharmony 6.1双摄像头(前后摄)camera_host_config.hcs要如何配置,相机应用才能看到2个摄像头,并能够来回切换?
[md]### 【问题描述】

1. 介绍问题现象和发生的背景
   2个gc05a2 sensor,前后摄,目前无法在相机应用中看到2个摄像头并能来回切
2. 相关的代码(请勿使用截图)

   camera_host_config.hcs文件root {
   module="sample";
   vdiLibList = [
   "libcamera_host_vdi_impl_1.0.z.so"
   ];
   camera_host_config {
   match_attr = "camera_host_interface";
   template ability {
   logicCameraId = "lcam001";
   physicsCameraIds = [
   "CAMERA_FIRST",
   "CAMERA_SECOND"
   ];
   metadata {
   aeAvailableAntiBandingModes = [
   "OHOS_CONTROL_AE_ANTIBANDING_MODE_OFF",
   "OHOS_CONTROL_AE_ANTIBANDING_MODE_50HZ",
   "OHOS_CONTROL_AE_ANTIBANDING_MODE_60HZ",
   "OHOS_CONTROL_AE_ANTIBANDING_MODE_AUTO"
   ];
   aeAvailableModes = ["OHOS_CONTROL_AE_MODE_ON"];
   availableFpsRange = [15, 30];
   aeCompensationRange = [0, 0];
   aeCompensationSteps = [0, 1];
   availableAwbModes = [
   "OHOS_CONTROL_AWB_MODE_OFF"
   ];
   sceneModesOverrides = [
   "OHOS_CONTROL_AE_MODE_ON",
   "OHOS_CONTROL_AWB_MODE_AUTO"
   ];
   aeLockAvailable = "OHOS_CONTROL_AE_LOCK_AVAILABLE_FALSE";
   awbLockAvailable = "OHOS_CONTROL_AWB_LOCK_AVAILABLE_FALSE";
   sensitivityRange = [32, 2400];
   exposureTimeRange = [100000, 200000000];
   faceDetectMode = "OHOS_STATISTICS_FACE_DETECT_MODE_OFF";
   maxFaceCount = 0;
   flashAvailable = "OHOS_FLASH_INFO_AVAILABLE_FALSE";
   lensFacing = "OHOS_LENS_FACING_FRONT";
   opticalStabilizations = ["OHOS_LENS_OPTICAL_STABILIZATION_MODE_OFF"];
   maxDigitalZoom = "1";
   availableCharacteristicsKeys = [
   "OHOS_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES",
   "OHOS_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES",
   "OHOS_CONTROL_AE_AVAILABLE_MODES",
   "OHOS_ABILITY_FPS_RANGES",
   "OHOS_CONTROL_AE_COMPENSATION_RANGE",
   "OHOS_CONTROL_AE_COMPENSATION_STEP",
   "OHOS_CONTROL_AVAILABLE_EFFECTS",
   "OHOS_CONTROL_AVAILABLE_SCENE_MODES",
   "OHOS_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES",
   "OHOS_CONTROL_AWB_AVAILABLE_MODES",
   "OHOS_CONTROL_MAX_REGIONS",
   "OHOS_CONTROL_SCENE_MODE_OVERRIDES",
   "OHOS_CONTROL_AE_LOCK_AVAILABLE",
   "OHOS_CONTROL_AWB_LOCK_AVAILABLE",
   "OHOS_CONTROL_AVAILABLE_MODES",
   "OHOS_JPEG_AVAILABLE_THUMBNAIL_SIZES",
   "OHOS_JPEG_MAX_SIZE",
   "OHOS_SENSOR_INFO_PIXEL_ARRAY_SIZE",
   "OHOS_SENSOR_INFO_ACTIVE_ARRAY_SIZE",
   "OHOS_SENSOR_INFO_SENSITIVITY_RANGE",
   "OHOS_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT",
   "OHOS_SENSOR_INFO_EXPOSURE_TIME_RANGE",
   "OHOS_SENSOR_ORIENTATION",
   "OHOS_SENSOR_AVAILABLE_TEST_PATTERN_MODES",
   "OHOS_SENSOR_INFO_PHYSICAL_SIZE",
   "OHOS_SENSOR_INFO_TIMESTAMP_SOURCE",
   "OHOS_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES",
   "OHOS_STATISTICS_INFO_MAX_FACE_COUNT",
   "OHOS_SYNC_MAX_LATENCY",
   "OHOS_FLASH_INFO_AVAILABLE",
   "OHOS_LENS_INFO_AVAILABLE_APERTURES",
   "OHOS_LENS_FACING",
   "OHOS_LENS_INFO_AVAILABLE_FOCAL_LENGTHS",
   "OHOS_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION",
   "OHOS_LENS_INFO_HYPERFOCAL_DISTANCE",
   "OHOS_LENS_INFO_MINIMUM_FOCUS_DISTANCE",
   "OHOS_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES",
   "OHOS_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM",
   "OHOS_SCALER_AVAILABLE_STREAM_CONFIGURATIONS",
   "OHOS_SCALER_AVAILABLE_STALL_DURATIONS",
   "OHOS_SCALER_AVAILABLE_MIN_FRAME_DURATIONS",
   "OHOS_SCALER_CROPPING_TYPE",
   "OHOS_INFO_SUPPORTED_HARDWARE_LEVEL",
   "OHOS_REQUEST_PARTIAL_RESULT_COUNT",
   "OHOS_REQUEST_PIPELINE_MAX_DEPTH",
   "OHOS_REQUEST_MAX_NUM_OUTPUT_STREAMS",
   "OHOS_REQUEST_MAX_NUM_INPUT_STREAMS",
   "OHOS_REQUEST_AVAILABLE_CAPABILITIES"
   ];
   availableRequestKeys = [
   "OHOS_CONTROL_AE_MODE",
   "OHOS_CONTROL_AE_EXPOSURE_COMPENSATION",
   "OHOS_CONTROL_AE_PRECAPTURE_TRIGGER",
   "OHOS_CONTROL_AE_TARGET_FPS_RANGE",
   "OHOS_CONTROL_AE_ANTIBANDING_MODE",
   "OHOS_CONTROL_AWB_MODE",
   "OHOS_CONTROL_AWB_LOCK",
   "OHOS_FLASH_MODE",
   "OHOS_STATISTICS_FACE_DETECT_MODE",
   "OHOS_NOISE_REDUCTION_MODE",
   "OHOS_COLOR_CORRECTION_ABERRATION_MODE",
   "OHOS_LENS_APERTURE",
   "OHOS_LENS_OPTICAL_STABILIZATION_MODE",
   "OHOS_CONTROL_MODE",
   "OHOS_CONTROL_CAPTURE_INTENT"
   ];
   availableResultKeys = [
   "OHOS_CONTROL_AE_STATE",
   "OHOS_CONTROL_AE_LOCK",
   "OHOS_CONTROL_AWB_STATE",
   "OHOS_CONTROL_AWB_LOCK",
   "OHOS_LENS_STATE",
   "OHOS_REQUEST_PIPELINE_DEPTH",
   "OHOS_SCALER_CROP_REGION",
   "OHOS_SENSOR_TIMESTAMP",
   "OHOS_SENSOR_ROLLING_SHUTTER_SKEW",
   "OHOS_SENSOR_EXPOSURE_TIME",
   "OHOS_STATISTICS_LENS_SHADING_MAP_MODE",
   "OHOS_STATISTICS_SCENE_FLICKER",
   "OHOS_JPEG_SIZE",
   "OHOS_JPEG_QUALITY",
   "OHOS_JPEG_ORIENTATION"
   ];
   }
   }
   ability_01 :: ability {
   logicCameraId = "lcam001";
   physicsCameraIds = [
   "CAMERA_FIRST"
   ];
   metadata {
   aeAvailableAntiBandingModes = [
   "OHOS_CAMERA_AE_ANTIBANDING_MODE_OFF"
   ];
   aeAvailableModes = ["OHOS_CAMERA_AE_MODE_OFF"];
   availableFpsRange = [30, 30];
   cameraPosition = "OHOS_CAMERA_POSITION_BACK";
   cameraType = "OHOS_CAMERA_TYPE_WIDE_ANGLE";
   cameraConnectionType ="OHOS_CAMERA_CONNECTION_TYPE_BUILTIN";
   cameraMemoryType ="OHOS_CAMERA_MEMORY_USERPTR";
   faceDetectMaxNum = "10";
   aeCompensationRange = [0, 0];
   aeCompensationSteps = [0, 0];
   availableAwbModes = [
   "OHOS_CAMERA_AWB_MODE_OFF"
   ];
   sensitivityRange = [32, 2400];
   faceDetectMode = "OHOS_CAMERA_FACE_DETECT_MODE_OFF";
   availableCharacteristicsKeys = [
   "OHOS_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES",
   "OHOS_CONTROL_AE_AVAILABLE_MODES",
   "OHOS_ABILITY_FPS_RANGES",
   "OHOS_CONTROL_AE_COMPENSATION_RANGE",
   "OHOS_CONTROL_AE_COMPENSATION_STEP",
   "OHOS_CONTROL_AWB_AVAILABLE_MODES",
   "OHOS_JPEG_AVAILABLE_THUMBNAIL_SIZES",
   "OHOS_JPEG_MAX_SIZE",
   "OHOS_SENSOR_INFO_PIXEL_ARRAY_SIZE",
   "OHOS_SENSOR_INFO_ACTIVE_ARRAY_SIZE",
   "OHOS_SENSOR_INFO_SENSITIVITY_RANGE",
   "OHOS_SENSOR_INFO_PHYSICAL_SIZE",
   ];
   availableRequestKeys = [
   "OHOS_CONTROL_AE_MODE",
   "OHOS_CONTROL_AE_EXPOSURE_COMPENSATION",
   "OHOS_CONTROL_AE_TARGET_FPS_RANGE",
   "OHOS_CONTROL_AE_ANTIBANDING_MODE",
   "OHOS_CONTROL_AWB_MODE",
   "OHOS_CONTROL_AWB_LOCK",
   "OHOS_STATISTICS_FACE_DETECT_MODE"
   ];
   availableResultKeys = [
   "OHOS_CONTROL_AE_LOCK",
   "OHOS_CONTROL_AWB_LOCK",
   "OHOS_SENSOR_EXPOSURE_TIME",
   "OHOS_JPEG_SIZE",
   "OHOS_JPEG_QUALITY",
   "OHOS_JPEG_ORIENTATION"
   ];
   focalLength = "24.0";
   focusAvailableModes = [
   "OHOS_CAMERA_FOCUS_MODE_MANUAL",
   "OHOS_CAMERA_FOCUS_MODE_CONTINUOUS_AUTO",
   "OHOS_CAMERA_FOCUS_MODE_AUTO",
   "OHOS_CAMERA_FOCUS_MODE_LOCKED"
   ];
   exposureAvailableModes = [
   "OHOS_CAMERA_EXPOSURE_MODE_MANUAL",
   "OHOS_CAMERA_EXPOSURE_MODE_CONTINUOUS_AUTO",
   "OHOS_CAMERA_EXPOSURE_MODE_LOCKED",
   "OHOS_CAMERA_EXPOSURE_MODE_AUTO"
   ];
   meterAvailableModes = [
   "OHOS_CAMERA_SPOT_METERING",
   "OHOS_CAMERA_REGION_METERING",
   "OHOS_CAMERA_OVERALL_METERING"
   ];
   flashAvailableModes = [
   "OHOS_CAMERA_FLASH_MODE_CLOSE",
   "OHOS_CAMERA_FLASH_MODE_OPEN",
   "OHOS_CAMERA_FLASH_MODE_AUTO",
   "OHOS_CAMERA_FLASH_MODE_ALWAYS_OPEN"
   ];
   mirrorSupported = "OHOS_CAMERA_MIRROR_OFF";
   //basicAvailableConfigurations = [1, 640, 480, 4, 1280, 960];
   basicAvailableConfigurations = [1, 2592, 1944, 4, 2592, 1944];
   extendAvailableConfigurations = [0, 0, 1, 640, 480, 0, -1, 1, 1, 640, 480, 30, -1, 2, 4, 1280, 960, 0, -1, -1];
   sensorOrientationSupported = "270";
   videoStabilizationAvailableModes = [
   "OHOS_CAMERA_VIDEO_STABILIZATION_OFF"
   ];
   flashAvailable = "OHOS_CAMERA_FLASH_FALSE";
   afAvailable = [
   "OHOS_CAMERA_AF_MODE_OFF"
   ];
   zoomRatioRange = [
   "1.0",
   "1.0"
   ];
   jpegOrientation= "270";
   jpegQuality= "2";
   }
   }
   ability_02 :: ability {
   logicCameraId = "lcam002";
   physicsCameraIds = [
   "CAMERA_SECOND"
   ];
   metadata {
   aeAvailableAntiBandingModes = [
   "OHOS_CAMERA_AE_ANTIBANDING_MODE_OFF"
   ];
   aeAvailableModes = ["OHOS_CAMERA_AE_MODE_OFF"];
   availableFpsRange = [30, 30];
   cameraPosition = "OHOS_CAMERA_POSITION_FRONT";
   cameraType = "OHOS_CAMERA_TYPE_WIDE_ANGLE";
   cameraConnectionType ="OHOS_CAMERA_CONNECTION_TYPE_BUILTIN";
   cameraMemoryType ="OHOS_CAMERA_MEMORY_USERPTR";
   faceDetectMaxNum = "10";
   aeCompensationRange = [0, 0];
   aeCompensationSteps = [0, 0];
   availableAwbModes = [
   "OHOS_CAMERA_AWB_MODE_OFF"
   ];
   sensitivityRange = [32, 2400];
   faceDetectMode = "OHOS_CAMERA_FACE_DETECT_MODE_OFF";
   availableCharacteristicsKeys = [
   "OHOS_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES",
   "OHOS_CONTROL_AE_AVAILABLE_MODES",
   "OHOS_ABILITY_FPS_RANGES",
   "OHOS_CONTROL_AE_COMPENSATION_RANGE",
   "OHOS_CONTROL_AE_COMPENSATION_STEP",
   "OHOS_CONTROL_AWB_AVAILABLE_MODES",
   "OHOS_JPEG_AVAILABLE_THUMBNAIL_SIZES",
   "OHOS_JPEG_MAX_SIZE",
   "OHOS_SENSOR_INFO_PIXEL_ARRAY_SIZE",
   "OHOS_SENSOR_INFO_ACTIVE_ARRAY_SIZE",
   "OHOS_SENSOR_INFO_SENSITIVITY_RANGE",
   "OHOS_SENSOR_INFO_PHYSICAL_SIZE",
   ];
   availableRequestKeys = [
   "OHOS_CONTROL_AE_MODE",
   "OHOS_CONTROL_AE_EXPOSURE_COMPENSATION",
   "OHOS_CONTROL_AE_TARGET_FPS_RANGE",
   "OHOS_CONTROL_AE_ANTIBANDING_MODE",
   "OHOS_CONTROL_AWB_MODE",
   "OHOS_CONTROL_AWB_LOCK",
   "OHOS_STATISTICS_FACE_DETECT_MODE"
   ];
   availableResultKeys = [
   "OHOS_CONTROL_AE_LOCK",
   "OHOS_CONTROL_AWB_LOCK",
   "OHOS_SENSOR_EXPOSURE_TIME",
   "OHOS_JPEG_SIZE",
   "OHOS_JPEG_QUALITY",
   "OHOS_JPEG_ORIENTATION"
   ];
   focalLength = "24.0";
   focusAvailableModes = [
   "OHOS_CAMERA_FOCUS_MODE_MANUAL",
   "OHOS_CAMERA_FOCUS_MODE_CONTINUOUS_AUTO",
   "OHOS_CAMERA_FOCUS_MODE_AUTO",
   "OHOS_CAMERA_FOCUS_MODE_LOCKED"
   ];
   exposureAvailableModes = [
   "OHOS_CAMERA_EXPOSURE_MODE_MANUAL",
   "OHOS_CAMERA_EXPOSURE_MODE_CONTINUOUS_AUTO",
   "OHOS_CAMERA_EXPOSURE_MODE_LOCKED",
   "OHOS_CAMERA_EXPOSURE_MODE_AUTO"
   ];
   meterAvailableModes = [
   "OHOS_CAMERA_SPOT_METERING",
   "OHOS_CAMERA_REGION_METERING",
   "OHOS_CAMERA_OVERALL_METERING"
   ];
   flashAvailableModes = [
   "OHOS_CAMERA_FLASH_MODE_CLOSE",
   "OHOS_CAMERA_FLASH_MODE_OPEN",
   "OHOS_CAMERA_FLASH_MODE_AUTO",
   "OHOS_CAMERA_FLASH_MODE_ALWAYS_OPEN"
   ];
   mirrorSupported = "OHOS_CAMERA_MIRROR_OFF";
   //basicAvailableConfigurations = [1, 640, 480, 4, 1280, 960];
   basicAvailableConfigurations = [3, 2592, 1944, 4, 2592, 1944];
   extendAvailableConfigurations = [0, 0, 1, 640, 480, 0, -1, 1, 1, 640, 480, 30, -1, 2, 4, 1280, 960, 0, -1, -1];
   sensorOrientationSupported = "270";
   videoStabilizationAvailableModes = [
   "OHOS_CAMERA_VIDEO_STABILIZATION_OFF"
   ];
   flashAvailable = "OHOS_CAMERA_FLASH_FALSE";
   afAvailable = [
   "OHOS_CAMERA_AF_MODE_OFF"
   ];
   zoomRatioRange = [
   "1.0",
   "1.0"
   ];
   jpegOrientation= "270";
   jpegQuality= "2";
   }
   }
   }
   }
3. 运行结果、错误截图

   [    1.161177] gc05a2 2-003f: driver version: 00.01.01
   [    1.161252] gc05a2 2-003f: Failed to get power-gpios, maybe no use
   [    1.161406] gc05a2 2-003f: Failed to get pwdn-gpios
   [    1.161471] gc05a2 2-003f: supply avdd not found, using dummy regulator
   [    1.161693] gc05a2 2-003f: supply dovdd not found, using dummy regulator
   [    1.161812] gc05a2 2-003f: supply dvdd not found, using dummy regulator
   [    1.161896] gc05a2 2-003f: lane_num(2)  pixel_rate(178612800)
   [    1.161921] gc05a2 2-003f: could not get default pinstate
   [    1.161935] gc05a2 2-003f: could not get sleep pinstate
   [    1.169684] gc05a2 reg 3f0 return 0x5
   [    1.170180] mmc2: SDHCI controller on fe310000.sdhci [fe310000.sdhci] using ADMA
   [    1.170262] gc05a2 reg 3f1 return 0xa2
   [    1.170273] gc05a2 2-003f: detected gc05a2 sensor
   [    1.170529] rockchip-csi2-dphy csi2-dphy2: dphy2 matches m01_f_gc05a2 2-003f:bus type 5
   [    1.171295] gc05a2 4-0037: driver version: 00.01.01
   [    1.171380] gc05a2 4-0037: Failed to get power-gpios, maybe no use
   [    1.171464] gc05a2 4-0037: Failed to get pwdn-gpios
   [    1.171523] gc05a2 4-0037: supply avdd not found, using dummy regulator
   [    1.171745] gc05a2 4-0037: supply dovdd not found, using dummy regulator
   [    1.171858] gc05a2 4-0037: supply dvdd not found, using dummy regulator
   [    1.171927] gc05a2 4-0037: lane_num(2)  pixel_rate(178612800)
   [    1.171953] gc05a2 4-0037: could not get default pinstate
   [    1.171967] gc05a2 4-0037: could not get sleep pinstate
   [    1.179859] gc05a2 reg 3f0 return 0x5
   [    1.180424] gc05a2 reg 3f1 return 0xa2
   [    1.180452] gc05a2 4-0037: detected gc05a2 sensor
   [    1.180529] rockchip-csi2-dphy csi2-dphy1: dphy1 matches m00_b_gc05a2 4-0037:bus type 5

   sensor均正常识别到,且在android11系统下,板子所有硬件都已经调通,包括双sensor,在android的相机应用中可以正常看到2个摄像头并正常切换
4. 我尝试过的解决方法和结果

   反复调整camera_host_config.hcs文件,均无法实现
5. 我想要达到的结果

   能够在相机应用上看到2个摄像头,且能正常切换

### 【运行环境】

硬件:rk3568嵌入式设备
ROM版本:
DevEvoStudio版本:未使用
SDK版本:openharmony 6.1
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5