xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/uAPI/rk_aiq_api_private.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 
2 #ifndef _RK_AIQ_API_PRIVATE
3 #define _RK_AIQ_API_PRIVATE
4 
5 #include "xcore/smartptr.h"
6 #include "rk_aiq_user_api_sysctl.h"
7 #include "RkAiqManager.h"
8 #include "socket_server.h"
9 #include "RkAiqCalibDbV2.h"
10 #include "scene/scene_manager.h"
11 #include "ICamHw.h"
12 #include "RkAiqCamGroupManager.h"
13 #include "common/panorama_stitchingApp.h"
14 
15 using namespace RkCam;
16 using namespace XCam;
17 
18 extern "C" {
19 
20 typedef enum {
21     CTX_TYPE_USER_MAIN      = 0,
22     CTX_TYPE_TOOL_SERVER    = 1,
23     CTX_TYPE_NULL           = -255,
24 } rk_aiq_ctx_type_e;
25 
26 typedef struct rk_aiq_sys_ctx_s {
27     rk_aiq_cam_type_t cam_type;
28     const char* _sensor_entity_name;
29     SmartPtr<RkAiqManager> _rkAiqManager;
30     SmartPtr<ICamHw> _camHw;
31     SmartPtr<RkAiqCore> _analyzer;
32 #ifdef ISP_HW_V20
33     SmartPtr<RkLumaCore> _lumaAnalyzer;
34 #endif
35 #ifdef RKAIQ_ENABLE_PARSER_V1
36     CamCalibDbContext_t *_calibDb;
37 #endif
38     int _isp_hw_ver;
39     bool _is_1608_sensor;  /*< for sensor sync mode verify. */
40 
41     SocketServer *  _socket;
42     SmartPtr<Mutex> _apiMutex;
43     CamCalibDbProj_t* _calibDbProj;
44 
45     rk_aiq_ctx_type_e ctx_type;
46     rk_aiq_sys_ctx_t* next_ctx;
47 #ifdef RKAIQ_ENABLE_CAMGROUP
48     RkAiqCamGroupManager* _camGroupManager;
49 #endif
50     int _camPhyId;
51     struct RkAiqHwInfo _hw_info;
52     int _use_fakecam;
53     rk_aiq_raw_prop_t _raw_prop;
54     FILE* _lock_file;
55 } rk_aiq_sys_ctx_t;
56 
57 /**
58  * gcc-4.4.7 disallow typedef redefinition
59  * error: redefinition of typedef 'RKAiqAecExpInfo_t' with include/uAPI2/rk_aiq_user_api2_xxxx.h
60  */
61 #ifndef RK_AIQ_SYS_CTX_T
62 #define RK_AIQ_SYS_CTX_T
63 typedef struct rk_aiq_sys_ctx_s rk_aiq_sys_ctx_t;
64 #endif
65 
66 typedef struct rk_aiq_camgroup_ctx_s {
67 #ifdef RKAIQ_ENABLE_CAMGROUP
68     rk_aiq_cam_type_t cam_type;
69     rk_aiq_sys_ctx_t* cam_ctxs_array[RK_AIQ_CAM_GROUP_MAX_CAMS];
70     int sns_ids_array[RK_AIQ_CAM_GROUP_MAX_CAMS];
71     int cam_ctxs_num;
72     int cam_1608_num;
73     SmartPtr<RkAiqCamGroupManager> cam_group_manager;
74     SmartPtr<Mutex> _apiMutex;
75     CamCalibDbCamgroup_t* _camgroup_calib;
76     RK_PS_SrcOverlapMap* _srcOverlapMap_s;
77 #else
78     void* place_holder;
79 #endif
80 } rk_aiq_camgroup_ctx_t;
81 
82 
83 rk_aiq_sys_ctx_t* get_next_ctx(const rk_aiq_sys_ctx_t* ctx);
84 rk_aiq_camgroup_ctx_t* get_binded_group_ctx(const rk_aiq_sys_ctx_t* ctx);
85 
86 bool is_ctx_need_bypass(const rk_aiq_sys_ctx_t* ctx);
87 void rk_aiq_ctx_set_tool_mode(const rk_aiq_sys_ctx_t* ctx, bool status);
88 
89 #define CHECK_USER_API_ENABLE2(ctx) \
90     if (is_ctx_need_bypass(ctx)) { return XCAM_RETURN_NO_ERROR; }
91 
92 #define RKAIQ_NO_API_LOCK
93 #ifndef RKAIQ_NO_API_LOCK
94 #ifdef RKAIQ_ENABLE_CAMGROUP
95 #define RKAIQ_API_SMART_LOCK(ctx) \
96     const rk_aiq_camgroup_ctx_t* lock_group_ctx = NULL; \
97     if (ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) \
98         lock_group_ctx = (const rk_aiq_camgroup_ctx_t*)ctx; \
99     SmartLock lock (lock_group_ctx ? *lock_group_ctx->_apiMutex.ptr() : *ctx->_apiMutex.ptr());
100 #else
101 #define RKAIQ_API_SMART_LOCK(ctx) \
102     SmartLock lock (*ctx->_apiMutex.ptr());
103 #endif
104 #else
105 #define RKAIQ_API_SMART_LOCK(ctx)
106 #endif
107 
108 }
109 
110 #endif
111