/*
|
* 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 "include/uAPI2/rk_aiq_user_api2_imgproc.h"
|
|
#ifdef RK_SIMULATOR_HW
|
#define CHECK_USER_API_ENABLE
|
#endif
|
|
#define RKAIQ_IMGPROC_CHECK_RET(ret, format, ...) \
|
if (ret) { \
|
LOGE(format, ##__VA_ARGS__); \
|
return ret; \
|
}
|
|
#define IMGPROC_FUNC_ENTER LOGD("%s: enter", __FUNCTION__);
|
#define IMGPROC_FUNC_EXIT LOGD("%s: exit", __FUNCTION__);
|
|
RKAIQ_BEGIN_DECLARE
|
|
/*
|
**********************************************************
|
* API of AEC module of V2
|
**********************************************************
|
*/
|
|
/*
|
*****************************
|
* Desc: set ae mode
|
* Argument:
|
* mode contains: auto & manual
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setAeLock
|
(
|
const rk_aiq_sys_ctx_t* ctx,
|
bool on
|
) {
|
|
IMGPROC_FUNC_ENTER
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_ExpSwAttrV2_t expSwAttr;
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param invalid!");
|
}
|
|
ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "failed in getExpSwAttr!");
|
expSwAttr.Enable = (!on);
|
ret = rk_aiq_user_api2_ae_setExpSwAttr(ctx, expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "failed in setExpSwAttr!");
|
IMGPROC_FUNC_EXIT
|
return (ret);
|
|
}
|
XCamReturn rk_aiq_uapi2_setExpMode
|
(
|
const rk_aiq_sys_ctx_t* ctx,
|
opMode_t mode
|
) {
|
|
IMGPROC_FUNC_ENTER
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_ExpSwAttrV2_t expSwAttr;
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param invalid!");
|
}
|
|
ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setExpMode failed in getExpSwAttr!");
|
if (mode == OP_AUTO) {
|
expSwAttr.AecOpType = RK_AIQ_OP_MODE_AUTO;
|
} else if (mode == OP_MANUAL) {
|
if (isHDRmode(ctx)) {
|
expSwAttr.AecOpType = RK_AIQ_OP_MODE_MANUAL;
|
expSwAttr.stManual.HdrAE.ManualGainEn = true;
|
expSwAttr.stManual.HdrAE.ManualTimeEn = true;
|
} else {
|
expSwAttr.AecOpType = RK_AIQ_OP_MODE_MANUAL;
|
expSwAttr.stManual.LinearAE.ManualGainEn = true;
|
expSwAttr.stManual.LinearAE.ManualTimeEn = true;
|
}
|
} else {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "mode is not supported!");
|
}
|
ret = rk_aiq_user_api2_ae_setExpSwAttr(ctx, expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setExpMode failed in setExpSwAttr!");
|
IMGPROC_FUNC_EXIT
|
return (ret);
|
|
}
|
XCamReturn rk_aiq_uapi2_getExpMode
|
(
|
const rk_aiq_sys_ctx_t* ctx,
|
opMode_t *mode
|
) {
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_ExpSwAttrV2_t expSwAttr;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (mode == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param invalid!");
|
}
|
ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getExpMode failed in getExpSwAttr!");
|
if (expSwAttr.AecOpType == RK_AIQ_OP_MODE_AUTO) {
|
*mode = OP_AUTO;
|
} else if (expSwAttr.AecOpType == RK_AIQ_OP_MODE_MANUAL) {
|
*mode = OP_MANUAL;
|
}
|
IMGPROC_FUNC_EXIT
|
return (ret);
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: set exposure parameter
|
* Argument:
|
* auto exposure mode:
|
* exposure gain will be adjust between [gain->min, gain->max]
|
* manual exposure mode:
|
* gain->min == gain->max
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setExpGainRange
|
(
|
const rk_aiq_sys_ctx_t* ctx,
|
paRange_t *gain
|
) {
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_ExpSwAttrV2_t expSwAttr;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (gain == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param invalid!");
|
}
|
LOGD("set range: [%f, %f]", gain->min, gain->max);
|
|
if (gain->min < 1.0f || gain->max < 1.0f || (gain->min > gain->max)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "gain range is wrong!");
|
}
|
ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\nsetExpGainRange failed!");
|
|
expSwAttr.stAdvanced.SetAeRangeEn = true;
|
if (isHDRmode(ctx)) {
|
expSwAttr.stAdvanced.SetHdrAeRange.stGainRange[0].Max = gain->max;
|
expSwAttr.stAdvanced.SetHdrAeRange.stGainRange[0].Min = gain->min;
|
expSwAttr.stAdvanced.SetHdrAeRange.stGainRange[1].Max = gain->max;
|
expSwAttr.stAdvanced.SetHdrAeRange.stGainRange[1].Min = gain->min;
|
expSwAttr.stAdvanced.SetHdrAeRange.stGainRange[2].Max = gain->max;
|
expSwAttr.stAdvanced.SetHdrAeRange.stGainRange[2].Min = gain->min;
|
} else {
|
expSwAttr.stAdvanced.SetLinAeRange.stGainRange.Max = gain->max;
|
expSwAttr.stAdvanced.SetLinAeRange.stGainRange.Min = gain->min;
|
}
|
ret = rk_aiq_user_api2_ae_setExpSwAttr(ctx, expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "set exp attr failed!\nsetExpGainRange failed!");
|
IMGPROC_FUNC_EXIT
|
return (ret);
|
|
}
|
XCamReturn rk_aiq_uapi2_getExpGainRange
|
(
|
const rk_aiq_sys_ctx_t* ctx,
|
paRange_t *gain
|
) {
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_ExpSwAttrV2_t expSwAttr;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (gain == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
|
ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\ngetExpGainRange failed!");
|
if (isHDRmode(ctx)) {
|
int index = getHDRFrameNum(ctx);
|
gain->max = expSwAttr.stAuto.HdrAeRange.stGainRange[index - 1].Max;
|
gain->min = expSwAttr.stAuto.HdrAeRange.stGainRange[index - 1].Min;
|
} else {
|
gain->max = expSwAttr.stAuto.LinAeRange.stGainRange.Max;
|
gain->min = expSwAttr.stAuto.LinAeRange.stGainRange.Min;
|
}
|
|
IMGPROC_FUNC_EXIT
|
return (ret);
|
|
}
|
/*
|
*****************************
|
*
|
* Desc: set exposure parameter
|
* Argument:
|
* auto exposure mode:
|
* exposure time will be adjust between [time->min, time->max]
|
* manual exposure mode:
|
* exposure time will be set gain->min == gain->max;
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setExpTimeRange
|
(
|
const rk_aiq_sys_ctx_t* ctx,
|
paRange_t *time
|
) {
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_ExpSwAttrV2_t expSwAttr;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (time == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
if ( time->min > time->max ) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "time range is wrong!");
|
}
|
LOGD("set range: [%f, %f]", time->min, time->max);
|
ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\nsetExpTimeRange failed!");
|
|
expSwAttr.stAdvanced.SetAeRangeEn = true;
|
if (isHDRmode(ctx)) {
|
expSwAttr.stAdvanced.SetHdrAeRange.stExpTimeRange[0].Max = time->max;
|
expSwAttr.stAdvanced.SetHdrAeRange.stExpTimeRange[0].Min = time->min;
|
expSwAttr.stAdvanced.SetHdrAeRange.stExpTimeRange[1].Max = time->max;
|
expSwAttr.stAdvanced.SetHdrAeRange.stExpTimeRange[1].Min = time->min;
|
expSwAttr.stAdvanced.SetHdrAeRange.stExpTimeRange[2].Max = time->max;
|
expSwAttr.stAdvanced.SetHdrAeRange.stExpTimeRange[2].Min = time->min;
|
} else {
|
expSwAttr.stAdvanced.SetLinAeRange.stExpTimeRange.Max = time->max;
|
expSwAttr.stAdvanced.SetLinAeRange.stExpTimeRange.Min = time->min;
|
}
|
ret = rk_aiq_user_api2_ae_setExpSwAttr(ctx, expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "set exp attr failed!\nsetExpTimeRange failed!");
|
IMGPROC_FUNC_EXIT
|
return (ret);
|
|
}
|
XCamReturn rk_aiq_uapi2_getExpTimeRange
|
(
|
const rk_aiq_sys_ctx_t* ctx,
|
paRange_t *time
|
) {
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_ExpSwAttrV2_t expSwAttr;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (time == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
|
ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\ngetExpTimeRange failed!");
|
if (isHDRmode(ctx)) {
|
int index = getHDRFrameNum(ctx);
|
time->max = expSwAttr.stAuto.HdrAeRange.stExpTimeRange[index - 1].Max;
|
time->min = expSwAttr.stAuto.HdrAeRange.stExpTimeRange[index - 1].Min;
|
} else {
|
time->max = expSwAttr.stAuto.LinAeRange.stExpTimeRange.Max;
|
time->min = expSwAttr.stAuto.LinAeRange.stExpTimeRange.Min;
|
}
|
|
IMGPROC_FUNC_EXIT
|
return (ret);
|
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: backlight compensation
|
* Argument:
|
* on: 1 on
|
* 0 off
|
* areaType: backlight compensation area
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setBLCMode(const rk_aiq_sys_ctx_t* ctx, bool on, aeMeasAreaType_t areaType)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
Uapi_LinExpAttrV2_t LineExpAttr;
|
memset(&LineExpAttr, 0x00, sizeof(Uapi_LinExpAttrV2_t));
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
if (isHDRmode(ctx)) {
|
ret = XCAM_RETURN_ERROR_FAILED;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "Not support in HDR mode!");
|
}
|
|
ret = rk_aiq_user_api2_ae_getLinExpAttr(ctx, &LineExpAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getLinExpAttr error!");
|
LineExpAttr.Params.BackLightCtrl.Enable = on ? 1 : 0;
|
LineExpAttr.Params.BackLightCtrl.MeasArea = (CalibDb_AecMeasAreaModeV2_t)areaType;
|
LineExpAttr.Params.BackLightCtrl.StrBias = 0;
|
ret = rk_aiq_user_api2_ae_setLinExpAttr(ctx, LineExpAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setBLCMode error!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: backlight compensation strength,only available in normal mode
|
* Argument:
|
* strength: [1,100]
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setBLCStrength(const rk_aiq_sys_ctx_t* ctx, int strength)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_LinExpAttrV2_t LineExpAttr;
|
memset(&LineExpAttr, 0x00, sizeof(Uapi_LinExpAttrV2_t));
|
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
if (isHDRmode(ctx)) {
|
ret = XCAM_RETURN_ERROR_FAILED;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "Not support in HDR mode!");
|
} else {
|
ret = rk_aiq_user_api2_ae_getLinExpAttr(ctx, &LineExpAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getLinExpAttr error!");
|
if(0 == LineExpAttr.Params.BackLightCtrl.Enable)
|
RKAIQ_IMGPROC_CHECK_RET(ret, "blc mode is not enabled!");
|
LineExpAttr.Params.BackLightCtrl.StrBias = strength;
|
ret = rk_aiq_user_api2_ae_setLinExpAttr(ctx, LineExpAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setBLCStrength error!");
|
}
|
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: highlight compensation
|
* Argument:
|
* on: 1 on
|
* 0 off
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setHLCMode(const rk_aiq_sys_ctx_t* ctx, bool on)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_LinExpAttrV2_t LinExpAttr;
|
memset(&LinExpAttr, 0x00, sizeof(Uapi_LinExpAttrV2_t));
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
|
if (isHDRmode(ctx)) {
|
ret = XCAM_RETURN_ERROR_FAILED;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "Not support in HDR mode!");
|
} else {
|
ret = rk_aiq_user_api2_ae_getLinExpAttr(ctx, &LinExpAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\n setHLCMode failed!");
|
LinExpAttr.Params.OverExpCtrl.Enable = on ? 1 : 0;
|
LinExpAttr.Params.OverExpCtrl.StrBias = 0;
|
ret = rk_aiq_user_api2_ae_setLinExpAttr(ctx, LinExpAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "set exp attr failed!\n setHLCMode failed!");
|
}
|
IMGPROC_FUNC_EXIT
|
return ret;
|
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: highlight compensation strength
|
* Argument:
|
* strength: [1,100]
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setHLCStrength(const rk_aiq_sys_ctx_t* ctx, int strength)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_LinExpAttrV2_t LinExpAttr;
|
memset(&LinExpAttr, 0x00, sizeof(Uapi_LinExpAttrV2_t));
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
if (isHDRmode(ctx)) {
|
ret = XCAM_RETURN_ERROR_FAILED;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "Not support in HDR mode!");
|
} else {
|
ret = rk_aiq_user_api2_ae_getLinExpAttr(ctx, &LinExpAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getLinExpAttr error!");
|
if(0 == LinExpAttr.Params.OverExpCtrl.Enable)
|
RKAIQ_IMGPROC_CHECK_RET(ret, "hlc mode is not enabled!");
|
LinExpAttr.Params.OverExpCtrl.StrBias = strength;
|
ret = rk_aiq_user_api2_ae_setLinExpAttr(ctx, LinExpAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setHLCStrength error!");
|
}
|
IMGPROC_FUNC_EXIT
|
return ret;
|
|
}
|
/*
|
*****************************
|
*
|
* Desc: set anti-flicker mode
|
* Argument:
|
* mode
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setAntiFlickerEn(const rk_aiq_sys_ctx_t* ctx, bool on)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_ExpSwAttrV2_t expSwAttr;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
|
ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\nsetAntiFlickerEn failed!");
|
expSwAttr.stAuto.stAntiFlicker.enable = on;
|
|
ret = rk_aiq_user_api2_ae_setExpSwAttr(ctx, expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "set exp attr failed!\nsetAntiFlickerEn failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
/*
|
*****************************
|
*
|
* Desc: set anti-flicker mode
|
* Argument:
|
* mode
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_getAntiFlickerEn(const rk_aiq_sys_ctx_t* ctx, bool* on)
|
{
|
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_ExpSwAttrV2_t expSwAttr;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
|
ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\ngetAntiFlickerEn!");
|
*on = expSwAttr.stAuto.stAntiFlicker.enable;
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: set anti-flicker mode
|
* Argument:
|
* mode
|
*
|
*****************************
|
*/
|
|
XCamReturn rk_aiq_uapi2_setAntiFlickerMode(const rk_aiq_sys_ctx_t* ctx, antiFlickerMode_t mode)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_ExpSwAttrV2_t expSwAttr;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
|
ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\nsetAntiFlickerMode failed!");
|
if (mode == ANTIFLICKER_AUTO_MODE) {
|
expSwAttr.stAuto.stAntiFlicker.enable = true;
|
expSwAttr.stAuto.stAntiFlicker.Mode = AECV2_ANTIFLICKER_AUTO_MODE;
|
} else if(mode == ANTIFLICKER_NORMAL_MODE) {
|
expSwAttr.stAuto.stAntiFlicker.enable = true;
|
expSwAttr.stAuto.stAntiFlicker.Mode = AECV2_ANTIFLICKER_NORMAL_MODE;
|
} else {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "mode is invalid!");
|
}
|
ret = rk_aiq_user_api2_ae_setExpSwAttr(ctx, expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "set exp attr failed!\nsetAntiFlickerMode failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getAntiFlickerMode(const rk_aiq_sys_ctx_t* ctx, antiFlickerMode_t *mode)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_ExpSwAttrV2_t expSwAttr;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
|
ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
|
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\ngetAntiFlickerMode!");
|
if (expSwAttr.stAuto.stAntiFlicker.Mode == AECV2_ANTIFLICKER_AUTO_MODE)
|
*mode = ANTIFLICKER_AUTO_MODE;
|
else if (expSwAttr.stAuto.stAntiFlicker.Mode == AECV2_ANTIFLICKER_NORMAL_MODE)
|
*mode = ANTIFLICKER_NORMAL_MODE;
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: set power line frequence
|
* Argument:
|
* freq
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setExpPwrLineFreqMode(const rk_aiq_sys_ctx_t* ctx, expPwrLineFreq_t freq)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_ExpSwAttrV2_t expSwAttr;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\nsetExpPwrLineFreqMode failed!");
|
if (freq == EXP_PWR_LINE_FREQ_50HZ) {
|
expSwAttr.stAuto.stAntiFlicker.enable = true;
|
expSwAttr.stAuto.stAntiFlicker.Frequency = AECV2_FLICKER_FREQUENCY_50HZ;
|
} else if (freq == EXP_PWR_LINE_FREQ_60HZ) {
|
expSwAttr.stAuto.stAntiFlicker.enable = true;
|
expSwAttr.stAuto.stAntiFlicker.Frequency = AECV2_FLICKER_FREQUENCY_60HZ;
|
} else if (freq == EXP_PWR_LINE_FREQ_DIS) {
|
expSwAttr.stAuto.stAntiFlicker.enable = true;
|
expSwAttr.stAuto.stAntiFlicker.Frequency = AECV2_FLICKER_FREQUENCY_OFF;
|
} else {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "freq is invalid!");
|
}
|
ret = rk_aiq_user_api2_ae_setExpSwAttr(ctx, expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "set exp attr failed!\nsetExpPwrLineFreqMode failed!");
|
IMGPROC_FUNC_EXIT
|
return (ret);
|
}
|
XCamReturn rk_aiq_uapi2_getExpPwrLineFreqMode
|
(
|
const rk_aiq_sys_ctx_t* ctx,
|
expPwrLineFreq_t *freq
|
) {
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
Uapi_ExpSwAttrV2_t expSwAttr;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
|
ret = rk_aiq_user_api2_ae_getExpSwAttr(ctx, &expSwAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get exp attr failed!\nsetExpPwrLineFreqMode failed!");
|
if (expSwAttr.stAuto.stAntiFlicker.Frequency == AECV2_FLICKER_FREQUENCY_50HZ) {
|
*freq = EXP_PWR_LINE_FREQ_50HZ;
|
} else if (expSwAttr.stAuto.stAntiFlicker.Frequency == AECV2_FLICKER_FREQUENCY_60HZ) {
|
*freq = EXP_PWR_LINE_FREQ_60HZ;
|
} else if (expSwAttr.stAuto.stAntiFlicker.Frequency == AECV2_FLICKER_FREQUENCY_OFF) {
|
*freq = EXP_PWR_LINE_FREQ_DIS;
|
} else {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "freq is invalid!");
|
}
|
IMGPROC_FUNC_EXIT
|
return (ret);
|
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: Adjust image gamma
|
*
|
* Argument:
|
* GammaCoef: [0, 100]
|
* SlopeAtZero: [-0.05, 0.05]
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setGammaCoef(const rk_aiq_sys_ctx_t* ctx, float GammaCoef, float SlopeAtZero)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, setGammaCoef failed!");
|
}
|
|
if (GammaCoef < 0 || GammaCoef > 100) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, GammaCoef range is [0,100]!");
|
}
|
if (SlopeAtZero < -0.05 || SlopeAtZero > 0.05) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, SlopeAtZero range is [-0.05,0.05]!");
|
}
|
|
rk_aiq_gamma_attrib_V2_t gammaAttr;
|
memset(&gammaAttr, 0x0, sizeof(rk_aiq_gamma_attrib_V2_t));
|
gammaAttr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
|
gammaAttr.sync.done = false;
|
if(CHECK_ISP_HW_V21()) {
|
gammaAttr.atrrV21.mode = RK_AIQ_GAMMA_MODE_FAST;
|
gammaAttr.atrrV21.stFast.en = true;
|
gammaAttr.atrrV21.stFast.GammaCoef = GammaCoef;
|
gammaAttr.atrrV21.stFast.SlopeAtZero = SlopeAtZero;
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
gammaAttr.atrrV30.mode = RK_AIQ_GAMMA_MODE_FAST;
|
gammaAttr.atrrV30.stFast.en = true;
|
gammaAttr.atrrV30.stFast.GammaCoef = GammaCoef;
|
gammaAttr.atrrV30.stFast.SlopeAtZero = SlopeAtZero;
|
}
|
|
ret = rk_aiq_user_api2_agamma_SetAttrib(ctx, gammaAttr);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: set manual dehaze strength
|
* this function is active for dehaze is manual mode
|
* Argument:
|
* level: [0, 100]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setMDehazeStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
adehaze_sw_V2_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
|
}
|
if (level < 1 || level > 100) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, strength range is [1,10]!");
|
}
|
attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
|
attr.sync.done = false;
|
attr.mode = DEHAZE_API_DEHAZE_MANUAL;
|
attr.stDehazeManu.level = level;
|
ret = rk_aiq_user_api2_adehaze_setSwAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setMDhzStrth failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getMDehazeStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int *level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
adehaze_sw_V2_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
|
}
|
ret = rk_aiq_user_api2_adehaze_getSwAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getMDhzStrth failed in get attrib!");
|
if (attr.mode != DEHAZE_API_DEHAZE_MANUAL) {
|
LOGE("Not in Dehaze manual mode!");
|
*level = 0;
|
} else
|
*level = attr.stDehazeManu.level;
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
/*
|
*****************************
|
*
|
* Desc: set manual enhance strength
|
* this function is active for dehaze is manual mode
|
* Argument:
|
* level: [0, 100]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setMEnhanceStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
adehaze_sw_V2_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
|
}
|
if (level < 1 || level > 100) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, level range is [1,10]!");
|
}
|
attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
|
attr.sync.done = false;
|
attr.mode = DEHAZE_API_ENHANCE_MANUAL;
|
attr.stEnhanceManu.level = level;
|
ret = rk_aiq_user_api2_adehaze_setSwAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setMEnhanceStrth failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getMEnhanceStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int *level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
adehaze_sw_V2_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
|
}
|
ret = rk_aiq_user_api2_adehaze_getSwAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getMEnhanceStrth failed in get attrib!");
|
if (attr.mode != DEHAZE_API_ENHANCE_MANUAL) {
|
LOGE("Not in Enhance manual mode!");
|
*level = 0;
|
} else
|
*level = attr.stEnhanceManu.level;
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: set manual drc Local TMO
|
* this function is active for DRC is DRC Gain mode
|
* use in RK356x
|
* Argument:
|
* LocalWeit: [0, 1]
|
* GlobalContrast: [0, 1]
|
* LoLitContrast: [0, 1]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setDrcLocalTMO(const rk_aiq_sys_ctx_t* ctx, float LocalWeit, float GlobalContrast, float LoLitContrast)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
if(CHECK_ISP_HW_V20()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.0 do not support drc api!");
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "RK356x do not support rk_aiq_uapi2_setDrcLocalTMO! Plesea use rk_aiq_uapi2_setDrcLocalData");
|
}
|
else if(CHECK_ISP_HW_V21()) {
|
drc_attrib_t attr;
|
IMGPROC_FUNC_ENTER
|
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
|
}
|
if (LocalWeit < 0 || LocalWeit > 1) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, LocalWeit range is [0,1]!");
|
}
|
if (GlobalContrast < 0 || GlobalContrast > 1) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, GlobalContrast range is [0,1]!");
|
}
|
if (LoLitContrast < 0 || LoLitContrast > 1) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, LoLitContrast range is [0,1]!");
|
}
|
attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
|
attr.sync.done = false;
|
attr.opMode = DRC_OPMODE_LOCAL_TMO;
|
attr.stLocalDataV21.LocalWeit = LocalWeit;
|
attr.stLocalDataV21.GlobalContrast = GlobalContrast;
|
attr.stLocalDataV21.LoLitContrast = LoLitContrast;
|
|
ret = rk_aiq_user_api2_adrc_SetAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed!");
|
IMGPROC_FUNC_EXIT
|
}
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getDrcLocalTMO(const rk_aiq_sys_ctx_t* ctx, float * LocalWeit, float * GlobalContrast, float * LoLitContrast)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
if(CHECK_ISP_HW_V20()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.0 do not support drc api!");
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "RK356x do not support rk_aiq_uapi2_getDrcLocalTMO! Plesea use rk_aiq_uapi2_getDrcLocalData");
|
}
|
else if(CHECK_ISP_HW_V21()) {
|
drc_attrib_t attr;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
|
}
|
ret = rk_aiq_user_api2_adrc_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed in get attrib!");
|
|
*LocalWeit = attr.stLocalDataV21.LocalWeit;
|
*GlobalContrast = attr.stLocalDataV21.GlobalContrast;
|
*LoLitContrast = attr.stLocalDataV21.LoLitContrast;
|
|
IMGPROC_FUNC_EXIT
|
}
|
|
return ret;
|
}
|
/*
|
*****************************
|
*
|
* Desc: set manual drc Local Data
|
* this function is active for DRC is DRC Gain mode
|
* use in RK3588
|
* Argument:
|
* LocalWeit: [0, 1]
|
* GlobalContrast: [0, 1]
|
* LoLitContrast: [0, 1]
|
* LocalAutoEnable: [0, 1]
|
* LocalAutoWeit: [0, 1]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setDrcLocalData(const rk_aiq_sys_ctx_t* ctx, float LocalWeit, float GlobalContrast,
|
float LoLitContrast, int LocalAutoEnable, float LocalAutoWeit)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
if(CHECK_ISP_HW_V20()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.0 do not support drc api!");
|
}
|
else if(CHECK_ISP_HW_V21()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "RK3588 do not support rk_aiq_uapi2_setDrcLocalData! Plesea use rk_aiq_uapi2_setDrcLocalTMO");
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
drc_attrib_t attr;
|
IMGPROC_FUNC_ENTER
|
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
|
}
|
if (LocalWeit < 0 || LocalWeit > 1) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, LocalWeit range is [0,1]!");
|
}
|
if (GlobalContrast < 0 || GlobalContrast > 1) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, GlobalContrast range is [0,1]!");
|
}
|
if (LoLitContrast < 0 || LoLitContrast > 1) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, LoLitContrast range is [0,1]!");
|
}
|
if (LocalAutoEnable < 0 || LocalAutoEnable > 1) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, LocalAutoEnable range is [0,1]!");
|
}
|
if (LocalAutoWeit < 0 || LocalAutoWeit > 1) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, LocalAutoWeit range is [0,1]!");
|
}
|
attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
|
attr.sync.done = false;
|
attr.opMode = DRC_OPMODE_LOCAL_TMO;
|
attr.stLocalDataV30.LocalWeit = LocalWeit;
|
attr.stLocalDataV30.GlobalContrast = GlobalContrast;
|
attr.stLocalDataV30.LoLitContrast = LoLitContrast;
|
attr.stLocalDataV30.LocalAutoEnable = LocalAutoEnable;
|
attr.stLocalDataV30.LocalAutoWeit = LocalAutoWeit;
|
|
ret = rk_aiq_user_api2_adrc_SetAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed!");
|
IMGPROC_FUNC_EXIT
|
}
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getDrcLocalData(const rk_aiq_sys_ctx_t* ctx, float * LocalWeit, float * GlobalContrast,
|
float * LoLitContrast, int* LocalAutoEnable, float* LocalAutoWeit)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
if(CHECK_ISP_HW_V20()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.0 do not support drc api!");
|
}
|
else if(CHECK_ISP_HW_V21()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "RK3588 do not support rk_aiq_uapi2_setDrcLocalData! Plesea use rk_aiq_uapi2_setDrcLocalTMO");
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
drc_attrib_t attr;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
|
}
|
ret = rk_aiq_user_api2_adrc_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed in get attrib!");
|
|
*LocalWeit = attr.stLocalDataV30.LocalWeit;
|
*GlobalContrast = attr.stLocalDataV30.GlobalContrast;
|
*LoLitContrast = attr.stLocalDataV30.LoLitContrast;
|
*LocalAutoEnable = attr.stLocalDataV30.LocalAutoEnable;
|
*LocalAutoWeit = attr.stLocalDataV30.LocalAutoWeit;
|
|
IMGPROC_FUNC_EXIT
|
}
|
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: set manual drc HiLit
|
* this function is active for DRC is HiLit mode
|
* Argument:
|
* Strength: [0, 1]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setDrcHiLit(const rk_aiq_sys_ctx_t* ctx, float Strength)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
if(CHECK_ISP_HW_V20()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.0 do not support drc api!");
|
}
|
else if(CHECK_ISP_HW_V21() || CHECK_ISP_HW_V30()) {
|
drc_attrib_t attr;
|
IMGPROC_FUNC_ENTER
|
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
|
}
|
if (Strength < 0 || Strength > 1) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, Strength range is [0,1]!");
|
}
|
attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
|
attr.sync.done = false;
|
attr.opMode = DRC_OPMODE_HILIT;
|
attr.stHiLit.Strength = Strength;
|
|
ret = rk_aiq_user_api2_adrc_SetAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed!");
|
IMGPROC_FUNC_EXIT
|
}
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getDrcHiLit(const rk_aiq_sys_ctx_t* ctx, float * Strength)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
if(CHECK_ISP_HW_V20()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.0 do not support drc api!");
|
}
|
else if(CHECK_ISP_HW_V21() || CHECK_ISP_HW_V30()) {
|
drc_attrib_t attr;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
|
}
|
ret = rk_aiq_user_api2_adrc_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed in get attrib!");
|
|
*Strength = attr.stHiLit.Strength;
|
|
IMGPROC_FUNC_EXIT
|
}
|
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: set manual drc Gain
|
* this function is active for DRC is DRC Gain mode
|
* Argument:
|
* Gain: [1, 8]
|
* Alpha: [0, 1]
|
* Clip: [0, 64]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setDrcGain(const rk_aiq_sys_ctx_t* ctx, float Gain, float Alpha, float Clip)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
if(CHECK_ISP_HW_V20()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.0 do not support drc api!");
|
}
|
else if(CHECK_ISP_HW_V21() || CHECK_ISP_HW_V30()) {
|
drc_attrib_t attr;
|
IMGPROC_FUNC_ENTER
|
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
|
}
|
if (Gain < 1 || Gain > 8) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, Gain range is [1,8]!");
|
}
|
if (Alpha < 0 || Alpha > 1) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, Alpha range is [0,1]!");
|
}
|
if (Clip < 0 || Clip > 64) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, Clip range is [0,64]!");
|
}
|
attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
|
attr.sync.done = false;
|
attr.opMode = DRC_OPMODE_DRC_GAIN;
|
attr.stDrcGain.DrcGain = Gain;
|
attr.stDrcGain.Alpha = Alpha;
|
attr.stDrcGain.Clip = Clip;
|
|
ret = rk_aiq_user_api2_adrc_SetAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed!");
|
IMGPROC_FUNC_EXIT
|
}
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getDrcGain(const rk_aiq_sys_ctx_t* ctx, float * Gain, float * Alpha, float * Clip)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
if(CHECK_ISP_HW_V20()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.0 do not support drc api!");
|
}
|
else if(CHECK_ISP_HW_V21() || CHECK_ISP_HW_V30()) {
|
drc_attrib_t attr;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, ctx is NULL!");
|
}
|
ret = rk_aiq_user_api2_adrc_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setDrcGain failed in get attrib!");
|
*Gain = attr.stDrcGain.DrcGain;
|
*Alpha = attr.stDrcGain.Alpha;
|
*Clip = attr.stDrcGain.Clip;
|
|
IMGPROC_FUNC_EXIT
|
}
|
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: set/get dark area boost strength
|
* this function is active for normal mode
|
* Argument:
|
* level: [1, 10]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_getDarkAreaBoostStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int *level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
if(CHECK_ISP_HW_V20()) {
|
atmo_attrib_t attr;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, getDarkAreaBoostStrth failed!");
|
}
|
if (isHDRmode(ctx)) {
|
ret = XCAM_RETURN_ERROR_FAILED;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "Not valid in tmo mode!");
|
}
|
ret = rk_aiq_user_api2_atmo_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getDarkAreaBoostStrth failed!");
|
if (attr.opMode == TMO_OPMODE_DARKAREA)
|
*level = attr.stDarkArea.level;
|
else
|
*level = 0;
|
IMGPROC_FUNC_EXIT
|
}
|
else if(CHECK_ISP_HW_V21()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.1 do not support tmo api!");
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP3.0 do not support tmo api!");
|
}
|
|
return ret;
|
}
|
XCamReturn rk_aiq_uapi2_setDarkAreaBoostStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
if(CHECK_ISP_HW_V20()) {
|
atmo_attrib_t attr;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, getDarkAreaBoostStrth failed!");
|
}
|
if (isHDRmode(ctx)) {
|
atmo_attrib_t attr;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, setMHDRStrth failed!");
|
}
|
|
if (isHDRmode(ctx)) {
|
ret = XCAM_RETURN_ERROR_FAILED;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "Not valid in HDR mode!");
|
}
|
if (level > 10) {
|
ret = XCAM_RETURN_ERROR_OUTOFRANGE;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "level(%d) is out of range, setDarkAreaBoostStrth failed!");
|
}
|
attr.stDarkArea.level = level;
|
attr.opMode = TMO_OPMODE_DARKAREA;
|
ret = rk_aiq_user_api2_atmo_SetAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setDarkAreaBoostStrth failed!");
|
IMGPROC_FUNC_EXIT
|
}
|
}
|
else if(CHECK_ISP_HW_V21()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.1 do not support tmo api!");
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP3.0 do not support tmo api!");
|
}
|
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: set/get manual hdr strength
|
* this function is active for HDR is manual mode
|
* Argument:
|
* level: [1, 100]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setMHDRStrth(const rk_aiq_sys_ctx_t* ctx, bool on, unsigned int level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
if(CHECK_ISP_HW_V20()) {
|
atmo_attrib_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, setMHDRStrth failed!");
|
}
|
|
if (!isHDRmode(ctx)) {
|
ret = XCAM_RETURN_ERROR_FAILED;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "not in HDR mode!");
|
}
|
if (level < 1 || level > 100) {
|
ret = XCAM_RETURN_ERROR_OUTOFRANGE;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "level(%d) is out of range, setMHDRStrth failed!");
|
}
|
|
attr.stSetLevel.level = level;
|
attr.opMode = TMO_OPMODE_SET_LEVEL;
|
ret = rk_aiq_user_api2_atmo_SetAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setMHDRStrth failed!");
|
IMGPROC_FUNC_EXIT
|
}
|
else if(CHECK_ISP_HW_V21()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.1 do not support tmo api, ctx is NULL!");
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP3.0 do not support tmo api!");
|
}
|
|
return ret;
|
}
|
XCamReturn rk_aiq_uapi2_getMHDRStrth(const rk_aiq_sys_ctx_t* ctx, bool * on, unsigned int *level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
if(CHECK_ISP_HW_V20()) {
|
atmo_attrib_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, getMHDRStrth failed!");
|
}
|
if (!isHDRmode(ctx)) {
|
ret = XCAM_RETURN_ERROR_FAILED;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "not in HDR mode!");
|
}
|
ret = rk_aiq_user_api2_atmo_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getMHDRStrth failed in get attrib!");
|
|
*level = attr.stSetLevel.level;
|
IMGPROC_FUNC_EXIT
|
|
}
|
else if(CHECK_ISP_HW_V21()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP2.1 do not support tmo api, ctx is NULL!");
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ISP3.0 do not support tmo api!");
|
}
|
|
return ret;
|
}
|
|
|
/*
|
**********************************************************
|
* Noise reduction
|
**********************************************************
|
*/
|
/*
|
*****************************
|
*
|
* Desc: set noise reduction mode
|
* Argument:
|
* mode:
|
* auto: auto noise reduction
|
* manualï¼manual noise reduction
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setNRMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
IMGPROC_FUNC_ENTER
|
|
if (CHECK_ISP_HW_V20()) {
|
rk_aiq_nr_attrib_t attr;
|
ret = rk_aiq_user_api2_anr_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get anr attrib failed!,ret=%d", ret);
|
if (mode == OP_AUTO) {
|
attr.eMode = ANR_OP_MODE_AUTO;
|
} else if (mode == OP_MANUAL) {
|
attr.eMode = ANR_OP_MODE_MANUAL;
|
} else {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
|
}
|
ret = rk_aiq_user_api2_anr_SetAttrib(ctx, &attr);
|
}
|
|
if (CHECK_ISP_HW_V21()) {
|
rk_aiq_ynr_attrib_v2_t ynrV2_attr;
|
rk_aiq_bayernr_attrib_v2_t bayernrV2_attr;
|
rk_aiq_cnr_attrib_v1_t cnrV1_attr;
|
ret = rk_aiq_user_api2_aynrV2_GetAttrib(ctx, &ynrV2_attr);
|
ret = rk_aiq_user_api2_abayernrV2_GetAttrib(ctx, &bayernrV2_attr);
|
ret = rk_aiq_user_api2_acnrV1_GetAttrib(ctx, &cnrV1_attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get anr attrib failed!,ret=%d", ret);
|
if (mode == OP_AUTO) {
|
bayernrV2_attr.eMode = ABAYERNR_OP_MODE_AUTO;
|
ynrV2_attr.eMode = AYNR_OP_MODE_AUTO;
|
cnrV1_attr.eMode = ACNR_OP_MODE_AUTO;
|
} else if (mode == OP_MANUAL) {
|
bayernrV2_attr.eMode = ABAYERNR_OP_MODE_MANUAL;
|
ynrV2_attr.eMode = AYNR_OP_MODE_MANUAL;
|
cnrV1_attr.eMode = ACNR_OP_MODE_MANUAL;
|
} else {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
|
}
|
ret = rk_aiq_user_api2_aynrV2_SetAttrib(ctx, &ynrV2_attr);
|
ret = rk_aiq_user_api2_abayernrV2_SetAttrib(ctx, &bayernrV2_attr);
|
ret = rk_aiq_user_api2_acnrV1_SetAttrib(ctx, &cnrV1_attr);
|
}
|
|
if (CHECK_ISP_HW_V30()) {
|
rk_aiq_ynr_attrib_v3_t ynrV3_attr;
|
ynrV3_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
rk_aiq_cnr_attrib_v2_t cnrV2_attr;
|
cnrV2_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
rk_aiq_bayer2dnr_attrib_v2_t bayer2dnrV2_attr;
|
bayer2dnrV2_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
rk_aiq_bayertnr_attrib_v2_t bayertnrV2_attr;
|
bayertnrV2_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
ret = rk_aiq_user_api2_aynrV3_GetAttrib(ctx, &ynrV3_attr);
|
ret = rk_aiq_user_api2_acnrV2_GetAttrib(ctx, &cnrV2_attr);
|
ret = rk_aiq_user_api2_abayer2dnrV2_GetAttrib(ctx, &bayer2dnrV2_attr);
|
ret = rk_aiq_user_api2_abayertnrV2_GetAttrib(ctx, &bayertnrV2_attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get anr attrib failed!,ret=%d", ret);
|
|
if (mode == OP_AUTO) {
|
ynrV3_attr.eMode = AYNRV3_OP_MODE_AUTO;
|
cnrV2_attr.eMode = ACNRV2_OP_MODE_AUTO;
|
bayer2dnrV2_attr.eMode = ABAYER2DNR_OP_MODE_AUTO;
|
bayertnrV2_attr.eMode = ABAYERTNRV2_OP_MODE_AUTO;
|
} else if (mode == OP_MANUAL) {
|
ynrV3_attr.eMode = AYNRV3_OP_MODE_MANUAL;
|
cnrV2_attr.eMode = ACNRV2_OP_MODE_MANUAL;
|
bayer2dnrV2_attr.eMode = ABAYER2DNR_OP_MODE_MANUAL;
|
bayertnrV2_attr.eMode = ABAYERTNRV2_OP_MODE_MANUAL;
|
} else if(mode == OP_REG_MANUAL) {
|
ynrV3_attr.eMode = AYNRV3_OP_MODE_REG_MANUAL;
|
cnrV2_attr.eMode = ACNRV2_OP_MODE_REG_MANUAL;
|
bayer2dnrV2_attr.eMode = ABAYER2DNR_OP_MODE_REG_MANUAL;
|
bayertnrV2_attr.eMode = ABAYERTNRV2_OP_MODE_REG_MANUAL;
|
} else {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
|
}
|
ret = rk_aiq_user_api2_aynrV3_SetAttrib(ctx, &ynrV3_attr);
|
ret = rk_aiq_user_api2_acnrV2_SetAttrib(ctx, &cnrV2_attr);
|
ret = rk_aiq_user_api2_abayer2dnrV2_SetAttrib(ctx, &bayer2dnrV2_attr);
|
ret = rk_aiq_user_api2_abayertnrV2_SetAttrib(ctx, &bayertnrV2_attr);
|
}
|
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setNRMode failed!", ret);
|
IMGPROC_FUNC_EXIT
|
|
return ret;
|
}
|
|
|
XCamReturn rk_aiq_uapi2_getNRMode(const rk_aiq_sys_ctx_t* ctx, opMode_t *mode)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
|
if (CHECK_ISP_HW_V20()) {
|
rk_aiq_nr_attrib_t attr;
|
ret = rk_aiq_user_api2_anr_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get anr attrib failed!,ret=%d", ret);
|
if (attr.eMode == ANR_OP_MODE_AUTO) {
|
*mode = OP_AUTO;
|
} else if (attr.eMode == ANR_OP_MODE_MANUAL) {
|
*mode = OP_MANUAL;
|
} else if (attr.eMode == ANR_OP_MODE_INVALID) {
|
*mode = OP_INVAL;
|
}
|
}
|
|
if (CHECK_ISP_HW_V21()) {
|
rk_aiq_ynr_attrib_v2_t ynrV2_attr;
|
rk_aiq_bayernr_attrib_v2_t bayernrV2_attr;
|
rk_aiq_cnr_attrib_v1_t cnrV1_attr;
|
ret = rk_aiq_user_api2_aynrV2_GetAttrib(ctx, &ynrV2_attr);
|
ret = rk_aiq_user_api2_abayernrV2_GetAttrib(ctx, &bayernrV2_attr);
|
ret = rk_aiq_user_api2_acnrV1_GetAttrib(ctx, &cnrV1_attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get anr attrib failed!,ret=%d", ret);
|
|
if (bayernrV2_attr.eMode == ABAYERNR_OP_MODE_AUTO
|
&& ynrV2_attr.eMode == AYNR_OP_MODE_AUTO
|
&& cnrV1_attr.eMode == ACNR_OP_MODE_AUTO) {
|
*mode = OP_AUTO;
|
} else if (bayernrV2_attr.eMode == ABAYERNR_OP_MODE_MANUAL
|
&& ynrV2_attr.eMode == AYNR_OP_MODE_MANUAL
|
&& cnrV1_attr.eMode == ACNR_OP_MODE_MANUAL) {
|
*mode = OP_MANUAL;
|
} else if (bayernrV2_attr.eMode == ABAYERNR_OP_MODE_INVALID
|
&& ynrV2_attr.eMode == AYNR_OP_MODE_INVALID
|
&& cnrV1_attr.eMode == ACNR_OP_MODE_INVALID) {
|
*mode = OP_INVAL;
|
} else {
|
LOGE_ANR("bayernr.mode:%d ynr.mode:%d cnr.mode:%d\n",
|
bayernrV2_attr.eMode,
|
ynrV2_attr.eMode,
|
cnrV1_attr.eMode);
|
}
|
|
}
|
|
if (CHECK_ISP_HW_V30()) {
|
rk_aiq_ynr_attrib_v3_t ynrV3_attr;
|
ynrV3_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
rk_aiq_cnr_attrib_v2_t cnrV2_attr;
|
cnrV2_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
rk_aiq_bayer2dnr_attrib_v2_t bayer2dnrV2_attr;
|
bayer2dnrV2_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
rk_aiq_bayertnr_attrib_v2_t bayertnrV2_attr;
|
bayertnrV2_attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
ret = rk_aiq_user_api2_aynrV3_GetAttrib(ctx, &ynrV3_attr);
|
ret = rk_aiq_user_api2_acnrV2_GetAttrib(ctx, &cnrV2_attr);
|
ret = rk_aiq_user_api2_abayer2dnrV2_GetAttrib(ctx, &bayer2dnrV2_attr);
|
ret = rk_aiq_user_api2_abayertnrV2_GetAttrib(ctx, &bayertnrV2_attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get anr attrib failed!,ret=%d", ret);
|
|
if(ynrV3_attr.eMode == AYNRV3_OP_MODE_AUTO
|
&& cnrV2_attr.eMode == ACNRV2_OP_MODE_AUTO
|
&& bayer2dnrV2_attr.eMode == ABAYER2DNR_OP_MODE_AUTO
|
&& bayertnrV2_attr.eMode == ABAYERTNRV2_OP_MODE_AUTO) {
|
*mode = OP_AUTO;
|
} else if(ynrV3_attr.eMode == AYNRV3_OP_MODE_MANUAL
|
&& cnrV2_attr.eMode == ACNRV2_OP_MODE_MANUAL
|
&& bayer2dnrV2_attr.eMode == ABAYER2DNR_OP_MODE_MANUAL
|
&& bayertnrV2_attr.eMode == ABAYERTNRV2_OP_MODE_MANUAL) {
|
*mode = OP_MANUAL;
|
} else if(ynrV3_attr.eMode == AYNRV3_OP_MODE_REG_MANUAL
|
&& cnrV2_attr.eMode == ACNRV2_OP_MODE_REG_MANUAL
|
&& bayer2dnrV2_attr.eMode == ABAYER2DNR_OP_MODE_REG_MANUAL
|
&& bayertnrV2_attr.eMode == ABAYERTNRV2_OP_MODE_REG_MANUAL) {
|
*mode = OP_REG_MANUAL;
|
} else {
|
LOGE_ANR("ynr.mode:%d cnr.mode:%d bayer2dnr.mode:%d bayertnr.mode:%d\n",
|
ynrV3_attr.eMode,
|
cnrV2_attr.eMode,
|
bayer2dnrV2_attr.eMode,
|
bayertnrV2_attr.eMode);
|
}
|
}
|
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
|
|
/*
|
*****************************
|
*
|
* Desc: set normal noise reduction strength
|
* Argument:
|
* level: [0, 100]
|
* Normal mode
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setANRStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
IMGPROC_FUNC_ENTER
|
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, setANRStrth failed!");
|
}
|
|
if (CHECK_ISP_HW_V20()) {
|
ret = rk_aiq_user_api2_anr_SetLumaSFStrength(ctx, level / 100.0);
|
ret = rk_aiq_user_api2_anr_SetLumaTFStrength(ctx, level / 100.0);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setANRStrth failed!", ret);
|
}
|
|
if (CHECK_ISP_HW_V21()) {
|
ret = rk_aiq_user_api2_aynrV2_SetStrength(ctx, level / 100.0);
|
ret = rk_aiq_user_api2_abayernrV2_SetSFStrength(ctx, level / 100.0);
|
ret = rk_aiq_user_api2_abayernrV2_SetTFStrength(ctx, level / 100.0);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setANRStrth failed!", ret);
|
}
|
|
if (CHECK_ISP_HW_V30()) {
|
rk_aiq_ynr_strength_v3_t ynrStrenght;
|
ynrStrenght.strength_enable = true;
|
ynrStrenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
ynrStrenght.percent = level / 100.0;
|
ret = rk_aiq_user_api2_aynrV3_SetStrength(ctx, &ynrStrenght);
|
rk_aiq_bayer2dnr_strength_v2_t bayer2dnrV2Strenght;
|
bayer2dnrV2Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
bayer2dnrV2Strenght.strength_enable = true;
|
bayer2dnrV2Strenght.percent = level / 100.0;
|
ret = rk_aiq_user_api2_abayer2dnrV2_SetStrength(ctx, &bayer2dnrV2Strenght);
|
rk_aiq_bayertnr_strength_v2_t bayertnrV2Strenght;
|
bayertnrV2Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
bayertnrV2Strenght.strength_enable = true;
|
bayertnrV2Strenght.percent = level / 100.0;
|
ret = rk_aiq_user_api2_abayertnrV2_SetStrength(ctx, &bayertnrV2Strenght);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setANRStrth failed!", ret);
|
}
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
|
XCamReturn rk_aiq_uapi2_getANRStrth(const rk_aiq_sys_ctx_t* ctx, unsigned int *level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
float percent = 0.0f;
|
|
IMGPROC_FUNC_ENTER
|
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, getANRStrth failed!");
|
}
|
|
if (CHECK_ISP_HW_V20()) {
|
ret = rk_aiq_user_api2_anr_GetLumaTFStrength(ctx, &percent);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getANRStrth failed!", ret);
|
*level = (unsigned int)(percent * 100);
|
}
|
|
if (CHECK_ISP_HW_V21()) {
|
ret = rk_aiq_user_api2_abayernrV2_GetTFStrength(ctx, &percent);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getANRStrth failed!", ret);
|
*level = (unsigned int)(percent * 100);
|
}
|
|
if (CHECK_ISP_HW_V30()) {
|
rk_aiq_bayertnr_strength_v2_t bayertnrV2Strenght;
|
bayertnrV2Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
ret = rk_aiq_user_api2_abayertnrV2_GetStrength(ctx, &bayertnrV2Strenght);
|
percent = bayertnrV2Strenght.percent;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getANRStrth failed!", ret);
|
*level = (unsigned int)(percent * 100);
|
}
|
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
|
/*
|
*****************************
|
*
|
* Desc: set manual spatial noise reduction strength
|
* this function is active for NR is manual mode
|
* Argument:
|
* level: [0, 100]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setMSpaNRStrth(const rk_aiq_sys_ctx_t* ctx, bool on, unsigned int level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, setMSpaNRStrth failed!");
|
}
|
|
if (CHECK_ISP_HW_V20()) {
|
ret = rk_aiq_user_api2_anr_SetLumaSFStrength(ctx, level / 100.0);
|
}
|
|
if (CHECK_ISP_HW_V21()) {
|
ret = rk_aiq_user_api2_abayernrV2_SetSFStrength(ctx, level / 100.0);
|
ret = rk_aiq_user_api2_aynrV2_SetStrength(ctx, level / 100.0);
|
}
|
|
if (CHECK_ISP_HW_V30()) {
|
rk_aiq_ynr_strength_v3_t ynrStrenght;
|
ynrStrenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
ynrStrenght.strength_enable = true;
|
ynrStrenght.percent = level / 100.0;
|
ret = rk_aiq_user_api2_aynrV3_SetStrength(ctx, &ynrStrenght);
|
rk_aiq_bayer2dnr_strength_v2_t bayer2dnrV2Strenght;
|
bayer2dnrV2Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
bayer2dnrV2Strenght.strength_enable = true;
|
bayer2dnrV2Strenght.percent = level / 100.0;
|
ret = rk_aiq_user_api2_abayer2dnrV2_SetStrength(ctx, &bayer2dnrV2Strenght);
|
}
|
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setMSpaNRStrth failed!", ret);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
|
|
/*
|
*****************************
|
*
|
* Desc: get manual spatial noise reduction strength
|
* this function is active for NR is manual mode
|
* Argument:
|
* level: [0, 100]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_getMSpaNRStrth(const rk_aiq_sys_ctx_t* ctx, bool * on, unsigned int *level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
float percent = 0.0f;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, getMSpaNRStrth failed!");
|
}
|
|
if (CHECK_ISP_HW_V20()) {
|
ret = rk_aiq_user_api2_anr_GetLumaSFStrength(ctx, &percent);
|
}
|
|
if (CHECK_ISP_HW_V21()) {
|
ret = rk_aiq_user_api2_abayernrV2_GetSFStrength(ctx, &percent);
|
}
|
|
if (CHECK_ISP_HW_V30()) {
|
rk_aiq_bayer2dnr_strength_v2_t bayer2dnrV2Strenght;
|
bayer2dnrV2Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
ret = rk_aiq_user_api2_abayer2dnrV2_GetStrength(ctx, &bayer2dnrV2Strenght);
|
percent = bayer2dnrV2Strenght.percent;
|
}
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getMSpaNRStrth failed!", ret);
|
*level = (unsigned int)(percent * 100);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
|
|
/*
|
*****************************
|
*
|
* Desc: set manual time noise reduction strength
|
* this function is active for NR is manual mode
|
* Argument:
|
* level: [0, 100]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setMTNRStrth(const rk_aiq_sys_ctx_t* ctx, bool on, unsigned int level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
LOGD("level=%d", level);
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, setMTNRStrth failed!");
|
}
|
|
if (CHECK_ISP_HW_V20()) {
|
ret = rk_aiq_user_api2_anr_SetLumaTFStrength(ctx, level / 100.0);
|
}
|
|
if (CHECK_ISP_HW_V21()) {
|
ret = rk_aiq_user_api2_abayernrV2_SetTFStrength(ctx, level / 100.0);
|
}
|
|
if (CHECK_ISP_HW_V30()) {
|
rk_aiq_bayertnr_strength_v2_t bayertnrV2Strenght;
|
bayertnrV2Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
bayertnrV2Strenght.strength_enable = true;
|
bayertnrV2Strenght.percent = level / 100.0;
|
ret = rk_aiq_user_api2_abayertnrV2_SetStrength(ctx, &bayertnrV2Strenght);
|
}
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setMTNRStrth failed!", ret);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
|
|
/*
|
*****************************
|
*
|
* Desc: get manual time noise reduction strength
|
* this function is active for NR is manual mode
|
* Argument:
|
* level: [0, 100]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_getMTNRStrth(const rk_aiq_sys_ctx_t* ctx, bool * on, unsigned int *level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
float percent = 0.0f;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, getMTNRStrth failed!");
|
}
|
|
if (CHECK_ISP_HW_V20()) {
|
ret = rk_aiq_user_api2_anr_GetLumaTFStrength(ctx, &percent);
|
}
|
|
if (CHECK_ISP_HW_V21()) {
|
ret = rk_aiq_user_api2_abayernrV2_GetTFStrength(ctx, &percent);
|
}
|
|
if (CHECK_ISP_HW_V30()) {
|
rk_aiq_bayertnr_strength_v2_t bayertnrV2Strenght;
|
bayertnrV2Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
ret = rk_aiq_user_api2_abayertnrV2_GetStrength(ctx, &bayertnrV2Strenght);
|
percent = bayertnrV2Strenght.percent;
|
}
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getMTNRStrth failed!", ret);
|
*level = (unsigned int)(percent * 100);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
|
/*
|
*****************************
|
*
|
* Desc: Adjust image sharpness level
|
* Argument:
|
* level: sharpness level, [0, 100]
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setSharpness(const rk_aiq_sys_ctx_t* ctx, unsigned int level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
float fPercent = 0.0f;
|
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "ctx is null, set sharpeness failed!");
|
}
|
|
LOGD("setSharpness enter, level=%d\n", level);
|
if (level < 0 || level > 100) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "level out of range, set sharpeness failed!");
|
}
|
fPercent = level / 100.0f;
|
|
|
if (CHECK_ISP_HW_V21()) {
|
ret = rk_aiq_user_api2_asharpV3_SetStrength(ctx, fPercent);
|
}
|
|
if (CHECK_ISP_HW_V30()) {
|
rk_aiq_sharp_strength_v4_t sharpV4Strenght;
|
sharpV4Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
sharpV4Strenght.strength_enable = true;
|
sharpV4Strenght.percent = fPercent;
|
ret = rk_aiq_user_api2_asharpV4_SetStrength(ctx, &sharpV4Strenght);
|
}
|
RKAIQ_IMGPROC_CHECK_RET(ret, "set sharpeness failed!");
|
IMGPROC_FUNC_EXIT
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getSharpness(const rk_aiq_sys_ctx_t* ctx, unsigned int *level)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
float fPercent = 0.0f;
|
|
IMGPROC_FUNC_ENTER
|
if (level == NULL || ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, get sharpeness failed!");
|
}
|
|
if (CHECK_ISP_HW_V21()) {
|
ret = rk_aiq_user_api2_asharpV3_GetStrength(ctx, &fPercent);
|
}
|
|
if (CHECK_ISP_HW_V30()) {
|
rk_aiq_sharp_strength_v4_t sharpV4Strenght;
|
sharpV4Strenght.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
ret = rk_aiq_user_api2_asharpV4_GetStrength(ctx, &sharpV4Strenght);
|
fPercent = sharpV4Strenght.percent;
|
}
|
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get sharpeness failed!");
|
|
*level = (unsigned int)(fPercent * 100);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
|
/*
|
**********************************************************
|
* White balance & Color
|
**********************************************************
|
*/
|
|
/*
|
*****************************
|
*
|
* Desc: set white balance mode
|
* Argument:
|
* mode: auto: auto white balance
|
* manual: manual white balance
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setWBMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_uapiV2_wb_opMode_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
if (mode >= OP_INVAL || mode < OP_AUTO) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "mode is invalid!");
|
}
|
if (mode == OP_AUTO) {
|
attr.mode = RK_AIQ_WB_MODE_AUTO;
|
} else if (mode == OP_MANUAL) {
|
attr.mode = RK_AIQ_WB_MODE_MANUAL;
|
} else {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
|
}
|
ret = rk_aiq_user_api2_awb_SetWpModeAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setWbMode failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getWBMode(const rk_aiq_sys_ctx_t* ctx, opMode_t *mode)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_uapiV2_wb_opMode_t attr;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_awb_GetWpModeAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getWBMode failed!");
|
if (attr.mode == RK_AIQ_WB_MODE_AUTO) {
|
*mode = OP_AUTO;
|
} else if (attr.mode == RK_AIQ_WB_MODE_MANUAL) {
|
*mode = OP_MANUAL;
|
} else {
|
*mode = OP_INVAL;
|
}
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
|
|
/*
|
*****************************
|
*
|
* Desc: lock/unlock auto white balance
|
* Argument:
|
*
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_lockAWB(const rk_aiq_sys_ctx_t* ctx)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_awb_Lock(ctx);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_unlockAWB(const rk_aiq_sys_ctx_t* ctx)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_awb_Unlock(ctx);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: set manual white balance scene mode
|
* Argument:
|
* ct_scene:
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setMWBScene(const rk_aiq_sys_ctx_t* ctx, rk_aiq_wb_scene_t scene)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_wb_mwb_attrib_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setMWBScene failed!");
|
}
|
|
if (scene < RK_AIQ_WBCT_INCANDESCENT || scene > RK_AIQ_WBCT_SHADE) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "invalid scene mode, setMWBScene failed!");
|
}
|
rk_aiq_uapiV2_wb_opMode_t opMode;
|
memset(&opMode, 0, sizeof(opMode));
|
opMode.mode = RK_AIQ_WB_MODE_MANUAL;
|
ret = rk_aiq_user_api2_awb_SetWpModeAttrib(ctx, opMode);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setWbMode failed!");
|
attr.mode = RK_AIQ_MWB_MODE_SCENE;
|
attr.para.scene = scene;
|
ret = rk_aiq_user_api2_awb_SetMwbAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setMWBScene failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getMWBScene(const rk_aiq_sys_ctx_t* ctx, rk_aiq_wb_scene_t *scene)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_wb_mwb_attrib_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (scene == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getMWBScene failed!");
|
}
|
//attr.mode = RK_AIQ_WB_MODE_MANUAL;
|
ret = rk_aiq_user_api2_awb_GetMwbAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getMWBScene failed!");
|
if(attr.mode == RK_AIQ_MWB_MODE_SCENE) {
|
*scene = attr.para.scene;
|
} else {
|
LOGE("get manual wb scene failed, since current manual mode is not RK_AIQ_MWB_MODE_SCENE ");
|
}
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
|
/*
|
*****************************
|
*
|
* Desc: set manual white balance r/b gain
|
* Argument:
|
* ct_scene:
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setMWBGain(const rk_aiq_sys_ctx_t* ctx, rk_aiq_wb_gain_t *gain)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_wb_mwb_attrib_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (gain == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setMWBGain failed!");
|
}
|
rk_aiq_uapiV2_wb_opMode_t opMode;
|
memset(&opMode, 0, sizeof(opMode));
|
opMode.mode = RK_AIQ_WB_MODE_MANUAL;
|
ret = rk_aiq_user_api2_awb_SetWpModeAttrib(ctx, opMode);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setWbMode failed!");
|
attr.mode = RK_AIQ_MWB_MODE_WBGAIN;
|
attr.para.gain = *gain;
|
ret = rk_aiq_user_api2_awb_SetMwbAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setMWBGain failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getWBGain(const rk_aiq_sys_ctx_t* ctx, rk_aiq_wb_gain_t *gain)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
rk_aiq_wb_querry_info_t query_info;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (gain == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getMWBGain failed!");
|
}
|
ret = rk_aiq_user_api2_awb_QueryWBInfo(ctx, &query_info);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getMWBGain failed!");
|
*gain = query_info.gain;
|
IMGPROC_FUNC_EXIT
|
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: set manual white balance color temperature
|
* Argument:
|
* ct: color temperature value [2800, 7500]K
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setMWBCT(const rk_aiq_sys_ctx_t* ctx, unsigned int ct)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_wb_mwb_attrib_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setMWBCT failed!");
|
}
|
rk_aiq_uapiV2_wb_opMode_t opMode;
|
memset(&opMode, 0, sizeof(opMode));
|
opMode.mode = RK_AIQ_WB_MODE_MANUAL;
|
ret = rk_aiq_user_api2_awb_SetWpModeAttrib(ctx, opMode);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setWbMode failed!");
|
attr.mode = RK_AIQ_MWB_MODE_CCT;
|
attr.para.cct.CCT = (float)ct;
|
attr.para.cct.CCRI = 0.0f;
|
ret = rk_aiq_user_api2_awb_SetMwbAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setMWBCT failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
|
}
|
|
XCamReturn rk_aiq_uapi2_getWBCT(const rk_aiq_sys_ctx_t* ctx, unsigned int *ct)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_wb_cct_t cct;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (ct == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getMWBCT failed!");
|
}
|
ret = rk_aiq_user_api2_awb_GetCCT(ctx, &cct);
|
*ct = (unsigned int)cct.CCT;
|
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
|
XCamReturn rk_aiq_uapi2_setAwbGainOffsetAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wb_awb_wbGainOffset_t offset)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setWbGainOffsetAttrib failed!");
|
}
|
rk_aiq_uapiV2_wb_opMode_t opMode;
|
memset(&opMode, 0, sizeof(opMode));
|
opMode.mode = RK_AIQ_WB_MODE_AUTO;
|
opMode.sync.sync_mode = offset.sync.sync_mode;
|
ret = rk_aiq_user_api2_awb_SetWpModeAttrib(ctx, opMode);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setWbMode failed!");
|
ret = rk_aiq_user_api2_awb_SetWbGainOffsetAttrib(ctx, offset);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setWbGainOffsetAttrib failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
|
}
|
|
XCamReturn rk_aiq_uapi2_getAwbGainOffsetAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wb_awb_wbGainOffset_t *offset)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (offset == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getWbGainOffsetAttrib( failed!");
|
}
|
ret = rk_aiq_user_api2_awb_GetWbGainOffsetAttrib(ctx, offset);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getWbGainOffsetAttrib failed!");
|
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setAwbGainAdjustAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wb_awb_wbGainAdjust_t adjust)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setWbGainAdjustAttrib failed!");
|
}
|
rk_aiq_uapiV2_wb_opMode_t opMode;
|
|
memset(&opMode, 0, sizeof(opMode));
|
opMode.sync.sync_mode = adjust.sync.sync_mode;
|
opMode.mode = RK_AIQ_WB_MODE_AUTO;
|
ret = rk_aiq_user_api2_awb_SetWpModeAttrib(ctx, opMode);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setWbMode failed!");
|
ret = rk_aiq_user_api2_awb_SetWbGainAdjustAttrib(ctx, adjust);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setWbGainAdjustAttrib failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
|
}
|
|
XCamReturn rk_aiq_uapi2_getAwbGainAdjustAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wb_awb_wbGainAdjust_t *adjust)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (adjust == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getWbGainAdjustAttrib failed!");
|
}
|
ret = rk_aiq_user_api2_awb_GetWbGainAdjustAttrib(ctx, adjust);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getWbGainAdjustAttrib failed!");
|
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
|
XCamReturn rk_aiq_uapi2_setAwbMultiWindowAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wb_awb_mulWindow_t multiwindow)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setAwbMultiWindowAttrib failed!");
|
}
|
rk_aiq_uapiV2_wb_opMode_t opMode;
|
memset(&opMode, 0, sizeof(opMode));
|
opMode.mode = RK_AIQ_WB_MODE_AUTO;
|
opMode.sync.sync_mode = multiwindow.sync.sync_mode;
|
ret = rk_aiq_user_api2_awb_SetWpModeAttrib(ctx, opMode);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setWbMode failed!");
|
ret = rk_aiq_user_api2_awb_SetMultiWindowAttrib(ctx, multiwindow);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setAwbMultiWindowAttrib failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
|
}
|
|
XCamReturn rk_aiq_uapi2_getAwbMultiWindowAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wb_awb_mulWindow_t *multiwindow)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (multiwindow == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getAwbMultiWindowAttrib failed!");
|
}
|
ret = rk_aiq_user_api2_awb_GetMultiWindowAttrib(ctx, multiwindow);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getAwbMultiWindowAttrib failed!");
|
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setAwbV30AllAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wbV30_attrib_t attr)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setAwbV30AllAttrib failed!");
|
}
|
ret = rk_aiq_user_api2_awbV30_SetAllAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setAwbV30AllAttrib failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
|
}
|
|
XCamReturn rk_aiq_uapi2_getAwbV30AllAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wbV30_attrib_t *attr)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (attr == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getAwbV30AllAttrib failed!");
|
}
|
ret = rk_aiq_user_api2_awbV30_GetAllAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getAwbV30AllAttrib failed!");
|
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setAwbV21AllAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wbV21_attrib_t attr)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, setAwbV21AllAttrib failed!");
|
}
|
ret = rk_aiq_user_api2_awbV21_SetAllAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setAwbV21AllAttrib failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
|
}
|
|
XCamReturn rk_aiq_uapi2_getAwbV21AllAttrib(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapiV2_wbV21_attrib_t *attr)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (attr == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getAwbV21AllAttrib failed!");
|
}
|
ret = rk_aiq_user_api2_awbV21_GetAllAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getAwbV21AllAttrib failed!");
|
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
|
/*
|
**********************************************************
|
* Focus & Zoom
|
**********************************************************
|
*/
|
XCamReturn rk_aiq_uapi2_setFocusMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
rk_aiq_af_attrib_t attr;
|
ret = rk_aiq_user_api2_af_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setFocusMode failed!");
|
if (mode == OP_AUTO) {
|
attr.AfMode = RKAIQ_AF_MODE_CONTINUOUS_PICTURE;
|
} else if (mode == OP_MANUAL) {
|
attr.AfMode = RKAIQ_AF_MODE_FIXED;
|
} else if (mode == OP_SEMI_AUTO) {
|
attr.AfMode = RKAIQ_AF_MODE_ONESHOT_AFTER_ZOOM;
|
} else {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
|
}
|
|
attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
ret = rk_aiq_user_api2_af_SetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setFocusMode failed!");
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getFocusMode(const rk_aiq_sys_ctx_t* ctx, opMode_t *mode)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
rk_aiq_af_attrib_t attr;
|
ret = rk_aiq_user_api2_af_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getFocusMode failed!");
|
if (attr.AfMode == RKAIQ_AF_MODE_FIXED) {
|
*mode = OP_MANUAL;
|
} else if (attr.AfMode == RKAIQ_AF_MODE_NOT_SET) {
|
*mode = OP_INVAL;
|
} else if (attr.AfMode == RKAIQ_AF_MODE_ONESHOT_AFTER_ZOOM) {
|
*mode = OP_SEMI_AUTO;
|
} else {
|
*mode = OP_AUTO;
|
}
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setFocusPosition(const rk_aiq_sys_ctx_t* ctx, short code)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_af_attrib_t attr;
|
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setFixedModeCode failed!");
|
attr.fixedModeDefCode = code;
|
attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
ret = rk_aiq_user_api2_af_SetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setFixedModeCode failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getFocusPosition(const rk_aiq_sys_ctx_t* ctx, short * code)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_af_attrib_t attr;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getFixedModeCode failed!");
|
*code = attr.fixedModeDefCode;
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setFocusWin(const rk_aiq_sys_ctx_t* ctx, paRect_t *rect)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_af_attrib_t attr;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api_af_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setFocusWin failed!");
|
|
attr.h_offs = rect->x;
|
attr.v_offs = rect->y;
|
attr.h_size = rect->w;
|
attr.v_size = rect->h;
|
attr.sync.sync_mode = RK_AIQ_UAPI_MODE_SYNC;
|
ret = rk_aiq_user_api2_af_SetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setFocusWin failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getFocusWin(const rk_aiq_sys_ctx_t* ctx, paRect_t *rect)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_af_attrib_t attr;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getFocusWin failed!");
|
|
rect->x = attr.h_offs;
|
rect->y = attr.v_offs;
|
rect->w = attr.h_size;
|
rect->h = attr.v_size;
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_lockFocus(const rk_aiq_sys_ctx_t* ctx)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_Lock(ctx);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_unlockFocus(const rk_aiq_sys_ctx_t* ctx)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_Unlock(ctx);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_oneshotFocus(const rk_aiq_sys_ctx_t* ctx)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_Oneshot(ctx);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_manualTrigerFocus(const rk_aiq_sys_ctx_t* ctx)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_ManualTriger(ctx);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_trackingFocus(const rk_aiq_sys_ctx_t* ctx)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_Tracking(ctx);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getSearchPath(const rk_aiq_sys_ctx_t* ctx, rk_aiq_af_sec_path_t* path)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_GetSearchPath(ctx, path);
|
IMGPROC_FUNC_EXIT
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getSearchResult(const rk_aiq_sys_ctx_t* ctx, rk_aiq_af_result_t* result)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_GetSearchResult(ctx, result);
|
IMGPROC_FUNC_EXIT
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setOpZoomPosition(const rk_aiq_sys_ctx_t* ctx, int pos)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_SetZoomIndex(ctx, pos);
|
IMGPROC_FUNC_EXIT
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getOpZoomPosition(const rk_aiq_sys_ctx_t* ctx, int *pos)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_GetZoomIndex(ctx, pos);
|
IMGPROC_FUNC_EXIT
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_endOpZoomChange(const rk_aiq_sys_ctx_t* ctx)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_EndZoomChg(ctx);
|
IMGPROC_FUNC_EXIT
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getZoomRange(const rk_aiq_sys_ctx_t* ctx, rk_aiq_af_zoomrange * range)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_GetZoomRange(ctx, range);
|
IMGPROC_FUNC_EXIT
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getFocusRange(const rk_aiq_sys_ctx_t* ctx, rk_aiq_af_focusrange* range)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_GetFocusRange(ctx, range);
|
IMGPROC_FUNC_EXIT
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_startZoomCalib(const rk_aiq_sys_ctx_t* ctx)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_StartZoomCalib(ctx);
|
IMGPROC_FUNC_EXIT
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_resetZoom(const rk_aiq_sys_ctx_t* ctx)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_resetZoom(ctx);
|
IMGPROC_FUNC_EXIT
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setAngleZ(const rk_aiq_sys_ctx_t* ctx, float angleZ)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_setAngleZ(ctx, angleZ);
|
IMGPROC_FUNC_EXIT
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getCustomAfRes(const rk_aiq_sys_ctx_t* ctx, rk_tool_customAf_res_t *attr)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_getCustomAfRes(ctx, attr);
|
IMGPROC_FUNC_EXIT
|
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setCustomAfRes(const rk_aiq_sys_ctx_t* ctx, rk_tool_customAf_res_t *attr)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_af_setCustomAfRes(ctx, attr);
|
IMGPROC_FUNC_EXIT
|
|
return ret;
|
}
|
|
/*
|
**********************************************************
|
* Color Correction
|
**********************************************************
|
*/
|
/*
|
*****************************
|
*
|
* Desc: set/get color correction mode
|
* Argument:
|
* mode:
|
* auto: auto color correction
|
* manual: manual color correction
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setCCMMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_ccm_attrib_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
if (mode >= OP_INVAL || mode < OP_AUTO) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "mode is invalid!");
|
}
|
ret = rk_aiq_user_api2_accm_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setCCMMode failed in getting accm attrib!");
|
|
attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
|
if (mode == OP_AUTO) {
|
attr.mode = RK_AIQ_CCM_MODE_AUTO;
|
} else if (mode == OP_MANUAL) {
|
attr.mode = RK_AIQ_CCM_MODE_MANUAL;
|
} else {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
|
}
|
ret = rk_aiq_user_api2_accm_SetAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "setCCMMode failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getCCMMode(const rk_aiq_sys_ctx_t* ctx, opMode_t *mode)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_ccm_attrib_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_accm_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getCCMMode failed!");
|
if (attr.mode == RK_AIQ_CCM_MODE_AUTO) {
|
*mode = OP_AUTO;
|
} else if (attr.mode == RK_AIQ_CCM_MODE_MANUAL) {
|
*mode = OP_MANUAL;
|
} else {
|
*mode = OP_INVAL;
|
}
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: set manual color correction matrix
|
* this function is active for color correction is manual mode
|
get color correction matrix
|
* Argument:
|
* mccm:
|
* 3x3 matrix
|
* 1x3 offset
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setMCcCoef(const rk_aiq_sys_ctx_t* ctx, rk_aiq_ccm_matrix_t * mccm)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_ccm_attrib_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (mccm == NULL) ) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, set CCM Manual Matrix failed!");
|
}
|
|
ret = rk_aiq_user_api2_accm_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "Set CCM Manual Matrix failed in getting accm attrib!!");
|
|
attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
|
attr.mode = RK_AIQ_CCM_MODE_MANUAL;
|
memcpy(attr.stManual.ccMatrix, mccm->ccMatrix, sizeof(float) * 9);
|
memcpy(attr.stManual.ccOffsets, mccm->ccOffsets, sizeof(float) * 3);
|
ret = rk_aiq_user_api2_accm_SetAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "set CCM Manual Matrix failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getMCcCoef(const rk_aiq_sys_ctx_t* ctx, rk_aiq_ccm_matrix_t * mccm)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_ccm_querry_info_t ccm_querry_info;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (mccm == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, get CCM Matrix failed!");
|
}
|
|
ret = rk_aiq_user_api2_accm_QueryCcmInfo(ctx, &ccm_querry_info);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get CCM Matrix failed!");
|
|
for (int i = 0; i < 9; i++)
|
mccm->ccMatrix[i] = ccm_querry_info.ccMatrix[i];
|
for (int i = 0; i < 3; i++)
|
mccm->ccOffsets[i] = ccm_querry_info.ccOffsets[i];
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: get auto color correction saturation
|
* this function is active for color correction is auto mode
|
* Argument:
|
* finalsat : range in [0, 100]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_getACcmSat(const rk_aiq_sys_ctx_t* ctx, float *finalsat)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_ccm_querry_info_t ccm_querry_info;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (finalsat == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, get Auto CCM Saturation failed!");
|
}
|
|
ret = rk_aiq_user_api2_accm_QueryCcmInfo(ctx, &ccm_querry_info);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get CCM Auto CCM Saturation failed!");
|
*finalsat = ccm_querry_info.finalSat;
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: get auto color correction used ccm name
|
* this function is active for color correction is auto mode
|
* Argument:
|
* ccm_name[2]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_getACcmMatrixName(const rk_aiq_sys_ctx_t* ctx, char **ccm_name)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_ccm_querry_info_t ccm_querry_info;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (ccm_name == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, get Auto CCM Name failed!");
|
}
|
|
ret = rk_aiq_user_api2_accm_QueryCcmInfo(ctx, &ccm_querry_info);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get CCM Auto CCM Name failed!");
|
strcpy(ccm_name[0], ccm_querry_info.ccmname1);
|
strcpy(ccm_name[1], ccm_querry_info.ccmname2);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
/*
|
**********************************************************
|
* 3-Dimensional Look Up Table
|
**********************************************************
|
*/
|
/*
|
*****************************
|
*
|
* Desc: set/get 3dlut mode
|
* Argument:
|
* mode:
|
* auto: auto 3dlut
|
* manual: manual 3dlut
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setLut3dMode(const rk_aiq_sys_ctx_t* ctx, opMode_t mode)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_lut3d_attrib_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
if (mode >= OP_INVAL || mode < OP_AUTO) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "mode is invalid!");
|
}
|
ret = rk_aiq_user_api2_a3dlut_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "set 3DLUT Mode failed in getting 3dlut attrib!");
|
|
attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
|
if (mode == OP_AUTO) {
|
attr.mode = RK_AIQ_LUT3D_MODE_AUTO;
|
} else if (mode == OP_MANUAL) {
|
attr.mode = RK_AIQ_LUT3D_MODE_MANUAL;
|
} else {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "Not supported mode!");
|
}
|
ret = rk_aiq_user_api2_a3dlut_SetAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "set 3DLUT Mode failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
|
}
|
|
XCamReturn rk_aiq_uapi2_getLut3dMode(const rk_aiq_sys_ctx_t* ctx, opMode_t *mode)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_lut3d_attrib_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
ret = rk_aiq_user_api2_a3dlut_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get 3DLUT Mode failed!");
|
if (attr.mode == RK_AIQ_LUT3D_MODE_AUTO) {
|
*mode = OP_AUTO;
|
} else if (attr.mode == RK_AIQ_LUT3D_MODE_MANUAL) {
|
*mode = OP_MANUAL;
|
} else {
|
*mode = OP_INVAL;
|
}
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: set manual 3d Look-up-table
|
* this function is active for 3dlut is manual mode
|
get 3d Look-up-table
|
* Argument:
|
* mlut:
|
* lut_r[729]
|
* lut_g[729]
|
* lut_b[729]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_setM3dLut(const rk_aiq_sys_ctx_t* ctx, rk_aiq_lut3d_table_t *mlut)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_lut3d_attrib_t attr;
|
memset(&attr, 0, sizeof(attr));
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (mlut == NULL) ) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, set manual 3d Look-up-table failed!");
|
}
|
|
ret = rk_aiq_user_api2_a3dlut_GetAttrib(ctx, &attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "set manual 3d Look-up-table in getting 3dlut attrib!");
|
|
attr.sync.sync_mode = RK_AIQ_UAPI_MODE_DEFAULT;
|
attr.mode = RK_AIQ_LUT3D_MODE_MANUAL;
|
memcpy(attr.stManual.look_up_table_r, mlut->look_up_table_r, sizeof(unsigned short) * 729);
|
memcpy(attr.stManual.look_up_table_g, mlut->look_up_table_g, sizeof(unsigned short) * 729);
|
memcpy(attr.stManual.look_up_table_b, mlut->look_up_table_b, sizeof(unsigned short) * 729);
|
ret = rk_aiq_user_api2_a3dlut_SetAttrib(ctx, attr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "set manual 3d Look-up-table failed!");
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_getM3dLut(const rk_aiq_sys_ctx_t* ctx, rk_aiq_lut3d_table_t *mlut)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_lut3d_querry_info_t lut3d_querry_info;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (mlut == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, get 3d Look-up-table failed!");
|
}
|
|
ret = rk_aiq_user_api2_a3dlut_Query3dlutInfo(ctx, &lut3d_querry_info);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get 3d Look-up-table failed!");
|
|
memcpy(mlut->look_up_table_r, lut3d_querry_info.look_up_table_r, sizeof(unsigned short) * 729);
|
memcpy(mlut->look_up_table_g, lut3d_querry_info.look_up_table_g, sizeof(unsigned short) * 729);
|
memcpy(mlut->look_up_table_b, lut3d_querry_info.look_up_table_b, sizeof(unsigned short) * 729);
|
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: get auto 3d Look-up-table strength
|
* this function is active for 3d Look-up-table is auto mode
|
* Argument:
|
* alpha : range in [0, 1]
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_getA3dLutStrth(const rk_aiq_sys_ctx_t* ctx, float *alpha)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_lut3d_querry_info_t lut3d_querry_info;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (alpha == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getAuto3DLUT 3d Look-up-table Strength failed!");
|
}
|
|
ret = rk_aiq_user_api2_a3dlut_Query3dlutInfo(ctx, &lut3d_querry_info);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getAuto3DLUT 3d Look-up-table Strength failed!");
|
*alpha = lut3d_querry_info.alpha;
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
/*
|
*****************************
|
*
|
* Desc: get auto 3d Look-up-table used lut name
|
* this function is active for 3d Look-up-table is auto mode
|
* Argument:
|
* name
|
*
|
*****************************
|
*/
|
XCamReturn rk_aiq_uapi2_getA3dLutName(const rk_aiq_sys_ctx_t* ctx, char *name)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
rk_aiq_lut3d_querry_info_t lut3d_querry_info;
|
IMGPROC_FUNC_ENTER
|
if ((ctx == NULL) || (name == NULL)) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error, getAuto3DLUT 3d Look-up-table Name failed!");
|
}
|
|
ret = rk_aiq_user_api2_a3dlut_Query3dlutInfo(ctx, &lut3d_querry_info);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "getAuto3DLUT 3d Look-up-table Name failed!");
|
strcpy(name, lut3d_querry_info.name);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setLdchEn(const rk_aiq_sys_ctx_t* ctx, bool en)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
rk_aiq_ldch_attrib_t ldchAttr;
|
ret = rk_aiq_user_api2_aldch_GetAttrib(ctx, &ldchAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get ldch attrib failed!");
|
ldchAttr.en = en;
|
ret = rk_aiq_user_api2_aldch_SetAttrib(ctx, ldchAttr);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setLdchCorrectLevel(const rk_aiq_sys_ctx_t* ctx, int correctLevel)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
rk_aiq_ldch_attrib_t ldchAttr;
|
ret = rk_aiq_user_api2_aldch_GetAttrib(ctx, &ldchAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get ldch attrib failed!");
|
ldchAttr.correct_level = correctLevel;
|
ret = rk_aiq_user_api2_aldch_SetAttrib(ctx, ldchAttr);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setFecEn(const rk_aiq_sys_ctx_t* ctx, bool en)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
rk_aiq_fec_attrib_t fecAttr;
|
ret = rk_aiq_user_api2_afec_GetAttrib(ctx, &fecAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get fec attrib failed!");
|
fecAttr.en = en;
|
ret = rk_aiq_user_api2_afec_SetAttrib(ctx, fecAttr);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setFecBypass(const rk_aiq_sys_ctx_t* ctx, bool bypass)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
rk_aiq_fec_attrib_t fecAttr;
|
ret = rk_aiq_user_api2_afec_GetAttrib(ctx, &fecAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get fec attrib failed!");
|
fecAttr.bypass = bypass;
|
ret = rk_aiq_user_api2_afec_SetAttrib(ctx, fecAttr);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setFecCorrectLevel(const rk_aiq_sys_ctx_t* ctx, int correctLevel)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
rk_aiq_fec_attrib_t fecAttr;
|
ret = rk_aiq_user_api2_afec_GetAttrib(ctx, &fecAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get fec attrib failed!");
|
fecAttr.correct_level = correctLevel;
|
ret = rk_aiq_user_api2_afec_SetAttrib(ctx, fecAttr);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setFecCorrectDirection(const rk_aiq_sys_ctx_t* ctx,
|
const fec_correct_direction_t direction)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
rk_aiq_fec_attrib_t fecAttr;
|
ret = rk_aiq_user_api2_afec_GetAttrib(ctx, &fecAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get fec attrib failed!");
|
fecAttr.direction = direction;
|
ret = rk_aiq_user_api2_afec_SetAttrib(ctx, fecAttr);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setFecCorrectMode(const rk_aiq_sys_ctx_t* ctx,
|
const fec_correct_mode_t mode)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
IMGPROC_FUNC_ENTER
|
if (ctx == NULL) {
|
ret = XCAM_RETURN_ERROR_PARAM;
|
RKAIQ_IMGPROC_CHECK_RET(ret, "param error!");
|
}
|
rk_aiq_fec_attrib_t fecAttr;
|
ret = rk_aiq_user_api2_afec_GetAttrib(ctx, &fecAttr);
|
RKAIQ_IMGPROC_CHECK_RET(ret, "get fec attrib failed!");
|
fecAttr.mode = mode;
|
ret = rk_aiq_user_api2_afec_SetAttrib(ctx, fecAttr);
|
IMGPROC_FUNC_EXIT
|
return ret;
|
}
|
|
XCamReturn rk_aiq_uapi2_setGrayMode(const rk_aiq_sys_ctx_t* ctx, rk_aiq_gray_mode_t mode)
|
{
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
if (ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
|
#ifdef RKAIQ_ENABLE_CAMGROUP
|
const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)ctx;
|
for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
|
if (!camCtx)
|
continue;
|
|
ret = camCtx->_analyzer->setGrayMode(mode);
|
}
|
#else
|
return XCAM_RETURN_ERROR_FAILED;
|
#endif
|
} else {
|
ret = ctx->_analyzer->setGrayMode(mode);
|
}
|
|
return ret;
|
}
|
|
rk_aiq_gray_mode_t rk_aiq_uapi2_getGrayMode(const rk_aiq_sys_ctx_t* ctx)
|
{
|
if (ctx->cam_type == RK_AIQ_CAM_TYPE_GROUP) {
|
#ifdef RKAIQ_ENABLE_CAMGROUP
|
const rk_aiq_camgroup_ctx_t* camgroup_ctx = (rk_aiq_camgroup_ctx_t *)ctx;
|
for (auto camCtx : camgroup_ctx->cam_ctxs_array) {
|
if (!camCtx)
|
continue;
|
|
return camCtx->_analyzer->getGrayMode();
|
}
|
#else
|
return RK_AIQ_GRAY_MODE_OFF;
|
#endif
|
} else {
|
return ctx->_analyzer->getGrayMode();
|
}
|
|
return RK_AIQ_GRAY_MODE_OFF;
|
}
|
|
RKAIQ_END_DECLARE
|