1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License.
5094332d3Sopenharmony_ci * You may obtain a copy of the License at
6094332d3Sopenharmony_ci *
7094332d3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8094332d3Sopenharmony_ci *
9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and
13094332d3Sopenharmony_ci * limitations under the License.
14094332d3Sopenharmony_ci */
15094332d3Sopenharmony_ci
16094332d3Sopenharmony_ci#ifndef HOS_CAMERA_H
17094332d3Sopenharmony_ci#define HOS_CAMERA_H
18094332d3Sopenharmony_ci
19094332d3Sopenharmony_ci#include "securec.h"
20094332d3Sopenharmony_ci#include <cstdint>
21094332d3Sopenharmony_ci#include <cstdio>
22094332d3Sopenharmony_ci#include <functional>
23094332d3Sopenharmony_ci#include <hdf_log.h>
24094332d3Sopenharmony_ci#include <pthread.h>
25094332d3Sopenharmony_ci#include <stdint.h>
26094332d3Sopenharmony_ci#include <sys/prctl.h>
27094332d3Sopenharmony_ci#include <sys/time.h>
28094332d3Sopenharmony_ci#include <sys/types.h>
29094332d3Sopenharmony_ci#include <time.h>
30094332d3Sopenharmony_ci#include <unistd.h>
31094332d3Sopenharmony_ci#include <string>
32094332d3Sopenharmony_ci#include "camera_metadata_info.h"
33094332d3Sopenharmony_ci
34094332d3Sopenharmony_ci#ifdef HITRACE_DFX_ENABLED
35094332d3Sopenharmony_ci#include "hitrace/hitracechain.h"
36094332d3Sopenharmony_ci#define DFX_LOCAL_HITRACE_BEGIN     \
37094332d3Sopenharmony_ci    HiviewDFX::HiTraceId _trace_id; \
38094332d3Sopenharmony_ci    _trace_id = OHOS::HiviewDFX::HiTraceChain::Begin(__FUNCTION__, HITRACE_FLAG_DEFAULT)
39094332d3Sopenharmony_ci#define DFX_LOCAL_HITRACE_END OHOS::HiviewDFX::HiTraceChain::End(_trace_id)
40094332d3Sopenharmony_ci#else
41094332d3Sopenharmony_ci#define DFX_LOCAL_HITRACE_BEGIN
42094332d3Sopenharmony_ci#define DFX_LOCAL_HITRACE_END
43094332d3Sopenharmony_ci#endif // HITRACE_DFX_ENABLED
44094332d3Sopenharmony_ci
45094332d3Sopenharmony_cinamespace OHOS {
46094332d3Sopenharmony_cinamespace Camera {
47094332d3Sopenharmony_ci
48094332d3Sopenharmony_ci#ifdef HDF_LOG_TAG
49094332d3Sopenharmony_ci#undef HDF_LOG_TAG
50094332d3Sopenharmony_ci#endif
51094332d3Sopenharmony_ci
52094332d3Sopenharmony_ci#define HDF_LOG_TAG camera_hdi_service
53094332d3Sopenharmony_ci
54094332d3Sopenharmony_ci#ifdef LOG_DOMAIN
55094332d3Sopenharmony_ci#undef LOG_DOMAIN
56094332d3Sopenharmony_ci#endif
57094332d3Sopenharmony_ci#define LOG_DOMAIN 0xD002513
58094332d3Sopenharmony_ci
59094332d3Sopenharmony_ci#define FILENAME (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__)
60094332d3Sopenharmony_ci
61094332d3Sopenharmony_ci#ifndef OHOS_DEBUG
62094332d3Sopenharmony_ci#define DECORATOR_HDFLOG(op, fmt, args...)             \
63094332d3Sopenharmony_ci    do {                                               \
64094332d3Sopenharmony_ci        op("%{public}s() " fmt, __FUNCTION__, ##args); \
65094332d3Sopenharmony_ci    } while (0)
66094332d3Sopenharmony_ci#else
67094332d3Sopenharmony_ci#define DECORATOR_HDFLOG(op, fmt, args...)                                     \
68094332d3Sopenharmony_ci    do {                                                                       \
69094332d3Sopenharmony_ci        op("{%s()-%s:%d} " fmt, __FUNCTION__, FILENAME, __LINE__, ##args); \
70094332d3Sopenharmony_ci    } while (0)
71094332d3Sopenharmony_ci#endif
72094332d3Sopenharmony_ci
73094332d3Sopenharmony_ci#define CAMERA_LOGE(fmt, ...) DECORATOR_HDFLOG(HDF_LOGE, fmt, ##__VA_ARGS__)
74094332d3Sopenharmony_ci#define CAMERA_LOGW(fmt, ...) DECORATOR_HDFLOG(HDF_LOGW, fmt, ##__VA_ARGS__)
75094332d3Sopenharmony_ci#define CAMERA_LOGI(fmt, ...) DECORATOR_HDFLOG(HDF_LOGI, fmt, ##__VA_ARGS__)
76094332d3Sopenharmony_ci#define CAMERA_LOGV(fmt, ...) DECORATOR_HDFLOG(HDF_LOGV, fmt, ##__VA_ARGS__)
77094332d3Sopenharmony_ci#define CAMERA_LOGD(fmt, ...) DECORATOR_HDFLOG(HDF_LOGD, fmt, ##__VA_ARGS__)
78094332d3Sopenharmony_ci
79094332d3Sopenharmony_ciconstexpr uint32_t FRAME_SIZE_TAG_UINT32 = 100;
80094332d3Sopenharmony_ciconst std::string FRAME_SIZE_TAG_STRING = "FRAME_SIZE";
81094332d3Sopenharmony_ci
82094332d3Sopenharmony_ciusing CameraAbility = CameraMetadata;
83094332d3Sopenharmony_ciusing CameraSetting = CameraMetadata;
84094332d3Sopenharmony_ciusing MetaType = int32_t;
85094332d3Sopenharmony_ci
86094332d3Sopenharmony_ciusing RetCode = uint32_t;
87094332d3Sopenharmony_cienum Ret : uint32_t {
88094332d3Sopenharmony_ci    RC_OK = 0,
89094332d3Sopenharmony_ci    RC_ERROR,
90094332d3Sopenharmony_ci};
91094332d3Sopenharmony_ci
92094332d3Sopenharmony_cienum BufferSourceType {
93094332d3Sopenharmony_ci    CAMERA_BUFFER_SOURCE_TYPE_NONE = -1,
94094332d3Sopenharmony_ci    CAMERA_BUFFER_SOURCE_TYPE_GRALLOC,
95094332d3Sopenharmony_ci    CAMERA_BUFFER_SOURCE_TYPE_HEAP,
96094332d3Sopenharmony_ci    CAMERA_BUFFER_SOURCE_TYPE_EXTERNAL,
97094332d3Sopenharmony_ci    CAMERA_BUFFER_SOURCE_TYPE_MAX,
98094332d3Sopenharmony_ci};
99094332d3Sopenharmony_ci
100094332d3Sopenharmony_cienum CameraBufferUsage : uint64_t {
101094332d3Sopenharmony_ci    CAMERA_USAGE_SW_READ_OFTEN = (1 << 0),
102094332d3Sopenharmony_ci    CAMERA_USAGE_SW_WRITE_OFTEN = (1 << 1),
103094332d3Sopenharmony_ci    CAMERA_USAGE_MEM_DMA = (1 << 2),
104094332d3Sopenharmony_ci    CAMERA_USAGE_MEM_SHARE = (1 << 3),
105094332d3Sopenharmony_ci    CAMERA_USAGE_MEM_MMZ = (1 << 4),
106094332d3Sopenharmony_ci    CAMERA_USAGE_MEM_MMZ_CACHE = (1 << 5),
107094332d3Sopenharmony_ci    CAMERA_USAGE_MEM_FB = (1 << 6),
108094332d3Sopenharmony_ci};
109094332d3Sopenharmony_ci
110094332d3Sopenharmony_cienum CameraBufferFormat : uint32_t {
111094332d3Sopenharmony_ci    CAMERA_FORMAT_INVALID,      /* invalid format */
112094332d3Sopenharmony_ci    CAMERA_FORMAT_RGB_565,      /* RGB565 format */
113094332d3Sopenharmony_ci    CAMERA_FORMAT_RGBA_5658,    /* RGBA5658 format */
114094332d3Sopenharmony_ci    CAMERA_FORMAT_RGBX_4444,    /* RGBX4444 format */
115094332d3Sopenharmony_ci    CAMERA_FORMAT_RGBA_4444,    /* RGBA4444 format */
116094332d3Sopenharmony_ci    CAMERA_FORMAT_RGB_444,      /* RGB444 format */
117094332d3Sopenharmony_ci    CAMERA_FORMAT_RGBX_5551,    /* RGBX5551 format */
118094332d3Sopenharmony_ci    CAMERA_FORMAT_RGBA_5551,    /* RGBA5551 format */
119094332d3Sopenharmony_ci    CAMERA_FORMAT_RGB_555,      /* RGB555 format */
120094332d3Sopenharmony_ci    CAMERA_FORMAT_RGBX_8888,    /* RGBX8888 format */
121094332d3Sopenharmony_ci    CAMERA_FORMAT_RGBA_8888,    /* RGBA8888 format */
122094332d3Sopenharmony_ci    CAMERA_FORMAT_RGB_888,      /* RGB888 format */
123094332d3Sopenharmony_ci    CAMERA_FORMAT_BGR_565,      /* BGR565 format */
124094332d3Sopenharmony_ci    CAMERA_FORMAT_BGRX_4444,    /* BGRX4444 format */
125094332d3Sopenharmony_ci    CAMERA_FORMAT_BGRA_4444,    /* BGRA4444 format */
126094332d3Sopenharmony_ci    CAMERA_FORMAT_BGRX_5551,    /* BGRX5551 format */
127094332d3Sopenharmony_ci    CAMERA_FORMAT_BGRA_5551,    /* BGRA5551 format */
128094332d3Sopenharmony_ci    CAMERA_FORMAT_BGRX_8888,    /* BGRX8888 format */
129094332d3Sopenharmony_ci    CAMERA_FORMAT_BGRA_8888,    /* BGRA8888 format */
130094332d3Sopenharmony_ci    CAMERA_FORMAT_YUV_422_I,    /* YUV422 interleaved format */
131094332d3Sopenharmony_ci    CAMERA_FORMAT_YCBCR_422_SP, /* YCBCR422 semi-planar format */
132094332d3Sopenharmony_ci    CAMERA_FORMAT_YCRCB_422_SP, /* YCRCB422 semi-planar format */
133094332d3Sopenharmony_ci    CAMERA_FORMAT_YCBCR_420_SP, /* YCBCR420 semi-planar format */
134094332d3Sopenharmony_ci    CAMERA_FORMAT_YCRCB_420_SP, /* YCRCB420 semi-planar format */
135094332d3Sopenharmony_ci    CAMERA_FORMAT_YCBCR_422_P,  /* YCBCR422 planar format */
136094332d3Sopenharmony_ci    CAMERA_FORMAT_YCRCB_422_P,  /* YCRCB422 planar format */
137094332d3Sopenharmony_ci    CAMERA_FORMAT_YCBCR_420_P,  /* YCBCR420 planar format */
138094332d3Sopenharmony_ci    CAMERA_FORMAT_YCRCB_420_P,  /* YCRCB420 planar format */
139094332d3Sopenharmony_ci    CAMERA_FORMAT_YUYV_422_PKG, /* YUYV422 packed format */
140094332d3Sopenharmony_ci    CAMERA_FORMAT_UYVY_422_PKG, /* UYVY422 packed format */
141094332d3Sopenharmony_ci    CAMERA_FORMAT_YVYU_422_PKG, /* YVYU422 packed format */
142094332d3Sopenharmony_ci    CAMERA_FORMAT_VYUY_422_PKG, /* VYUY422 packed format */
143094332d3Sopenharmony_ci};
144094332d3Sopenharmony_ci
145094332d3Sopenharmony_cienum CameraEncodeType : int32_t {
146094332d3Sopenharmony_ci    CAMERA_ENCODE_NULL = 0,
147094332d3Sopenharmony_ci    CAMERA_ENCODE_H264 = 1,
148094332d3Sopenharmony_ci    CAMERA_ENCODE_H265 = 2,
149094332d3Sopenharmony_ci    CAMERA_ENCODE_JPEG = 3,
150094332d3Sopenharmony_ci};
151094332d3Sopenharmony_ci
152094332d3Sopenharmony_cienum FlashMode : uint32_t { FlASH_OFF = 0, FlASH_SINGLE, FLASH_TORCH, FLASH_AUTO };
153094332d3Sopenharmony_ci
154094332d3Sopenharmony_cienum AdapterCmd : uint32_t {
155094332d3Sopenharmony_ci    CMD_AE_EXPO,
156094332d3Sopenharmony_ci    CMD_AWB_MODE,
157094332d3Sopenharmony_ci    CMD_AWB_LOCK,
158094332d3Sopenharmony_ci    CMD_AE_EXPOTIME,
159094332d3Sopenharmony_ci    CMD_AE_LOCK,
160094332d3Sopenharmony_ci    CMD_EXPOSURE_MODE,
161094332d3Sopenharmony_ci    CMD_EXPOSURE_COMPENSATION,
162094332d3Sopenharmony_ci    CMD_EXPOSURE_STATE,
163094332d3Sopenharmony_ci    CMD_EXPOSURE_LOCK,
164094332d3Sopenharmony_ci    CMD_AWB_COLORGAINS,
165094332d3Sopenharmony_ci    CMD_FOCUS_AUTO,
166094332d3Sopenharmony_ci    CMD_FOCUS_ABSOLUTE,
167094332d3Sopenharmony_ci    CMD_AUTO_FOCUS_START,
168094332d3Sopenharmony_ci    CMD_AUTO_FOCUS_STOP,
169094332d3Sopenharmony_ci    CMD_FOCUS_REGION,
170094332d3Sopenharmony_ci    CMD_FOCUS_LOCK,
171094332d3Sopenharmony_ci    CMD_METER_MODE,
172094332d3Sopenharmony_ci    CMD_METER_POINT,
173094332d3Sopenharmony_ci    CMD_FLASH_MODE,
174094332d3Sopenharmony_ci    CMD_FPS_RANGE
175094332d3Sopenharmony_ci};
176094332d3Sopenharmony_ci
177094332d3Sopenharmony_cienum AwbMode : uint32_t {
178094332d3Sopenharmony_ci    AWB_MODE_AUTO,
179094332d3Sopenharmony_ci    AWB_MODE_CLOUDY_DAYLIGHT,
180094332d3Sopenharmony_ci    AWB_MODE_TWILIGHT,
181094332d3Sopenharmony_ci    AWB_MODE_FLUORESCENT,
182094332d3Sopenharmony_ci    AWB_MODE_WARM_FLUORESCENT,
183094332d3Sopenharmony_ci};
184094332d3Sopenharmony_ci
185094332d3Sopenharmony_ciusing EsFrameInfo = struct {
186094332d3Sopenharmony_ci    int32_t size;
187094332d3Sopenharmony_ci    int32_t align;
188094332d3Sopenharmony_ci    int32_t isKey;
189094332d3Sopenharmony_ci    int64_t timestamp;
190094332d3Sopenharmony_ci    int32_t frameNum;
191094332d3Sopenharmony_ci};
192094332d3Sopenharmony_ci
193094332d3Sopenharmony_ci#define CHECK_IF_NOT_EQUAL_RETURN_VALUE(arg1, arg2, ret)                                                            \
194094332d3Sopenharmony_ci    if ((arg1) != (arg2)) {                                                                                         \
195094332d3Sopenharmony_ci        CAMERA_LOGE("%{public}u, %{public}s is not equal to %{public}s, return %{public}s", __LINE__, #arg1, #arg2, \
196094332d3Sopenharmony_ci                    #ret);                                                                                          \
197094332d3Sopenharmony_ci        return (ret);                                                                                               \
198094332d3Sopenharmony_ci    }
199094332d3Sopenharmony_ci
200094332d3Sopenharmony_ci#define CHECK_IF_EQUAL_RETURN_VALUE(arg1, arg2, ret)                                                                   \
201094332d3Sopenharmony_ci    if ((arg1) == (arg2)) {                                                                                            \
202094332d3Sopenharmony_ci        CAMERA_LOGE("%{public}u, %{public}s is equal to %{public}s, return %{public}s", __LINE__, #arg1, #arg2, #ret); \
203094332d3Sopenharmony_ci        return (ret);                                                                                                  \
204094332d3Sopenharmony_ci    }
205094332d3Sopenharmony_ci
206094332d3Sopenharmony_ci#define CHECK_IF_PTR_NULL_RETURN_VALUE(ptr, ret) CHECK_IF_EQUAL_RETURN_VALUE(ptr, nullptr, ret)
207094332d3Sopenharmony_ci
208094332d3Sopenharmony_ci#define CHECK_IF_NOT_EQUAL_RETURN_VOID(arg1, arg2)                                                        \
209094332d3Sopenharmony_ci    if ((arg1) != (arg2)) {                                                                               \
210094332d3Sopenharmony_ci        CAMERA_LOGE("%{public}u, %{public}s is not equal to %{public}s, return", __LINE__, #arg1, #arg2); \
211094332d3Sopenharmony_ci        return;                                                                                           \
212094332d3Sopenharmony_ci    }
213094332d3Sopenharmony_ci
214094332d3Sopenharmony_ci#define CHECK_IF_EQUAL_RETURN_VOID(arg1, arg2)                                                        \
215094332d3Sopenharmony_ci    if ((arg1) == (arg2)) {                                                                           \
216094332d3Sopenharmony_ci        CAMERA_LOGE("%{public}u, %{public}s is equal to %{public}s, return", __LINE__, #arg1, #arg2); \
217094332d3Sopenharmony_ci        return;                                                                                       \
218094332d3Sopenharmony_ci    }
219094332d3Sopenharmony_ci
220094332d3Sopenharmony_ci#define CHECK_IF_PTR_NULL_RETURN_VOID(ptr) CHECK_IF_EQUAL_RETURN_VOID(ptr, nullptr)
221094332d3Sopenharmony_ci} // namespace Camera
222094332d3Sopenharmony_ci} // namespace OHOS
223094332d3Sopenharmony_ci#endif
224