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