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