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