/* * Copyright (c) 2019 Rockchip Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #include "sample_comm.h" static void sample_adrc_usage() { printf("Usage : \n"); printf("\t 0) ADRC: test rk_aiq_user_api2_adrc_SetAttrib stManualV30 Sync.\n"); printf("\t 1) ADRC: test rk_aiq_user_api2_adrc_SetAttrib stManualV30 Async.\n"); printf("\t 2) ADRC: test rk_aiq_user_api2_adrc_SetAttrib stDrcGain Sync.\n"); printf("\t 3) ADRC: test rk_aiq_user_api2_adrc_SetAttrib stDrcGain Async.\n"); printf("\t 4) ADRC: test rk_aiq_user_api2_adrc_SetAttrib stHiLit Sync.\n"); printf("\t 5) ADRC: test rk_aiq_user_api2_adrc_SetAttrib stHiLit Async.\n"); printf("\t 6) ADRC: test rk_aiq_user_api2_adrc_SetAttrib stLocalDataV30 Sync.\n"); printf("\t 7) ADRC: test rk_aiq_user_api2_adrc_SetAttrib stLocalDataV30 Async.\n"); printf("\t 8) ADRC: test rk_aiq_user_api2_adrc_GetAttrib.\n"); printf("\t 9) ADRC: test rk_aiq_uapi2_getDrcGain.\n"); printf("\t a) ADRC: test rk_aiq_uapi2_setDrcGain.\n"); printf("\t b) ADRC: test rk_aiq_uapi2_getDrcHiLit.\n"); printf("\t c) ADRC: test rk_aiq_uapi2_setDrcHiLit.\n"); printf("\t d) ADRC: test rk_aiq_uapi2_getDrcLocalData.\n"); printf("\t e) ADRC: test rk_aiq_uapi2_setDrcLocalData.\n"); printf("\t q) ADRC: return to main sample screen.\n"); printf("\n"); printf("\t please press the key: "); return; } void sample_print_adrc_info(const void *arg) { printf ("enter ADRC modult test!\n"); } XCamReturn sample_adrc_module(const void *arg) { int key = -1; CLEAR(); drc_attrib_t attr; const demo_context_t *demo_ctx = (demo_context_t *)arg; const rk_aiq_sys_ctx_t* ctx ; if (demo_ctx->camGroup) { ctx = (rk_aiq_sys_ctx_t*)(demo_ctx->camgroup_ctx); } else { ctx = (rk_aiq_sys_ctx_t*)(demo_ctx->aiq_ctx); } do { sample_adrc_usage (); key = getchar (); while (key == '\n' || key == '\r') key = getchar(); printf ("\n"); switch (key) { case '0': { printf("\t ADRC test rk_aiq_user_api2_adrc_SetAttrib stManualV30 Sync\n\n"); attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT; attr.sync.done = false; attr.opMode = DRC_OPMODE_MANU; attr.stManualV30.Enable = true; attr.stManualV30.DrcGain.Alpha = 0.2; attr.stManualV30.DrcGain.DrcGain = 2; attr.stManualV30.DrcGain.Clip = 1; attr.stManualV30.HiLight.Strength = 0.5; attr.stManualV30.LocalSetting.LocalData.LocalWeit = 1; attr.stManualV30.LocalSetting.LocalData.LocalAutoEnable = 1; attr.stManualV30.LocalSetting.LocalData.LocalAutoWeit = 0.5; attr.stManualV30.LocalSetting.LocalData.GlobalContrast = 0.5; attr.stManualV30.LocalSetting.LocalData.LoLitContrast = 0.5; attr.stManualV30.LocalSetting.curPixWeit = 0.376471; attr.stManualV30.LocalSetting.preFrameWeit = 0.8; attr.stManualV30.LocalSetting.Range_force_sgm = 0.0; attr.stManualV30.LocalSetting.Range_sgm_cur = 0.2; attr.stManualV30.LocalSetting.Range_sgm_pre = 0.2; attr.stManualV30.LocalSetting.Space_sgm_cur = 4068; attr.stManualV30.LocalSetting.Space_sgm_pre = 3068; attr.stManualV30.LocalSetting.Space_sgm_pre = 3068; attr.stManualV30.CompressSetting.Mode = COMPRESS_AUTO; attr.stManualV30.CompressSetting.Manual_curve[0] = 0; attr.stManualV30.CompressSetting.Manual_curve[1] = 558; attr.stManualV30.CompressSetting.Manual_curve[2] = 1087; attr.stManualV30.CompressSetting.Manual_curve[3] = 1588; attr.stManualV30.CompressSetting.Manual_curve[4] = 2063; attr.stManualV30.CompressSetting.Manual_curve[5] = 2515; attr.stManualV30.CompressSetting.Manual_curve[6] = 2944; attr.stManualV30.CompressSetting.Manual_curve[7] = 3353; attr.stManualV30.CompressSetting.Manual_curve[8] = 3744; attr.stManualV30.CompressSetting.Manual_curve[9] = 4473; attr.stManualV30.CompressSetting.Manual_curve[10] = 5139; attr.stManualV30.CompressSetting.Manual_curve[11] = 5751; attr.stManualV30.CompressSetting.Manual_curve[12] = 6316; attr.stManualV30.CompressSetting.Manual_curve[13] = 6838; attr.stManualV30.CompressSetting.Manual_curve[14] = 7322; attr.stManualV30.CompressSetting.Manual_curve[15] = 7772; attr.stManualV30.CompressSetting.Manual_curve[16] = 8192; attr.stManualV30.Scale_y[0] = 0; attr.stManualV30.Scale_y[1] = 2; attr.stManualV30.Scale_y[2] = 20; attr.stManualV30.Scale_y[3] = 76; attr.stManualV30.Scale_y[4] = 193; attr.stManualV30.Scale_y[5] = 381; attr.stManualV30.Scale_y[6] = 631; attr.stManualV30.Scale_y[7] = 772; attr.stManualV30.Scale_y[8] = 919; attr.stManualV30.Scale_y[9] = 1066; attr.stManualV30.Scale_y[10] = 1211; attr.stManualV30.Scale_y[11] = 1479; attr.stManualV30.Scale_y[12] = 1700; attr.stManualV30.Scale_y[13] = 1863; attr.stManualV30.Scale_y[14] = 1968; attr.stManualV30.Scale_y[15] = 2024; attr.stManualV30.Scale_y[16] = 2048; attr.stManualV30.Edge_Weit = 0.02; attr.stManualV30.OutPutLongFrame = false; attr.stManualV30.IIR_frame = 2; rk_aiq_user_api2_adrc_SetAttrib(ctx, attr); break; } case '1': { printf("\t ADRC test rk_aiq_user_api2_adrc_SetAttrib stManualV30 Async\n\n"); attr.sync.sync_mode = RK_AIQ_UAPI_MODE_ASYNC; attr.sync.done = false; attr.opMode = DRC_OPMODE_MANU; attr.stManualV30.Enable = true; attr.stManualV30.DrcGain.Alpha = 0.1; attr.stManualV30.DrcGain.DrcGain = 2; attr.stManualV30.DrcGain.Clip = 1; attr.stManualV30.HiLight.Strength = 0.5; attr.stManualV30.LocalSetting.LocalData.LocalWeit = 1; attr.stManualV30.LocalSetting.LocalData.LocalAutoEnable = 1; attr.stManualV30.LocalSetting.LocalData.LocalAutoWeit = 0.5; attr.stManualV30.LocalSetting.LocalData.GlobalContrast = 0.5; attr.stManualV30.LocalSetting.LocalData.LoLitContrast = 0.5; attr.stManualV30.LocalSetting.curPixWeit = 0.376471; attr.stManualV30.LocalSetting.preFrameWeit = 0.8; attr.stManualV30.LocalSetting.Range_force_sgm = 0.0; attr.stManualV30.LocalSetting.Range_sgm_cur = 0.2; attr.stManualV30.LocalSetting.Range_sgm_pre = 0.2; attr.stManualV30.LocalSetting.Space_sgm_cur = 4068; attr.stManualV30.LocalSetting.Space_sgm_pre = 3068; attr.stManualV30.LocalSetting.Space_sgm_pre = 3068; attr.stManualV30.CompressSetting.Mode = COMPRESS_AUTO; attr.stManualV30.CompressSetting.Manual_curve[0] = 0; attr.stManualV30.CompressSetting.Manual_curve[1] = 558; attr.stManualV30.CompressSetting.Manual_curve[2] = 1087; attr.stManualV30.CompressSetting.Manual_curve[3] = 1588; attr.stManualV30.CompressSetting.Manual_curve[4] = 2063; attr.stManualV30.CompressSetting.Manual_curve[5] = 2515; attr.stManualV30.CompressSetting.Manual_curve[6] = 2944; attr.stManualV30.CompressSetting.Manual_curve[7] = 3353; attr.stManualV30.CompressSetting.Manual_curve[8] = 3744; attr.stManualV30.CompressSetting.Manual_curve[9] = 4473; attr.stManualV30.CompressSetting.Manual_curve[10] = 5139; attr.stManualV30.CompressSetting.Manual_curve[11] = 5751; attr.stManualV30.CompressSetting.Manual_curve[12] = 6316; attr.stManualV30.CompressSetting.Manual_curve[13] = 6838; attr.stManualV30.CompressSetting.Manual_curve[14] = 7322; attr.stManualV30.CompressSetting.Manual_curve[15] = 7772; attr.stManualV30.CompressSetting.Manual_curve[16] = 8192; attr.stManualV30.Scale_y[0] = 0; attr.stManualV30.Scale_y[1] = 2; attr.stManualV30.Scale_y[2] = 20; attr.stManualV30.Scale_y[3] = 76; attr.stManualV30.Scale_y[4] = 193; attr.stManualV30.Scale_y[5] = 381; attr.stManualV30.Scale_y[6] = 631; attr.stManualV30.Scale_y[7] = 772; attr.stManualV30.Scale_y[8] = 919; attr.stManualV30.Scale_y[9] = 1066; attr.stManualV30.Scale_y[10] = 1211; attr.stManualV30.Scale_y[11] = 1479; attr.stManualV30.Scale_y[12] = 1700; attr.stManualV30.Scale_y[13] = 1863; attr.stManualV30.Scale_y[14] = 1968; attr.stManualV30.Scale_y[15] = 2024; attr.stManualV30.Scale_y[16] = 2048; attr.stManualV30.Edge_Weit = 0.02; attr.stManualV30.OutPutLongFrame = false; attr.stManualV30.IIR_frame = 2; rk_aiq_user_api2_adrc_SetAttrib(ctx, attr); break; } case '2': { printf("\t ADRC test rk_aiq_user_api2_adrc_SetAttrib stDrcGain Sync\n\n"); attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT; attr.sync.done = false; attr.opMode = DRC_OPMODE_DRC_GAIN; attr.stDrcGain.DrcGain = 3; attr.stDrcGain.Clip = 3.2; attr.stDrcGain.Alpha = 0.2; rk_aiq_user_api2_adrc_SetAttrib(ctx, attr); break; } case '3': { printf("\t ADRC test rk_aiq_user_api2_adrc_SetAttrib stDrcGain Async\n\n"); attr.sync.sync_mode = RK_AIQ_UAPI_MODE_ASYNC; attr.sync.done = false; attr.opMode = DRC_OPMODE_DRC_GAIN; attr.stDrcGain.DrcGain = 3; attr.stDrcGain.Clip = 3; attr.stDrcGain.Alpha = 0.2; rk_aiq_user_api2_adrc_SetAttrib(ctx, attr); break; } case '4': { printf("\t ADRC test rk_aiq_user_api2_adrc_SetAttrib stHiLit Sync\n\n"); attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT; attr.sync.done = false; attr.opMode = DRC_OPMODE_HILIT; attr.stHiLit.Strength = 0.51; rk_aiq_user_api2_adrc_SetAttrib(ctx, attr); break; } case '5': { printf("\t ADRC test rk_aiq_user_api2_adrc_SetAttrib stHiLit Async\n\n"); attr.sync.sync_mode = RK_AIQ_UAPI_MODE_ASYNC; attr.sync.done = false; attr.opMode = DRC_OPMODE_HILIT; attr.stHiLit.Strength = 0.5; rk_aiq_user_api2_adrc_SetAttrib(ctx, attr); break; } case '6': { printf("\t ADRC test rk_aiq_user_api2_adrc_SetAttrib stLocalDataV30 Sync\n\n"); attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT; attr.sync.done = false; attr.opMode = DRC_OPMODE_LOCAL_TMO; attr.stLocalDataV30.LocalWeit = 1; attr.stLocalDataV30.LocalAutoEnable = 1; attr.stLocalDataV30.LocalAutoWeit = 0.6; attr.stLocalDataV30.GlobalContrast = 0.5; attr.stLocalDataV30.LoLitContrast = 0.5; rk_aiq_user_api2_adrc_SetAttrib(ctx, attr); break; } case '7': { printf("\t ADRC test rk_aiq_user_api2_adrc_SetAttrib stLocalDataV30 Async\n\n"); attr.sync.sync_mode = RK_AIQ_UAPI_MODE_ASYNC; attr.sync.done = false; attr.opMode = DRC_OPMODE_LOCAL_TMO; attr.stLocalDataV30.LocalWeit = 1; attr.stLocalDataV30.LocalAutoEnable = 1; attr.stLocalDataV30.LocalAutoWeit = 0.5; attr.stLocalDataV30.GlobalContrast = 0.5; attr.stLocalDataV30.LoLitContrast = 0.5; rk_aiq_user_api2_adrc_SetAttrib(ctx, attr); break; } case '8': { printf("\t ADRC test rk_aiq_user_api2_adrc_GetAttrib\n\n"); rk_aiq_user_api2_adrc_GetAttrib(ctx, &attr); printf("\t sync = %d, done = %d\n", attr.sync.sync_mode, attr.sync.done); printf("\t opMode:%d EnvLv:%f\n\n", attr.opMode, attr.Info.EnvLv); printf("\t stManualV30 DrcGain:%f Alpha:%f Clip:%f\n\n", attr.stManualV30.DrcGain.DrcGain, attr.stManualV30.DrcGain.Alpha, attr.stManualV30.DrcGain.Clip); printf("\t stDrcGain DrcGain:%f Alpha:%f Clip:%f\n\n", attr.stDrcGain.DrcGain, attr.stDrcGain.Alpha, attr.stDrcGain.Clip); printf("\t stHiLit Strength:%f\n\n", attr.stHiLit.Strength); printf("\t stLocalDataV30 LocalWeit:%f LocalAutoEnable:%d LocalAutoWeit:%f GlobalContrast:%f LoLitContrast:%f\n\n", attr.stLocalDataV30.LocalWeit, attr.stLocalDataV30.LocalAutoEnable, attr.stLocalDataV30.LocalAutoWeit, attr.stLocalDataV30.GlobalContrast, attr.stLocalDataV30.LoLitContrast); break; } case '9': { printf("\t ADRC test rk_aiq_uapi2_getDrcGain\n\n"); float Gain = 0; float Alpha = 0; float Clip = 0; rk_aiq_uapi2_getDrcGain(ctx, &Gain, &Alpha, &Clip); printf("\t ADRC rk_aiq_uapi2_getDrcGain: Gain:%f Alpha:%f Clip:%f\n\n", Gain, Alpha, Clip); break; } case 'a': { printf("\t ADRC test rk_aiq_uapi2_setDrcGain\n\n"); rk_aiq_uapi2_setDrcGain(ctx, 3.5, 0.4, 3); break; } case 'b': { printf("\t ADRC test rk_aiq_uapi2_getDrcHiLit\n\n"); float Strength = 0; rk_aiq_uapi2_getDrcHiLit(ctx, &Strength); printf("\t ADRC rk_aiq_uapi2_getDrcHiLit: Strength:%f\n\n", Strength); break; } case 'c': { printf("\t ADRC test rk_aiq_uapi2_setDrcHiLit\n\n"); rk_aiq_uapi2_setDrcHiLit(ctx, 0.8); break; } case 'd': { printf("\t ADRC test rk_aiq_uapi2_getDrcLocalData\n\n"); float LocalWeit = 0; float GlobalContrast = 0; float LoLitContrast = 0; int LocalAutoEnable = 0; float LocalAutoWeit = 0; rk_aiq_uapi2_getDrcLocalData(ctx, &LocalWeit, &GlobalContrast, &LoLitContrast, &LocalAutoEnable, &LocalAutoWeit); printf("\t ADRC rk_aiq_uapi2_getDrcGain: LocalWeit:%f GlobalContrast:%f LoLitContrast:%f LocalAutoEnable:%d LocalAutoWeit:%f\n\n", LocalWeit, GlobalContrast, LoLitContrast, LocalAutoEnable, LocalAutoWeit); break; } case 'e': { printf("\t ADRC test rk_aiq_uapi2_setDrcLocalData\n\n"); rk_aiq_uapi2_setDrcLocalData(ctx, 1.0, 0.5, 0.5, 1, 0.9); break; } default: break; } } while (key != 'q' && key != 'Q'); return XCAM_RETURN_NO_ERROR; }