xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/aiq_core/algo_handlers/RkAiqAwbHandle.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * Copyright (c) 2019-2022 Rockchip Eletronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #ifndef _RK_AIQ_AWB_HANDLE_INT_H_
17 #define _RK_AIQ_AWB_HANDLE_INT_H_
18 
19 #include "RkAiqHandle.h"
20 #include "awb/rk_aiq_uapi_awb_int.h"
21 #include "rk_aiq_api_private.h"
22 #include "rk_aiq_pool.h"
23 #include "xcam_mutex.h"
24 
25 namespace RkCam {
26 
27 class RkAiqAwbHandleInt : public RkAiqHandle {
28     friend class RkAiqAwbV21HandleInt;
29     friend class RkAiqCustomAwbHandle;
30  public:
RkAiqAwbHandleInt(RkAiqAlgoDesComm * des,RkAiqCore * aiqCore)31     explicit RkAiqAwbHandleInt(RkAiqAlgoDesComm* des, RkAiqCore* aiqCore)
32         : RkAiqHandle(des, aiqCore), mProcResShared(nullptr) {
33 #ifndef DISABLE_HANDLE_ATTRIB
34         memset(&mCurAtt, 0, sizeof(rk_aiq_wb_attrib_t));
35         memset(&mNewAtt, 0, sizeof(rk_aiq_wb_attrib_t));
36 #ifdef RKAIQ_HAVE_AWB_V20
37         memset(&mCurWbV20Attr, 0, sizeof(mCurWbV20Attr));
38         memset(&mNewWbV20Attr, 0, sizeof(mNewWbV20Attr));
39 #endif
40 #if defined(RKAIQ_HAVE_AWB_V20) || defined(RKAIQ_HAVE_AWB_V21)
41         memset(&mCurWbAwbAttr, 0, sizeof(mCurWbAwbAttr));
42         memset(&mNewWbAwbAttr, 0, sizeof(mNewWbAwbAttr));
43 #endif
44         memset(&mCurWbOpModeAttr, 0, sizeof(mCurWbOpModeAttr));
45         mCurWbOpModeAttr.mode = RK_AIQ_WB_MODE_MAX;
46         memset(&mCurWbAwbWbGainAdjustAttr, 0, sizeof(mCurWbAwbWbGainAdjustAttr));
47         memset(&mCurWbAwbWbGainOffsetAttr, 0, sizeof(mCurWbAwbWbGainOffsetAttr));
48         memset(&mCurWbAwbMultiWindowAttr, 0, sizeof(mCurWbAwbMultiWindowAttr));
49         memset(&mNewWbOpModeAttr, 0, sizeof(mNewWbOpModeAttr));
50         mNewWbOpModeAttr.mode = RK_AIQ_WB_MODE_MAX;
51         memset(&mCurWbMwbAttr, 0, sizeof(mCurWbMwbAttr));
52         memset(&mNewWbMwbAttr, 0, sizeof(mNewWbMwbAttr));
53         memset(&mNewWbAwbWbGainAdjustAttr, 0, sizeof(mNewWbAwbWbGainAdjustAttr));
54         memset(&mNewWbAwbWbGainOffsetAttr, 0, sizeof(mNewWbAwbWbGainOffsetAttr));
55         memset(&mNewWbAwbMultiWindowAttr, 0, sizeof(mNewWbAwbMultiWindowAttr));
56         memset(&mCurFFWbgainAttr, 0, sizeof(mCurFFWbgainAttr));
57         memset(&mNewFFWbgainAttr, 0, sizeof(mNewFFWbgainAttr));
58         updateWbV20Attr             = false;
59         updateWbOpModeAttr          = false;
60         updateWbMwbAttr             = false;
61         updateWbAwbAttr             = false;
62         updateWbAwbWbGainAdjustAttr = false;
63         updateWbAwbWbGainOffsetAttr = false;
64         updateWbAwbMultiWindowAttr  = false;
65         updateFFWbgainAttr = false;
66 #endif
67     };
~RkAiqAwbHandleInt()68     virtual ~RkAiqAwbHandleInt() {
69 #ifndef DISABLE_HANDLE_ATTRIB
70             freeWbGainAdjustAttrib(&mNewWbAwbWbGainAdjustAttr);
71             freeWbGainAdjustAttrib(&mCurWbAwbWbGainAdjustAttr);
72 #ifdef RKAIQ_HAVE_AWB_V20
73             freeWbGainAdjustAttrib(&mCurWbV20Attr.stAuto.wbGainAdjust);
74             freeWbGainAdjustAttrib(&mNewWbV20Attr.stAuto.wbGainAdjust);
75 #endif
76 #if defined(RKAIQ_HAVE_AWB_V20) || defined(RKAIQ_HAVE_AWB_V21)
77             freeWbGainAdjustAttrib(&mCurWbAwbAttr.wbGainAdjust);
78             freeWbGainAdjustAttrib(&mNewWbAwbAttr.wbGainAdjust);
79 #endif
80 #endif
81             RkAiqHandle::deInit();
82         };
83     virtual XCamReturn updateConfig(bool needSync);
84     virtual XCamReturn prepare();
85     virtual XCamReturn preProcess();
86     virtual XCamReturn processing();
87     virtual XCamReturn postProcess();
88     virtual XCamReturn genIspResult(RkAiqFullParams* params, RkAiqFullParams* cur_params);
89     // TODO add algo specific methords, this is a sample
90     XCamReturn setAttrib(rk_aiq_wb_attrib_t att);
91     XCamReturn getAttrib(rk_aiq_wb_attrib_t* att);
92     XCamReturn getCct(rk_aiq_wb_cct_t* cct);
93     XCamReturn queryWBInfo(rk_aiq_wb_querry_info_t* wb_querry_info);
94     XCamReturn lock();
95     XCamReturn unlock();
96     XCamReturn setWbV20Attrib(rk_aiq_uapiV2_wbV20_attrib_t att);
97     XCamReturn getWbV20Attrib(rk_aiq_uapiV2_wbV20_attrib_t* att);
98     XCamReturn setWbOpModeAttrib(rk_aiq_uapiV2_wb_opMode_t att);
99     XCamReturn getWbOpModeAttrib(rk_aiq_uapiV2_wb_opMode_t* att);
100     XCamReturn setMwbAttrib(rk_aiq_wb_mwb_attrib_t att);
101     XCamReturn getMwbAttrib(rk_aiq_wb_mwb_attrib_t* att);
102     XCamReturn setAwbV20Attrib(rk_aiq_uapiV2_wbV20_awb_attrib_t att);
103     XCamReturn getAwbV20Attrib(rk_aiq_uapiV2_wbV20_awb_attrib_t* att);
104     XCamReturn setWbAwbWbGainAdjustAttrib(rk_aiq_uapiV2_wb_awb_wbGainAdjust_t att);
105     XCamReturn getWbAwbWbGainAdjustAttrib(rk_aiq_uapiV2_wb_awb_wbGainAdjust_t* att);
106     XCamReturn setWbAwbWbGainOffsetAttrib(rk_aiq_uapiV2_wb_awb_wbGainOffset_t att);
107     XCamReturn getWbAwbWbGainOffsetAttrib(rk_aiq_uapiV2_wb_awb_wbGainOffset_t* att);
108     XCamReturn setWbAwbMultiWindowAttrib(rk_aiq_uapiV2_wb_awb_mulWindow_t att);
109     XCamReturn getWbAwbMultiWindowAttrib(rk_aiq_uapiV2_wb_awb_mulWindow_t* att);
110     XCamReturn setFFWbgainAttrib(rk_aiq_uapiV2_awb_ffwbgain_attr_t att);
111     XCamReturn getAlgoStat(rk_tool_awb_stat_res_full_t *awb_stat_algo);
112     XCamReturn getStrategyResult(rk_tool_awb_strategy_result_t *awb_strategy_result);
113 #ifndef DISABLE_HANDLE_ATTRIB
114     XCamReturn mallocAndCopyWbGainAdjustAttrib(rk_aiq_uapiV2_wb_awb_wbGainAdjust_t* dst,const rk_aiq_uapiV2_wb_awb_wbGainAdjust_t *src);
115     XCamReturn freeWbGainAdjustAttrib(rk_aiq_uapiV2_wb_awb_wbGainAdjust_t* dst);
116 #endif
117  protected:
118     virtual void init();
deInit()119     virtual void deInit() { RkAiqHandle::deInit(); };
120     SmartPtr<RkAiqAlgoProcResAwbIntShared> mProcResShared;
121 
122  protected:
123 #ifndef DISABLE_HANDLE_ATTRIB
124     rk_aiq_wb_attrib_t mCurAtt;
125     rk_aiq_wb_attrib_t mNewAtt;
126 #ifdef RKAIQ_HAVE_AWB_V20
127     rk_aiq_uapiV2_wbV20_attrib_t mCurWbV20Attr;
128     rk_aiq_uapiV2_wbV20_attrib_t mNewWbV20Attr;
129 #endif
130     rk_aiq_uapiV2_wb_opMode_t mCurWbOpModeAttr;
131     rk_aiq_uapiV2_wb_opMode_t mNewWbOpModeAttr;
132     rk_aiq_wb_mwb_attrib_t mCurWbMwbAttr;
133     rk_aiq_wb_mwb_attrib_t mNewWbMwbAttr;
134 #if defined(RKAIQ_HAVE_AWB_V20) || defined(RKAIQ_HAVE_AWB_V21)
135     rk_aiq_uapiV2_wbV20_awb_attrib_t mCurWbAwbAttr;
136     rk_aiq_uapiV2_wbV20_awb_attrib_t mNewWbAwbAttr;
137 #endif
138     rk_aiq_uapiV2_wb_awb_wbGainAdjust_t mCurWbAwbWbGainAdjustAttr;
139     rk_aiq_uapiV2_wb_awb_wbGainAdjust_t mNewWbAwbWbGainAdjustAttr;
140     rk_aiq_uapiV2_wb_awb_wbGainOffset_t mCurWbAwbWbGainOffsetAttr;
141     rk_aiq_uapiV2_wb_awb_wbGainOffset_t mNewWbAwbWbGainOffsetAttr;
142     rk_aiq_uapiV2_wb_awb_mulWindow_t mCurWbAwbMultiWindowAttr;
143     rk_aiq_uapiV2_wb_awb_mulWindow_t mNewWbAwbMultiWindowAttr;
144     rk_aiq_uapiV2_awb_ffwbgain_attr_t mCurFFWbgainAttr;
145     rk_aiq_uapiV2_awb_ffwbgain_attr_t mNewFFWbgainAttr;
146     mutable std::atomic<bool> updateWbV20Attr;
147     mutable std::atomic<bool> updateWbOpModeAttr;
148     mutable std::atomic<bool> updateWbMwbAttr;
149     mutable std::atomic<bool> updateWbAwbAttr;
150     mutable std::atomic<bool> updateWbAwbWbGainAdjustAttr;
151     mutable std::atomic<bool> updateWbAwbWbGainOffsetAttr;
152     mutable std::atomic<bool> updateWbAwbMultiWindowAttr;
153     mutable std::atomic<bool> updateFFWbgainAttr;
154 #endif
155     uint32_t mWbGainSyncFlag{(uint32_t)(-1)};
156     uint32_t mWbParamSyncFlag{(uint32_t)(-1)};
157  private:
158     DECLARE_HANDLE_REGISTER_TYPE(RkAiqAwbHandleInt);
159 };
160 
161 }  // namespace RkCam
162 
163 #endif
164