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
17 #include "abayer2dnrV23/rk_aiq_uapi_abayer2dnr_int_v23.h"
18 #include "abayer2dnrV23/rk_aiq_types_abayer2dnr_algo_prvt_v23.h"
19 #include "RkAiqCalibApi.h"
20 //#include "bayer2dnr_xml2json_v23.h"
21
22
23 #if 1
24
25 #define RAWNR_LUMA_SF_STRENGTH_SLOPE_FACTOR (8.0)
26
27
28 XCamReturn
rk_aiq_uapi_abayer2dnrV23_SetAttrib(RkAiqAlgoContext * ctx,const rk_aiq_bayer2dnr_attrib_v23_t * attr,bool need_sync)29 rk_aiq_uapi_abayer2dnrV23_SetAttrib(RkAiqAlgoContext *ctx,
30 const rk_aiq_bayer2dnr_attrib_v23_t *attr,
31 bool need_sync)
32 {
33
34 Abayer2dnr_Context_V23_t* pCtx = (Abayer2dnr_Context_V23_t*)ctx;
35
36 pCtx->eMode = attr->eMode;
37 if(pCtx->eMode == ABAYER2DNR_V23_OP_MODE_AUTO) {
38 pCtx->stAuto = attr->stAuto;
39 } else if(pCtx->eMode == ABAYER2DNR_V23_OP_MODE_MANUAL) {
40 pCtx->stManual.st2DSelect = attr->stManual.st2DSelect;
41 } else if(pCtx->eMode == ABAYER2DNR_V23_OP_MODE_REG_MANUAL) {
42 pCtx->stManual.st2Dfix = attr->stManual.st2Dfix;
43 }
44 pCtx->isReCalculate |= 1;
45
46 return XCAM_RETURN_NO_ERROR;
47 }
48
49 XCamReturn
rk_aiq_uapi_abayer2dnrV23_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_attrib_v23_t * attr)50 rk_aiq_uapi_abayer2dnrV23_GetAttrib(const RkAiqAlgoContext *ctx,
51 rk_aiq_bayer2dnr_attrib_v23_t *attr)
52 {
53
54 Abayer2dnr_Context_V23_t* pCtx = (Abayer2dnr_Context_V23_t*)ctx;
55
56 attr->eMode = pCtx->eMode;
57 memcpy(&attr->stAuto, &pCtx->stAuto, sizeof(attr->stAuto));
58 memcpy(&attr->stManual, &pCtx->stManual, sizeof(attr->stManual));
59
60 return XCAM_RETURN_NO_ERROR;
61 }
62
63
64 XCamReturn
rk_aiq_uapi_abayer2dnrV23_SetStrength(const RkAiqAlgoContext * ctx,const rk_aiq_bayer2dnr_strength_v23_t * pStrength)65 rk_aiq_uapi_abayer2dnrV23_SetStrength(const RkAiqAlgoContext *ctx,
66 const rk_aiq_bayer2dnr_strength_v23_t *pStrength)
67 {
68 Abayer2dnr_Context_V23_t* pCtx = (Abayer2dnr_Context_V23_t*)ctx;
69
70 float fStrength = 1.0f;
71 float fslope = RAWNR_LUMA_SF_STRENGTH_SLOPE_FACTOR;
72 float fPercent = 0.5f;
73
74 fPercent = pStrength->percent;
75
76
77 if(fPercent <= 0.5) {
78 fStrength = fPercent / 0.5;
79 } else {
80 if(fPercent >= 0.999999)
81 fPercent = 0.999999;
82 fStrength = 0.5 * fslope / (1.0 - fPercent) - fslope + 1;
83 }
84
85 pCtx->stStrength = *pStrength;
86 pCtx->stStrength.percent = fStrength;
87 pCtx->isReCalculate |= 1;
88
89 return XCAM_RETURN_NO_ERROR;
90 }
91
92
93
94
95 XCamReturn
rk_aiq_uapi_abayer2dnrV23_GetStrength(const RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_strength_v23_t * pStrength)96 rk_aiq_uapi_abayer2dnrV23_GetStrength(const RkAiqAlgoContext *ctx,
97 rk_aiq_bayer2dnr_strength_v23_t *pStrength)
98 {
99 Abayer2dnr_Context_V23_t* pCtx = (Abayer2dnr_Context_V23_t*)ctx;
100
101 float fStrength = 1.0f;
102 float fslope = RAWNR_LUMA_SF_STRENGTH_SLOPE_FACTOR;
103 float fPercent = 0.0f;
104
105 fStrength = pCtx->stStrength.percent;
106
107 if(fStrength <= 1) {
108 fPercent = fStrength * 0.5;
109 } else {
110 float tmp = 1.0;
111 tmp = 1 - 0.5 * fslope / (fStrength + fslope - 1);
112 if(abs(tmp - 0.999999) < 0.000001) {
113 tmp = 1.0;
114 }
115 fPercent = tmp;
116 }
117
118 *pStrength = pCtx->stStrength;
119 pStrength->percent = fPercent;
120
121 return XCAM_RETURN_NO_ERROR;
122 }
123
124 XCamReturn
rk_aiq_uapi_abayer2dnrV23_GetInfo(const RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_info_v23_t * pInfo)125 rk_aiq_uapi_abayer2dnrV23_GetInfo(const RkAiqAlgoContext* ctx,
126 rk_aiq_bayer2dnr_info_v23_t* pInfo) {
127
128 Abayer2dnr_Context_V23_t* pCtx = (Abayer2dnr_Context_V23_t*)ctx;
129
130 pInfo->iso = pCtx->stExpInfo.arIso[pCtx->stExpInfo.hdr_mode];
131
132
133 pInfo->expo_info = pCtx->stExpInfo;
134 return XCAM_RETURN_NO_ERROR;
135 }
136
137
138
139 #endif
140
141