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