1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * 4 * HDF is dual licensed: you can use it either under the terms of 5 * the GPL, or the BSD license, at your option. 6 * See the LICENSE file in the root of this repository for complete details. 7 */ 8 9 #ifndef CAMERA_CONFIG_PARSER_H 10 #define CAMERA_CONFIG_PARSER_H 11 12 #include <utils/device_resource_if.h> 13 #include <utils/hdf_base.h> 14 15 #define BUFFER_TYPE_MAX_NUM 3 16 #define FORMAT_TYPE_MAX_NUM 23 17 #define CAMERA_MAX_NUM 16 18 #define CAMERA_DEVICE_MAX_NUM 4 19 #define CTRL_INFO_COUNT 5 20 #define CTRL_ID_INDEX 0 21 #define CTRL_MAX_INDEX 1 22 #define CTRL_MIN_INDEX 2 23 #define CTRL_STEP_INDEX 3 24 #define CTRL_DEF_INDEX 4 25 #define CTRL_MAX_NUM 21 26 #define CTRL_VALUE_MAX_NUM CTRL_MAX_NUM * CTRL_INFO_COUNT 27 #define DEVICE_SUPPORT 1 28 #define DEVICE_NOT_SUPPORT 0 29 30 struct CtrlCapInfo { 31 uint32_t ctrlId; 32 uint32_t max; 33 uint32_t min; 34 uint32_t step; 35 uint32_t def; 36 }; 37 38 struct SensorDeviceConfig { 39 const char *name; 40 uint8_t id; 41 uint8_t exposure; 42 uint8_t mirror; 43 uint8_t gain; 44 uint32_t ctrlValueNum; 45 uint32_t ctrlValue[CTRL_VALUE_MAX_NUM]; 46 struct CtrlCapInfo ctrlCap[CTRL_MAX_NUM]; 47 }; 48 49 struct IspDeviceConfig { 50 const char *name; 51 uint8_t id; 52 uint8_t brightness; 53 uint8_t contrast; 54 uint8_t saturation; 55 uint8_t hue; 56 uint8_t sharpness; 57 uint8_t gain; 58 uint8_t gamma; 59 uint8_t whiteBalance; 60 uint32_t ctrlValueNum; 61 uint32_t ctrlValue[CTRL_VALUE_MAX_NUM]; 62 struct CtrlCapInfo ctrlCap[CTRL_MAX_NUM]; 63 }; 64 65 struct LensDeviceConfig { 66 const char *name; 67 uint8_t id; 68 uint8_t aperture; 69 uint32_t ctrlValueNum; 70 uint32_t ctrlValue[CTRL_VALUE_MAX_NUM]; 71 struct CtrlCapInfo ctrlCap[CTRL_MAX_NUM]; 72 }; 73 74 struct VcmDeviceConfig { 75 const char *name; 76 uint8_t id; 77 uint8_t focus; 78 uint8_t autoFocus; 79 uint8_t zoom; 80 uint32_t zoomMaxNum; 81 uint32_t ctrlValueNum; 82 uint32_t ctrlValue[CTRL_VALUE_MAX_NUM]; 83 struct CtrlCapInfo ctrlCap[CTRL_MAX_NUM]; 84 }; 85 86 struct FlashDeviceConfig { 87 const char *name; 88 uint8_t id; 89 uint8_t flashMode; 90 uint8_t flashIntensity; 91 uint32_t ctrlValueNum; 92 uint32_t ctrlValue[CTRL_VALUE_MAX_NUM]; 93 struct CtrlCapInfo ctrlCap[CTRL_MAX_NUM]; 94 }; 95 96 struct StreamDeviceConfig { 97 const char *name; 98 uint8_t id; 99 uint32_t heightMaxNum; 100 uint32_t widthMaxNum; 101 uint32_t frameRateMaxNum; 102 uint8_t bufferCount; 103 uint32_t bufferTypeNum; 104 uint32_t bufferType[BUFFER_TYPE_MAX_NUM]; 105 uint32_t formatTypeNum; 106 uint32_t formatType[FORMAT_TYPE_MAX_NUM]; 107 }; 108 109 struct CameraSensorConfig { 110 uint8_t mode; 111 uint16_t sensorNum; 112 struct SensorDeviceConfig sensor[CAMERA_DEVICE_MAX_NUM]; 113 }; 114 115 struct CameraIspConfig { 116 uint8_t mode; 117 uint16_t ispNum; 118 struct IspDeviceConfig isp[CAMERA_DEVICE_MAX_NUM]; 119 }; 120 121 struct CameraLensConfig { 122 uint8_t mode; 123 uint16_t lensNum; 124 struct LensDeviceConfig lens[CAMERA_DEVICE_MAX_NUM]; 125 }; 126 127 struct CameraVcmConfig { 128 uint8_t mode; 129 uint16_t vcmNum; 130 struct VcmDeviceConfig vcm[CAMERA_DEVICE_MAX_NUM]; 131 }; 132 133 struct CameraFlashConfig { 134 uint8_t mode; 135 uint16_t flashNum; 136 struct FlashDeviceConfig flash[CAMERA_DEVICE_MAX_NUM]; 137 }; 138 139 struct CameraStreamConfig { 140 uint8_t mode; 141 uint16_t streamNum; 142 struct StreamDeviceConfig stream[CAMERA_DEVICE_MAX_NUM]; 143 }; 144 145 struct CameraDeviceConfig { 146 const char *deviceName; 147 struct CameraSensorConfig sensor; 148 struct CameraIspConfig isp; 149 struct CameraLensConfig lens; 150 struct CameraVcmConfig vcm; 151 struct CameraFlashConfig flash; 152 struct CameraStreamConfig stream; 153 }; 154 155 struct CameraConfigRoot { 156 uint8_t uvcMode; 157 uint16_t deviceNum; 158 struct CameraDeviceConfig deviceConfig[CAMERA_MAX_NUM]; 159 }; 160 161 struct CameraConfigRoot *HdfCameraGetConfigRoot(void); 162 int32_t HdfParseCameraConfig(const struct DeviceResourceNode *node); 163 164 #endif // CAMERA_CONFIG_PARSER_H 165