xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkisp_demo/demo/sample/sample_alsc_module.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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 
20 #include "uAPI2/rk_aiq_user_api2_alsc.h"
21 
22 /*
23  ******************************
24  *
25  * Module level API Sample Func
26  *
27  ******************************
28  */
29 
sample_lsc_set_attr(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapi_mode_sync_e sync)30 static int sample_lsc_set_attr(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapi_mode_sync_e sync)
31 {
32   XCamReturn ret = XCAM_RETURN_NO_ERROR;
33   rk_aiq_lsc_attrib_t attr;
34   memset(&attr, 0, sizeof(rk_aiq_lsc_attrib_t));
35 
36   ret = rk_aiq_user_api2_alsc_GetAttrib(ctx, &attr);
37   RKAIQ_SAMPLE_CHECK_RET(ret, "setlscAttr failed in getting lsc attrib!");
38 
39   printf("LSC r_data_tbl[0]:%d\n", attr.stManual.r_data_tbl[0]);
40 
41   attr.sync.sync_mode = sync;
42   if (attr.mode == RK_AIQ_LSC_MODE_AUTO) {
43     attr.mode = RK_AIQ_LSC_MODE_MANUAL;
44     attr.byPass = false;
45     memset(attr.stManual.r_data_tbl, 4096, 17*17*sizeof(unsigned short));
46   } else {
47     attr.mode = RK_AIQ_LSC_MODE_AUTO;
48   }
49   //set
50   ret = rk_aiq_user_api2_alsc_SetAttrib(ctx, attr);
51   RKAIQ_SAMPLE_CHECK_RET(ret, "set lsc Attr failed!");
52   printf("set lsc Attr\n\n");
53 
54   return 0;
55 }
56 
sample_lsc_get_attr(const rk_aiq_sys_ctx_t * ctx)57 static int sample_lsc_get_attr(const rk_aiq_sys_ctx_t* ctx)
58 {
59   XCamReturn ret = XCAM_RETURN_NO_ERROR;
60   rk_aiq_lsc_attrib_t attr;
61   memset(&attr,0,sizeof(rk_aiq_lsc_attrib_t));
62   //get
63   ret = rk_aiq_user_api2_alsc_GetAttrib(ctx, &attr);
64   RKAIQ_SAMPLE_CHECK_RET(ret, "get lsc Attr failed!");
65   printf("get lsc Attr:\n\n");
66   printf("\t sync = %d, done = %d\n", attr.sync.sync_mode, attr.sync.done);
67   printf("\t enable = %s\n", (attr.byPass ? "false" : "true"));
68   if (attr.mode == RK_AIQ_LSC_MODE_MANUAL){
69     printf("\t mode = Manual\n");
70     printf("\t manual table\n");
71     printf("\t\t r: %d, %d, %d \n",
72            attr.stManual.r_data_tbl[0],
73            attr.stManual.r_data_tbl[1],
74            attr.stManual.r_data_tbl[2]);
75     printf("\t\t gr: %d, %d, %d \n",
76            attr.stManual.gr_data_tbl[0],
77            attr.stManual.gr_data_tbl[1],
78            attr.stManual.gr_data_tbl[2]);
79     printf("\t\t gb: %d, %d, %d \n",
80            attr.stManual.gb_data_tbl[0],
81            attr.stManual.gb_data_tbl[1],
82            attr.stManual.gb_data_tbl[2]);
83     printf("\t\t b: %d, %d, %d \n",
84            attr.stManual.b_data_tbl[0],
85            attr.stManual.b_data_tbl[1],
86            attr.stManual.b_data_tbl[2]);
87   } else if (attr.mode == RK_AIQ_LSC_MODE_AUTO) {
88     printf("\t mode = Auto\n");
89   } else {
90     printf("\t mode is Manual");
91   }
92   return 0;
93 }
94 
sample_lsc_set_attr_async(const rk_aiq_sys_ctx_t * ctx)95 static int sample_lsc_set_attr_async(const rk_aiq_sys_ctx_t* ctx)
96 {
97   sample_lsc_set_attr(ctx, RK_AIQ_UAPI_MODE_ASYNC);
98   sample_lsc_get_attr(ctx);
99   usleep(40*1000);
100   sample_lsc_get_attr(ctx);
101 
102   return 0;
103 }
104 
sample_lsc_set_attr_sync(const rk_aiq_sys_ctx_t * ctx)105 static int sample_lsc_set_attr_sync(const rk_aiq_sys_ctx_t* ctx)
106 {
107   sample_lsc_set_attr(ctx, RK_AIQ_UAPI_MODE_DEFAULT);
108   sample_lsc_get_attr(ctx);
109 
110   return 0;
111 }
112 
113 uapi_case_t lsc_uapi_list[] = {
114   { .desc = "ALSC: set lsc gain table async",
115     .func = (uapi_case_func)sample_lsc_set_attr_async
116   },
117   { .desc = "ALSC: set lsc gain table sync",
118     .func = (uapi_case_func)sample_lsc_set_attr_sync
119   },
120   { .desc = "ALSC: get lsc gain table",
121     .func = (uapi_case_func)sample_lsc_get_attr
122   },
123   {
124     .desc = NULL,
125     .func = NULL,
126   }
127 };
128 
sample_alsc_module(const void * arg)129 XCamReturn sample_alsc_module(const void* arg)
130 {
131   int key = -1;
132   CLEAR();
133   const demo_context_t* demo_ctx = (demo_context_t*)arg;
134   const rk_aiq_sys_ctx_t* ctx;
135   if (demo_ctx->camGroup) {
136     ctx = (rk_aiq_sys_ctx_t*)(demo_ctx->camgroup_ctx);
137   } else {
138     ctx = (rk_aiq_sys_ctx_t*)(demo_ctx->aiq_ctx);
139   }
140 
141   if (ctx == nullptr) {
142     ERR("%s, ctx is nullptr\n", __FUNCTION__);
143     return XCAM_RETURN_ERROR_PARAM;
144   }
145 
146   uapi_process_loop(ctx, lsc_uapi_list);
147 
148   return XCAM_RETURN_NO_ERROR;
149 }
150