1ba487d97Sopenharmony_ci/* 2ba487d97Sopenharmony_ci * Copyright (c) 2020 Huawei Device Co., Ltd. 3ba487d97Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4ba487d97Sopenharmony_ci * you may not use this file except in compliance with the License. 5ba487d97Sopenharmony_ci * You may obtain a copy of the License at 6ba487d97Sopenharmony_ci * 7ba487d97Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8ba487d97Sopenharmony_ci * 9ba487d97Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10ba487d97Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11ba487d97Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12ba487d97Sopenharmony_ci * See the License for the specific language governing permissions and 13ba487d97Sopenharmony_ci * limitations under the License. 14ba487d97Sopenharmony_ci */ 15ba487d97Sopenharmony_ci 16ba487d97Sopenharmony_ci#ifndef HI_CAMERA_H 17ba487d97Sopenharmony_ci#define HI_CAMERA_H 18ba487d97Sopenharmony_ci#include <stdint.h> 19ba487d97Sopenharmony_ci 20ba487d97Sopenharmony_ci#ifdef __cplusplus 21ba487d97Sopenharmony_ci#if __cplusplus 22ba487d97Sopenharmony_ciextern "C" { 23ba487d97Sopenharmony_ci#endif 24ba487d97Sopenharmony_ci#endif /* End of #ifdef __cplusplus */ 25ba487d97Sopenharmony_ci 26ba487d97Sopenharmony_ci 27ba487d97Sopenharmony_ci#define CAMERA_FPS_MAX_NUM 16 28ba487d97Sopenharmony_ci#define CAMERA_DESC_MAX_LEN 32 29ba487d97Sopenharmony_ci#define INFO_MAX_LEN 1024 30ba487d97Sopenharmony_ci#define DESC_MAX_LEN 64 31ba487d97Sopenharmony_ci#define AUTO_MODE_MAX_NUM 16 32ba487d97Sopenharmony_ci#define PRIVATE_META_MAX_LEN 32 33ba487d97Sopenharmony_ci 34ba487d97Sopenharmony_citypedef struct { 35ba487d97Sopenharmony_ci int32_t x; 36ba487d97Sopenharmony_ci int32_t y; 37ba487d97Sopenharmony_ci int32_t w; 38ba487d97Sopenharmony_ci int32_t h; 39ba487d97Sopenharmony_ci} RectInfo; 40ba487d97Sopenharmony_ci 41ba487d97Sopenharmony_citypedef enum { 42ba487d97Sopenharmony_ci STREAM_INFO_ATTR = 0, 43ba487d97Sopenharmony_ci STREAM_INFO_POS, 44ba487d97Sopenharmony_ci STERAM_INFO_PRIVATE, 45ba487d97Sopenharmony_ci STREAM_INFO_BUTT, 46ba487d97Sopenharmony_ci} StreamInfoType; 47ba487d97Sopenharmony_ci 48ba487d97Sopenharmony_citypedef enum { 49ba487d97Sopenharmony_ci CAMERA_CONTROL_3A_MODE = 0, 50ba487d97Sopenharmony_ci CAMERA_CONTROL_PRIVATE, 51ba487d97Sopenharmony_ci CAMERA_CONTROL_BUTT, 52ba487d97Sopenharmony_ci} DeviceType; 53ba487d97Sopenharmony_ci 54ba487d97Sopenharmony_citypedef enum { 55ba487d97Sopenharmony_ci FORMAT_YVU420 = 0, 56ba487d97Sopenharmony_ci FORMAT_JPEG, 57ba487d97Sopenharmony_ci FORMAT_AVC, 58ba487d97Sopenharmony_ci FORMAT_HEVC, 59ba487d97Sopenharmony_ci FORMAT_RGB_BAYER_12BPP, 60ba487d97Sopenharmony_ci FORMAT_PRIVATE, 61ba487d97Sopenharmony_ci FORMAT_IMAGE_BUTT 62ba487d97Sopenharmony_ci} ImageFormat; 63ba487d97Sopenharmony_ci 64ba487d97Sopenharmony_citypedef enum { 65ba487d97Sopenharmony_ci STREAM_PREVIEW = 0, 66ba487d97Sopenharmony_ci STREAM_VIDEO, 67ba487d97Sopenharmony_ci STREAM_CAPTURE, 68ba487d97Sopenharmony_ci STREAM_CALLBACK, 69ba487d97Sopenharmony_ci STREAM_TYPE_BUTT 70ba487d97Sopenharmony_ci} StreamType; 71ba487d97Sopenharmony_ci 72ba487d97Sopenharmony_citypedef struct { 73ba487d97Sopenharmony_ci StreamType type; 74ba487d97Sopenharmony_ci ImageFormat format; 75ba487d97Sopenharmony_ci int32_t width; 76ba487d97Sopenharmony_ci int32_t height; 77ba487d97Sopenharmony_ci uint16_t fps; 78ba487d97Sopenharmony_ci RectInfo crop; 79ba487d97Sopenharmony_ci uint8_t invertMode; 80ba487d97Sopenharmony_ci} StreamAttr; 81ba487d97Sopenharmony_ci 82ba487d97Sopenharmony_citypedef enum { 83ba487d97Sopenharmony_ci CAP_DESC_RANGE, 84ba487d97Sopenharmony_ci CAP_DESC_ENUM, 85ba487d97Sopenharmony_ci CAP_DESC_MAX, 86ba487d97Sopenharmony_ci} CapDescType; 87ba487d97Sopenharmony_ci 88ba487d97Sopenharmony_citypedef struct { 89ba487d97Sopenharmony_ci ImageFormat format; /**< the format of memory */ 90ba487d97Sopenharmony_ci int32_t width; /**< the width of memory */ 91ba487d97Sopenharmony_ci int32_t height; /**< the heigh of memory */ 92ba487d97Sopenharmony_ci int32_t stride0; /**< the stride of memory */ 93ba487d97Sopenharmony_ci int32_t stride1; 94ba487d97Sopenharmony_ci int32_t size; /* < size of memory */ 95ba487d97Sopenharmony_ci int32_t fd; /**< buffer fd, -1 if not supported */ 96ba487d97Sopenharmony_ci uint32_t flag; /**< flag */ 97ba487d97Sopenharmony_ci int64_t usage; /**< the usage of memory */ 98ba487d97Sopenharmony_ci uint64_t phyAddr; /**< Physical address */ 99ba487d97Sopenharmony_ci uint64_t pts; /**< pts */ 100ba487d97Sopenharmony_ci uint64_t timeStamp; 101ba487d97Sopenharmony_ci void *virAddr; /**< Virtual address of memory */ 102ba487d97Sopenharmony_ci} HalBuffer; 103ba487d97Sopenharmony_ci 104ba487d97Sopenharmony_citypedef struct { 105ba487d97Sopenharmony_ci int32_t maxWidth; 106ba487d97Sopenharmony_ci int32_t minWidth; 107ba487d97Sopenharmony_ci int32_t maxHeight; 108ba487d97Sopenharmony_ci int32_t minHeight; 109ba487d97Sopenharmony_ci int32_t maxFps; 110ba487d97Sopenharmony_ci int32_t minFps; 111ba487d97Sopenharmony_ci} FormatRange; 112ba487d97Sopenharmony_ci 113ba487d97Sopenharmony_citypedef struct Format { 114ba487d97Sopenharmony_ci int32_t width; 115ba487d97Sopenharmony_ci int32_t height; 116ba487d97Sopenharmony_ci uint8_t frame_rate_num; 117ba487d97Sopenharmony_ci uint8_t frame_rate[CAMERA_FPS_MAX_NUM]; 118ba487d97Sopenharmony_ci} FormatEnum; 119ba487d97Sopenharmony_ci 120ba487d97Sopenharmony_citypedef struct { 121ba487d97Sopenharmony_ci CapDescType type; 122ba487d97Sopenharmony_ci char description[CAMERA_DESC_MAX_LEN]; /* like YUYV 4:2:2 (YUYV) */ 123ba487d97Sopenharmony_ci ImageFormat format; // 只支持YUV 124ba487d97Sopenharmony_ci union { 125ba487d97Sopenharmony_ci FormatRange range; 126ba487d97Sopenharmony_ci FormatEnum formatEnum; 127ba487d97Sopenharmony_ci } u; 128ba487d97Sopenharmony_ci} StreamCap; 129ba487d97Sopenharmony_ci 130ba487d97Sopenharmony_citypedef enum status { 131ba487d97Sopenharmony_ci CAMERA_STATUS_NOT_PRESENT, 132ba487d97Sopenharmony_ci CAMERA_STATUS_PRESENT, 133ba487d97Sopenharmony_ci CAMERA_STATUS_BUTT, 134ba487d97Sopenharmony_ci} CameraStatus; 135ba487d97Sopenharmony_ci 136ba487d97Sopenharmony_citypedef void (*BufferAvailable)(uint32_t streamId, HalBuffer *halBuffer, uint32_t bufferNum); 137ba487d97Sopenharmony_citypedef void (*CameraDetectCb)(uint32_t cameraId, CameraStatus status); 138ba487d97Sopenharmony_ci 139ba487d97Sopenharmony_citypedef struct { 140ba487d97Sopenharmony_ci DeviceType type; 141ba487d97Sopenharmony_ci union { 142ba487d97Sopenharmony_ci uint8_t data[INFO_MAX_LEN]; 143ba487d97Sopenharmony_ci } u; 144ba487d97Sopenharmony_ci} DeviceInfo; 145ba487d97Sopenharmony_ci 146ba487d97Sopenharmony_citypedef struct { 147ba487d97Sopenharmony_ci int32_t x; 148ba487d97Sopenharmony_ci int32_t y; 149ba487d97Sopenharmony_ci} PosInfo; 150ba487d97Sopenharmony_ci 151ba487d97Sopenharmony_citypedef struct { 152ba487d97Sopenharmony_ci StreamInfoType type; 153ba487d97Sopenharmony_ci union { 154ba487d97Sopenharmony_ci uint8_t data[INFO_MAX_LEN]; 155ba487d97Sopenharmony_ci StreamAttr attr; 156ba487d97Sopenharmony_ci PosInfo pos; 157ba487d97Sopenharmony_ci } u; 158ba487d97Sopenharmony_ci} StreamInfo; 159ba487d97Sopenharmony_ci 160ba487d97Sopenharmony_citypedef enum { 161ba487d97Sopenharmony_ci ORIENTATION_FRONT, 162ba487d97Sopenharmony_ci ORIENTATION_REAR, 163ba487d97Sopenharmony_ci ORIENTATION_OTHER, 164ba487d97Sopenharmony_ci ORIENTATION_BUTT, 165ba487d97Sopenharmony_ci} CameraOrientation; 166ba487d97Sopenharmony_ci 167ba487d97Sopenharmony_citypedef enum { 168ba487d97Sopenharmony_ci AE_MODE_ON, 169ba487d97Sopenharmony_ci AE_MODE_OFF, 170ba487d97Sopenharmony_ci AE_BUTT, 171ba487d97Sopenharmony_ci} CameraAEMode; 172ba487d97Sopenharmony_ci 173ba487d97Sopenharmony_citypedef enum { 174ba487d97Sopenharmony_ci AF_MODE_AUTO, 175ba487d97Sopenharmony_ci AF_MODE_OFF, 176ba487d97Sopenharmony_ci AF_BUTT, 177ba487d97Sopenharmony_ci} CameraAFMode; 178ba487d97Sopenharmony_ci 179ba487d97Sopenharmony_citypedef enum { 180ba487d97Sopenharmony_ci AWB_MODE_AUTO, 181ba487d97Sopenharmony_ci AWB_MODE_OFF, 182ba487d97Sopenharmony_ci AWB_BUTT, 183ba487d97Sopenharmony_ci} CameraAWBMode; 184ba487d97Sopenharmony_ci 185ba487d97Sopenharmony_citypedef enum { 186ba487d97Sopenharmony_ci CAM_TYPE_WIDE_ANGLE, 187ba487d97Sopenharmony_ci CAM_TYPE_FISH_EYE, 188ba487d97Sopenharmony_ci CAM_TYPE_TRUE_DEAPTH, 189ba487d97Sopenharmony_ci CAM_TYPE_BUTT, 190ba487d97Sopenharmony_ci} CameraType; 191ba487d97Sopenharmony_ci 192ba487d97Sopenharmony_citypedef struct { 193ba487d97Sopenharmony_ci CameraOrientation orientation; 194ba487d97Sopenharmony_ci uint8_t aeModeNum; 195ba487d97Sopenharmony_ci uint8_t afModeNum; 196ba487d97Sopenharmony_ci uint8_t awbModeNum; 197ba487d97Sopenharmony_ci CameraAEMode aeModes[AUTO_MODE_MAX_NUM]; 198ba487d97Sopenharmony_ci CameraAFMode afModes[AUTO_MODE_MAX_NUM]; 199ba487d97Sopenharmony_ci CameraAWBMode awbModes[AUTO_MODE_MAX_NUM]; 200ba487d97Sopenharmony_ci CameraType type; 201ba487d97Sopenharmony_ci char cameraDesc[DESC_MAX_LEN]; 202ba487d97Sopenharmony_ci} AbilityInfo; 203ba487d97Sopenharmony_ci 204ba487d97Sopenharmony_citypedef struct { 205ba487d97Sopenharmony_ci CameraAEMode aeMode; 206ba487d97Sopenharmony_ci CameraAFMode afMode; 207ba487d97Sopenharmony_ci CameraAWBMode awbMode; 208ba487d97Sopenharmony_ci uint32_t privateData[PRIVATE_META_MAX_LEN]; 209ba487d97Sopenharmony_ci} CameraMetaResult; 210ba487d97Sopenharmony_ci 211ba487d97Sopenharmony_citypedef void (*CameraResultCb)(uint32_t cameraId, CameraMetaResult result); 212ba487d97Sopenharmony_ci 213ba487d97Sopenharmony_ciint32_t HalCameraInit(void); 214ba487d97Sopenharmony_ciint32_t HalCameraDeinit(void); 215ba487d97Sopenharmony_ciint32_t HalCameraGetModeNum(uint8_t *num); 216ba487d97Sopenharmony_ciint32_t HalCameraSetMode(uint8_t index); 217ba487d97Sopenharmony_ciint32_t HalCameraSetDeviceDetectCb(const CameraDetectCb cb); 218ba487d97Sopenharmony_ciint32_t HalCameraGetDeviceNum(uint8_t *num); 219ba487d97Sopenharmony_ciint32_t HalCameraGetDeviceList(uint32_t *cameraList, uint8_t listNum); 220ba487d97Sopenharmony_ciint32_t HalCameraGetStreamCapNum(uint32_t cameraId, uint32_t *num); 221ba487d97Sopenharmony_ciint32_t HalCameraGetStreamCap(uint32_t cameraId, StreamCap *streamCap, uint32_t streamNum); 222ba487d97Sopenharmony_ciint32_t HalCameraDeviceOpen(uint32_t cameraId); 223ba487d97Sopenharmony_ciint32_t HalCameraDeviceClose(uint32_t cameraId); 224ba487d97Sopenharmony_ciint32_t HalCameraStreamCreate(uint32_t cameraId, const StreamAttr *stream, uint32_t *streamId); 225ba487d97Sopenharmony_ciint32_t HalCameraStreamDestroy(uint32_t cameraId, uint32_t streamId); 226ba487d97Sopenharmony_ciint32_t HalCameraGetDeviceId(uint32_t cameraId, uint32_t streamId, uint32_t *deviceId); 227ba487d97Sopenharmony_ciint32_t HalCameraStreamOn(uint32_t cameraId, uint32_t streamId); 228ba487d97Sopenharmony_ciint32_t HalCameraStreamOff(uint32_t cameraId, uint32_t streamId); 229ba487d97Sopenharmony_ciint32_t HalCameraDequeueBuf(uint32_t cameraId, uint32_t streamId, HalBuffer *buffer); 230ba487d97Sopenharmony_ciint32_t HalCameraQueueBuf(uint32_t cameraId, uint32_t streamId, const HalBuffer *buffer); 231ba487d97Sopenharmony_ciint32_t HalCameraSetBufferCallback(uint32_t cameraId, const BufferAvailable callback); 232ba487d97Sopenharmony_ciint32_t HalCameraStreamSetInfo(uint32_t cameraId, uint32_t streamId, const StreamInfo *info); 233ba487d97Sopenharmony_ciint32_t HalCameraStreamGetInfo(uint32_t cameraId, uint32_t streamId, StreamInfo *info); 234ba487d97Sopenharmony_ciint32_t HalCameraDeviceSetInfo(uint32_t cameraId, const DeviceInfo *info); 235ba487d97Sopenharmony_ciint32_t HalCameraDeviceGetInfo(uint32_t cameraId, DeviceInfo *info); 236ba487d97Sopenharmony_ciint32_t HalCameraGetAbility(uint32_t cameraId, AbilityInfo *ability); 237ba487d97Sopenharmony_ciint32_t HalCameraSetResultCb(uint32_t cameraId, CameraResultCb cb); 238ba487d97Sopenharmony_ci 239ba487d97Sopenharmony_ci#ifdef __cplusplus 240ba487d97Sopenharmony_ci#if __cplusplus 241ba487d97Sopenharmony_ci} 242ba487d97Sopenharmony_ci#endif 243ba487d97Sopenharmony_ci#endif /* End of #ifdef __cplusplus */ 244ba487d97Sopenharmony_ci 245ba487d97Sopenharmony_ci#endif 246