1 /*
2 * Copyright (c) 2019 Rockchip Corporation
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
18 #include "sample_comm.h"
19
sample_again_usage()20 static void sample_again_usage()
21 {
22 printf("Usage : \n");
23 printf("\t 0) AGAIN: get again attri on sync mode.\n");
24 printf("\t 1) AGAIN: set again attri auto on sync mode.\n");
25 printf("\t 2) AGAIN: set again attri manual on sync mode.\n");
26 printf("\t 3) AGAIN: set again attri to default vaule on sync mode.\n");
27 printf("\t 4) AGAIN: get again attri on async mode.\n");
28 printf("\t 5) AGAIN: set again attri auto on async mode.\n");
29 printf("\t 6) AGAIN: set again attri manual on async mode.\n");
30 printf("\t 7) AGAIN: set again attri to default vaule on async mode.\n");
31 printf("\t q) AGAIN: press key q or Q to quit.\n");
32
33 }
34
sample_print_again_info(const void * arg)35 void sample_print_again_info(const void *arg)
36 {
37 printf ("enter AGAIN modult test!\n");
38 }
39
sample_again_getAttr_v2(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapi_mode_sync_e sync_mode)40 XCamReturn sample_again_getAttr_v2 (const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapi_mode_sync_e sync_mode)
41 {
42 XCamReturn ret = XCAM_RETURN_NO_ERROR;
43
44 rk_aiq_gain_attrib_v2_t gainV2_attr;
45 gainV2_attr.sync.sync_mode = sync_mode;
46 ret = rk_aiq_user_api2_againV2_GetAttrib(ctx, &gainV2_attr);
47 printf("get again v2 attri ret:%d done:%d\n\n", ret, gainV2_attr.sync.done);
48
49 return ret;
50 }
51
sample_again_setAuto_v2(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapi_mode_sync_e sync_mode)52 XCamReturn sample_again_setAuto_v2 (const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapi_mode_sync_e sync_mode)
53 {
54 XCamReturn ret = XCAM_RETURN_NO_ERROR;
55
56 rk_aiq_gain_attrib_v2_t gainV2_attr;
57 gainV2_attr.sync.sync_mode = sync_mode;
58 ret = rk_aiq_user_api2_againV2_GetAttrib(ctx, &gainV2_attr);
59 gainV2_attr.sync.sync_mode = sync_mode;
60 gainV2_attr.eMode = AGAINV2_OP_MODE_AUTO;
61 gainV2_attr.stAuto.stParams.hdrgain_ctrl_enable = 1;
62 for(int i = 0; i < RK_GAIN_V2_MAX_ISO_NUM; i++) {
63 gainV2_attr.stAuto.stParams.iso[i] = 50 * pow(2, i);
64
65 gainV2_attr.stAuto.stParams.iso_params[i].hdr_gain_scale_s = 1.0;
66 gainV2_attr.stAuto.stParams.iso_params[i].hdr_gain_scale_m = 1.0;
67 }
68
69 ret = rk_aiq_user_api2_againV2_SetAttrib(ctx, &gainV2_attr);
70 printf("set again attri auto ret:%d \n\n", ret);
71
72 rk_aiq_gain_attrib_v2_t get_gainV2_attr;
73 get_gainV2_attr.sync.sync_mode = sync_mode;
74 ret = rk_aiq_user_api2_againV2_GetAttrib(ctx, &get_gainV2_attr);
75 printf("get again v2 attri ret:%d done:%d\n\n", ret, get_gainV2_attr.sync.done);
76 return ret;
77 }
78
sample_again_setManual_v2(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapi_mode_sync_e sync_mode)79 XCamReturn sample_again_setManual_v2 (const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapi_mode_sync_e sync_mode)
80 {
81 XCamReturn ret = XCAM_RETURN_NO_ERROR;
82
83 rk_aiq_gain_attrib_v2_t gainV2_attr;
84 gainV2_attr.sync.sync_mode = sync_mode;
85 ret = rk_aiq_user_api2_againV2_GetAttrib(ctx, &gainV2_attr);
86 gainV2_attr.sync.sync_mode = sync_mode;
87 gainV2_attr.eMode = AGAINV2_OP_MODE_MANUAL;
88 gainV2_attr.stManual.stSelect.hdrgain_ctrl_enable = 1;
89
90 gainV2_attr.stManual.stSelect.hdr_gain_scale_s = 1.0;
91 gainV2_attr.stManual.stSelect.hdr_gain_scale_m = 1.0;
92
93 ret = rk_aiq_user_api2_againV2_SetAttrib(ctx, &gainV2_attr);
94 printf("set gain v2 attri manual ret:%d \n\n", ret);
95
96 rk_aiq_gain_attrib_v2_t get_gainV2_attr;
97 get_gainV2_attr.sync.sync_mode = sync_mode;
98 ret = rk_aiq_user_api2_againV2_GetAttrib(ctx, &get_gainV2_attr);
99 printf("get again v2 attri ret:%d done:%d\n\n", ret, get_gainV2_attr.sync.done);
100
101 return ret;
102 }
103
sample_again_setDefault_v2(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapi_mode_sync_e sync_mode,rk_aiq_gain_attrib_v2_t & default_gainV2_attr)104 XCamReturn sample_again_setDefault_v2 (const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapi_mode_sync_e sync_mode, rk_aiq_gain_attrib_v2_t& default_gainV2_attr)
105 {
106 XCamReturn ret = XCAM_RETURN_NO_ERROR;
107 default_gainV2_attr.sync.sync_mode = sync_mode;
108 ret = rk_aiq_user_api2_againV2_SetAttrib(ctx, &default_gainV2_attr);
109 printf("Set again v2 set default attri ret:%d \n\n", ret);
110
111 rk_aiq_gain_attrib_v2_t get_gainV2_attr;
112 get_gainV2_attr.sync.sync_mode = sync_mode;
113 ret = rk_aiq_user_api2_againV2_GetAttrib(ctx, &get_gainV2_attr);
114 printf("get again v2 attri ret:%d done:%d\n\n", ret, get_gainV2_attr.sync.done);
115
116 return ret;
117 }
118
sample_again_module(const void * arg)119 XCamReturn sample_again_module (const void *arg)
120 {
121 int key = -1;
122 CLEAR();
123 XCamReturn ret = XCAM_RETURN_NO_ERROR;
124 const demo_context_t *demo_ctx = (demo_context_t *)arg;
125 const rk_aiq_sys_ctx_t* ctx ;
126
127 if(demo_ctx->camGroup) {
128 ctx = (const rk_aiq_sys_ctx_t*)(demo_ctx->camgroup_ctx);
129 printf("##################group !!!!########################\n");
130 } else {
131 ctx = (const rk_aiq_sys_ctx_t*)(demo_ctx->aiq_ctx);
132 printf("##################sigle !!!!########################\n");
133 }
134
135 if (ctx == nullptr) {
136 ERR ("%s, ctx is nullptr\n", __FUNCTION__);
137 return XCAM_RETURN_ERROR_PARAM;
138 }
139
140 rk_aiq_gain_attrib_v2_t default_gainV2_attr;
141 if (CHECK_ISP_HW_V30() || CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
142 ret = rk_aiq_user_api2_againV2_GetAttrib(ctx, &default_gainV2_attr);
143 printf("get again v2 default attri ret:%d \n\n", ret);
144 }
145
146 do {
147 sample_again_usage ();
148
149 key = getchar ();
150 while (key == '\n' || key == '\r')
151 key = getchar ();
152 printf ("\n");
153
154 switch (key) {
155 case '0':
156 if (CHECK_ISP_HW_V30() || CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
157 sample_again_getAttr_v2(ctx, RK_AIQ_UAPI_MODE_SYNC);
158 }
159 break;
160 case '1':
161 if (CHECK_ISP_HW_V30() || CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
162 sample_again_setAuto_v2(ctx, RK_AIQ_UAPI_MODE_SYNC);
163 }
164 break;
165 case '2':
166 if (CHECK_ISP_HW_V30() || CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
167 sample_again_setManual_v2(ctx, RK_AIQ_UAPI_MODE_SYNC);
168 }
169 break;
170 case '3':
171 if (CHECK_ISP_HW_V30() || CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
172 sample_again_setDefault_v2(ctx, RK_AIQ_UAPI_MODE_SYNC, default_gainV2_attr);
173 }
174 break;
175 case '4':
176 if (CHECK_ISP_HW_V30() || CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
177 sample_again_getAttr_v2(ctx, RK_AIQ_UAPI_MODE_ASYNC);
178 }
179 break;
180 case '5':
181 if (CHECK_ISP_HW_V30() || CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
182 sample_again_setAuto_v2(ctx, RK_AIQ_UAPI_MODE_ASYNC);
183 }
184 break;
185 case '6':
186 if (CHECK_ISP_HW_V30() || CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
187 sample_again_setManual_v2(ctx, RK_AIQ_UAPI_MODE_ASYNC);
188 }
189 break;
190 case '7':
191 if (CHECK_ISP_HW_V30() || CHECK_ISP_HW_V32() || CHECK_ISP_HW_V32_LITE()) {
192 sample_again_setDefault_v2(ctx, RK_AIQ_UAPI_MODE_ASYNC, default_gainV2_attr);
193 }
194 break;
195 default:
196 printf("not support test\n\n");
197 break;
198 }
199
200 } while (key != 'q' && key != 'Q');
201
202 return ret;
203 }
204
205