/*
|
* 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 <cstring>
|
#include "Isp20Params.h"
|
#include "isp21/rkisp21-config.h"
|
|
namespace RkCam {
|
|
uint32_t IspParamsAssembler::MAX_PENDING_PARAMS = 10;
|
|
IspParamsAssembler::IspParamsAssembler (const char* name)
|
: mLatestReadyFrmId(-1)
|
, mReadyMask(0)
|
, mName(name)
|
, mReadyNums(0)
|
, mCondNum(0)
|
, started(false)
|
{
|
}
|
|
IspParamsAssembler::~IspParamsAssembler ()
|
{
|
}
|
|
void
|
IspParamsAssembler::rmReadyCondition(uint32_t cond)
|
{
|
SmartLock locker (mParamsMutex);
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n",
|
__FUNCTION__, __LINE__, mName.c_str());
|
if (mCondMaskMap.find(cond) != mCondMaskMap.end()) {
|
mReadyMask &= ~mCondMaskMap[cond];
|
}
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: exit \n",
|
__FUNCTION__, __LINE__, mName.c_str());
|
}
|
|
void
|
IspParamsAssembler::addReadyCondition(uint32_t cond)
|
{
|
SmartLock locker (mParamsMutex);
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n",
|
__FUNCTION__, __LINE__, mName.c_str());
|
|
if (mCondMaskMap.find(cond) == mCondMaskMap.end()) {
|
if (mCondNum > 63) {
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: max condintion num exceed 32",
|
mName.c_str());
|
return;
|
}
|
|
mCondMaskMap[cond] = 1 << mCondNum;
|
mReadyMask |= mCondMaskMap[cond];
|
mCondNum++;
|
LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: map cond %s 0x%x -> 0x%llx, mask: 0x%llx",
|
mName.c_str(), Cam3aResultType2Str[cond], cond, mCondMaskMap[cond], mReadyMask);
|
} else {
|
LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: map cond %s 0x%x -> 0x%llx already added",
|
mName.c_str(), Cam3aResultType2Str[cond], cond, mCondMaskMap[cond]);
|
}
|
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: exit \n",
|
__FUNCTION__, __LINE__, mName.c_str());
|
}
|
|
XCamReturn
|
IspParamsAssembler::queue(SmartPtr<cam3aResult>& result)
|
{
|
SmartLock locker (mParamsMutex);
|
return queue_locked(result);
|
}
|
|
XCamReturn
|
IspParamsAssembler::queue_locked(SmartPtr<cam3aResult>& result)
|
{
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n",
|
__FUNCTION__, __LINE__, mName.c_str());
|
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
if (!result.ptr()) {
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: null result", mName.c_str());
|
return ret;
|
}
|
|
sint32_t frame_id = result->getId();
|
int type = result->getType();
|
|
if (!started) {
|
LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: intial params type %s , result_id[%d] !",
|
mName.c_str(), Cam3aResultType2Str[type], frame_id);
|
if (frame_id != 0)
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: intial params type %s , result_id[%d] != 0",
|
mName.c_str(), Cam3aResultType2Str[type], frame_id);
|
mInitParamsList.push_back(result);
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
#if 0 // allow non-mandatory params
|
if (mCondMaskMap.find(type) == mCondMaskMap.end()) {
|
LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: result type: 0x%x is not required, skip ",
|
mName.c_str(), type);
|
for (auto cond_it : mCondMaskMap)
|
LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: -->need type: 0x%x", mName.c_str(), cond_it.first);
|
return ret;
|
}
|
#endif
|
// exception case 1 : wrong result frame_id
|
if (frame_id != -1 && (frame_id <= mLatestReadyFrmId)) {
|
// merged to the oldest one
|
bool found = false;
|
for (const auto& iter : mParamsMap) {
|
if (!(iter.second.flags & mCondMaskMap[type])) {
|
frame_id = iter.first;
|
found = true;
|
break;
|
}
|
}
|
if (!found) {
|
if (!mParamsMap.empty())
|
frame_id = (mParamsMap.rbegin())->first + 1;
|
else {
|
frame_id = mLatestReadyFrmId + 1;
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: type %s, mLatestReadyFrmId %d, "
|
"can't find a proper unready params, impossible case",
|
mName.c_str(), Cam3aResultType2Str[type], mLatestReadyFrmId);
|
}
|
}
|
LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: type %s , delayed result_id[%d], merged to %d",
|
mName.c_str(), Cam3aResultType2Str[type], result->getId(), frame_id);
|
result->setId(frame_id);
|
} else if (frame_id != 0 && mLatestReadyFrmId == -1) {
|
LOGW_CAMHW_SUBM(ISP20PARAM_SUBM,
|
"Wrong initial id %d set to 0, last %d", frame_id,
|
mLatestReadyFrmId);
|
frame_id = 0;
|
result->setId(0);
|
}
|
|
mParamsMap[frame_id].params.push_back(result);
|
mParamsMap[frame_id].flags |= mCondMaskMap[type];
|
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, new params: frame: %d, type:%s, flag: 0x%llx",
|
mName.c_str(), frame_id, Cam3aResultType2Str[type], mCondMaskMap[type]);
|
|
bool ready =
|
(mReadyMask == mParamsMap[frame_id].flags) ? true : false;
|
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, frame: %d, flags: 0x%llx, mask: 0x%llx, ready status: %d !",
|
mName.c_str(), frame_id, mParamsMap[frame_id].flags, mReadyMask, ready);
|
|
mParamsMap[frame_id].ready = ready;
|
|
if (ready) {
|
mReadyNums++;
|
if (frame_id > mLatestReadyFrmId)
|
mLatestReadyFrmId = frame_id;
|
else {
|
// impossible case
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, wrong ready params, latest %d <= new %d, drop it !",
|
mName.c_str(), mLatestReadyFrmId, frame_id);
|
mParamsMap.erase(mParamsMap.find(frame_id));
|
return ret;
|
}
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, frame: %d params ready, mReadyNums: %d !",
|
mName.c_str(), frame_id, mReadyNums);
|
}
|
|
bool overflow = false;
|
if (mParamsMap.size() > MAX_PENDING_PARAMS) {
|
LOGW_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: pending params overflow, max is %d",
|
mName.c_str(), MAX_PENDING_PARAMS);
|
overflow = true;
|
}
|
bool ready_disorder = false;
|
if (mReadyNums > 0 && !(mParamsMap.begin())->second.ready) {
|
ready_disorder = true;
|
LOGW_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: ready params disordered",
|
mName.c_str());
|
}
|
if (overflow || ready_disorder) {
|
// exception case 2 : current ready one is not the first one in
|
// mParamsMap, this means some conditions frame_id may be NOT
|
// continuous, should check the AIQCORE and isp driver,
|
// so far we merge all disordered to one.
|
std::map<int, params_t>::iterator it = mParamsMap.begin();
|
cam3aResultList merge_list;
|
sint32_t merge_id = 0;
|
for (it = mParamsMap.begin(); it != mParamsMap.end();) {
|
if (!(it->second.ready)) {
|
LOGW_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: ready disorderd, NOT ready id(flags:0x%x) %d < ready %d !",
|
mName.c_str(), it->second.flags, it->first, frame_id);
|
// print missing params
|
std::string missing_conds;
|
for (auto cond : mCondMaskMap) {
|
if (!(cond.second & it->second.flags)) {
|
missing_conds.append(Cam3aResultType2Str[cond.first]);
|
missing_conds.append(",");
|
}
|
}
|
if (!missing_conds.empty())
|
LOGW_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: [%d] missing conditions: %s !",
|
mName.c_str(), it->first, missing_conds.c_str());
|
// forced to ready
|
merge_list.insert(merge_list.end(), it->second.params.begin(), it->second.params.end());
|
merge_id = it->first;
|
it = mParamsMap.erase(it);
|
} else
|
break;
|
}
|
|
if (merge_list.size() > 0) {
|
mReadyNums++;
|
if (merge_id > mLatestReadyFrmId)
|
mLatestReadyFrmId = merge_id;
|
mParamsMap[merge_id].params.clear();
|
mParamsMap[merge_id].params.assign(merge_list.begin(), merge_list.end());
|
LOGW_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: merge all pending disorderd to frame %d !",
|
mName.c_str(), merge_id);
|
mParamsMap[merge_id].flags = mReadyMask;
|
mParamsMap[merge_id].ready = true;
|
}
|
}
|
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: exit \n",
|
__FUNCTION__, __LINE__, mName.c_str());
|
|
return ret;
|
|
}
|
|
XCamReturn
|
IspParamsAssembler::queue(cam3aResultList& results)
|
{
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n", __FUNCTION__, __LINE__, mName.c_str());
|
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
SmartLock locker (mParamsMutex);
|
|
for (auto result : results)
|
queue_locked(result);
|
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: exit \n",
|
__FUNCTION__, __LINE__, mName.c_str());
|
|
return ret;
|
}
|
|
void
|
IspParamsAssembler::forceReady(sint32_t frame_id)
|
{
|
SmartLock locker (mParamsMutex);
|
|
if (mParamsMap.find(frame_id) != mParamsMap.end()) {
|
if (!mParamsMap[frame_id].ready) {
|
// print missing params
|
std::string missing_conds;
|
for (auto cond : mCondMaskMap) {
|
if (!(cond.second & mParamsMap[frame_id].flags)) {
|
missing_conds.append(Cam3aResultType2Str[cond.first]);
|
missing_conds.append(",");
|
}
|
}
|
if (!missing_conds.empty())
|
LOGW_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: %s: [%d] missing conditions: %s !",
|
mName.c_str(), __func__, frame_id, missing_conds.c_str());
|
LOGW_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:%s: [%d] params forced to ready",
|
mName.c_str(), __func__, frame_id);
|
mReadyNums++;
|
if (frame_id > mLatestReadyFrmId)
|
mLatestReadyFrmId = frame_id;
|
mParamsMap[frame_id].flags = mReadyMask;
|
mParamsMap[frame_id].ready = true;
|
} else
|
LOGW_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:%s: [%d] params is already ready",
|
mName.c_str(), __func__, frame_id);
|
} else {
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: %s: [%d] params does not exist, the next is %d",
|
mName.c_str(), __func__, frame_id,
|
mParamsMap.empty() ? -1 : (mParamsMap.begin())->first);
|
}
|
}
|
|
bool
|
IspParamsAssembler::ready()
|
{
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n",
|
__FUNCTION__, __LINE__, mName.c_str());
|
SmartLock locker (mParamsMutex);
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: ready params num %d", mName.c_str(), mReadyNums);
|
return mReadyNums > 0 ? true : false;
|
}
|
|
XCamReturn
|
IspParamsAssembler::deQueOne(cam3aResultList& results, uint32_t& frame_id)
|
{
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n",
|
__FUNCTION__, __LINE__, mName.c_str());
|
|
XCamReturn ret = XCAM_RETURN_NO_ERROR;
|
|
SmartLock locker (mParamsMutex);
|
if (mReadyNums > 0) {
|
// get next params id, the first one in map
|
std::map<int, params_t>::iterator it = mParamsMap.begin();
|
|
if (it == mParamsMap.end()) {
|
LOGI_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: mParamsMap is empty !", mName.c_str());
|
return XCAM_RETURN_ERROR_PARAM;
|
} else {
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: deque frame %d params, ready %d",
|
mName.c_str(), it->first, it->second.ready);
|
results = it->second.params;
|
frame_id = it->first;
|
mParamsMap.erase(it);
|
mReadyNums--;
|
}
|
} else {
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s: no ready params", mName.c_str());
|
return XCAM_RETURN_ERROR_PARAM;
|
}
|
LOG1_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: exit \n",
|
__FUNCTION__, __LINE__, mName.c_str());
|
|
return ret;
|
}
|
|
void
|
IspParamsAssembler::reset()
|
{
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n",
|
__FUNCTION__, __LINE__, mName.c_str());
|
SmartLock locker (mParamsMutex);
|
reset_locked();
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: exit \n",
|
__FUNCTION__, __LINE__, mName.c_str());
|
}
|
|
void
|
IspParamsAssembler::reset_locked()
|
{
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: enter \n",
|
__FUNCTION__, __LINE__, mName.c_str());
|
mParamsMap.clear();
|
mLatestReadyFrmId = -1;
|
mReadyMask = 0;
|
mReadyNums = 0;
|
mCondNum = 0;
|
mCondMaskMap.clear();
|
mInitParamsList.clear();
|
started = false;
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) %s: exit \n",
|
__FUNCTION__, __LINE__, mName.c_str());
|
}
|
|
XCamReturn
|
IspParamsAssembler::start()
|
{
|
SmartLock locker (mParamsMutex);
|
if (started)
|
return XCAM_RETURN_NO_ERROR;
|
|
started = true;
|
|
for (auto result : mInitParamsList)
|
queue_locked(result);
|
|
mInitParamsList.clear();
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
void
|
IspParamsAssembler::stop() {
|
SmartLock locker (mParamsMutex);
|
if (!started)
|
return;
|
started = false;
|
reset_locked();
|
}
|
|
template<class T>
|
void
|
Isp20Params::convertAiqAeToIsp20Params
|
(
|
T& isp_cfg,
|
const rk_aiq_isp_aec_meas_t& aec_meas
|
)
|
{
|
/* ae update */
|
if(/*aec_meas.ae_meas_en*/1) {
|
isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE_LITE_ID;
|
isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE_BIG1_ID;
|
isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE_BIG2_ID;
|
isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWAE_BIG3_ID;
|
isp_cfg.module_ens |= 1LL << RK_ISP2X_YUVAE_ID;
|
if(/*aec_meas.ae_meas_update*/1) {
|
isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWAE_LITE_ID;
|
isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWAE_LITE_ID;
|
|
isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWAE_BIG1_ID;
|
isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWAE_BIG1_ID;
|
|
isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWAE_BIG2_ID;
|
isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWAE_BIG2_ID;
|
|
isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWAE_BIG3_ID;
|
isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWAE_BIG3_ID;
|
|
isp_cfg.module_en_update |= 1LL << RK_ISP2X_YUVAE_ID;
|
isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_YUVAE_ID;
|
} else {
|
return;
|
}
|
} else {
|
return;
|
}
|
|
memcpy(&isp_cfg.meas.rawae3, &aec_meas.rawae3, sizeof(aec_meas.rawae3));
|
memcpy(&isp_cfg.meas.rawae1, &aec_meas.rawae1, sizeof(aec_meas.rawae1));
|
memcpy(&isp_cfg.meas.rawae2, &aec_meas.rawae2, sizeof(aec_meas.rawae2));
|
memcpy(&isp_cfg.meas.rawae0, &aec_meas.rawae0, sizeof(aec_meas.rawae0));
|
memcpy(&isp_cfg.meas.yuvae, &aec_meas.yuvae, sizeof(aec_meas.yuvae));
|
|
/*
|
* LOGD_CAMHW_SUBM(ISP20PARAM_SUBM,"xuhf-debug: hist_meas-isp_cfg size: [%dx%d]-[%dx%d]-[%dx%d]-[%dx%d]\n",
|
* sizeof(aec_meas.rawae3),
|
* sizeof(isp_cfg.meas.rawae3),
|
* sizeof(aec_meas.rawae1),
|
* sizeof(isp_cfg.meas.rawae1),
|
* sizeof(aec_meas.rawae2),
|
* sizeof(isp_cfg.meas.rawae2),
|
* sizeof(aec_meas.rawae0),
|
* sizeof(isp_cfg.meas.rawae0));
|
*
|
* LOGD_CAMHW_SUBM(ISP20PARAM_SUBM,"xuhf-debug: aec_meas: win size: [%dx%d]-[%dx%d]-[%dx%d]-[%dx%d]\n",
|
* aec_meas.rawae0.win.h_size,
|
* aec_meas.rawae0.win.v_size,
|
* aec_meas.rawae1.win.h_size,
|
* aec_meas.rawae1.win.v_size,
|
* aec_meas.rawae2.win.h_size,
|
* aec_meas.rawae2.win.v_size,
|
* aec_meas.rawae3.win.h_size,
|
* aec_meas.rawae3.win.v_size);
|
*
|
* LOGD_CAMHW_SUBM(ISP20PARAM_SUBM,"xuhf-debug: isp_cfg: win size: [%dx%d]-[%dx%d]-[%dx%d]-[%dx%d]\n",
|
* isp_cfg.meas.rawae0.win.h_size,
|
* isp_cfg.meas.rawae0.win.v_size,
|
* isp_cfg.meas.rawae1.win.h_size,
|
* isp_cfg.meas.rawae1.win.v_size,
|
* isp_cfg.meas.rawae2.win.h_size,
|
* isp_cfg.meas.rawae2.win.v_size,
|
* isp_cfg.meas.rawae3.win.h_size,
|
* isp_cfg.meas.rawae3.win.v_size);
|
*/
|
}
|
|
template<class T>
|
void
|
Isp20Params::convertAiqHistToIsp20Params
|
(
|
T& isp_cfg,
|
const rk_aiq_isp_hist_meas_t& hist_meas
|
)
|
{
|
/* hist update */
|
if(/*hist_meas.hist_meas_en*/1) {
|
isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST_LITE_ID;
|
isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST_BIG1_ID;
|
isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST_BIG2_ID;
|
isp_cfg.module_ens |= 1LL << RK_ISP2X_RAWHIST_BIG3_ID;
|
isp_cfg.module_ens |= 1LL << RK_ISP2X_SIHST_ID;
|
|
if(/*hist_meas.hist_meas_update*/1) {
|
isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWHIST_LITE_ID;
|
isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWHIST_LITE_ID;
|
|
isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWHIST_BIG1_ID;
|
isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWHIST_BIG1_ID;
|
|
isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWHIST_BIG2_ID;
|
isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWHIST_BIG2_ID;
|
|
isp_cfg.module_en_update |= 1LL << RK_ISP2X_RAWHIST_BIG3_ID;
|
isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_RAWHIST_BIG3_ID;
|
|
isp_cfg.module_en_update |= 1LL << RK_ISP2X_SIHST_ID;
|
isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_SIHST_ID;
|
|
} else {
|
return;
|
}
|
} else {
|
return;
|
}
|
|
memcpy(&isp_cfg.meas.rawhist3, &hist_meas.rawhist3, sizeof(hist_meas.rawhist3));
|
memcpy(&isp_cfg.meas.rawhist1, &hist_meas.rawhist1, sizeof(hist_meas.rawhist1));
|
memcpy(&isp_cfg.meas.rawhist2, &hist_meas.rawhist2, sizeof(hist_meas.rawhist2));
|
memcpy(&isp_cfg.meas.rawhist0, &hist_meas.rawhist0, sizeof(hist_meas.rawhist0));
|
memcpy(&isp_cfg.meas.sihst, &hist_meas.sihist, sizeof(hist_meas.sihist));
|
|
/*
|
* LOGD_CAMHW_SUBM(ISP20PARAM_SUBM,"xuhf-debug: hist_meas-isp_cfg size: [%dx%d]-[%dx%d]-[%dx%d]-[%dx%d]\n",
|
* sizeof(hist_meas.rawhist3),
|
* sizeof(isp_cfg.meas.rawhist3),
|
* sizeof(hist_meas.rawhist1),
|
* sizeof(isp_cfg.meas.rawhist1),
|
* sizeof(hist_meas.rawhist2),
|
* sizeof(isp_cfg.meas.rawhist2),
|
* sizeof(hist_meas.rawhist0),
|
* sizeof(isp_cfg.meas.rawhist0));
|
*
|
* LOGD_CAMHW_SUBM(ISP20PARAM_SUBM,"xuhf-debug: hist_meas: hist win size: [%dx%d]-[%dx%d]-[%dx%d]-[%dx%d]\n",
|
* hist_meas.rawhist0.win.h_size,
|
* hist_meas.rawhist0.win.v_size,
|
* hist_meas.rawhist1.win.h_size,
|
* hist_meas.rawhist1.win.v_size,
|
* hist_meas.rawhist2.win.h_size,
|
* hist_meas.rawhist2.win.v_size,
|
* hist_meas.rawhist3.win.h_size,
|
* hist_meas.rawhist3.win.v_size);
|
*
|
* LOGD_CAMHW_SUBM(ISP20PARAM_SUBM,"xuhf-debug: isp_cfg: hist win size: [%dx%d]-[%dx%d]-[%dx%d]-[%dx%d]\n",
|
* isp_cfg.meas.rawhist0.win.h_size,
|
* isp_cfg.meas.rawhist0.win.v_size,
|
* isp_cfg.meas.rawhist1.win.h_size,
|
* isp_cfg.meas.rawhist1.win.v_size,
|
* isp_cfg.meas.rawhist2.win.h_size,
|
* isp_cfg.meas.rawhist2.win.v_size,
|
* isp_cfg.meas.rawhist3.win.h_size,
|
* isp_cfg.meas.rawhist3.win.v_size);
|
*/
|
}
|
|
template<class T>
|
void
|
Isp20Params::convertAiqAwbToIsp20Params(T& isp_cfg,
|
const rk_aiq_awb_stat_cfg_v200_t& awb_meas, bool awb_cfg_udpate)
|
{
|
if(awb_cfg_udpate) {
|
if(awb_meas.awbEnable) {
|
isp_cfg.module_ens |= ISP2X_MODULE_RAWAWB;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_RAWAWB;
|
isp_cfg.module_en_update |= ISP2X_MODULE_RAWAWB;
|
}
|
} else {
|
return;
|
}
|
|
struct isp2x_rawawb_meas_cfg * awb_cfg_v200 = &isp_cfg.meas.rawawb;
|
awb_cfg_v200->rawawb_sel = awb_meas.frameChoose;
|
awb_cfg_v200->sw_rawawb_xy_en = awb_meas.xyDetectionEnable;
|
awb_cfg_v200->sw_rawawb_uv_en = awb_meas.uvDetectionEnable;
|
awb_cfg_v200->sw_rawlsc_bypass_en = awb_meas.lscBypEnable;
|
awb_cfg_v200->sw_rawawb_3dyuv_ls_idx0 = awb_meas.threeDyuvIllu[0];
|
awb_cfg_v200->sw_rawawb_3dyuv_ls_idx1 = awb_meas.threeDyuvIllu[1];
|
awb_cfg_v200->sw_rawawb_3dyuv_ls_idx2 = awb_meas.threeDyuvIllu[2];
|
awb_cfg_v200->sw_rawawb_3dyuv_ls_idx3 = awb_meas.threeDyuvIllu[3];
|
awb_cfg_v200->sw_rawawb_blk_measure_mode = awb_meas.blkMeasureMode;
|
awb_cfg_v200->sw_rawawb_store_wp_th0 = awb_meas.blkMeasWpTh[0];
|
awb_cfg_v200->sw_rawawb_store_wp_th1 = awb_meas.blkMeasWpTh[1];
|
awb_cfg_v200->sw_rawawb_store_wp_th2 = awb_meas.blkMeasWpTh[2];
|
|
awb_cfg_v200->sw_rawawb_light_num = awb_meas.lightNum;
|
awb_cfg_v200->sw_rawawb_h_offs = awb_meas.windowSet[0];
|
awb_cfg_v200->sw_rawawb_v_offs = awb_meas.windowSet[1];
|
awb_cfg_v200->sw_rawawb_h_size = awb_meas.windowSet[2];
|
awb_cfg_v200->sw_rawawb_v_size = awb_meas.windowSet[3];
|
switch(awb_meas.dsMode) {
|
case RK_AIQ_AWB_DS_4X4:
|
awb_cfg_v200->sw_rawawb_wind_size = 0;
|
break;
|
default:
|
awb_cfg_v200->sw_rawawb_wind_size = 1;
|
}
|
awb_cfg_v200->sw_rawawb_r_max = awb_meas.maxR;
|
awb_cfg_v200->sw_rawawb_g_max = awb_meas.maxG;
|
awb_cfg_v200->sw_rawawb_b_max = awb_meas.maxB;
|
awb_cfg_v200->sw_rawawb_y_max = awb_meas.maxY;
|
awb_cfg_v200->sw_rawawb_r_min = awb_meas.minR;
|
awb_cfg_v200->sw_rawawb_g_min = awb_meas.minG;
|
awb_cfg_v200->sw_rawawb_b_min = awb_meas.minB;
|
awb_cfg_v200->sw_rawawb_y_min = awb_meas.minY;
|
awb_cfg_v200->sw_rawawb_c_range = awb_meas.rgb2yuv_c_range;
|
awb_cfg_v200->sw_rawawb_y_range = awb_meas.rgb2yuv_y_range;
|
awb_cfg_v200->sw_rawawb_coeff_y_r = awb_meas.rgb2yuv_matrix[0];
|
awb_cfg_v200->sw_rawawb_coeff_y_g = awb_meas.rgb2yuv_matrix[1];
|
awb_cfg_v200->sw_rawawb_coeff_y_b = awb_meas.rgb2yuv_matrix[2];
|
awb_cfg_v200->sw_rawawb_coeff_u_r = awb_meas.rgb2yuv_matrix[3];
|
awb_cfg_v200->sw_rawawb_coeff_u_g = awb_meas.rgb2yuv_matrix[4];
|
awb_cfg_v200->sw_rawawb_coeff_u_b = awb_meas.rgb2yuv_matrix[5];
|
awb_cfg_v200->sw_rawawb_coeff_v_r = awb_meas.rgb2yuv_matrix[6];
|
awb_cfg_v200->sw_rawawb_coeff_v_g = awb_meas.rgb2yuv_matrix[7];
|
awb_cfg_v200->sw_rawawb_coeff_v_b = awb_meas.rgb2yuv_matrix[8];
|
//uv
|
awb_cfg_v200->sw_rawawb_vertex0_u_0 = awb_meas.uvRange_param[0].pu_region[0];
|
awb_cfg_v200->sw_rawawb_vertex0_v_0 = awb_meas.uvRange_param[0].pv_region[0];
|
awb_cfg_v200->sw_rawawb_vertex1_u_0 = awb_meas.uvRange_param[0].pu_region[1];
|
awb_cfg_v200->sw_rawawb_vertex1_v_0 = awb_meas.uvRange_param[0].pv_region[1];
|
awb_cfg_v200->sw_rawawb_vertex2_u_0 = awb_meas.uvRange_param[0].pu_region[2];
|
awb_cfg_v200->sw_rawawb_vertex2_v_0 = awb_meas.uvRange_param[0].pv_region[2];
|
awb_cfg_v200->sw_rawawb_vertex3_u_0 = awb_meas.uvRange_param[0].pu_region[3];
|
awb_cfg_v200->sw_rawawb_vertex3_v_0 = awb_meas.uvRange_param[0].pv_region[3];
|
awb_cfg_v200->sw_rawawb_islope01_0 = awb_meas.uvRange_param[0].slope_inv[0];
|
awb_cfg_v200->sw_rawawb_islope12_0 = awb_meas.uvRange_param[0].slope_inv[1];
|
awb_cfg_v200->sw_rawawb_islope23_0 = awb_meas.uvRange_param[0].slope_inv[2];
|
awb_cfg_v200->sw_rawawb_islope30_0 = awb_meas.uvRange_param[0].slope_inv[3];
|
awb_cfg_v200->sw_rawawb_vertex0_u_1 = awb_meas.uvRange_param[1].pu_region[0];
|
awb_cfg_v200->sw_rawawb_vertex0_v_1 = awb_meas.uvRange_param[1].pv_region[0];
|
awb_cfg_v200->sw_rawawb_vertex1_u_1 = awb_meas.uvRange_param[1].pu_region[1];
|
awb_cfg_v200->sw_rawawb_vertex1_v_1 = awb_meas.uvRange_param[1].pv_region[1];
|
awb_cfg_v200->sw_rawawb_vertex2_u_1 = awb_meas.uvRange_param[1].pu_region[2];
|
awb_cfg_v200->sw_rawawb_vertex2_v_1 = awb_meas.uvRange_param[1].pv_region[2];
|
awb_cfg_v200->sw_rawawb_vertex3_u_1 = awb_meas.uvRange_param[1].pu_region[3];
|
awb_cfg_v200->sw_rawawb_vertex3_v_1 = awb_meas.uvRange_param[1].pv_region[3];
|
awb_cfg_v200->sw_rawawb_islope01_1 = awb_meas.uvRange_param[1].slope_inv[0];
|
awb_cfg_v200->sw_rawawb_islope12_1 = awb_meas.uvRange_param[1].slope_inv[1];
|
awb_cfg_v200->sw_rawawb_islope23_1 = awb_meas.uvRange_param[1].slope_inv[2];
|
awb_cfg_v200->sw_rawawb_islope30_1 = awb_meas.uvRange_param[1].slope_inv[3];
|
awb_cfg_v200->sw_rawawb_vertex0_u_2 = awb_meas.uvRange_param[2].pu_region[0];
|
awb_cfg_v200->sw_rawawb_vertex0_v_2 = awb_meas.uvRange_param[2].pv_region[0];
|
awb_cfg_v200->sw_rawawb_vertex1_u_2 = awb_meas.uvRange_param[2].pu_region[1];
|
awb_cfg_v200->sw_rawawb_vertex1_v_2 = awb_meas.uvRange_param[2].pv_region[1];
|
awb_cfg_v200->sw_rawawb_vertex2_u_2 = awb_meas.uvRange_param[2].pu_region[2];
|
awb_cfg_v200->sw_rawawb_vertex2_v_2 = awb_meas.uvRange_param[2].pv_region[2];
|
awb_cfg_v200->sw_rawawb_vertex3_u_2 = awb_meas.uvRange_param[2].pu_region[3];
|
awb_cfg_v200->sw_rawawb_vertex3_v_2 = awb_meas.uvRange_param[2].pv_region[3];
|
awb_cfg_v200->sw_rawawb_islope01_2 = awb_meas.uvRange_param[2].slope_inv[0];
|
awb_cfg_v200->sw_rawawb_islope12_2 = awb_meas.uvRange_param[2].slope_inv[1];
|
awb_cfg_v200->sw_rawawb_islope23_2 = awb_meas.uvRange_param[2].slope_inv[2];
|
awb_cfg_v200->sw_rawawb_islope30_2 = awb_meas.uvRange_param[2].slope_inv[3];
|
awb_cfg_v200->sw_rawawb_vertex0_u_3 = awb_meas.uvRange_param[3].pu_region[0];
|
awb_cfg_v200->sw_rawawb_vertex0_v_3 = awb_meas.uvRange_param[3].pv_region[0];
|
awb_cfg_v200->sw_rawawb_vertex1_u_3 = awb_meas.uvRange_param[3].pu_region[1];
|
awb_cfg_v200->sw_rawawb_vertex1_v_3 = awb_meas.uvRange_param[3].pv_region[1];
|
awb_cfg_v200->sw_rawawb_vertex2_u_3 = awb_meas.uvRange_param[3].pu_region[2];
|
awb_cfg_v200->sw_rawawb_vertex2_v_3 = awb_meas.uvRange_param[3].pv_region[2];
|
awb_cfg_v200->sw_rawawb_vertex3_u_3 = awb_meas.uvRange_param[3].pu_region[3];
|
awb_cfg_v200->sw_rawawb_vertex3_v_3 = awb_meas.uvRange_param[3].pv_region[3];
|
awb_cfg_v200->sw_rawawb_islope01_3 = awb_meas.uvRange_param[3].slope_inv[0];
|
awb_cfg_v200->sw_rawawb_islope12_3 = awb_meas.uvRange_param[3].slope_inv[1];
|
awb_cfg_v200->sw_rawawb_islope23_3 = awb_meas.uvRange_param[3].slope_inv[2];
|
awb_cfg_v200->sw_rawawb_islope30_3 = awb_meas.uvRange_param[3].slope_inv[3];
|
awb_cfg_v200->sw_rawawb_vertex0_u_4 = awb_meas.uvRange_param[4].pu_region[0];
|
awb_cfg_v200->sw_rawawb_vertex0_v_4 = awb_meas.uvRange_param[4].pv_region[0];
|
awb_cfg_v200->sw_rawawb_vertex1_u_4 = awb_meas.uvRange_param[4].pu_region[1];
|
awb_cfg_v200->sw_rawawb_vertex1_v_4 = awb_meas.uvRange_param[4].pv_region[1];
|
awb_cfg_v200->sw_rawawb_vertex2_u_4 = awb_meas.uvRange_param[4].pu_region[2];
|
awb_cfg_v200->sw_rawawb_vertex2_v_4 = awb_meas.uvRange_param[4].pv_region[2];
|
awb_cfg_v200->sw_rawawb_vertex3_u_4 = awb_meas.uvRange_param[4].pu_region[3];
|
awb_cfg_v200->sw_rawawb_vertex3_v_4 = awb_meas.uvRange_param[4].pv_region[3];
|
awb_cfg_v200->sw_rawawb_islope01_4 = awb_meas.uvRange_param[4].slope_inv[0];
|
awb_cfg_v200->sw_rawawb_islope12_4 = awb_meas.uvRange_param[4].slope_inv[1];
|
awb_cfg_v200->sw_rawawb_islope23_4 = awb_meas.uvRange_param[4].slope_inv[2];
|
awb_cfg_v200->sw_rawawb_islope30_4 = awb_meas.uvRange_param[4].slope_inv[3];
|
awb_cfg_v200->sw_rawawb_vertex0_u_5 = awb_meas.uvRange_param[5].pu_region[0];
|
awb_cfg_v200->sw_rawawb_vertex0_v_5 = awb_meas.uvRange_param[5].pv_region[0];
|
awb_cfg_v200->sw_rawawb_vertex1_u_5 = awb_meas.uvRange_param[5].pu_region[1];
|
awb_cfg_v200->sw_rawawb_vertex1_v_5 = awb_meas.uvRange_param[5].pv_region[1];
|
awb_cfg_v200->sw_rawawb_vertex2_u_5 = awb_meas.uvRange_param[5].pu_region[2];
|
awb_cfg_v200->sw_rawawb_vertex2_v_5 = awb_meas.uvRange_param[5].pv_region[2];
|
awb_cfg_v200->sw_rawawb_vertex3_u_5 = awb_meas.uvRange_param[5].pu_region[3];
|
awb_cfg_v200->sw_rawawb_vertex3_v_5 = awb_meas.uvRange_param[5].pv_region[3];
|
awb_cfg_v200->sw_rawawb_islope01_5 = awb_meas.uvRange_param[5].slope_inv[0];
|
awb_cfg_v200->sw_rawawb_islope12_5 = awb_meas.uvRange_param[5].slope_inv[1];
|
awb_cfg_v200->sw_rawawb_islope23_5 = awb_meas.uvRange_param[5].slope_inv[2];
|
awb_cfg_v200->sw_rawawb_islope30_5 = awb_meas.uvRange_param[5].slope_inv[3];
|
awb_cfg_v200->sw_rawawb_vertex0_u_6 = awb_meas.uvRange_param[6].pu_region[0];
|
awb_cfg_v200->sw_rawawb_vertex0_v_6 = awb_meas.uvRange_param[6].pv_region[0];
|
awb_cfg_v200->sw_rawawb_vertex1_u_6 = awb_meas.uvRange_param[6].pu_region[1];
|
awb_cfg_v200->sw_rawawb_vertex1_v_6 = awb_meas.uvRange_param[6].pv_region[1];
|
awb_cfg_v200->sw_rawawb_vertex2_u_6 = awb_meas.uvRange_param[6].pu_region[2];
|
awb_cfg_v200->sw_rawawb_vertex2_v_6 = awb_meas.uvRange_param[6].pv_region[2];
|
awb_cfg_v200->sw_rawawb_vertex3_u_6 = awb_meas.uvRange_param[6].pu_region[3];
|
awb_cfg_v200->sw_rawawb_vertex3_v_6 = awb_meas.uvRange_param[6].pv_region[3];
|
awb_cfg_v200->sw_rawawb_islope01_6 = awb_meas.uvRange_param[6].slope_inv[0];
|
awb_cfg_v200->sw_rawawb_islope12_6 = awb_meas.uvRange_param[6].slope_inv[1];
|
awb_cfg_v200->sw_rawawb_islope23_6 = awb_meas.uvRange_param[6].slope_inv[2];
|
awb_cfg_v200->sw_rawawb_islope30_6 = awb_meas.uvRange_param[6].slope_inv[3];
|
//yuv
|
awb_cfg_v200->sw_rawawb_b_uv_0 = awb_meas.yuvRange_param[0].b_uv;
|
awb_cfg_v200->sw_rawawb_slope_ydis_0 = awb_meas.yuvRange_param[0].slope_ydis;
|
awb_cfg_v200->sw_rawawb_b_ydis_0 = awb_meas.yuvRange_param[0].b_ydis;
|
awb_cfg_v200->sw_rawawb_slope_vtcuv_0 = awb_meas.yuvRange_param[0].slope_inv_neg_uv;
|
awb_cfg_v200->sw_rawawb_inv_dslope_0 = awb_meas.yuvRange_param[0].slope_factor_uv;
|
awb_cfg_v200->sw_rawawb_b_uv_1 = awb_meas.yuvRange_param[1].b_uv;
|
awb_cfg_v200->sw_rawawb_slope_ydis_1 = awb_meas.yuvRange_param[1].slope_ydis;
|
awb_cfg_v200->sw_rawawb_b_ydis_1 = awb_meas.yuvRange_param[1].b_ydis;
|
awb_cfg_v200->sw_rawawb_slope_vtcuv_1 = awb_meas.yuvRange_param[1].slope_inv_neg_uv;
|
awb_cfg_v200->sw_rawawb_inv_dslope_1 = awb_meas.yuvRange_param[1].slope_factor_uv;
|
awb_cfg_v200->sw_rawawb_b_uv_2 = awb_meas.yuvRange_param[2].b_uv;
|
awb_cfg_v200->sw_rawawb_slope_ydis_2 = awb_meas.yuvRange_param[2].slope_ydis;
|
awb_cfg_v200->sw_rawawb_b_ydis_2 = awb_meas.yuvRange_param[2].b_ydis;
|
awb_cfg_v200->sw_rawawb_slope_vtcuv_2 = awb_meas.yuvRange_param[2].slope_inv_neg_uv;
|
awb_cfg_v200->sw_rawawb_inv_dslope_2 = awb_meas.yuvRange_param[2].slope_factor_uv;
|
awb_cfg_v200->sw_rawawb_b_uv_3 = awb_meas.yuvRange_param[3].b_uv;
|
awb_cfg_v200->sw_rawawb_slope_ydis_3 = awb_meas.yuvRange_param[3].slope_ydis;
|
awb_cfg_v200->sw_rawawb_b_ydis_3 = awb_meas.yuvRange_param[3].b_ydis;
|
awb_cfg_v200->sw_rawawb_slope_vtcuv_3 = awb_meas.yuvRange_param[3].slope_inv_neg_uv;
|
awb_cfg_v200->sw_rawawb_inv_dslope_3 = awb_meas.yuvRange_param[3].slope_factor_uv;
|
awb_cfg_v200->sw_rawawb_ref_u = awb_meas.yuvRange_param[0].ref_u;
|
awb_cfg_v200->sw_rawawb_ref_v_0 = awb_meas.yuvRange_param[0].ref_v;
|
awb_cfg_v200->sw_rawawb_ref_v_1 = awb_meas.yuvRange_param[1].ref_v;
|
awb_cfg_v200->sw_rawawb_ref_v_2 = awb_meas.yuvRange_param[2].ref_v;
|
awb_cfg_v200->sw_rawawb_ref_v_3 = awb_meas.yuvRange_param[3].ref_v;
|
awb_cfg_v200->sw_rawawb_dis0_0 = awb_meas.yuvRange_param[0].dis[0];
|
awb_cfg_v200->sw_rawawb_dis1_0 = awb_meas.yuvRange_param[0].dis[1];
|
awb_cfg_v200->sw_rawawb_dis2_0 = awb_meas.yuvRange_param[0].dis[2];
|
awb_cfg_v200->sw_rawawb_dis3_0 = awb_meas.yuvRange_param[0].dis[3];
|
awb_cfg_v200->sw_rawawb_dis4_0 = awb_meas.yuvRange_param[0].dis[4];
|
awb_cfg_v200->sw_rawawb_dis5_0 = awb_meas.yuvRange_param[0].dis[5];
|
awb_cfg_v200->sw_rawawb_th0_0 = awb_meas.yuvRange_param[0].th[0];
|
awb_cfg_v200->sw_rawawb_th1_0 = awb_meas.yuvRange_param[0].th[1];
|
awb_cfg_v200->sw_rawawb_th2_0 = awb_meas.yuvRange_param[0].th[2];
|
awb_cfg_v200->sw_rawawb_th3_0 = awb_meas.yuvRange_param[0].th[3];
|
awb_cfg_v200->sw_rawawb_th4_0 = awb_meas.yuvRange_param[0].th[4];
|
awb_cfg_v200->sw_rawawb_th5_0 = awb_meas.yuvRange_param[0].th[5];
|
awb_cfg_v200->sw_rawawb_dis0_1 = awb_meas.yuvRange_param[1].dis[0];
|
awb_cfg_v200->sw_rawawb_dis1_1 = awb_meas.yuvRange_param[1].dis[1];
|
awb_cfg_v200->sw_rawawb_dis2_1 = awb_meas.yuvRange_param[1].dis[2];
|
awb_cfg_v200->sw_rawawb_dis3_1 = awb_meas.yuvRange_param[1].dis[3];
|
awb_cfg_v200->sw_rawawb_dis4_1 = awb_meas.yuvRange_param[1].dis[4];
|
awb_cfg_v200->sw_rawawb_dis5_1 = awb_meas.yuvRange_param[1].dis[5];
|
awb_cfg_v200->sw_rawawb_th0_1 = awb_meas.yuvRange_param[1].th[0];
|
awb_cfg_v200->sw_rawawb_th1_1 = awb_meas.yuvRange_param[1].th[1];
|
awb_cfg_v200->sw_rawawb_th2_1 = awb_meas.yuvRange_param[1].th[2];
|
awb_cfg_v200->sw_rawawb_th3_1 = awb_meas.yuvRange_param[1].th[3];
|
awb_cfg_v200->sw_rawawb_th4_1 = awb_meas.yuvRange_param[1].th[4];
|
awb_cfg_v200->sw_rawawb_th5_1 = awb_meas.yuvRange_param[1].th[5];
|
awb_cfg_v200->sw_rawawb_dis0_2 = awb_meas.yuvRange_param[2].dis[0];
|
awb_cfg_v200->sw_rawawb_dis1_2 = awb_meas.yuvRange_param[2].dis[1];
|
awb_cfg_v200->sw_rawawb_dis2_2 = awb_meas.yuvRange_param[2].dis[2];
|
awb_cfg_v200->sw_rawawb_dis3_2 = awb_meas.yuvRange_param[2].dis[3];
|
awb_cfg_v200->sw_rawawb_dis4_2 = awb_meas.yuvRange_param[2].dis[4];
|
awb_cfg_v200->sw_rawawb_dis5_2 = awb_meas.yuvRange_param[2].dis[5];
|
awb_cfg_v200->sw_rawawb_th0_2 = awb_meas.yuvRange_param[2].th[0];
|
awb_cfg_v200->sw_rawawb_th1_2 = awb_meas.yuvRange_param[2].th[1];
|
awb_cfg_v200->sw_rawawb_th2_2 = awb_meas.yuvRange_param[2].th[2];
|
awb_cfg_v200->sw_rawawb_th3_2 = awb_meas.yuvRange_param[2].th[3];
|
awb_cfg_v200->sw_rawawb_th4_2 = awb_meas.yuvRange_param[2].th[4];
|
awb_cfg_v200->sw_rawawb_th5_2 = awb_meas.yuvRange_param[2].th[5];
|
awb_cfg_v200->sw_rawawb_dis0_3 = awb_meas.yuvRange_param[3].dis[0];
|
awb_cfg_v200->sw_rawawb_dis1_3 = awb_meas.yuvRange_param[3].dis[1];
|
awb_cfg_v200->sw_rawawb_dis2_3 = awb_meas.yuvRange_param[3].dis[2];
|
awb_cfg_v200->sw_rawawb_dis3_3 = awb_meas.yuvRange_param[3].dis[3];
|
awb_cfg_v200->sw_rawawb_dis4_3 = awb_meas.yuvRange_param[3].dis[4];
|
awb_cfg_v200->sw_rawawb_dis5_3 = awb_meas.yuvRange_param[3].dis[5];
|
awb_cfg_v200->sw_rawawb_th0_3 = awb_meas.yuvRange_param[3].th[0];
|
awb_cfg_v200->sw_rawawb_th1_3 = awb_meas.yuvRange_param[3].th[1];
|
awb_cfg_v200->sw_rawawb_th2_3 = awb_meas.yuvRange_param[3].th[2];
|
awb_cfg_v200->sw_rawawb_th3_3 = awb_meas.yuvRange_param[3].th[3];
|
awb_cfg_v200->sw_rawawb_th4_3 = awb_meas.yuvRange_param[3].th[4];
|
awb_cfg_v200->sw_rawawb_th5_3 = awb_meas.yuvRange_param[3].th[5];
|
//xy
|
awb_cfg_v200->sw_rawawb_wt0 = awb_meas.rgb2xy_param.pseudoLuminanceWeight[0];
|
awb_cfg_v200->sw_rawawb_wt1 = awb_meas.rgb2xy_param.pseudoLuminanceWeight[1];
|
awb_cfg_v200->sw_rawawb_wt2 = awb_meas.rgb2xy_param.pseudoLuminanceWeight[2];
|
awb_cfg_v200->sw_rawawb_mat0_x = awb_meas.rgb2xy_param.rotationMat[0];
|
awb_cfg_v200->sw_rawawb_mat1_x = awb_meas.rgb2xy_param.rotationMat[1];
|
awb_cfg_v200->sw_rawawb_mat2_x = awb_meas.rgb2xy_param.rotationMat[2];
|
awb_cfg_v200->sw_rawawb_mat0_y = awb_meas.rgb2xy_param.rotationMat[3];
|
awb_cfg_v200->sw_rawawb_mat1_y = awb_meas.rgb2xy_param.rotationMat[4];
|
awb_cfg_v200->sw_rawawb_mat2_y = awb_meas.rgb2xy_param.rotationMat[5];
|
awb_cfg_v200->sw_rawawb_nor_x0_0 = awb_meas.xyRange_param[0].NorrangeX[0];
|
awb_cfg_v200->sw_rawawb_nor_x1_0 = awb_meas.xyRange_param[0].NorrangeX[1];
|
awb_cfg_v200->sw_rawawb_nor_y0_0 = awb_meas.xyRange_param[0].NorrangeY[0];
|
awb_cfg_v200->sw_rawawb_nor_y1_0 = awb_meas.xyRange_param[0].NorrangeY[1];
|
awb_cfg_v200->sw_rawawb_big_x0_0 = awb_meas.xyRange_param[0].SperangeX[0];
|
awb_cfg_v200->sw_rawawb_big_x1_0 = awb_meas.xyRange_param[0].SperangeX[1];
|
awb_cfg_v200->sw_rawawb_big_y0_0 = awb_meas.xyRange_param[0].SperangeY[0];
|
awb_cfg_v200->sw_rawawb_big_y1_0 = awb_meas.xyRange_param[0].SperangeY[1];
|
awb_cfg_v200->sw_rawawb_sma_x0_0 = awb_meas.xyRange_param[0].SmalrangeX[0];
|
awb_cfg_v200->sw_rawawb_sma_x1_0 = awb_meas.xyRange_param[0].SmalrangeX[1];
|
awb_cfg_v200->sw_rawawb_sma_y0_0 = awb_meas.xyRange_param[0].SmalrangeY[0];
|
awb_cfg_v200->sw_rawawb_sma_y1_0 = awb_meas.xyRange_param[0].SmalrangeY[1];
|
awb_cfg_v200->sw_rawawb_nor_x0_1 = awb_meas.xyRange_param[1].NorrangeX[0];
|
awb_cfg_v200->sw_rawawb_nor_x1_1 = awb_meas.xyRange_param[1].NorrangeX[1];
|
awb_cfg_v200->sw_rawawb_nor_y0_1 = awb_meas.xyRange_param[1].NorrangeY[0];
|
awb_cfg_v200->sw_rawawb_nor_y1_1 = awb_meas.xyRange_param[1].NorrangeY[1];
|
awb_cfg_v200->sw_rawawb_big_x0_1 = awb_meas.xyRange_param[1].SperangeX[0];
|
awb_cfg_v200->sw_rawawb_big_x1_1 = awb_meas.xyRange_param[1].SperangeX[1];
|
awb_cfg_v200->sw_rawawb_big_y0_1 = awb_meas.xyRange_param[1].SperangeY[0];
|
awb_cfg_v200->sw_rawawb_big_y1_1 = awb_meas.xyRange_param[1].SperangeY[1];
|
awb_cfg_v200->sw_rawawb_sma_x0_1 = awb_meas.xyRange_param[1].SmalrangeX[0];
|
awb_cfg_v200->sw_rawawb_sma_x1_1 = awb_meas.xyRange_param[1].SmalrangeX[1];
|
awb_cfg_v200->sw_rawawb_sma_y0_1 = awb_meas.xyRange_param[1].SmalrangeY[0];
|
awb_cfg_v200->sw_rawawb_sma_y1_1 = awb_meas.xyRange_param[1].SmalrangeY[1];
|
awb_cfg_v200->sw_rawawb_nor_x0_2 = awb_meas.xyRange_param[2].NorrangeX[0];
|
awb_cfg_v200->sw_rawawb_nor_x1_2 = awb_meas.xyRange_param[2].NorrangeX[1];
|
awb_cfg_v200->sw_rawawb_nor_y0_2 = awb_meas.xyRange_param[2].NorrangeY[0];
|
awb_cfg_v200->sw_rawawb_nor_y1_2 = awb_meas.xyRange_param[2].NorrangeY[1];
|
awb_cfg_v200->sw_rawawb_big_x0_2 = awb_meas.xyRange_param[2].SperangeX[0];
|
awb_cfg_v200->sw_rawawb_big_x1_2 = awb_meas.xyRange_param[2].SperangeX[1];
|
awb_cfg_v200->sw_rawawb_big_y0_2 = awb_meas.xyRange_param[2].SperangeY[0];
|
awb_cfg_v200->sw_rawawb_big_y1_2 = awb_meas.xyRange_param[2].SperangeY[1];
|
awb_cfg_v200->sw_rawawb_sma_x0_2 = awb_meas.xyRange_param[2].SmalrangeX[0];
|
awb_cfg_v200->sw_rawawb_sma_x1_2 = awb_meas.xyRange_param[2].SmalrangeX[1];
|
awb_cfg_v200->sw_rawawb_sma_y0_2 = awb_meas.xyRange_param[2].SmalrangeY[0];
|
awb_cfg_v200->sw_rawawb_sma_y1_2 = awb_meas.xyRange_param[2].SmalrangeY[1];
|
awb_cfg_v200->sw_rawawb_nor_x0_3 = awb_meas.xyRange_param[3].NorrangeX[0];
|
awb_cfg_v200->sw_rawawb_nor_x1_3 = awb_meas.xyRange_param[3].NorrangeX[1];
|
awb_cfg_v200->sw_rawawb_nor_y0_3 = awb_meas.xyRange_param[3].NorrangeY[0];
|
awb_cfg_v200->sw_rawawb_nor_y1_3 = awb_meas.xyRange_param[3].NorrangeY[1];
|
awb_cfg_v200->sw_rawawb_big_x0_3 = awb_meas.xyRange_param[3].SperangeX[0];
|
awb_cfg_v200->sw_rawawb_big_x1_3 = awb_meas.xyRange_param[3].SperangeX[1];
|
awb_cfg_v200->sw_rawawb_big_y0_3 = awb_meas.xyRange_param[3].SperangeY[0];
|
awb_cfg_v200->sw_rawawb_big_y1_3 = awb_meas.xyRange_param[3].SperangeY[1];
|
awb_cfg_v200->sw_rawawb_sma_x0_3 = awb_meas.xyRange_param[3].SmalrangeX[0];
|
awb_cfg_v200->sw_rawawb_sma_x1_3 = awb_meas.xyRange_param[3].SmalrangeX[1];
|
awb_cfg_v200->sw_rawawb_sma_y0_3 = awb_meas.xyRange_param[3].SmalrangeY[0];
|
awb_cfg_v200->sw_rawawb_sma_y1_3 = awb_meas.xyRange_param[3].SmalrangeY[1];
|
awb_cfg_v200->sw_rawawb_nor_x0_4 = awb_meas.xyRange_param[4].NorrangeX[0];
|
awb_cfg_v200->sw_rawawb_nor_x1_4 = awb_meas.xyRange_param[4].NorrangeX[1];
|
awb_cfg_v200->sw_rawawb_nor_y0_4 = awb_meas.xyRange_param[4].NorrangeY[0];
|
awb_cfg_v200->sw_rawawb_nor_y1_4 = awb_meas.xyRange_param[4].NorrangeY[1];
|
awb_cfg_v200->sw_rawawb_big_x0_4 = awb_meas.xyRange_param[4].SperangeX[0];
|
awb_cfg_v200->sw_rawawb_big_x1_4 = awb_meas.xyRange_param[4].SperangeX[1];
|
awb_cfg_v200->sw_rawawb_big_y0_4 = awb_meas.xyRange_param[4].SperangeY[0];
|
awb_cfg_v200->sw_rawawb_big_y1_4 = awb_meas.xyRange_param[4].SperangeY[1];
|
awb_cfg_v200->sw_rawawb_sma_x0_4 = awb_meas.xyRange_param[4].SmalrangeX[0];
|
awb_cfg_v200->sw_rawawb_sma_x1_4 = awb_meas.xyRange_param[4].SmalrangeX[1];
|
awb_cfg_v200->sw_rawawb_sma_y0_4 = awb_meas.xyRange_param[4].SmalrangeY[0];
|
awb_cfg_v200->sw_rawawb_sma_y1_4 = awb_meas.xyRange_param[4].SmalrangeY[1];
|
awb_cfg_v200->sw_rawawb_nor_x0_5 = awb_meas.xyRange_param[5].NorrangeX[0];
|
awb_cfg_v200->sw_rawawb_nor_x1_5 = awb_meas.xyRange_param[5].NorrangeX[1];
|
awb_cfg_v200->sw_rawawb_nor_y0_5 = awb_meas.xyRange_param[5].NorrangeY[0];
|
awb_cfg_v200->sw_rawawb_nor_y1_5 = awb_meas.xyRange_param[5].NorrangeY[1];
|
awb_cfg_v200->sw_rawawb_big_x0_5 = awb_meas.xyRange_param[5].SperangeX[0];
|
awb_cfg_v200->sw_rawawb_big_x1_5 = awb_meas.xyRange_param[5].SperangeX[1];
|
awb_cfg_v200->sw_rawawb_big_y0_5 = awb_meas.xyRange_param[5].SperangeY[0];
|
awb_cfg_v200->sw_rawawb_big_y1_5 = awb_meas.xyRange_param[5].SperangeY[1];
|
awb_cfg_v200->sw_rawawb_sma_x0_5 = awb_meas.xyRange_param[5].SmalrangeX[0];
|
awb_cfg_v200->sw_rawawb_sma_x1_5 = awb_meas.xyRange_param[5].SmalrangeX[1];
|
awb_cfg_v200->sw_rawawb_sma_y0_5 = awb_meas.xyRange_param[5].SmalrangeY[0];
|
awb_cfg_v200->sw_rawawb_sma_y1_5 = awb_meas.xyRange_param[5].SmalrangeY[1];
|
awb_cfg_v200->sw_rawawb_nor_x0_6 = awb_meas.xyRange_param[6].NorrangeX[0];
|
awb_cfg_v200->sw_rawawb_nor_x1_6 = awb_meas.xyRange_param[6].NorrangeX[1];
|
awb_cfg_v200->sw_rawawb_nor_y0_6 = awb_meas.xyRange_param[6].NorrangeY[0];
|
awb_cfg_v200->sw_rawawb_nor_y1_6 = awb_meas.xyRange_param[6].NorrangeY[1];
|
awb_cfg_v200->sw_rawawb_big_x0_6 = awb_meas.xyRange_param[6].SperangeX[0];
|
awb_cfg_v200->sw_rawawb_big_x1_6 = awb_meas.xyRange_param[6].SperangeX[1];
|
awb_cfg_v200->sw_rawawb_big_y0_6 = awb_meas.xyRange_param[6].SperangeY[0];
|
awb_cfg_v200->sw_rawawb_big_y1_6 = awb_meas.xyRange_param[6].SperangeY[1];
|
awb_cfg_v200->sw_rawawb_sma_x0_6 = awb_meas.xyRange_param[6].SmalrangeX[0];
|
awb_cfg_v200->sw_rawawb_sma_x1_6 = awb_meas.xyRange_param[6].SmalrangeX[1];
|
awb_cfg_v200->sw_rawawb_sma_y0_6 = awb_meas.xyRange_param[6].SmalrangeY[0];
|
awb_cfg_v200->sw_rawawb_sma_y1_6 = awb_meas.xyRange_param[6].SmalrangeY[1];
|
//multiwindow
|
awb_cfg_v200->sw_rawawb_multiwindow_en = awb_meas.multiwindow_en;
|
awb_cfg_v200->sw_rawawb_multiwindow0_h_offs = awb_meas.multiwindow[0][0];
|
awb_cfg_v200->sw_rawawb_multiwindow0_v_offs = awb_meas.multiwindow[0][1];
|
awb_cfg_v200->sw_rawawb_multiwindow0_h_size = awb_meas.multiwindow[0][2];
|
awb_cfg_v200->sw_rawawb_multiwindow0_v_size = awb_meas.multiwindow[0][3];
|
awb_cfg_v200->sw_rawawb_multiwindow1_h_offs = awb_meas.multiwindow[1][0];
|
awb_cfg_v200->sw_rawawb_multiwindow1_v_offs = awb_meas.multiwindow[1][1];
|
awb_cfg_v200->sw_rawawb_multiwindow1_h_size = awb_meas.multiwindow[1][2];
|
awb_cfg_v200->sw_rawawb_multiwindow1_v_size = awb_meas.multiwindow[1][3];
|
awb_cfg_v200->sw_rawawb_multiwindow2_h_offs = awb_meas.multiwindow[2][0];
|
awb_cfg_v200->sw_rawawb_multiwindow2_v_offs = awb_meas.multiwindow[2][1];
|
awb_cfg_v200->sw_rawawb_multiwindow2_h_size = awb_meas.multiwindow[2][2];
|
awb_cfg_v200->sw_rawawb_multiwindow2_v_size = awb_meas.multiwindow[2][3];
|
awb_cfg_v200->sw_rawawb_multiwindow3_h_offs = awb_meas.multiwindow[3][0];
|
awb_cfg_v200->sw_rawawb_multiwindow3_v_offs = awb_meas.multiwindow[3][1];
|
awb_cfg_v200->sw_rawawb_multiwindow3_h_size = awb_meas.multiwindow[3][2];
|
awb_cfg_v200->sw_rawawb_multiwindow3_v_size = awb_meas.multiwindow[3][3];
|
awb_cfg_v200->sw_rawawb_multiwindow4_h_offs = awb_meas.multiwindow[4][0];
|
awb_cfg_v200->sw_rawawb_multiwindow4_v_offs = awb_meas.multiwindow[4][1];
|
awb_cfg_v200->sw_rawawb_multiwindow4_h_size = awb_meas.multiwindow[4][2];
|
awb_cfg_v200->sw_rawawb_multiwindow4_v_size = awb_meas.multiwindow[4][3];
|
awb_cfg_v200->sw_rawawb_multiwindow5_h_offs = awb_meas.multiwindow[5][0];
|
awb_cfg_v200->sw_rawawb_multiwindow5_v_offs = awb_meas.multiwindow[5][1];
|
awb_cfg_v200->sw_rawawb_multiwindow5_h_size = awb_meas.multiwindow[5][2];
|
awb_cfg_v200->sw_rawawb_multiwindow5_v_size = awb_meas.multiwindow[5][3];
|
awb_cfg_v200->sw_rawawb_multiwindow6_h_offs = awb_meas.multiwindow[6][0];
|
awb_cfg_v200->sw_rawawb_multiwindow6_v_offs = awb_meas.multiwindow[6][1];
|
awb_cfg_v200->sw_rawawb_multiwindow6_h_size = awb_meas.multiwindow[6][2];
|
awb_cfg_v200->sw_rawawb_multiwindow6_v_size = awb_meas.multiwindow[6][3];
|
awb_cfg_v200->sw_rawawb_multiwindow7_h_offs = awb_meas.multiwindow[7][0];
|
awb_cfg_v200->sw_rawawb_multiwindow7_v_offs = awb_meas.multiwindow[7][1];
|
awb_cfg_v200->sw_rawawb_multiwindow7_h_size = awb_meas.multiwindow[7][2];
|
awb_cfg_v200->sw_rawawb_multiwindow7_v_size = awb_meas.multiwindow[7][3];
|
//exc range
|
|
awb_cfg_v200->sw_rawawb_exc_wp_region0_excen = awb_meas.excludeWpRange[0].excludeEnable;
|
awb_cfg_v200->sw_rawawb_exc_wp_region0_measen = awb_meas.excludeWpRange[0].measureEnable;
|
switch(awb_meas.excludeWpRange[0].domain) {
|
case RK_AIQ_AWB_EXC_RANGE_DOMAIN_UV:
|
awb_cfg_v200->sw_rawawb_exc_wp_region0_domain = 0;
|
break;
|
default:
|
awb_cfg_v200->sw_rawawb_exc_wp_region0_domain = 1;
|
}
|
awb_cfg_v200->sw_rawawb_exc_wp_region0_xu0 = awb_meas.excludeWpRange[0].xu[0];
|
awb_cfg_v200->sw_rawawb_exc_wp_region0_xu1 = awb_meas.excludeWpRange[0].xu[1];
|
awb_cfg_v200->sw_rawawb_exc_wp_region0_yv0 = awb_meas.excludeWpRange[0].yv[0];
|
awb_cfg_v200->sw_rawawb_exc_wp_region0_yv1 = awb_meas.excludeWpRange[0].yv[1];
|
awb_cfg_v200->sw_rawawb_exc_wp_region1_excen = awb_meas.excludeWpRange[1].excludeEnable;
|
awb_cfg_v200->sw_rawawb_exc_wp_region1_measen = awb_meas.excludeWpRange[1].measureEnable;
|
awb_cfg_v200->sw_rawawb_exc_wp_region1_domain = awb_meas.excludeWpRange[1].domain;
|
switch(awb_meas.excludeWpRange[1].domain) {
|
case RK_AIQ_AWB_EXC_RANGE_DOMAIN_UV:
|
awb_cfg_v200->sw_rawawb_exc_wp_region1_domain = 0;
|
break;
|
default:
|
awb_cfg_v200->sw_rawawb_exc_wp_region1_domain = 1;
|
}
|
awb_cfg_v200->sw_rawawb_exc_wp_region1_xu0 = awb_meas.excludeWpRange[1].xu[0];
|
awb_cfg_v200->sw_rawawb_exc_wp_region1_xu1 = awb_meas.excludeWpRange[1].xu[1];
|
awb_cfg_v200->sw_rawawb_exc_wp_region1_yv0 = awb_meas.excludeWpRange[1].yv[0];
|
awb_cfg_v200->sw_rawawb_exc_wp_region1_yv1 = awb_meas.excludeWpRange[1].yv[1];
|
awb_cfg_v200->sw_rawawb_exc_wp_region2_excen = awb_meas.excludeWpRange[2].excludeEnable;
|
awb_cfg_v200->sw_rawawb_exc_wp_region2_measen = awb_meas.excludeWpRange[2].measureEnable;
|
switch(awb_meas.excludeWpRange[2].domain) {
|
case RK_AIQ_AWB_EXC_RANGE_DOMAIN_UV:
|
awb_cfg_v200->sw_rawawb_exc_wp_region2_domain = 0;
|
break;
|
default:
|
awb_cfg_v200->sw_rawawb_exc_wp_region2_domain = 1;
|
}
|
awb_cfg_v200->sw_rawawb_exc_wp_region2_xu0 = awb_meas.excludeWpRange[2].xu[0];
|
awb_cfg_v200->sw_rawawb_exc_wp_region2_xu1 = awb_meas.excludeWpRange[2].xu[1];
|
awb_cfg_v200->sw_rawawb_exc_wp_region2_yv0 = awb_meas.excludeWpRange[2].yv[0];
|
awb_cfg_v200->sw_rawawb_exc_wp_region2_yv1 = awb_meas.excludeWpRange[2].yv[1];
|
awb_cfg_v200->sw_rawawb_exc_wp_region3_excen = awb_meas.excludeWpRange[3].excludeEnable;
|
awb_cfg_v200->sw_rawawb_exc_wp_region3_measen = awb_meas.excludeWpRange[3].measureEnable;
|
awb_cfg_v200->sw_rawawb_exc_wp_region3_domain = awb_meas.excludeWpRange[3].domain;
|
switch(awb_meas.excludeWpRange[3].domain) {
|
case RK_AIQ_AWB_EXC_RANGE_DOMAIN_UV:
|
awb_cfg_v200->sw_rawawb_exc_wp_region3_domain = 0;
|
break;
|
default:
|
awb_cfg_v200->sw_rawawb_exc_wp_region3_domain = 1;
|
}
|
awb_cfg_v200->sw_rawawb_exc_wp_region3_xu0 = awb_meas.excludeWpRange[3].xu[0];
|
awb_cfg_v200->sw_rawawb_exc_wp_region3_xu1 = awb_meas.excludeWpRange[3].xu[1];
|
awb_cfg_v200->sw_rawawb_exc_wp_region3_yv0 = awb_meas.excludeWpRange[3].yv[0];
|
awb_cfg_v200->sw_rawawb_exc_wp_region3_yv1 = awb_meas.excludeWpRange[3].yv[1];
|
awb_cfg_v200->sw_rawawb_exc_wp_region4_excen = awb_meas.excludeWpRange[4].excludeEnable;
|
awb_cfg_v200->sw_rawawb_exc_wp_region4_measen = awb_meas.excludeWpRange[4].measureEnable;
|
switch(awb_meas.excludeWpRange[4].domain) {
|
case RK_AIQ_AWB_EXC_RANGE_DOMAIN_UV:
|
awb_cfg_v200->sw_rawawb_exc_wp_region4_domain = 0;
|
break;
|
default:
|
awb_cfg_v200->sw_rawawb_exc_wp_region4_domain = 1;
|
}
|
awb_cfg_v200->sw_rawawb_exc_wp_region4_xu0 = awb_meas.excludeWpRange[4].xu[0];
|
awb_cfg_v200->sw_rawawb_exc_wp_region4_xu1 = awb_meas.excludeWpRange[4].xu[1];
|
awb_cfg_v200->sw_rawawb_exc_wp_region4_yv0 = awb_meas.excludeWpRange[4].yv[0];
|
awb_cfg_v200->sw_rawawb_exc_wp_region4_yv1 = awb_meas.excludeWpRange[4].yv[1];
|
awb_cfg_v200->sw_rawawb_exc_wp_region5_excen = awb_meas.excludeWpRange[5].excludeEnable;
|
awb_cfg_v200->sw_rawawb_exc_wp_region5_measen = awb_meas.excludeWpRange[5].measureEnable;
|
switch(awb_meas.excludeWpRange[5].domain) {
|
case RK_AIQ_AWB_EXC_RANGE_DOMAIN_UV:
|
awb_cfg_v200->sw_rawawb_exc_wp_region5_domain = 0;
|
break;
|
default:
|
awb_cfg_v200->sw_rawawb_exc_wp_region5_domain = 1;
|
}
|
awb_cfg_v200->sw_rawawb_exc_wp_region5_xu0 = awb_meas.excludeWpRange[5].xu[0];
|
awb_cfg_v200->sw_rawawb_exc_wp_region5_xu1 = awb_meas.excludeWpRange[5].xu[1];
|
awb_cfg_v200->sw_rawawb_exc_wp_region5_yv0 = awb_meas.excludeWpRange[5].yv[0];
|
awb_cfg_v200->sw_rawawb_exc_wp_region5_yv1 = awb_meas.excludeWpRange[5].yv[1];
|
awb_cfg_v200->sw_rawawb_exc_wp_region6_excen = awb_meas.excludeWpRange[6].excludeEnable;
|
awb_cfg_v200->sw_rawawb_exc_wp_region6_measen = awb_meas.excludeWpRange[6].measureEnable;
|
switch(awb_meas.excludeWpRange[6].domain) {
|
case RK_AIQ_AWB_EXC_RANGE_DOMAIN_UV:
|
awb_cfg_v200->sw_rawawb_exc_wp_region6_domain = 0;
|
break;
|
default:
|
awb_cfg_v200->sw_rawawb_exc_wp_region6_domain = 1;
|
}
|
awb_cfg_v200->sw_rawawb_exc_wp_region6_xu0 = awb_meas.excludeWpRange[6].xu[0];
|
awb_cfg_v200->sw_rawawb_exc_wp_region6_xu1 = awb_meas.excludeWpRange[6].xu[1];
|
awb_cfg_v200->sw_rawawb_exc_wp_region6_yv0 = awb_meas.excludeWpRange[6].yv[0];
|
awb_cfg_v200->sw_rawawb_exc_wp_region6_yv1 = awb_meas.excludeWpRange[6].yv[1];
|
|
awb_cfg_v200->sw_rawawb_store_wp_flag_ls_idx0 = awb_meas.storeWpFlagIllu[0];
|
awb_cfg_v200->sw_rawawb_store_wp_flag_ls_idx1 = awb_meas.storeWpFlagIllu[1];
|
awb_cfg_v200->sw_rawawb_store_wp_flag_ls_idx2 = awb_meas.storeWpFlagIllu[2];
|
}
|
|
template<class T>
|
void Isp20Params::convertAiqMergeToIsp20Params(T& isp_cfg,
|
const rk_aiq_isp_merge_t& amerge_data)
|
{
|
// TODO: could be always on ? isp driver would do the right thing
|
if(amerge_data.Res.sw_hdrmge_mode)
|
{
|
isp_cfg.module_en_update |= 1LL << RK_ISP2X_HDRMGE_ID;
|
isp_cfg.module_ens |= 1LL << RK_ISP2X_HDRMGE_ID;
|
isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_HDRMGE_ID;
|
}
|
else
|
{
|
isp_cfg.module_en_update |= 1LL << RK_ISP2X_HDRMGE_ID;
|
isp_cfg.module_ens &= ~(1LL << RK_ISP2X_HDRMGE_ID);
|
isp_cfg.module_cfg_update &= ~(1LL << RK_ISP2X_HDRMGE_ID);
|
}
|
|
isp_cfg.others.hdrmge_cfg.mode = amerge_data.Res.sw_hdrmge_mode;
|
isp_cfg.others.hdrmge_cfg.gain0_inv = amerge_data.Res.sw_hdrmge_gain0_inv;
|
isp_cfg.others.hdrmge_cfg.gain0 = amerge_data.Res.sw_hdrmge_gain0;
|
isp_cfg.others.hdrmge_cfg.gain1_inv = amerge_data.Res.sw_hdrmge_gain1_inv;
|
isp_cfg.others.hdrmge_cfg.gain1 = amerge_data.Res.sw_hdrmge_gain1;
|
isp_cfg.others.hdrmge_cfg.gain2 = amerge_data.Res.sw_hdrmge_gain2;
|
isp_cfg.others.hdrmge_cfg.lm_dif_0p15 = amerge_data.Res.sw_hdrmge_lm_dif_0p15;
|
isp_cfg.others.hdrmge_cfg.lm_dif_0p9 = amerge_data.Res.sw_hdrmge_lm_dif_0p9;
|
isp_cfg.others.hdrmge_cfg.ms_diff_0p15 = amerge_data.Res.sw_hdrmge_ms_dif_0p15;
|
isp_cfg.others.hdrmge_cfg.ms_dif_0p8 = amerge_data.Res.sw_hdrmge_ms_dif_0p8;
|
for(int i = 0; i < 17; i++)
|
{
|
isp_cfg.others.hdrmge_cfg.curve.curve_0[i] = amerge_data.Res.sw_hdrmge_l0_y[i];
|
isp_cfg.others.hdrmge_cfg.curve.curve_1[i] = amerge_data.Res.sw_hdrmge_l1_y[i];
|
isp_cfg.others.hdrmge_cfg.e_y[i] = amerge_data.Res.sw_hdrmge_e_y[i];
|
}
|
|
#if 0
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain0_inv %d", __LINE__, isp_cfg.others.hdrmge_cfg.gain0_inv);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain0 %d", __LINE__, isp_cfg.others.hdrmge_cfg.gain0);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain1_inv %d", __LINE__, isp_cfg.others.hdrmge_cfg.gain1_inv);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain1 %d", __LINE__, isp_cfg.others.hdrmge_cfg.gain1);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain2 %d", __LINE__, isp_cfg.others.hdrmge_cfg.gain2);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lm_dif_0p15 %d", __LINE__, isp_cfg.others.hdrmge_cfg.lm_dif_0p15);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lm_dif_0p9 %d", __LINE__, isp_cfg.others.hdrmge_cfg.lm_dif_0p9);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: ms_diff_0p15 %d", __LINE__, isp_cfg.others.hdrmge_cfg.ms_diff_0p15);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: ms_dif_0p8 %d", __LINE__, isp_cfg.others.hdrmge_cfg.ms_dif_0p8);
|
for(int i = 0 ; i < 17; i++)
|
{
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: curve_0[%d] %d", __LINE__, i, isp_cfg.others.hdrmge_cfg.curve.curve_0[i]);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: curve_1[%d] %d", __LINE__, i, isp_cfg.others.hdrmge_cfg.curve.curve_1[i]);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: e_y[%d] %d", __LINE__, i, isp_cfg.others.hdrmge_cfg.e_y[i]);
|
}
|
|
#endif
|
}
|
|
template<class T>
|
void Isp20Params::convertAiqTmoToIsp20Params(T& isp_cfg,
|
const rk_aiq_isp_tmo_t& atmo_data)
|
{
|
if(atmo_data.bTmoEn)
|
{
|
isp_cfg.module_en_update |= 1LL << RK_ISP2X_HDRTMO_ID;
|
isp_cfg.module_ens |= 1LL << RK_ISP2X_HDRTMO_ID;
|
isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_HDRTMO_ID;
|
}
|
else
|
{
|
isp_cfg.module_en_update |= 1LL << RK_ISP2X_HDRTMO_ID;
|
isp_cfg.module_ens &= ~(1LL << RK_ISP2X_HDRTMO_ID);
|
isp_cfg.module_cfg_update &= ~(1LL << RK_ISP2X_HDRTMO_ID);
|
}
|
|
isp_cfg.others.hdrtmo_cfg.cnt_vsize = atmo_data.Res.sw_hdrtmo_cnt_vsize;
|
isp_cfg.others.hdrtmo_cfg.gain_ld_off2 = atmo_data.Res.sw_hdrtmo_gain_ld_off2;
|
isp_cfg.others.hdrtmo_cfg.gain_ld_off1 = atmo_data.Res.sw_hdrtmo_gain_ld_off1;
|
isp_cfg.others.hdrtmo_cfg.big_en = atmo_data.Res.sw_hdrtmo_big_en;
|
isp_cfg.others.hdrtmo_cfg.nobig_en = atmo_data.Res.sw_hdrtmo_nobig_en;
|
isp_cfg.others.hdrtmo_cfg.newhst_en = atmo_data.Res.sw_hdrtmo_newhist_en;
|
isp_cfg.others.hdrtmo_cfg.cnt_mode = atmo_data.Res.sw_hdrtmo_cnt_mode;
|
isp_cfg.others.hdrtmo_cfg.expl_lgratio = atmo_data.Res.sw_hdrtmo_expl_lgratio;
|
isp_cfg.others.hdrtmo_cfg.lgscl_ratio = atmo_data.Res.sw_hdrtmo_lgscl_ratio;
|
isp_cfg.others.hdrtmo_cfg.cfg_alpha = atmo_data.Res.sw_hdrtmo_cfg_alpha;
|
isp_cfg.others.hdrtmo_cfg.set_gainoff = atmo_data.Res.sw_hdrtmo_set_gainoff;
|
isp_cfg.others.hdrtmo_cfg.set_palpha = atmo_data.Res.sw_hdrtmo_set_palpha;
|
isp_cfg.others.hdrtmo_cfg.set_lgmax = atmo_data.Res.sw_hdrtmo_set_lgmax;
|
isp_cfg.others.hdrtmo_cfg.set_lgmin = atmo_data.Res.sw_hdrtmo_set_lgmin;
|
isp_cfg.others.hdrtmo_cfg.set_weightkey = atmo_data.Res.sw_hdrtmo_set_weightkey;
|
isp_cfg.others.hdrtmo_cfg.set_lgmean = atmo_data.Res.sw_hdrtmo_set_lgmean;
|
isp_cfg.others.hdrtmo_cfg.set_lgrange1 = atmo_data.Res.sw_hdrtmo_set_lgrange1;
|
isp_cfg.others.hdrtmo_cfg.set_lgrange0 = atmo_data.Res.sw_hdrtmo_set_lgrange0;
|
isp_cfg.others.hdrtmo_cfg.set_lgavgmax = atmo_data.Res.sw_hdrtmo_set_lgavgmax;
|
isp_cfg.others.hdrtmo_cfg.clipgap1_i = atmo_data.Res.sw_hdrtmo_clipgap1;
|
isp_cfg.others.hdrtmo_cfg.clipgap0_i = atmo_data.Res.sw_hdrtmo_clipgap0;
|
isp_cfg.others.hdrtmo_cfg.clipratio1 = atmo_data.Res.sw_hdrtmo_clipratio1;
|
isp_cfg.others.hdrtmo_cfg.clipratio0 = atmo_data.Res.sw_hdrtmo_clipratio0;
|
isp_cfg.others.hdrtmo_cfg.ratiol = atmo_data.Res.sw_hdrtmo_ratiol;
|
isp_cfg.others.hdrtmo_cfg.lgscl_inv = atmo_data.Res.sw_hdrtmo_lgscl_inv;
|
isp_cfg.others.hdrtmo_cfg.lgscl = atmo_data.Res.sw_hdrtmo_lgscl;
|
isp_cfg.others.hdrtmo_cfg.lgmax = atmo_data.Res.sw_hdrtmo_lgmax;
|
isp_cfg.others.hdrtmo_cfg.hist_low = atmo_data.Res.sw_hdrtmo_hist_low;
|
isp_cfg.others.hdrtmo_cfg.hist_min = atmo_data.Res.sw_hdrtmo_hist_min;
|
isp_cfg.others.hdrtmo_cfg.hist_shift = atmo_data.Res.sw_hdrtmo_hist_shift;
|
isp_cfg.others.hdrtmo_cfg.hist_0p3 = atmo_data.Res.sw_hdrtmo_hist_0p3;
|
isp_cfg.others.hdrtmo_cfg.hist_high = atmo_data.Res.sw_hdrtmo_hist_high;
|
isp_cfg.others.hdrtmo_cfg.palpha_lwscl = atmo_data.Res.sw_hdrtmo_palpha_lwscl;
|
isp_cfg.others.hdrtmo_cfg.palpha_lw0p5 = atmo_data.Res.sw_hdrtmo_palpha_lw0p5;
|
isp_cfg.others.hdrtmo_cfg.palpha_0p18 = atmo_data.Res.sw_hdrtmo_palpha_0p18;
|
isp_cfg.others.hdrtmo_cfg.maxgain = atmo_data.Res.sw_hdrtmo_maxgain;
|
isp_cfg.others.hdrtmo_cfg.maxpalpha = atmo_data.Res.sw_hdrtmo_maxpalpha;
|
|
//tmo predict
|
isp_cfg.others.hdrtmo_cfg.predict.global_tmo = atmo_data.isHdrGlobalTmo;
|
isp_cfg.others.hdrtmo_cfg.predict.scene_stable = atmo_data.Predict.Scenestable;
|
isp_cfg.others.hdrtmo_cfg.predict.k_rolgmean = atmo_data.Predict.K_Rolgmean;
|
isp_cfg.others.hdrtmo_cfg.predict.iir = atmo_data.Predict.iir;
|
isp_cfg.others.hdrtmo_cfg.predict.iir_max = atmo_data.Predict.iir_max;
|
isp_cfg.others.hdrtmo_cfg.predict.global_tmo_strength = atmo_data.Predict.global_tmo_strength;
|
#if 0
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: cnt_vsize %d", __LINE__, isp_cfg.others.hdrtmo_cfg.cnt_vsize);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain_ld_off2 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.gain_ld_off2);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: gain_ld_off1 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.gain_ld_off1);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: big_en %d", __LINE__, isp_cfg.others.hdrtmo_cfg.big_en);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: nobig_en %d", __LINE__, isp_cfg.others.hdrtmo_cfg.nobig_en);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: newhst_en %d", __LINE__, isp_cfg.others.hdrtmo_cfg.newhst_en);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: cnt_mode %d", __LINE__, isp_cfg.others.hdrtmo_cfg.cnt_mode);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: expl_lgratio %d", __LINE__, isp_cfg.others.hdrtmo_cfg.expl_lgratio);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lgscl_ratio %d", __LINE__, isp_cfg.others.hdrtmo_cfg.lgscl_ratio);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: cfg_alpha %d", __LINE__, isp_cfg.others.hdrtmo_cfg.cfg_alpha);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_gainoff %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_gainoff);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_palpha %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_palpha);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_lgmax %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_lgmax);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_lgmin %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_lgmin);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_weightkey %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_weightkey);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_lgmean %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_lgmean);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_lgrange1 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_lgrange1);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_lgrange0 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_lgrange0);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: set_lgavgmax %d", __LINE__, isp_cfg.others.hdrtmo_cfg.set_lgavgmax);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: clipgap1_i %d", __LINE__, isp_cfg.others.hdrtmo_cfg.clipgap1_i);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: clipgap0_i %d", __LINE__, isp_cfg.others.hdrtmo_cfg.clipgap0_i);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: clipratio1 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.clipratio1);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: clipratio0 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.clipratio0);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: ratiol %d", __LINE__, isp_cfg.others.hdrtmo_cfg.ratiol);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lgscl_inv %d", __LINE__, isp_cfg.others.hdrtmo_cfg.lgscl_inv);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lgscl %d", __LINE__, isp_cfg.others.hdrtmo_cfg.lgscl);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: lgmax %d", __LINE__, isp_cfg.others.hdrtmo_cfg.lgmax);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: hist_low %d", __LINE__, isp_cfg.others.hdrtmo_cfg.hist_low);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: hist_min %d", __LINE__, isp_cfg.others.hdrtmo_cfg.hist_min);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: hist_shift %d", __LINE__, isp_cfg.others.hdrtmo_cfg.hist_shift);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: hist_0p3 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.hist_0p3);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: hist_high %d", __LINE__, isp_cfg.others.hdrtmo_cfg.hist_high);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: palpha_lwscl %d", __LINE__, isp_cfg.others.hdrtmo_cfg.palpha_lwscl);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: palpha_lw0p5 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.palpha_lw0p5);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: palpha_0p18 %d", __LINE__, isp_cfg.others.hdrtmo_cfg.palpha_0p18);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: maxgain %d", __LINE__, isp_cfg.others.hdrtmo_cfg.maxgain);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%d: maxpalpha %d", __LINE__, isp_cfg.others.hdrtmo_cfg.maxpalpha);
|
#endif
|
}
|
|
template<class T>
|
void
|
Isp20Params::convertAiqAfToIsp20Params(T& isp_cfg,
|
const rk_aiq_isp_af_meas_t& af_data, bool af_cfg_udpate)
|
{
|
if (!af_cfg_udpate)
|
return;
|
|
if (af_data.contrast_af_en)
|
isp_cfg.module_ens |= ISP2X_MODULE_RAWAF;
|
isp_cfg.module_en_update |= ISP2X_MODULE_RAWAF;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_RAWAF;
|
isp_cfg.meas.rawaf.rawaf_sel = af_data.rawaf_sel;
|
isp_cfg.meas.rawaf.gamma_en = af_data.gamma_flt_en;
|
isp_cfg.meas.rawaf.gaus_en = af_data.gaus_flt_en;
|
isp_cfg.meas.rawaf.afm_thres = af_data.afm_thres;
|
isp_cfg.meas.rawaf.gaus_coe_h0 = af_data.gaus_h0;
|
isp_cfg.meas.rawaf.gaus_coe_h1 = af_data.gaus_h1;
|
isp_cfg.meas.rawaf.gaus_coe_h2 = af_data.gaus_h2;
|
memcpy(isp_cfg.meas.rawaf.lum_var_shift,
|
af_data.lum_var_shift, ISP2X_RAWAF_WIN_NUM * sizeof(unsigned char));
|
memcpy(isp_cfg.meas.rawaf.afm_var_shift,
|
af_data.afm_var_shift, ISP2X_RAWAF_WIN_NUM * sizeof(unsigned char));
|
memcpy(isp_cfg.meas.rawaf.line_en,
|
af_data.line_en, ISP2X_RAWAF_LINE_NUM * sizeof(unsigned char));
|
memcpy(isp_cfg.meas.rawaf.line_num,
|
af_data.line_num, ISP2X_RAWAF_LINE_NUM * sizeof(unsigned char));
|
memcpy(isp_cfg.meas.rawaf.gamma_y,
|
af_data.gamma_y, ISP2X_RAWAF_GAMMA_NUM * sizeof(unsigned short));
|
|
isp_cfg.meas.rawaf.num_afm_win = af_data.window_num;
|
isp_cfg.meas.rawaf.win[0].h_offs = af_data.wina_h_offs;
|
isp_cfg.meas.rawaf.win[0].v_offs = af_data.wina_v_offs;
|
isp_cfg.meas.rawaf.win[0].h_size = af_data.wina_h_size;
|
isp_cfg.meas.rawaf.win[0].v_size = af_data.wina_v_size;
|
isp_cfg.meas.rawaf.win[1].h_offs = af_data.winb_h_offs;
|
isp_cfg.meas.rawaf.win[1].v_offs = af_data.winb_v_offs;
|
isp_cfg.meas.rawaf.win[1].h_size = af_data.winb_h_size;
|
isp_cfg.meas.rawaf.win[1].v_size = af_data.winb_v_size;
|
}
|
|
|
#define ISP2X_WBGAIN_FIXSCALE_BIT 8
|
#define ISP2X_BLC_BIT_MAX 12
|
|
template<class T>
|
void
|
Isp20Params::convertAiqAwbGainToIsp20Params(T& isp_cfg,
|
const rk_aiq_wb_gain_t& awb_gain, const rk_aiq_isp_blc_t &blc, bool awb_gain_update)
|
{
|
|
if(awb_gain_update) {
|
isp_cfg.module_ens |= 1LL << RK_ISP2X_AWB_GAIN_ID;
|
isp_cfg.module_cfg_update |= 1LL << RK_ISP2X_AWB_GAIN_ID;
|
isp_cfg.module_en_update |= 1LL << RK_ISP2X_AWB_GAIN_ID;
|
} else {
|
return;
|
}
|
|
struct isp2x_awb_gain_cfg * cfg = &isp_cfg.others.awb_gain_cfg;
|
uint16_t max_wb_gain = (1 << (ISP2X_WBGAIN_FIXSCALE_BIT + 2)) - 1;
|
rk_aiq_wb_gain_t awb_gain1 = awb_gain;
|
if(blc.enable) {
|
awb_gain1.bgain *= (float)((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - blc.blc_b);
|
awb_gain1.gbgain *= (float)((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - blc.blc_gb);
|
awb_gain1.rgain *= (float)((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - blc.blc_r);
|
awb_gain1.grgain *= (float)((1 << ISP2X_BLC_BIT_MAX) - 1) / ((1 << ISP2X_BLC_BIT_MAX) - 1 - blc.blc_gr);
|
}
|
// rescale
|
float max_value = awb_gain1.bgain > awb_gain1.gbgain ? awb_gain1.bgain : awb_gain1.gbgain;
|
max_value = max_value > awb_gain1.rgain ? max_value : awb_gain1.rgain;
|
float max_wb_gain_f = (float)max_wb_gain / (1 << (ISP2X_WBGAIN_FIXSCALE_BIT));
|
if (max_value > max_wb_gain_f ) {
|
float scale = max_value / max_wb_gain_f;
|
awb_gain1.bgain /= scale;
|
awb_gain1.gbgain /= scale;
|
awb_gain1.grgain /= scale;
|
awb_gain1.rgain /= scale;
|
LOGD_CAMHW("%s: scale %f, awbgain(r,g,g,b):[%f,%f,%f,%f]", __FUNCTION__, scale, awb_gain1.rgain, awb_gain1.grgain, awb_gain1.gbgain, awb_gain1.bgain);
|
}
|
//fix point
|
//LOGE_CAMHW_SUBM(ISP20PARAM_SUBM,"max_wb_gain:%d\n",max_wb_gain);
|
uint16_t R = (uint16_t)(0.5 + awb_gain1.rgain * (1 << ISP2X_WBGAIN_FIXSCALE_BIT));
|
uint16_t B = (uint16_t)(0.5 + awb_gain1.bgain * (1 << ISP2X_WBGAIN_FIXSCALE_BIT));
|
uint16_t Gr = (uint16_t)(0.5 + awb_gain1.grgain * (1 << ISP2X_WBGAIN_FIXSCALE_BIT));
|
uint16_t Gb = (uint16_t)(0.5 + awb_gain1.gbgain * (1 << ISP2X_WBGAIN_FIXSCALE_BIT));
|
cfg->gain_red = R > max_wb_gain ? max_wb_gain : R;
|
cfg->gain_blue = B > max_wb_gain ? max_wb_gain : B;
|
cfg->gain_green_r = Gr > max_wb_gain ? max_wb_gain : Gr ;
|
cfg->gain_green_b = Gb > max_wb_gain ? max_wb_gain : Gb;
|
}
|
|
template<class T>
|
void Isp20Params::convertAiqAgammaToIsp20Params(T& isp_cfg,
|
const AgammaProcRes_t& gamma_out_cfg)
|
{
|
if(gamma_out_cfg.gamma_en) {
|
isp_cfg.module_ens |= ISP2X_MODULE_GOC;
|
isp_cfg.module_en_update |= ISP2X_MODULE_GOC;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_GOC;
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_GOC;
|
isp_cfg.module_en_update |= ISP2X_MODULE_GOC;
|
return;
|
}
|
|
|
struct isp2x_gammaout_cfg* cfg = &isp_cfg.others.gammaout_cfg;
|
cfg->offset = gamma_out_cfg.offset;
|
cfg->equ_segm = gamma_out_cfg.equ_segm;
|
for (int i = 0; i < 45; i++)
|
{
|
cfg->gamma_y[i] = gamma_out_cfg.gamma_y[i];
|
}
|
}
|
|
template<class T>
|
void Isp20Params::convertAiqAdegammaToIsp20Params(T& isp_cfg,
|
const AdegammaProcRes_t& degamma_cfg)
|
{
|
if(degamma_cfg.degamma_en) {
|
isp_cfg.module_ens |= ISP2X_MODULE_SDG;
|
isp_cfg.module_en_update |= ISP2X_MODULE_SDG;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_SDG;
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_SDG;
|
isp_cfg.module_en_update |= ISP2X_MODULE_SDG;
|
return;
|
}
|
|
struct isp2x_sdg_cfg* cfg = &isp_cfg.others.sdg_cfg;
|
cfg->xa_pnts.gamma_dx0 = degamma_cfg.degamma_X_d0;
|
cfg->xa_pnts.gamma_dx1 = degamma_cfg.degamma_X_d1;
|
for (int i = 0; i < 17; i++) {
|
cfg->curve_r.gamma_y[i] = degamma_cfg.degamma_tableR[i];
|
cfg->curve_g.gamma_y[i] = degamma_cfg.degamma_tableG[i];
|
cfg->curve_b.gamma_y[i] = degamma_cfg.degamma_tableB[i];
|
}
|
|
#if 0
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) DEGAMMA_DX0:%d DEGAMMA_DX0:%d\n", __FUNCTION__, __LINE__, cfg->xa_pnts.gamma_dx0, cfg->xa_pnts.gamma_dx1);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "DEGAMMA_R_Y:%d %d %d %d %d %d %d %d\n", cfg->curve_r.gamma_y[0], cfg->curve_r.gamma_y[1],
|
cfg->curve_r.gamma_y[2], cfg->curve_r.gamma_y[3], cfg->curve_r.gamma_y[4], cfg->curve_r.gamma_y[5], cfg->curve_r.gamma_y[6], cfg->curve_r.gamma_y[7]);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "DEGAMMA_G_Y:%d %d %d %d %d %d %d %d\n", cfg->curve_g.gamma_y[0], cfg->curve_g.gamma_y[1],
|
cfg->curve_g.gamma_y[2], cfg->curve_g.gamma_y[3], cfg->curve_g.gamma_y[4], cfg->curve_g.gamma_y[5], cfg->curve_g.gamma_y[6], cfg->curve_g.gamma_y[7]);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "DEGAMMA_B_Y:%d %d %d %d %d %d %d %d\n", cfg->curve_b.gamma_y[0], cfg->curve_b.gamma_y[1],
|
cfg->curve_b.gamma_y[2], cfg->curve_b.gamma_y[3], cfg->curve_b.gamma_y[4], cfg->curve_b.gamma_y[5], cfg->curve_b.gamma_y[6], cfg->curve_b.gamma_y[7]);
|
#endif
|
|
}
|
|
template<class T>
|
void Isp20Params::convertAiqAdehazeToIsp20Params(T& isp_cfg,
|
const rk_aiq_isp_dehaze_t& dhaze )
|
{
|
int i;
|
|
int rawWidth = 1920;
|
int rawHeight = 1080;
|
|
if(dhaze.enable) {
|
isp_cfg.module_ens |= ISP2X_MODULE_DHAZ;
|
isp_cfg.module_en_update |= ISP2X_MODULE_DHAZ;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_DHAZ;
|
}
|
struct isp2x_dhaz_cfg * cfg = &isp_cfg.others.dhaz_cfg;
|
|
cfg->enhance_en = dhaze.enhance_en;
|
cfg->hist_chn = dhaze.hist_chn;
|
cfg->hpara_en = dhaze.hpara_en;
|
cfg->hist_en = dhaze.hist_en;
|
cfg->dc_en = dhaze.dc_en;
|
cfg->big_en = dhaze.big_en;
|
cfg->nobig_en = dhaze.nobig_en;
|
cfg->yblk_th = dhaze.yblk_th;
|
cfg->yhist_th = dhaze.yhist_th;
|
cfg->dc_max_th = dhaze.dc_max_th;
|
cfg->dc_min_th = dhaze.dc_min_th;
|
cfg->wt_max = dhaze.wt_max;
|
cfg->bright_max = dhaze.bright_max;
|
cfg->bright_min = dhaze.bright_min;
|
cfg->tmax_base = dhaze.tmax_base;
|
cfg->dark_th = dhaze.dark_th;
|
cfg->air_max = dhaze.air_max;
|
cfg->air_min = dhaze.air_min;
|
cfg->tmax_max = dhaze.tmax_max;
|
cfg->tmax_off = dhaze.tmax_off;
|
cfg->hist_k = dhaze.hist_k;
|
cfg->hist_th_off = dhaze.hist_th_off;
|
cfg->hist_min = dhaze.hist_min;
|
cfg->hist_gratio = dhaze.hist_gratio;
|
cfg->hist_scale = dhaze.hist_scale;
|
cfg->enhance_value = dhaze.enhance_value;
|
cfg->iir_wt_sigma = dhaze.iir_wt_sigma;
|
cfg->iir_sigma = dhaze.iir_sigma;
|
cfg->stab_fnum = dhaze.stab_fnum;
|
cfg->iir_tmax_sigma = dhaze.iir_tmax_sigma;
|
cfg->iir_air_sigma = dhaze.iir_air_sigma;
|
cfg->cfg_wt = dhaze.cfg_wt;
|
cfg->cfg_air = dhaze.cfg_air;
|
cfg->cfg_alpha = dhaze.cfg_alpha;
|
cfg->cfg_gratio = dhaze.cfg_gratio;
|
cfg->cfg_tmax = dhaze.cfg_tmax;
|
cfg->dc_weitcur = dhaze.dc_weitcur;
|
cfg->dc_thed = dhaze.dc_thed;
|
cfg->sw_dhaz_dc_bf_h0 = dhaze.sw_dhaz_dc_bf_h0;
|
cfg->sw_dhaz_dc_bf_h1 = dhaze.sw_dhaz_dc_bf_h1;
|
cfg->sw_dhaz_dc_bf_h2 = dhaze.sw_dhaz_dc_bf_h2;
|
cfg->sw_dhaz_dc_bf_h3 = dhaze.sw_dhaz_dc_bf_h3;
|
cfg->sw_dhaz_dc_bf_h4 = dhaze.sw_dhaz_dc_bf_h4;
|
cfg->sw_dhaz_dc_bf_h5 = dhaze.sw_dhaz_dc_bf_h5;
|
cfg->air_weitcur = dhaze.air_weitcur;
|
cfg->air_thed = dhaze.air_thed;
|
cfg->air_bf_h0 = dhaze.air_bf_h0;
|
cfg->air_bf_h1 = dhaze.air_bf_h1;
|
cfg->air_bf_h2 = dhaze.air_bf_h2;
|
cfg->gaus_h0 = dhaze.gaus_h0;
|
cfg->gaus_h1 = dhaze.gaus_h1;
|
cfg->gaus_h2 = dhaze.gaus_h2;
|
|
for(int i = 0; i < 6; i++) {
|
cfg->conv_t0[i] = dhaze.conv_t0[i];
|
cfg->conv_t1[i] = dhaze.conv_t1[i];
|
cfg->conv_t2[i] = dhaze.conv_t2[i];
|
}
|
|
|
|
#if 0
|
// cfg->dehaze_en = int(dhaze.dehaze_en[0]); //0~1 , (1bit) dehaze_en
|
cfg->dc_en = int(dhaze.dehaze_en[1]); //0~1 , (1bit) dc_en
|
cfg->hist_en = int(dhaze.dehaze_en[2]); //0~1 , (1bit) hist_en
|
cfg->hist_chn = int(dhaze.dehaze_en[3]); //0~1 , (1bit) hist_channel
|
cfg->big_en = int(dhaze.dehaze_en[4]); //0~1 , (1bit) gain_en
|
cfg->dc_min_th = int(dhaze.dehaze_self_adp[0]); //0~255, (8bit) dc_min_th
|
cfg->dc_max_th = int(dhaze.dehaze_self_adp[1] ); //0~255, (8bit) dc_max_th
|
cfg->yhist_th = int(dhaze.dehaze_self_adp[2] ); //0~255, (8bit) yhist_th
|
cfg->yblk_th = int(dhaze.dehaze_self_adp[3] * ((rawWidth + 15) / 16) * ((rawHeight + 15) / 16)); //default:28,(9bit) yblk_th
|
cfg->dark_th = int(dhaze.dehaze_self_adp[4] ); //0~255, (8bit) dark_th
|
cfg->bright_min = int(dhaze.dehaze_self_adp[5] ); //0~255, (8bit) bright_min
|
cfg->bright_max = int(dhaze.dehaze_self_adp[6] ); //0~255, (8bit) bright_max
|
cfg->wt_max = int(dhaze.dehaze_range_adj[0] * 256 ); //0~255, (9bit) wt_max
|
cfg->air_min = int(dhaze.dehaze_range_adj[2] ); //0~255, (8bit) air_min
|
cfg->air_max = int(dhaze.dehaze_range_adj[1] ); //0~256, (8bit) air_max
|
cfg->tmax_base = int(dhaze.dehaze_range_adj[3] ); //0~255, (8bit) tmax_base
|
cfg->tmax_off = int(dhaze.dehaze_range_adj[4] * 1024 ); //0~1024,(11bit) tmax_off
|
cfg->tmax_max = int(dhaze.dehaze_range_adj[5] * 1024 ); //0~1024,(11bit) tmax_max
|
cfg->hist_gratio = int(dhaze.dehaze_hist_para[0] * 8 ); // (8bit) hist_gratio
|
cfg->hist_th_off = int(dhaze.dehaze_hist_para[1] ); // (8bit) hist_th_off
|
cfg->hist_k = int(dhaze.dehaze_hist_para[2] * 4 + 0.5 ); //0~7 (5bit),3bit+2bit, hist_k
|
cfg->hist_min = int(dhaze.dehaze_hist_para[3] * 256 ); // (9bit) hist_min
|
cfg->enhance_en = int(dhaze.dehaze_enhance[0] ); //0~1 , (1bit) enhance_en
|
cfg->enhance_value = int(dhaze.dehaze_enhance[1] * 1024 + 0.5 ); // (14bit),4bit + 10bit, enhance_value
|
cfg->hpara_en = int(dhaze.dehaze_enhance[2] ); //0~1 , (1bit) sw_hist_para_en
|
cfg->hist_scale = int(dhaze.dehaze_enhance[3] * 256 + 0.5 ); // (13bit),5bit + 8bit, sw_hist_scale
|
cfg->stab_fnum = int(dhaze.dehaze_iir_control[0] ); //1~31, (5bit) stab_fnum
|
cfg->iir_sigma = int(dhaze.dehaze_iir_control[1] ); //0~255, (8bit) sigma
|
cfg->iir_wt_sigma = int(dhaze.dehaze_iir_control[2] * 8 + 0.5 ); // (11bit),8bit+3bit, wt_sigma
|
cfg->iir_air_sigma = int(dhaze.dehaze_iir_control[3] ); // (8bit) air_sigma
|
cfg->iir_tmax_sigma = int(dhaze.dehaze_iir_control[4] * 1024 + 0.5); // (11bit) tmax_sigma
|
cfg->cfg_alpha = int(MIN(dhaze.dehaze_user_config[0] * 256, 255)); //0~255, (8bit) cfg_alpha
|
cfg->cfg_wt = int(dhaze.dehaze_user_config[1] * 256 ); //0~256, (9bit) cfg_wt
|
cfg->cfg_air = int(dhaze.dehaze_user_config[2] ); //0~255, (8bit) cfg_air
|
cfg->cfg_tmax = int(dhaze.dehaze_user_config[3] * 1024 ); //0~1024,(11bit) cfg_tmax
|
cfg->cfg_gratio = int(dhaze.dehaze_user_config[4] * 256 ); // (13bit),5bit+8bit, cfg_gratio
|
cfg->dc_thed = int(dhaze.dehaze_bi_para[0] ); //0~255, (8bit) dc_thed
|
cfg->dc_weitcur = int(dhaze.dehaze_bi_para[1] * 256 + 0.5 ); //0~256, (9bit) dc_weitcur
|
cfg->air_thed = int(dhaze.dehaze_bi_para[2] ); //0~255, (8bit) air_thed
|
cfg->air_weitcur = int(dhaze.dehaze_bi_para[3] * 256 + 0.5 ); //0~256, (9bit) air_weitcur
|
|
|
cfg->sw_dhaz_dc_bf_h0 = int(dhaze.dehaze_dc_bf_h[12]);//h0~h5 从大到小
|
cfg->sw_dhaz_dc_bf_h1 = int(dhaze.dehaze_dc_bf_h[7]);
|
cfg->sw_dhaz_dc_bf_h2 = int(dhaze.dehaze_dc_bf_h[6]);
|
cfg->sw_dhaz_dc_bf_h3 = int(dhaze.dehaze_dc_bf_h[2]);
|
cfg->sw_dhaz_dc_bf_h4 = int(dhaze.dehaze_dc_bf_h[1]);
|
cfg->sw_dhaz_dc_bf_h5 = int(dhaze.dehaze_dc_bf_h[0]);
|
|
|
cfg->air_bf_h0 = int(dhaze.dehaze_air_bf_h[4]);//h0~h2 从大到小
|
cfg->air_bf_h1 = int(dhaze.dehaze_air_bf_h[1]);
|
cfg->air_bf_h2 = int(dhaze.dehaze_air_bf_h[0]);
|
|
cfg->gaus_h0 = int(dhaze.dehaze_gaus_h[4]);//h0~h2 从大到小
|
cfg->gaus_h1 = int(dhaze.dehaze_gaus_h[1]);
|
cfg->gaus_h2 = int(dhaze.dehaze_gaus_h[0]);
|
|
for (int i = 0; i < 6; i++)
|
{
|
cfg->conv_t0[i] = int(dhaze.dehaze_hist_t0[i]);
|
cfg->conv_t1[i] = int(dhaze.dehaze_hist_t1[i]);
|
cfg->conv_t2[i] = int(dhaze.dehaze_hist_t2[i]);
|
}
|
#endif
|
}
|
|
|
template<class T>
|
void
|
Isp20Params::convertAiqBlcToIsp20Params(T& isp_cfg, rk_aiq_isp_blc_t &blc)
|
{
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) enter \n", __FUNCTION__, __LINE__);
|
|
if(blc.enable) {
|
isp_cfg.module_ens |= ISP2X_MODULE_BLS;
|
}
|
isp_cfg.module_en_update |= ISP2X_MODULE_BLS;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_BLS;
|
|
isp_cfg.others.bls_cfg.enable_auto = 0;
|
isp_cfg.others.bls_cfg.en_windows = 0;
|
|
isp_cfg.others.bls_cfg.bls_window1.h_offs = 0;
|
isp_cfg.others.bls_cfg.bls_window1.v_offs = 0;
|
isp_cfg.others.bls_cfg.bls_window1.h_size = 0;
|
isp_cfg.others.bls_cfg.bls_window1.v_size = 0;
|
|
isp_cfg.others.bls_cfg.bls_window2.h_offs = 0;
|
isp_cfg.others.bls_cfg.bls_window2.v_offs = 0;
|
isp_cfg.others.bls_cfg.bls_window2.h_size = 0;
|
isp_cfg.others.bls_cfg.bls_window2.v_size = 0;
|
|
isp_cfg.others.bls_cfg.bls_samples = 0;
|
|
isp_cfg.others.bls_cfg.fixed_val.r = blc.blc_gr;
|
isp_cfg.others.bls_cfg.fixed_val.gr = blc.blc_gr;
|
isp_cfg.others.bls_cfg.fixed_val.gb = blc.blc_gr;
|
isp_cfg.others.bls_cfg.fixed_val.b = blc.blc_gr;
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) exit \n", __FUNCTION__, __LINE__);
|
}
|
|
|
template<class T>
|
void
|
Isp20Params::convertAiqDpccToIsp20Params(T& isp_cfg, rk_aiq_isp_dpcc_t &dpcc)
|
{
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) enter \n", __FUNCTION__, __LINE__);
|
|
struct isp2x_dpcc_cfg * pDpccCfg = &isp_cfg.others.dpcc_cfg;
|
rk_aiq_isp_dpcc_t *pDpccRst = &dpcc;
|
|
if(pDpccRst->stBasic.enable) {
|
isp_cfg.module_ens |= ISP2X_MODULE_DPCC;
|
}
|
isp_cfg.module_en_update |= ISP2X_MODULE_DPCC;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_DPCC;
|
|
//mode 0x0000
|
pDpccCfg->stage1_enable = pDpccRst->stBasic.stage1_enable;
|
pDpccCfg->grayscale_mode = pDpccRst->stBasic.grayscale_mode;
|
//pDpccCfg->enable = pDpccRst->stBasic.enable;
|
|
//output_mode 0x0004
|
pDpccCfg->sw_rk_out_sel = pDpccRst->stBasic.sw_rk_out_sel;
|
pDpccCfg->sw_dpcc_output_sel = pDpccRst->stBasic.sw_dpcc_output_sel;
|
pDpccCfg->stage1_rb_3x3 = pDpccRst->stBasic.stage1_rb_3x3;
|
pDpccCfg->stage1_g_3x3 = pDpccRst->stBasic.stage1_g_3x3;
|
pDpccCfg->stage1_incl_rb_center = pDpccRst->stBasic.stage1_incl_rb_center;
|
pDpccCfg->stage1_incl_green_center = pDpccRst->stBasic.stage1_incl_green_center;
|
|
//set_use 0x0008
|
pDpccCfg->stage1_use_fix_set = pDpccRst->stBasic.stage1_use_fix_set;
|
pDpccCfg->stage1_use_set_3 = pDpccRst->stBasic.stage1_use_set_3;
|
pDpccCfg->stage1_use_set_2 = pDpccRst->stBasic.stage1_use_set_2;
|
pDpccCfg->stage1_use_set_1 = pDpccRst->stBasic.stage1_use_set_1;
|
|
//methods_set_1 0x000c
|
pDpccCfg->sw_rk_red_blue1_en = pDpccRst->stBasic.sw_rk_red_blue1_en;
|
pDpccCfg->rg_red_blue1_enable = pDpccRst->stBasic.rg_red_blue1_enable;
|
pDpccCfg->rnd_red_blue1_enable = pDpccRst->stBasic.rnd_red_blue1_enable;
|
pDpccCfg->ro_red_blue1_enable = pDpccRst->stBasic.ro_red_blue1_enable;
|
pDpccCfg->lc_red_blue1_enable = pDpccRst->stBasic.lc_red_blue1_enable;
|
pDpccCfg->pg_red_blue1_enable = pDpccRst->stBasic.pg_red_blue1_enable;
|
pDpccCfg->sw_rk_green1_en = pDpccRst->stBasic.sw_rk_green1_en;
|
pDpccCfg->rg_green1_enable = pDpccRst->stBasic.rg_green1_enable;
|
pDpccCfg->rnd_green1_enable = pDpccRst->stBasic.rnd_green1_enable;
|
pDpccCfg->ro_green1_enable = pDpccRst->stBasic.ro_green1_enable;
|
pDpccCfg->lc_green1_enable = pDpccRst->stBasic.lc_green1_enable;
|
pDpccCfg->pg_green1_enable = pDpccRst->stBasic.pg_green1_enable;
|
|
//methods_set_2 0x0010
|
pDpccCfg->sw_rk_red_blue2_en = pDpccRst->stBasic.sw_rk_red_blue2_en;
|
pDpccCfg->rg_red_blue2_enable = pDpccRst->stBasic.rg_red_blue2_enable;
|
pDpccCfg->rnd_red_blue2_enable = pDpccRst->stBasic.rnd_red_blue2_enable;
|
pDpccCfg->ro_red_blue2_enable = pDpccRst->stBasic.ro_red_blue2_enable;
|
pDpccCfg->lc_red_blue2_enable = pDpccRst->stBasic.lc_red_blue2_enable;
|
pDpccCfg->pg_red_blue2_enable = pDpccRst->stBasic.pg_red_blue2_enable;
|
pDpccCfg->sw_rk_green2_en = pDpccRst->stBasic.sw_rk_green2_en;
|
pDpccCfg->rg_green2_enable = pDpccRst->stBasic.rg_green2_enable;
|
pDpccCfg->rnd_green2_enable = pDpccRst->stBasic.rnd_green2_enable;
|
pDpccCfg->ro_green2_enable = pDpccRst->stBasic.ro_green2_enable;
|
pDpccCfg->lc_green2_enable = pDpccRst->stBasic.lc_green2_enable;
|
pDpccCfg->pg_green2_enable = pDpccRst->stBasic.pg_green2_enable;
|
|
//methods_set_3 0x0014
|
pDpccCfg->sw_rk_red_blue3_en = pDpccRst->stBasic.sw_rk_red_blue3_en;
|
pDpccCfg->rg_red_blue3_enable = pDpccRst->stBasic.rg_red_blue3_enable;
|
pDpccCfg->rnd_red_blue3_enable = pDpccRst->stBasic.rnd_red_blue3_enable;
|
pDpccCfg->ro_red_blue3_enable = pDpccRst->stBasic.ro_red_blue3_enable;
|
pDpccCfg->lc_red_blue3_enable = pDpccRst->stBasic.lc_red_blue3_enable;
|
pDpccCfg->pg_red_blue3_enable = pDpccRst->stBasic.pg_red_blue3_enable;
|
pDpccCfg->sw_rk_green3_en = pDpccRst->stBasic.sw_rk_green3_en;
|
pDpccCfg->rg_green3_enable = pDpccRst->stBasic.rg_green3_enable;
|
pDpccCfg->rnd_green3_enable = pDpccRst->stBasic.rnd_green3_enable;
|
pDpccCfg->ro_green3_enable = pDpccRst->stBasic.ro_green3_enable;
|
pDpccCfg->lc_green3_enable = pDpccRst->stBasic.lc_green3_enable;
|
pDpccCfg->pg_green3_enable = pDpccRst->stBasic.pg_green3_enable;
|
|
//line_thresh_1 0x0018
|
pDpccCfg->sw_mindis1_rb = pDpccRst->stBasic.sw_mindis1_rb;
|
pDpccCfg->sw_mindis1_g = pDpccRst->stBasic.sw_mindis1_g;
|
pDpccCfg->line_thr_1_rb = pDpccRst->stBasic.line_thr_1_rb;
|
pDpccCfg->line_thr_1_g = pDpccRst->stBasic.line_thr_1_g;
|
|
//line_mad_fac_1 0x001c
|
pDpccCfg->sw_dis_scale_min1 = pDpccRst->stBasic.sw_dis_scale_min1;
|
pDpccCfg->sw_dis_scale_max1 = pDpccRst->stBasic.sw_dis_scale_max1;
|
pDpccCfg->line_mad_fac_1_rb = pDpccRst->stBasic.line_mad_fac_1_rb;
|
pDpccCfg->line_mad_fac_1_g = pDpccRst->stBasic.line_mad_fac_1_g;
|
|
//pg_fac_1 0x0020
|
pDpccCfg->pg_fac_1_rb = pDpccRst->stBasic.pg_fac_1_rb;
|
pDpccCfg->pg_fac_1_g = pDpccRst->stBasic.pg_fac_1_g;
|
|
//rnd_thresh_1 0x0024
|
pDpccCfg->rnd_thr_1_rb = pDpccRst->stBasic.rnd_thr_1_rb;
|
pDpccCfg->rnd_thr_1_g = pDpccRst->stBasic.rnd_thr_1_g;
|
|
//rg_fac_1 0x0028
|
pDpccCfg->rg_fac_1_rb = pDpccRst->stBasic.rg_fac_1_rb;
|
pDpccCfg->rg_fac_1_g = pDpccRst->stBasic.rg_fac_1_g;
|
|
|
//line_thresh_2 0x002c
|
pDpccCfg->sw_mindis2_rb = pDpccRst->stBasic.sw_mindis2_rb;
|
pDpccCfg->sw_mindis2_g = pDpccRst->stBasic.sw_mindis2_g;
|
pDpccCfg->line_thr_2_rb = pDpccRst->stBasic.line_thr_2_rb;
|
pDpccCfg->line_thr_2_g = pDpccRst->stBasic.line_thr_2_g;
|
|
//line_mad_fac_2 0x0030
|
pDpccCfg->sw_dis_scale_min2 = pDpccRst->stBasic.sw_dis_scale_min2;
|
pDpccCfg->sw_dis_scale_max2 = pDpccRst->stBasic.sw_dis_scale_max2;
|
pDpccCfg->line_mad_fac_2_rb = pDpccRst->stBasic.line_mad_fac_2_rb;
|
pDpccCfg->line_mad_fac_2_g = pDpccRst->stBasic.line_mad_fac_2_g;
|
|
//pg_fac_2 0x0034
|
pDpccCfg->pg_fac_2_rb = pDpccRst->stBasic.pg_fac_2_rb;
|
pDpccCfg->pg_fac_2_g = pDpccRst->stBasic.pg_fac_2_g;
|
|
//rnd_thresh_2 0x0038
|
pDpccCfg->rnd_thr_2_rb = pDpccRst->stBasic.rnd_thr_2_rb;
|
pDpccCfg->rnd_thr_2_g = pDpccRst->stBasic.rnd_thr_2_g;
|
|
//rg_fac_2 0x003c
|
pDpccCfg->rg_fac_2_rb = pDpccRst->stBasic.rg_fac_2_rb;
|
pDpccCfg->rg_fac_2_g = pDpccRst->stBasic.rg_fac_2_g;
|
|
|
//line_thresh_3 0x0040
|
pDpccCfg->sw_mindis3_rb = pDpccRst->stBasic.sw_mindis3_rb;
|
pDpccCfg->sw_mindis3_g = pDpccRst->stBasic.sw_mindis3_g;
|
pDpccCfg->line_thr_3_rb = pDpccRst->stBasic.line_thr_3_rb;
|
pDpccCfg->line_thr_3_g = pDpccRst->stBasic.line_thr_3_g;
|
|
//line_mad_fac_3 0x0044
|
pDpccCfg->sw_dis_scale_min3 = pDpccRst->stBasic.sw_dis_scale_min3;
|
pDpccCfg->sw_dis_scale_max3 = pDpccRst->stBasic.sw_dis_scale_max3;
|
pDpccCfg->line_mad_fac_3_rb = pDpccRst->stBasic.line_mad_fac_3_rb;
|
pDpccCfg->line_mad_fac_3_g = pDpccRst->stBasic.line_mad_fac_3_g;
|
|
//pg_fac_3 0x0048
|
pDpccCfg->pg_fac_3_rb = pDpccRst->stBasic.pg_fac_3_rb;
|
pDpccCfg->pg_fac_3_g = pDpccRst->stBasic.pg_fac_3_g;
|
|
//rnd_thresh_3 0x004c
|
pDpccCfg->rnd_thr_3_rb = pDpccRst->stBasic.rnd_thr_3_rb;
|
pDpccCfg->rnd_thr_3_g = pDpccRst->stBasic.rnd_thr_3_g;
|
|
//rg_fac_3 0x0050
|
pDpccCfg->rg_fac_3_rb = pDpccRst->stBasic.rg_fac_3_rb;
|
pDpccCfg->rg_fac_3_g = pDpccRst->stBasic.rg_fac_3_g;
|
|
//ro_limits 0x0054
|
pDpccCfg->ro_lim_3_rb = pDpccRst->stBasic.ro_lim_3_rb;
|
pDpccCfg->ro_lim_3_g = pDpccRst->stBasic.ro_lim_3_g;
|
pDpccCfg->ro_lim_2_rb = pDpccRst->stBasic.ro_lim_2_rb;;
|
pDpccCfg->ro_lim_2_g = pDpccRst->stBasic.ro_lim_2_g;
|
pDpccCfg->ro_lim_1_rb = pDpccRst->stBasic.ro_lim_1_rb;
|
pDpccCfg->ro_lim_1_g = pDpccRst->stBasic.ro_lim_1_g;
|
|
//rnd_offs 0x0058
|
pDpccCfg->rnd_offs_3_rb = pDpccRst->stBasic.rnd_offs_3_rb;
|
pDpccCfg->rnd_offs_3_g = pDpccRst->stBasic.rnd_offs_3_g;
|
pDpccCfg->rnd_offs_2_rb = pDpccRst->stBasic.rnd_offs_2_rb;
|
pDpccCfg->rnd_offs_2_g = pDpccRst->stBasic.rnd_offs_2_g;
|
pDpccCfg->rnd_offs_1_rb = pDpccRst->stBasic.rnd_offs_1_rb;
|
pDpccCfg->rnd_offs_1_g = pDpccRst->stBasic.rnd_offs_1_g;
|
|
//bpt_ctrl 0x005c
|
pDpccCfg->bpt_rb_3x3 = pDpccRst->stBpt.bpt_rb_3x3;
|
pDpccCfg->bpt_g_3x3 = pDpccRst->stBpt.bpt_g_3x3;
|
pDpccCfg->bpt_incl_rb_center = pDpccRst->stBpt.bpt_incl_rb_center;
|
pDpccCfg->bpt_incl_green_center = pDpccRst->stBpt.bpt_incl_green_center;
|
pDpccCfg->bpt_use_fix_set = pDpccRst->stBpt.bpt_use_fix_set;
|
pDpccCfg->bpt_use_set_3 = pDpccRst->stBpt.bpt_use_set_3;
|
pDpccCfg->bpt_use_set_2 = pDpccRst->stBpt.bpt_use_set_2;
|
pDpccCfg->bpt_use_set_1 = pDpccRst->stBpt.bpt_use_set_1;
|
pDpccCfg->bpt_cor_en = pDpccRst->stBpt.bpt_cor_en;
|
pDpccCfg->bpt_det_en = pDpccRst->stBpt.bpt_det_en;
|
|
//bpt_number 0x0060
|
pDpccCfg->bp_number = pDpccRst->stBpt.bp_number;
|
|
//bpt_addr 0x0064
|
pDpccCfg->bp_table_addr = pDpccRst->stBpt.bp_table_addr;
|
|
//bpt_data 0x0068
|
pDpccCfg->bpt_v_addr = pDpccRst->stBpt.bpt_v_addr;
|
pDpccCfg->bpt_h_addr = pDpccRst->stBpt.bpt_h_addr;
|
|
//bp_cnt 0x006c
|
pDpccCfg->bp_cnt = pDpccRst->stBpt.bp_cnt;
|
|
//pdaf_en 0x0070
|
pDpccCfg->sw_pdaf_en = pDpccRst->stPdaf.sw_pdaf_en;
|
|
//pdaf_point_en 0x0074
|
for(int i = 0; i < ISP2X_DPCC_PDAF_POINT_NUM; i++) {
|
pDpccCfg->pdaf_point_en[i] = pDpccRst->stPdaf.pdaf_point_en[i];
|
}
|
|
//pdaf_offset 0x0078
|
pDpccCfg->pdaf_offsety = pDpccRst->stPdaf.pdaf_offsety;
|
pDpccCfg->pdaf_offsetx = pDpccRst->stPdaf.pdaf_offsetx;
|
|
//pdaf_wrap 0x007c
|
pDpccCfg->pdaf_wrapy = pDpccRst->stPdaf.pdaf_wrapy;
|
pDpccCfg->pdaf_wrapx = pDpccRst->stPdaf.pdaf_wrapx;
|
|
//pdaf_scope 0x0080
|
pDpccCfg->pdaf_wrapy_num = pDpccRst->stPdaf.pdaf_wrapy_num;
|
pDpccCfg->pdaf_wrapx_num = pDpccRst->stPdaf.pdaf_wrapx_num;
|
|
//pdaf_point_0 0x0084
|
for(int i = 0; i < ISP2X_DPCC_PDAF_POINT_NUM; i++) {
|
pDpccCfg->point[i].x = pDpccRst->stPdaf.point[i].x;
|
pDpccCfg->point[i].y = pDpccRst->stPdaf.point[i].y;
|
}
|
|
//pdaf_forward_med 0x00a4
|
pDpccCfg->pdaf_forward_med = pDpccRst->stPdaf.pdaf_forward_med;
|
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) exit \n", __FUNCTION__, __LINE__);
|
}
|
|
|
template<class T>
|
void
|
Isp20Params::convertAiqLscToIsp20Params(T& isp_cfg,
|
const rk_aiq_lsc_cfg_t& lsc)
|
{
|
|
if(lsc.lsc_en) {
|
isp_cfg.module_ens |= ISP2X_MODULE_LSC;
|
}
|
isp_cfg.module_en_update |= ISP2X_MODULE_LSC;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_LSC;
|
|
struct isp2x_lsc_cfg * cfg = &isp_cfg.others.lsc_cfg;
|
memcpy(cfg->x_size_tbl, lsc.x_size_tbl, sizeof(lsc.x_size_tbl));
|
memcpy(cfg->y_size_tbl, lsc.y_size_tbl, sizeof(lsc.y_size_tbl));
|
memcpy(cfg->x_grad_tbl, lsc.x_grad_tbl, sizeof(lsc.x_grad_tbl));
|
memcpy(cfg->y_grad_tbl, lsc.y_grad_tbl, sizeof(lsc.y_grad_tbl));
|
|
memcpy(cfg->r_data_tbl, lsc.r_data_tbl, sizeof(lsc.r_data_tbl));
|
memcpy(cfg->gr_data_tbl, lsc.gr_data_tbl, sizeof(lsc.gr_data_tbl));
|
memcpy(cfg->gb_data_tbl, lsc.gb_data_tbl, sizeof(lsc.gb_data_tbl));
|
memcpy(cfg->b_data_tbl, lsc.b_data_tbl, sizeof(lsc.b_data_tbl));
|
}
|
|
template<class T>
|
void Isp20Params::convertAiqCcmToIsp20Params(T& isp_cfg,
|
const rk_aiq_ccm_cfg_t& ccm)
|
{
|
if(ccm.ccmEnable) {
|
isp_cfg.module_ens |= ISP2X_MODULE_CCM;
|
}
|
isp_cfg.module_en_update |= ISP2X_MODULE_CCM;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_CCM;
|
|
struct isp2x_ccm_cfg * cfg = &isp_cfg.others.ccm_cfg;
|
const float *coeff = ccm.matrix;
|
const float *offset = ccm.offs;
|
|
cfg->coeff0_r = (coeff[0] - 1) > 0 ? (short)((coeff[0] - 1) * 128 + 0.5) : (short)((coeff[0] - 1) * 128 - 0.5); //check -128?
|
cfg->coeff1_r = coeff[1] > 0 ? (short)(coeff[1] * 128 + 0.5) : (short)(coeff[1] * 128 - 0.5);
|
cfg->coeff2_r = coeff[2] > 0 ? (short)(coeff[2] * 128 + 0.5) : (short)(coeff[2] * 128 - 0.5);
|
cfg->coeff0_g = coeff[3] > 0 ? (short)(coeff[3] * 128 + 0.5) : (short)(coeff[3] * 128 - 0.5);
|
cfg->coeff1_g = (coeff[4] - 1) > 0 ? (short)((coeff[4] - 1) * 128 + 0.5) : (short)((coeff[4] - 1) * 128 - 0.5);
|
cfg->coeff2_g = coeff[5] > 0 ? (short)(coeff[5] * 128 + 0.5) : (short)(coeff[5] * 128 - 0.5);
|
cfg->coeff0_b = coeff[6] > 0 ? (short)(coeff[6] * 128 + 0.5) : (short)(coeff[6] * 128 - 0.5);
|
cfg->coeff1_b = coeff[7] > 0 ? (short)(coeff[7] * 128 + 0.5) : (short)(coeff[7] * 128 - 0.5);
|
cfg->coeff2_b = (coeff[8] - 1) > 0 ? (short)((coeff[8] - 1) * 128 + 0.5) : (short)((coeff[8] - 1) * 128 - 0.5);
|
|
cfg->offset_r = offset[0] > 0 ? (short)(offset[0] + 0.5) : (short)(offset[0] - 0.5);// for 12bit
|
cfg->offset_g = offset[1] > 0 ? (short)(offset[1] + 0.5) : (int)(offset[1] - 0.5);
|
cfg->offset_b = offset[2] > 0 ? (short)(offset[2] + 0.5) : (short)(offset[2] - 0.5);
|
|
cfg->coeff0_y = (u16 )ccm.rgb2y_para[0];
|
cfg->coeff1_y = (u16 )ccm.rgb2y_para[1];
|
cfg->coeff2_y = (u16 )ccm.rgb2y_para[2];
|
cfg->bound_bit = (u8)ccm.bound_bit;//check
|
|
for( int i = 0; i < 17; i++)
|
{
|
cfg->alp_y[i] = (u16)(ccm.alp_y[i]);
|
}
|
|
|
}
|
|
template<class T>
|
void Isp20Params::convertAiqA3dlutToIsp20Params(T& isp_cfg,
|
const rk_aiq_lut3d_cfg_t& lut3d_cfg)
|
{
|
if(lut3d_cfg.enable) {
|
isp_cfg.module_ens |= ISP2X_MODULE_3DLUT;
|
}
|
isp_cfg.module_en_update |= ISP2X_MODULE_3DLUT;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_3DLUT;
|
|
struct isp2x_3dlut_cfg* cfg = &isp_cfg.others.isp3dlut_cfg;
|
cfg->bypass_en = lut3d_cfg.bypass_en;
|
cfg->actual_size = lut3d_cfg.lut3d_lut_wsize;
|
memcpy(cfg->lut_r, lut3d_cfg.look_up_table_r, sizeof(cfg->lut_r));
|
memcpy(cfg->lut_g, lut3d_cfg.look_up_table_g, sizeof(cfg->lut_g));
|
memcpy(cfg->lut_b, lut3d_cfg.look_up_table_b, sizeof(cfg->lut_b));
|
}
|
|
template<class T>
|
void Isp20Params::convertAiqRawnrToIsp20Params(T& isp_cfg,
|
rk_aiq_isp_rawnr_t& rawnr)
|
{
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) enter \n", __FUNCTION__, __LINE__);
|
|
struct isp2x_rawnr_cfg * pRawnrCfg = &isp_cfg.others.rawnr_cfg;
|
if(rawnr.rawnr_en) {
|
|
isp_cfg.module_ens |= ISP2X_MODULE_RAWNR;
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_RAWNR;
|
}
|
isp_cfg.module_en_update |= ISP2X_MODULE_RAWNR;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_RAWNR;
|
|
int rawbit = 12;//rawBit;
|
float tmp;
|
|
//(0x0004)
|
pRawnrCfg->gauss_en = rawnr.gauss_en;
|
pRawnrCfg->log_bypass = rawnr.log_bypass;
|
|
//(0x0008 - 0x0010)
|
pRawnrCfg->filtpar0 = rawnr.filtpar0;
|
pRawnrCfg->filtpar1 = rawnr.filtpar1;
|
pRawnrCfg->filtpar2 = rawnr.filtpar2;
|
|
//(0x0014 - 0x0001c)
|
pRawnrCfg->dgain0 = rawnr.dgain0;
|
pRawnrCfg->dgain1 = rawnr.dgain1;
|
pRawnrCfg->dgain2 = rawnr.dgain2;
|
|
//(0x0020 - 0x0002c)
|
for(int i = 0; i < ISP2X_RAWNR_LUMA_RATION_NUM; i++) {
|
pRawnrCfg->luration[i] = rawnr.luration[i];
|
}
|
|
//(0x0030 - 0x0003c)
|
for(int i = 0; i < ISP2X_RAWNR_LUMA_RATION_NUM; i++) {
|
pRawnrCfg->lulevel[i] = rawnr.lulevel[i];
|
}
|
|
//(0x0040)
|
pRawnrCfg->gauss = rawnr.gauss;
|
|
//(0x0044)
|
pRawnrCfg->sigma = rawnr.sigma;
|
|
//(0x0048)
|
pRawnrCfg->pix_diff = rawnr.pix_diff;
|
|
//(0x004c)
|
pRawnrCfg->thld_diff = rawnr.thld_diff;
|
|
//(0x0050)
|
pRawnrCfg->gas_weig_scl1 = rawnr.gas_weig_scl1;
|
pRawnrCfg->gas_weig_scl2 = rawnr.gas_weig_scl2;
|
pRawnrCfg->thld_chanelw = rawnr.thld_chanelw;
|
|
//(0x0054)
|
pRawnrCfg->lamda = rawnr.lamda;
|
|
//(0x0058 - 0x0005c)
|
pRawnrCfg->fixw0 = rawnr.fixw0;
|
pRawnrCfg->fixw1 = rawnr.fixw1;
|
pRawnrCfg->fixw2 = rawnr.fixw2;
|
pRawnrCfg->fixw3 = rawnr.fixw3;
|
|
//(0x0060 - 0x00068)
|
pRawnrCfg->wlamda0 = rawnr.wlamda0;
|
pRawnrCfg->wlamda1 = rawnr.wlamda1;
|
pRawnrCfg->wlamda2 = rawnr.wlamda2;
|
|
//(0x006c)
|
pRawnrCfg->rgain_filp = rawnr.rgain_filp;
|
pRawnrCfg->bgain_filp = rawnr.bgain_filp;
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) exit \n", __FUNCTION__, __LINE__);
|
}
|
|
template<typename T>
|
void Isp20Params::convertAiqTnrToIsp20Params(T &pp_cfg,
|
rk_aiq_isp_tnr_t& tnr)
|
{
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) enter \n", __FUNCTION__, __LINE__);
|
int i = 0;
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "tnr_en %d", tnr.tnr_en);
|
|
if(tnr.tnr_en) {
|
pp_cfg.head.module_ens |= ISPP_MODULE_TNR;
|
} else {
|
//pp_cfg.head.module_init_ens &= ~ISPP_MODULE_TNR_3TO1;
|
pp_cfg.head.module_ens &= ~ISPP_MODULE_TNR;
|
}
|
|
pp_cfg.head.module_en_update |= ISPP_MODULE_TNR;
|
pp_cfg.head.module_cfg_update |= ISPP_MODULE_TNR;
|
|
struct rkispp_tnr_config * pTnrCfg = &pp_cfg.tnr_cfg;
|
|
//0x0080
|
if (tnr.mode > 0) {
|
pp_cfg.head.module_ens |= ISPP_MODULE_TNR_3TO1;
|
} else {
|
pp_cfg.head.module_ens |= ISPP_MODULE_TNR;
|
}
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "mode:%d pp_cfg:0x%x\n", tnr.mode, pp_cfg.head.module_ens);
|
|
/* pTnrCfg->mode = tnr.mode; */
|
pTnrCfg->opty_en = tnr.opty_en;
|
pTnrCfg->optc_en = tnr.optc_en;
|
pTnrCfg->gain_en = tnr.gain_en;
|
|
//0x0088
|
pTnrCfg->pk0_y = tnr.pk0_y;
|
pTnrCfg->pk1_y = tnr.pk1_y;
|
pTnrCfg->pk0_c = tnr.pk0_c;
|
pTnrCfg->pk1_c = tnr.pk1_c;
|
|
//0x008c
|
pTnrCfg->glb_gain_cur = tnr.glb_gain_cur;
|
pTnrCfg->glb_gain_nxt = tnr.glb_gain_nxt;
|
|
//0x0090
|
pTnrCfg->glb_gain_cur_div = tnr.glb_gain_cur_div;
|
pTnrCfg->glb_gain_cur_sqrt = tnr.glb_gain_cur_sqrt;
|
|
//0x0094 - 0x0098
|
for(i = 0; i < TNR_SIGMA_CURVE_SIZE - 1; i++) {
|
pTnrCfg->sigma_x[i] = tnr.sigma_x[i];
|
}
|
|
|
|
//0x009c - 0x00bc
|
for(i = 0; i < TNR_SIGMA_CURVE_SIZE; i++) {
|
pTnrCfg->sigma_y[i] = tnr.sigma_y[i];
|
}
|
|
//0x00c4 - 0x00cc
|
for(i = 0; i < TNR_LUMA_CURVE_SIZE; i++) {
|
pTnrCfg->luma_curve[i] = tnr.luma_curve[i];
|
}
|
|
//0x00d0
|
pTnrCfg->txt_th0_y = tnr.txt_th0_y;
|
pTnrCfg->txt_th1_y = tnr.txt_th1_y;
|
|
//0x00d4
|
pTnrCfg->txt_th0_c = tnr.txt_th0_c;
|
pTnrCfg->txt_th1_c = tnr.txt_th1_c;
|
|
//0x00d8
|
pTnrCfg->txt_thy_dlt = tnr.txt_thy_dlt;
|
pTnrCfg->txt_thc_dlt = tnr.txt_thc_dlt;
|
|
//0x00dc - 0x00ec
|
for(i = 0; i < TNR_GFCOEF6_SIZE; i++) {
|
pTnrCfg->gfcoef_y0[i] = tnr.gfcoef_y0[i];
|
}
|
for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
|
pTnrCfg->gfcoef_y1[i] = tnr.gfcoef_y1[i];
|
}
|
for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
|
pTnrCfg->gfcoef_y2[i] = tnr.gfcoef_y2[i];
|
}
|
for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
|
pTnrCfg->gfcoef_y3[i] = tnr.gfcoef_y3[i];
|
}
|
|
//0x00f0 - 0x0100
|
for(i = 0; i < TNR_GFCOEF6_SIZE; i++) {
|
pTnrCfg->gfcoef_yg0[i] = tnr.gfcoef_yg0[i];
|
}
|
for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
|
pTnrCfg->gfcoef_yg1[i] = tnr.gfcoef_yg1[i];
|
}
|
for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
|
pTnrCfg->gfcoef_yg2[i] = tnr.gfcoef_yg2[i];
|
}
|
for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
|
pTnrCfg->gfcoef_yg3[i] = tnr.gfcoef_yg3[i];
|
}
|
|
//0x0104 - 0x0110
|
for(i = 0; i < TNR_GFCOEF6_SIZE; i++) {
|
pTnrCfg->gfcoef_yl0[i] = tnr.gfcoef_yl0[i];
|
}
|
for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
|
pTnrCfg->gfcoef_yl1[i] = tnr.gfcoef_yl1[i];
|
}
|
for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
|
pTnrCfg->gfcoef_yl2[i] = tnr.gfcoef_yl2[i];
|
}
|
|
//0x0114 - 0x0120
|
for(i = 0; i < TNR_GFCOEF6_SIZE; i++) {
|
pTnrCfg->gfcoef_cg0[i] = tnr.gfcoef_cg0[i];
|
}
|
for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
|
pTnrCfg->gfcoef_cg1[i] = tnr.gfcoef_cg1[i];
|
}
|
for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
|
pTnrCfg->gfcoef_cg2[i] = tnr.gfcoef_cg2[i];
|
}
|
|
//0x0124 - 0x012c
|
for(i = 0; i < TNR_GFCOEF6_SIZE; i++) {
|
pTnrCfg->gfcoef_cl0[i] = tnr.gfcoef_cl0[i];
|
}
|
for(i = 0; i < TNR_GFCOEF3_SIZE; i++) {
|
pTnrCfg->gfcoef_cl1[i] = tnr.gfcoef_cl1[i];
|
}
|
|
//0x0130 - 0x0134
|
for(i = 0; i < TNR_SCALE_YG_SIZE; i++) {
|
pTnrCfg->scale_yg[i] = tnr.scale_yg[i];
|
}
|
|
//0x0138 - 0x013c
|
for(i = 0; i < TNR_SCALE_YL_SIZE; i++) {
|
pTnrCfg->scale_yl[i] = tnr.scale_yl[i];
|
}
|
|
//0x0140 - 0x0148
|
for(i = 0; i < TNR_SCALE_CG_SIZE; i++) {
|
pTnrCfg->scale_cg[i] = tnr.scale_cg[i];
|
pTnrCfg->scale_y2cg[i] = tnr.scale_y2cg[i];
|
}
|
|
//0x014c - 0x0154
|
for(i = 0; i < TNR_SCALE_CL_SIZE; i++) {
|
pTnrCfg->scale_cl[i] = tnr.scale_cl[i];
|
}
|
for(i = 0; i < TNR_SCALE_Y2CL_SIZE; i++) {
|
pTnrCfg->scale_y2cl[i] = tnr.scale_y2cl[i];
|
}
|
//0x0158
|
for(i = 0; i < TNR_WEIGHT_Y_SIZE; i++) {
|
pTnrCfg->weight_y[i] = tnr.weight_y[i];
|
}
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) exit \n", __FUNCTION__, __LINE__);
|
}
|
|
template<typename T>
|
void Isp20Params::convertAiqUvnrToIsp20Params(T &pp_cfg,
|
rk_aiq_isp_uvnr_t& uvnr)
|
{
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) enter \n", __FUNCTION__, __LINE__);
|
|
int i = 0;
|
struct rkispp_nr_config * pNrCfg = &pp_cfg.nr_cfg;
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "uvnr_en %d", uvnr.uvnr_en);
|
if(uvnr.uvnr_en) {
|
pp_cfg.head.module_ens |= ISPP_MODULE_NR;
|
//pp_cfg.head.module_init_ens |= ISPP_MODULE_NR;
|
} else {
|
// NR bit used by ynr and uvnr together, so couldn't be
|
// disabled if it was enabled
|
if (!(pp_cfg.head.module_ens & ISPP_MODULE_NR))
|
pp_cfg.head.module_ens &= ~ISPP_MODULE_NR;
|
}
|
|
pp_cfg.head.module_en_update |= ISPP_MODULE_NR;
|
pp_cfg.head.module_cfg_update |= ISPP_MODULE_NR;
|
|
//0x0080
|
pNrCfg->uvnr_step1_en = uvnr.uvnr_step1_en;
|
pNrCfg->uvnr_step2_en = uvnr.uvnr_step2_en;
|
pNrCfg->nr_gain_en = uvnr.nr_gain_en;
|
pNrCfg->uvnr_nobig_en = uvnr.uvnr_nobig_en;
|
pNrCfg->uvnr_big_en = uvnr.uvnr_big_en;
|
|
|
//0x0084
|
pNrCfg->uvnr_gain_1sigma = uvnr.uvnr_gain_1sigma;
|
|
//0x0088
|
pNrCfg->uvnr_gain_offset = uvnr.uvnr_gain_offset;
|
|
//0x008c
|
pNrCfg->uvnr_gain_uvgain[0] = uvnr.uvnr_gain_uvgain[0];
|
pNrCfg->uvnr_gain_uvgain[1] = uvnr.uvnr_gain_uvgain[1];
|
pNrCfg->uvnr_gain_t2gen = uvnr.uvnr_gain_t2gen;
|
// no need set
|
pNrCfg->uvnr_gain_iso = uvnr.uvnr_gain_iso;
|
|
//0x0090
|
pNrCfg->uvnr_t1gen_m3alpha = uvnr.uvnr_t1gen_m3alpha;
|
|
//0x0094
|
pNrCfg->uvnr_t1flt_mode = uvnr.uvnr_t1flt_mode;
|
|
//0x0098
|
pNrCfg->uvnr_t1flt_msigma = uvnr.uvnr_t1flt_msigma;
|
|
//0x009c
|
pNrCfg->uvnr_t1flt_wtp = uvnr.uvnr_t1flt_wtp;
|
|
//0x00a0-0x00a4
|
for(i = 0; i < NR_UVNR_T1FLT_WTQ_SIZE; i++) {
|
pNrCfg->uvnr_t1flt_wtq[i] = uvnr.uvnr_t1flt_wtq[i];
|
}
|
|
//0x00a8
|
pNrCfg->uvnr_t2gen_m3alpha = uvnr.uvnr_t2gen_m3alpha;
|
|
//0x00ac
|
pNrCfg->uvnr_t2gen_msigma = uvnr.uvnr_t2gen_msigma;
|
|
//0x00b0
|
pNrCfg->uvnr_t2gen_wtp = uvnr.uvnr_t2gen_wtp;
|
|
//0x00b4
|
for(i = 0; i < NR_UVNR_T2GEN_WTQ_SIZE; i++) {
|
pNrCfg->uvnr_t2gen_wtq[i] = uvnr.uvnr_t2gen_wtq[i];
|
}
|
|
//0x00b8
|
pNrCfg->uvnr_t2flt_msigma = uvnr.uvnr_t2flt_msigma;
|
|
//0x00bc
|
pNrCfg->uvnr_t2flt_wtp = uvnr.uvnr_t2flt_wtp;
|
for(i = 0; i < NR_UVNR_T2FLT_WT_SIZE; i++) {
|
pNrCfg->uvnr_t2flt_wt[i] = uvnr.uvnr_t2flt_wt[i];
|
}
|
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) exit \n", __FUNCTION__, __LINE__);
|
}
|
|
|
template<typename T>
|
void Isp20Params::convertAiqYnrToIsp20Params(T &pp_cfg,
|
rk_aiq_isp_ynr_t& ynr)
|
{
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) enter \n", __FUNCTION__, __LINE__);
|
|
int i = 0;
|
struct rkispp_nr_config * pNrCfg = &pp_cfg.nr_cfg;
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "ynr_en %d", ynr.ynr_en);
|
if(ynr.ynr_en) {
|
pp_cfg.head.module_ens |= ISPP_MODULE_NR;
|
//pp_cfg.head.module_init_ens |= ISPP_MODULE_NR;
|
} else {
|
// NR bit used by ynr and uvnr together, so couldn't be
|
// disabled if it was enabled
|
if (!(pp_cfg.head.module_ens & ISPP_MODULE_NR))
|
pp_cfg.head.module_ens &= ~ISPP_MODULE_NR;
|
}
|
|
pp_cfg.head.module_en_update |= ISPP_MODULE_NR;
|
pp_cfg.head.module_cfg_update |= ISPP_MODULE_NR;
|
|
//0x0104 - 0x0108
|
for(i = 0; i < NR_YNR_SGM_DX_SIZE; i++) {
|
pNrCfg->ynr_sgm_dx[i] = ynr.ynr_sgm_dx[i];
|
}
|
|
//0x010c - 0x012c
|
for(i = 0; i < NR_YNR_SGM_Y_SIZE; i++) {
|
pNrCfg->ynr_lsgm_y[i] = ynr.ynr_lsgm_y[i];
|
}
|
|
|
//0x0130
|
for(i = 0; i < NR_YNR_CI_SIZE; i++) {
|
pNrCfg->ynr_lci[i] = ynr.ynr_lci[i];
|
}
|
|
//0x0134
|
for(i = 0; i < NR_YNR_LGAIN_MIN_SIZE; i++) {
|
pNrCfg->ynr_lgain_min[i] = ynr.ynr_lgain_min[i];
|
}
|
|
//0x0138
|
pNrCfg->ynr_lgain_max = ynr.ynr_lgain_max;
|
|
|
//0x013c
|
pNrCfg->ynr_lmerge_bound = ynr.ynr_lmerge_bound;
|
pNrCfg->ynr_lmerge_ratio = ynr.ynr_lmerge_ratio;
|
|
//0x0140
|
for(i = 0; i < NR_YNR_LWEIT_FLT_SIZE; i++) {
|
pNrCfg->ynr_lweit_flt[i] = ynr.ynr_lweit_flt[i];
|
}
|
|
//0x0144 - 0x0164
|
for(i = 0; i < NR_YNR_SGM_Y_SIZE; i++) {
|
pNrCfg->ynr_hsgm_y[i] = ynr.ynr_hsgm_y[i];
|
}
|
|
//0x0168
|
for(i = 0; i < NR_YNR_CI_SIZE; i++) {
|
pNrCfg->ynr_hlci[i] = ynr.ynr_hlci[i];
|
}
|
|
//0x016c
|
for(i = 0; i < NR_YNR_CI_SIZE; i++) {
|
pNrCfg->ynr_lhci[i] = ynr.ynr_lhci[i];
|
}
|
|
//0x0170
|
for(i = 0; i < NR_YNR_CI_SIZE; i++) {
|
pNrCfg->ynr_hhci[i] = ynr.ynr_hhci[i];
|
}
|
|
//0x0174
|
for(i = 0; i < NR_YNR_HGAIN_SGM_SIZE; i++) {
|
pNrCfg->ynr_hgain_sgm[i] = ynr.ynr_hgain_sgm[i];
|
}
|
|
//0x0178 - 0x0188
|
for(i = 0; i < NR_YNR_HWEIT_D_SIZE; i++) {
|
pNrCfg->ynr_hweit_d[i] = ynr.ynr_hweit_d[i];
|
}
|
|
|
//0x018c - 0x01a0
|
for(i = 0; i < NR_YNR_HGRAD_Y_SIZE; i++) {
|
pNrCfg->ynr_hgrad_y[i] = ynr.ynr_hgrad_y[i];
|
}
|
|
//0x01a4 -0x01a8
|
for(i = 0; i < NR_YNR_HWEIT_SIZE; i++) {
|
pNrCfg->ynr_hweit[i] = ynr.ynr_hweit[i];
|
}
|
|
//0x01b0
|
pNrCfg->ynr_hmax_adjust = ynr.ynr_hmax_adjust;
|
|
//0x01b4
|
pNrCfg->ynr_hstrength = ynr.ynr_hstrength;
|
|
//0x01b8
|
pNrCfg->ynr_lweit_cmp[0] = ynr.ynr_lweit_cmp[0];
|
pNrCfg->ynr_lweit_cmp[1] = ynr.ynr_lweit_cmp[1];
|
|
|
//0x01bc
|
pNrCfg->ynr_lmaxgain_lv4 = ynr.ynr_lmaxgain_lv4;
|
|
//0x01c0 - 0x01e0
|
for(i = 0; i < NR_YNR_HSTV_Y_SIZE; i++) {
|
pNrCfg->ynr_hstv_y[i] = ynr.ynr_hstv_y[i];
|
}
|
|
//0x01e4 - 0x01e8
|
for(i = 0; i < NR_YNR_ST_SCALE_SIZE; i++) {
|
pNrCfg->ynr_st_scale[i] = ynr.ynr_st_scale[i];
|
}
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) exit \n", __FUNCTION__, __LINE__);
|
|
}
|
|
template<typename T>
|
void Isp20Params::convertAiqSharpenToIsp20Params(T &pp_cfg,
|
rk_aiq_isp_sharpen_t& sharp, rk_aiq_isp_edgeflt_t& edgeflt)
|
{
|
int i = 0;
|
struct rkispp_sharp_config * pSharpCfg = &pp_cfg.shp_cfg;
|
RKAsharp_Sharp_HW_Fix_t *pSharpV1 = &sharp.stSharpFixV1;
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "sharp_en %d edgeflt_en %d", pSharpV1->sharp_en, edgeflt.edgeflt_en);
|
|
if(pSharpV1->sharp_en && edgeflt.edgeflt_en) {
|
pp_cfg.head.module_ens |= ISPP_MODULE_SHP;
|
//pp_cfg.head.module_init_ens |= ISPP_MODULE_SHP;
|
} else {
|
pp_cfg.head.module_ens &= ~ISPP_MODULE_SHP;
|
}
|
|
pp_cfg.head.module_en_update |= ISPP_MODULE_SHP;
|
pp_cfg.head.module_cfg_update |= ISPP_MODULE_SHP;
|
#if 1
|
//0x0080
|
pSharpCfg->alpha_adp_en = edgeflt.alpha_adp_en;
|
pSharpCfg->yin_flt_en = pSharpV1->yin_flt_en;
|
pSharpCfg->edge_avg_en = pSharpV1->edge_avg_en;
|
|
//0x0084
|
pSharpCfg->hbf_ratio = pSharpV1->hbf_ratio;
|
pSharpCfg->ehf_th = pSharpV1->ehf_th;
|
pSharpCfg->pbf_ratio = pSharpV1->pbf_ratio;
|
|
//0x0088
|
pSharpCfg->edge_thed = edgeflt.edge_thed;
|
pSharpCfg->dir_min = edgeflt.dir_min;
|
pSharpCfg->smoth_th4 = edgeflt.smoth_th4;
|
|
//0x008c
|
pSharpCfg->l_alpha = edgeflt.l_alpha;
|
pSharpCfg->g_alpha = edgeflt.g_alpha;
|
|
|
//0x0090
|
for(i = 0; i < SHP_PBF_KERNEL_SIZE; i++) {
|
pSharpCfg->pbf_k[i] = pSharpV1->pbf_k[i];
|
}
|
|
//0x0094 - 0x0098
|
for(i = 0; i < SHP_MRF_KERNEL_SIZE; i++) {
|
pSharpCfg->mrf_k[i] = pSharpV1->mrf_k[i];
|
}
|
|
//0x009c -0x00a4
|
for(i = 0; i < SHP_MBF_KERNEL_SIZE; i++) {
|
pSharpCfg->mbf_k[i] = pSharpV1->mbf_k[i];
|
}
|
|
//0x00a8 -0x00ac
|
for(i = 0; i < SHP_HRF_KERNEL_SIZE; i++) {
|
pSharpCfg->hrf_k[i] = pSharpV1->hrf_k[i];
|
}
|
|
//0x00b0
|
for(i = 0; i < SHP_HBF_KERNEL_SIZE; i++) {
|
pSharpCfg->hbf_k[i] = pSharpV1->hbf_k[i];
|
}
|
|
//0x00b4
|
for(i = 0; i < SHP_EDGE_COEF_SIZE; i++) {
|
pSharpCfg->eg_coef[i] = edgeflt.eg_coef[i];
|
}
|
|
//0x00b8
|
for(i = 0; i < SHP_EDGE_SMOTH_SIZE; i++) {
|
pSharpCfg->eg_smoth[i] = edgeflt.eg_smoth[i];
|
}
|
|
//0x00bc - 0x00c0
|
for(i = 0; i < SHP_EDGE_GAUS_SIZE; i++) {
|
pSharpCfg->eg_gaus[i] = edgeflt.eg_gaus[i];
|
}
|
|
//0x00c4 - 0x00c8
|
for(i = 0; i < SHP_DOG_KERNEL_SIZE; i++) {
|
pSharpCfg->dog_k[i] = edgeflt.dog_k[i];
|
}
|
|
//0x00cc - 0x00d0
|
for(i = 0; i < 6; i++) {
|
pSharpCfg->lum_point[i] = pSharpV1->lum_point[i];
|
}
|
|
//0x00d4
|
pSharpCfg->pbf_shf_bits = pSharpV1->pbf_shf_bits;
|
pSharpCfg->mbf_shf_bits = pSharpV1->mbf_shf_bits;
|
pSharpCfg->hbf_shf_bits = pSharpV1->hbf_shf_bits;
|
|
|
//0x00d8 - 0x00dc
|
for(i = 0; i < 8; i++) {
|
pSharpCfg->pbf_sigma[i] = pSharpV1->pbf_sigma[i];
|
}
|
|
//0x00e0 - 0x00e4
|
for(i = 0; i < 8; i++) {
|
pSharpCfg->lum_clp_m[i] = pSharpV1->lum_clp_m[i];
|
}
|
|
//0x00e8 - 0x00ec
|
for(i = 0; i < 8; i++) {
|
pSharpCfg->lum_min_m[i] = pSharpV1->lum_min_m[i];
|
}
|
|
//0x00f0 - 0x00f4
|
for(i = 0; i < 8; i++) {
|
pSharpCfg->mbf_sigma[i] = pSharpV1->mbf_sigma[i];
|
}
|
|
//0x00f8 - 0x00fc
|
for(i = 0; i < 8; i++) {
|
pSharpCfg->lum_clp_h[i] = pSharpV1->lum_clp_h[i];
|
}
|
|
//0x0100 - 0x0104
|
for(i = 0; i < 8; i++) {
|
pSharpCfg->hbf_sigma[i] = pSharpV1->hbf_sigma[i];
|
}
|
|
//0x0108 - 0x010c
|
for(i = 0; i < 8; i++) {
|
pSharpCfg->edge_lum_thed[i] = edgeflt.edge_lum_thed[i];
|
}
|
|
//0x0110 - 0x0114
|
for(i = 0; i < 8; i++) {
|
pSharpCfg->clamp_pos[i] = edgeflt.clamp_pos[i];
|
}
|
|
//0x0118 - 0x011c
|
for(i = 0; i < 8; i++) {
|
pSharpCfg->clamp_neg[i] = edgeflt.clamp_neg[i];
|
}
|
|
//0x0120 - 0x0124
|
for(i = 0; i < 8; i++) {
|
pSharpCfg->detail_alpha[i] = edgeflt.detail_alpha[i];
|
}
|
|
//0x0128
|
pSharpCfg->rfl_ratio = pSharpV1->rfl_ratio;
|
pSharpCfg->rfh_ratio = pSharpV1->rfh_ratio;
|
//0x012C
|
pSharpCfg->m_ratio = pSharpV1->m_ratio;
|
pSharpCfg->h_ratio = pSharpV1->h_ratio;
|
#endif
|
}
|
|
template<class T>
|
void
|
Isp20Params::convertAiqGainToIsp20Params(T& isp_cfg,
|
rk_aiq_isp_gain_t& gain)
|
{
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) enter \n", __FUNCTION__, __LINE__);
|
|
int i = 0;
|
struct isp2x_gain_cfg * pGainCfg = &isp_cfg.others.gain_cfg;
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "gain table en %d \n", gain.gain_table_en);
|
if(gain.gain_table_en) {
|
isp_cfg.module_ens |= ISP2X_MODULE_GAIN;
|
isp_cfg.module_en_update |= ISP2X_MODULE_GAIN;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_GAIN;
|
}
|
|
#if 0
|
pGainCfg->dhaz_en = 0;
|
pGainCfg->wdr_en = 0;
|
pGainCfg->tmo_en = 0;
|
pGainCfg->lsc_en = 0;
|
pGainCfg->mge_en = 0;
|
|
if(isp_cfg.module_ens & ISP2X_MODULE_DHAZ) {
|
pGainCfg->dhaz_en = 1;
|
}
|
|
if(isp_cfg.module_ens & ISP2X_MODULE_WDR) {
|
pGainCfg->wdr_en = 1;
|
}
|
|
if(isp_cfg.others.hdrmge_cfg.mode) {
|
pGainCfg->tmo_en = 1;
|
pGainCfg->mge_en = 1;
|
}
|
|
if(isp_cfg.module_ens & ISP2X_MODULE_LSC) {
|
pGainCfg->lsc_en = 1;
|
}
|
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:%d gain en: %d %d %d %d %d\n",
|
__FUNCTION__, __LINE__,
|
pGainCfg->dhaz_en, pGainCfg->wdr_en,
|
pGainCfg->tmo_en, pGainCfg->lsc_en,
|
pGainCfg->mge_en);
|
#endif
|
|
for(i = 0; i < ISP2X_GAIN_HDRMGE_GAIN_NUM; i++) {
|
pGainCfg->mge_gain[i] = gain.mge_gain[i];
|
}
|
|
for(i = 0; i < ISP2X_GAIN_IDX_NUM; i++) {
|
pGainCfg->idx[i] = gain.idx[i];
|
}
|
|
for(i = 0; i < ISP2X_GAIN_LUT_NUM; i++) {
|
pGainCfg->lut[i] = gain.lut[i];
|
}
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s:(%d) exit \n", __FUNCTION__, __LINE__);
|
}
|
|
|
template<typename T>
|
void Isp20Params::convertAiqFecToIsp20Params(T &pp_cfg,
|
rk_aiq_isp_fec_t& fec)
|
{
|
/* FEC module can't be enable/disable dynamically, the mode should
|
* be decided in init params. we'll check if the module_init_ens
|
* changed in CamIsp20Hw.cpp
|
*/
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "fec update params, enable %d usage %d, config %d", fec.fec_en, fec.usage, fec.config);
|
if(fec.fec_en) {
|
if (fec.usage == ISPP_MODULE_FEC_ST) {
|
pp_cfg.head.module_ens |= ISPP_MODULE_FEC_ST;
|
pp_cfg.head.module_en_update |= ISPP_MODULE_FEC_ST;
|
} else if (fec.usage == ISPP_MODULE_FEC) {
|
pp_cfg.head.module_ens |= ISPP_MODULE_FEC;
|
pp_cfg.head.module_en_update |= ISPP_MODULE_FEC;
|
}
|
|
if (!fec.config) {
|
pp_cfg.head.module_cfg_update &= ~ISPP_MODULE_FEC;
|
} else {
|
struct rkispp_fec_config *pFecCfg = &pp_cfg.fec_cfg;
|
|
pFecCfg->crop_en = fec.crop_en;
|
pFecCfg->crop_width = fec.crop_width;
|
pFecCfg->crop_height = fec.crop_height;
|
pFecCfg->mesh_density = fec.mesh_density;
|
pFecCfg->mesh_size = fec.mesh_size;
|
pFecCfg->buf_fd = fec.mesh_buf_fd;
|
//pp_cfg.fec_output_buf_index = fec.img_buf_index;
|
//pp_cfg.fec_output_buf_size = fec.img_buf_size;
|
|
pp_cfg.head.module_cfg_update |= ISPP_MODULE_FEC;
|
}
|
} else {
|
pp_cfg.head.module_ens &= ~(ISPP_MODULE_FEC_ST | ISPP_MODULE_FEC);
|
pp_cfg.head.module_en_update |= (ISPP_MODULE_FEC_ST | ISPP_MODULE_FEC);
|
}
|
}
|
|
XCamReturn
|
Isp20Params::checkIsp20Params(struct isp2x_isp_params_cfg& isp_cfg)
|
{
|
//TODO
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
template<class T>
|
void
|
Isp20Params::convertAiqAdemosaicToIsp20Params(T& isp_cfg, rk_aiq_isp_debayer_t &demosaic)
|
{
|
if (demosaic.updatecfg) {
|
if (demosaic.enable) {
|
isp_cfg.module_ens |= ISP2X_MODULE_DEBAYER;
|
isp_cfg.module_en_update |= ISP2X_MODULE_DEBAYER;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_DEBAYER;
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_DEBAYER;
|
isp_cfg.module_en_update |= ISP2X_MODULE_DEBAYER;
|
}
|
} else {
|
return;
|
}
|
|
isp_cfg.others.debayer_cfg.clip_en = demosaic.clip_en;
|
isp_cfg.others.debayer_cfg.filter_c_en = demosaic.filter_c_en;
|
isp_cfg.others.debayer_cfg.filter_g_en = demosaic.filter_g_en;
|
isp_cfg.others.debayer_cfg.gain_offset = demosaic.gain_offset;
|
isp_cfg.others.debayer_cfg.offset = demosaic.offset;
|
isp_cfg.others.debayer_cfg.hf_offset = demosaic.hf_offset;
|
isp_cfg.others.debayer_cfg.thed0 = demosaic.thed0;
|
isp_cfg.others.debayer_cfg.thed1 = demosaic.thed1;
|
isp_cfg.others.debayer_cfg.dist_scale = demosaic.dist_scale;
|
isp_cfg.others.debayer_cfg.shift_num = demosaic.shift_num;
|
isp_cfg.others.debayer_cfg.filter1_coe1 = demosaic.filter1_coe[0];
|
isp_cfg.others.debayer_cfg.filter1_coe2 = demosaic.filter1_coe[1];
|
isp_cfg.others.debayer_cfg.filter1_coe3 = demosaic.filter1_coe[2];
|
isp_cfg.others.debayer_cfg.filter1_coe4 = demosaic.filter1_coe[3];
|
isp_cfg.others.debayer_cfg.filter1_coe5 = demosaic.filter1_coe[4];
|
isp_cfg.others.debayer_cfg.filter2_coe1 = demosaic.filter2_coe[0];
|
isp_cfg.others.debayer_cfg.filter2_coe2 = demosaic.filter2_coe[1];
|
isp_cfg.others.debayer_cfg.filter2_coe3 = demosaic.filter2_coe[2];
|
isp_cfg.others.debayer_cfg.filter2_coe4 = demosaic.filter2_coe[3];
|
isp_cfg.others.debayer_cfg.filter2_coe5 = demosaic.filter2_coe[4];
|
isp_cfg.others.debayer_cfg.max_ratio = demosaic.max_ratio;
|
isp_cfg.others.debayer_cfg.order_max = demosaic.order_max;
|
isp_cfg.others.debayer_cfg.order_min = demosaic.order_min;
|
}
|
|
template<class T>
|
void
|
Isp20Params::convertAiqCpToIsp20Params(T& isp_cfg,
|
const rk_aiq_acp_params_t& cp_cfg)
|
{
|
struct isp2x_cproc_cfg* cproc_cfg = &isp_cfg.others.cproc_cfg;
|
|
// TODO: set range
|
/* cproc_cfg->y_in_range = 1; */
|
/* cproc_cfg->y_out_range = 1; */
|
/* cproc_cfg->c_out_range = 1; */
|
|
if (cp_cfg.enable) {
|
isp_cfg.module_ens |= ISP2X_MODULE_CPROC;
|
isp_cfg.module_en_update |= ISP2X_MODULE_CPROC;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_CPROC;
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_CPROC;
|
isp_cfg.module_en_update |= ISP2X_MODULE_CPROC;
|
}
|
|
cproc_cfg->contrast = (uint8_t)(cp_cfg.contrast);
|
cproc_cfg->sat = (uint8_t)(cp_cfg.saturation);
|
cproc_cfg->brightness = (uint8_t)(cp_cfg.brightness - 128);
|
cproc_cfg->hue = (uint8_t)(cp_cfg.hue - 128);
|
}
|
|
template<class T>
|
void
|
Isp20Params::convertAiqIeToIsp20Params(T& isp_cfg,
|
const rk_aiq_isp_ie_t& ie_cfg)
|
{
|
struct isp2x_ie_cfg* ie_config = &isp_cfg.others.ie_cfg;
|
|
isp_cfg.module_ens |= ISP2X_MODULE_IE;
|
isp_cfg.module_en_update |= ISP2X_MODULE_IE;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_IE;
|
|
switch (ie_cfg.base.mode) {
|
case RK_AIQ_IE_EFFECT_BW:
|
ie_config->effect = V4L2_COLORFX_BW;
|
break;
|
case RK_AIQ_IE_EFFECT_NEGATIVE:
|
ie_config->effect = V4L2_COLORFX_NEGATIVE;
|
break;
|
case RK_AIQ_IE_EFFECT_SEPIA:
|
ie_config->effect = V4L2_COLORFX_SEPIA;
|
break;
|
case RK_AIQ_IE_EFFECT_EMBOSS:
|
{
|
ie_config->effect = V4L2_COLORFX_EMBOSS;
|
ie_config->eff_mat_1 = (uint16_t)(ie_cfg.extra.mode_coeffs[0])
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[1]) << 0x4)
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[2]) << 0x8)
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[3]) << 0xc);
|
ie_config->eff_mat_2 = (uint16_t)(ie_cfg.extra.mode_coeffs[4])
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[5]) << 0x4)
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[6]) << 0x8)
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[7]) << 0xc);
|
ie_config->eff_mat_3 = (ie_cfg.extra.mode_coeffs[8]);
|
/*not used for this effect*/
|
ie_config->eff_mat_4 = 0;
|
ie_config->eff_mat_5 = 0;
|
ie_config->color_sel = 0;
|
ie_config->eff_tint = 0;
|
}
|
break;
|
case RK_AIQ_IE_EFFECT_SKETCH:
|
{
|
ie_config->effect = V4L2_COLORFX_SKETCH;
|
ie_config->eff_mat_3 = ((uint16_t)(ie_cfg.extra.mode_coeffs[0]) << 0x4)
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[1]) << 0x8)
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[2]) << 0xc);
|
/*not used for this effect*/
|
ie_config->eff_mat_4 = (uint16_t)(ie_cfg.extra.mode_coeffs[3])
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[4]) << 0x4)
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[5]) << 0x8)
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[6]) << 0xc);
|
ie_config->eff_mat_5 = (uint16_t)(ie_cfg.extra.mode_coeffs[7])
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[8]) << 0x4);
|
|
/*not used for this effect*/
|
ie_config->eff_mat_1 = 0;
|
ie_config->eff_mat_2 = 0;
|
ie_config->color_sel = 0;
|
ie_config->eff_tint = 0;
|
}
|
break;
|
case RK_AIQ_IE_EFFECT_SHARPEN:
|
{
|
/* TODO: can't find related mode in v4l2_colorfx*/
|
//ie_config->effect =
|
// V4L2_COLORFX_EMBOSS;
|
ie_config->eff_mat_1 = (uint16_t)(ie_cfg.extra.mode_coeffs[0])
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[1]) << 0x4)
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[2]) << 0x8)
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[3]) << 0xc);
|
ie_config->eff_mat_2 = (uint16_t)(ie_cfg.extra.mode_coeffs[4])
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[5]) << 0x4)
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[6]) << 0x8)
|
| ((uint16_t)(ie_cfg.extra.mode_coeffs[7]) << 0xc);
|
ie_config->eff_mat_3 = (ie_cfg.extra.mode_coeffs[8]);
|
/*not used for this effect*/
|
ie_config->eff_mat_4 = 0;
|
ie_config->eff_mat_5 = 0;
|
ie_config->color_sel = 0;
|
ie_config->eff_tint = 0;
|
}
|
break;
|
case RK_AIQ_IE_EFFECT_NONE:
|
{
|
isp_cfg.module_ens &= ~ISP2X_MODULE_IE;
|
isp_cfg.module_en_update |= ISP2X_MODULE_IE;
|
isp_cfg.module_cfg_update &= ~ISP2X_MODULE_IE;
|
}
|
break;
|
default:
|
break;
|
}
|
}
|
|
template<class T>
|
void
|
Isp20Params::convertAiqAldchToIsp20Params(T& isp_cfg,
|
const rk_aiq_isp_ldch_t& ldch_cfg)
|
{
|
struct isp2x_ldch_cfg *pLdchCfg = &isp_cfg.others.ldch_cfg;
|
|
// TODO: add update flag for ldch
|
if (ldch_cfg.ldch_en) {
|
isp_cfg.module_ens |= ISP2X_MODULE_LDCH;
|
isp_cfg.module_en_update |= ISP2X_MODULE_LDCH;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_LDCH;
|
|
pLdchCfg->hsize = ldch_cfg.lut_h_size;
|
pLdchCfg->vsize = ldch_cfg.lut_v_size;
|
pLdchCfg->buf_fd = ldch_cfg.lut_mem_fd;
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_LDCH;
|
isp_cfg.module_en_update |= ISP2X_MODULE_LDCH;
|
}
|
}
|
|
template<class T>
|
void
|
Isp20Params::convertAiqGicToIsp20Params(T& isp_cfg,
|
const rk_aiq_isp_gic_t& gic_cfg)
|
{
|
struct isp2x_gic_cfg *isp_gic_cfg = &isp_cfg.others.gic_cfg;
|
|
if (gic_cfg.gic_en) {
|
isp_cfg.module_ens |= ISP2X_MODULE_GIC;
|
isp_cfg.module_en_update |= ISP2X_MODULE_GIC;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_GIC;
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_GIC;
|
isp_cfg.module_en_update |= ISP2X_MODULE_GIC;
|
}
|
|
isp_gic_cfg->edge_open = gic_cfg.ProcResV20.edge_open;
|
isp_gic_cfg->regmingradthrdark2 = gic_cfg.ProcResV20.regmingradthrdark2;
|
isp_gic_cfg->regmingradthrdark1 = gic_cfg.ProcResV20.regmingradthrdark1;
|
isp_gic_cfg->regminbusythre = gic_cfg.ProcResV20.regminbusythre;
|
isp_gic_cfg->regdarkthre = gic_cfg.ProcResV20.regdarkthre;
|
isp_gic_cfg->regmaxcorvboth = gic_cfg.ProcResV20.regmaxcorvboth;
|
isp_gic_cfg->regdarktthrehi = gic_cfg.ProcResV20.regdarktthrehi;
|
isp_gic_cfg->regkgrad2dark = gic_cfg.ProcResV20.regkgrad2dark;
|
isp_gic_cfg->regkgrad1dark = gic_cfg.ProcResV20.regkgrad1dark;
|
isp_gic_cfg->regstrengthglobal_fix = gic_cfg.ProcResV20.regstrengthglobal_fix;
|
isp_gic_cfg->regdarkthrestep = gic_cfg.ProcResV20.regdarkthrestep;
|
isp_gic_cfg->regkgrad2 = gic_cfg.ProcResV20.regkgrad2;
|
isp_gic_cfg->regkgrad1 = gic_cfg.ProcResV20.regkgrad1;
|
isp_gic_cfg->reggbthre = gic_cfg.ProcResV20.reggbthre;
|
isp_gic_cfg->regmaxcorv = gic_cfg.ProcResV20.regmaxcorv;
|
isp_gic_cfg->regmingradthr2 = gic_cfg.ProcResV20.regmingradthr2;
|
isp_gic_cfg->regmingradthr1 = gic_cfg.ProcResV20.regmingradthr1;
|
isp_gic_cfg->gr_ratio = gic_cfg.ProcResV20.gr_ratio;
|
isp_gic_cfg->dnhiscale = gic_cfg.ProcResV20.dnhiscale;
|
isp_gic_cfg->dnloscale = gic_cfg.ProcResV20.dnloscale;
|
isp_gic_cfg->reglumapointsstep = gic_cfg.ProcResV20.reglumapointsstep;
|
isp_gic_cfg->gvaluelimithi = gic_cfg.ProcResV20.gvaluelimithi;
|
isp_gic_cfg->gvaluelimitlo = gic_cfg.ProcResV20.gvaluelimitlo;
|
isp_gic_cfg->fusionratiohilimt1 = gic_cfg.ProcResV20.fusionratiohilimt1;
|
isp_gic_cfg->regstrength_fix = gic_cfg.ProcResV20.regstrength_fix;
|
isp_gic_cfg->noise_cut_en = gic_cfg.ProcResV20.noise_cut_en;
|
isp_gic_cfg->noise_coe_a = gic_cfg.ProcResV20.noise_coe_a;
|
isp_gic_cfg->noise_coe_b = gic_cfg.ProcResV20.noise_coe_b;
|
isp_gic_cfg->diff_clip = gic_cfg.ProcResV20.diff_clip;
|
for(int i = 0; i < 15; i++)
|
isp_gic_cfg->sigma_y[i] = gic_cfg.ProcResV20.sigma_y[i];
|
}
|
|
void
|
Isp20Params::set_working_mode(int mode)
|
{
|
_working_mode = mode;
|
}
|
|
template<typename T>
|
void Isp20Params::convertAiqOrbToIsp20Params(T &pp_cfg,
|
rk_aiq_isp_orb_t& orb)
|
{
|
if(orb.orb_en) {
|
pp_cfg.head.module_ens |= ISPP_MODULE_ORB;
|
pp_cfg.head.module_en_update |= ISPP_MODULE_ORB;
|
pp_cfg.head.module_cfg_update |= ISPP_MODULE_ORB;
|
//pp_cfg.head.module_init_ens |= ISPP_MODULE_ORB;
|
|
struct rkispp_orb_config *pOrbCfg = &pp_cfg.orb_cfg;
|
|
pOrbCfg->limit_value = orb.limit_value;
|
pOrbCfg->max_feature = orb.max_feature;
|
} else {
|
pp_cfg.head.module_ens &= ~ISPP_MODULE_ORB;
|
}
|
}
|
|
void Isp20Params::setModuleStatus(rk_aiq_module_id_t mId, bool en)
|
{
|
#define _ISP_MODULE_CFG_(id) \
|
{\
|
_force_module_flags |= 1LL << id;\
|
if(en)\
|
_force_isp_module_ens |= 1LL << id;\
|
else\
|
_force_isp_module_ens &= ~(1LL << id);\
|
}
|
|
#define _ISPP_MODULE_CFG_(id, mod_en) \
|
{\
|
_force_module_flags |= 1LL << id;\
|
if(en)\
|
_force_ispp_module_ens |= mod_en;\
|
else\
|
_force_ispp_module_ens &= ~(mod_en);\
|
}
|
|
SmartLock locker (_mutex);
|
switch (mId) {
|
case RK_MODULE_INVAL:
|
break;
|
case RK_MODULE_MAX:
|
break;
|
case RK_MODULE_FEC:
|
break;
|
case RK_MODULE_TNR:
|
_ISPP_MODULE_CFG_(RK_ISP2X_PP_TNR_ID, ISPP_MODULE_TNR);
|
break;
|
case RK_MODULE_NR:
|
_ISPP_MODULE_CFG_(RK_ISP2X_PP_NR_ID, ISPP_MODULE_NR);
|
break;
|
case RK_MODULE_RAWNR:
|
_ISP_MODULE_CFG_(RK_ISP2X_RAWNR_ID);
|
case RK_MODULE_DPCC:
|
_ISP_MODULE_CFG_(RK_ISP2X_DPCC_ID);
|
break;
|
case RK_MODULE_BLS:
|
_ISP_MODULE_CFG_(RK_ISP2X_BLS_ID);
|
break;
|
case RK_MODULE_LSC:
|
_ISP_MODULE_CFG_(RK_ISP2X_LSC_ID);
|
break;
|
case RK_MODULE_CTK:
|
_ISP_MODULE_CFG_(RK_ISP2X_CTK_ID);
|
break;
|
case RK_MODULE_AWB:
|
_ISP_MODULE_CFG_(RK_ISP2X_RAWAWB_ID);
|
break;
|
case RK_MODULE_GOC:
|
_ISP_MODULE_CFG_(RK_ISP2X_GOC_ID);
|
break;
|
case RK_MODULE_3DLUT:
|
_ISP_MODULE_CFG_(RK_ISP2X_3DLUT_ID);
|
break;
|
case RK_MODULE_LDCH:
|
_ISP_MODULE_CFG_(RK_ISP2X_LDCH_ID);
|
break;
|
case RK_MODULE_GIC:
|
_ISP_MODULE_CFG_(RK_ISP2X_GIC_ID);
|
break;
|
case RK_MODULE_AWB_GAIN:
|
_ISP_MODULE_CFG_(RK_ISP2X_GAIN_ID);
|
break;
|
case RK_MODULE_SHARP:
|
_ISPP_MODULE_CFG_(RK_ISP2X_PP_TSHP_ID, ISPP_MODULE_SHP);
|
break;
|
case RK_MODULE_AE:
|
break;
|
//case RK_MODULE_DHAZ:
|
// _ISP_MODULE_CFG_(RK_ISP2X_DHAZ_ID);
|
//break;
|
}
|
}
|
|
void Isp20Params::getModuleStatus(rk_aiq_module_id_t mId, bool& en)
|
{
|
int mod_id = -1;
|
switch (mId) {
|
case RK_MODULE_INVAL:
|
break;
|
case RK_MODULE_MAX:
|
break;
|
case RK_MODULE_TNR:
|
mod_id = RK_ISP2X_PP_TNR_ID;
|
break;
|
case RK_MODULE_RAWNR:
|
mod_id = RK_ISP2X_RAWNR_ID;
|
break;
|
case RK_MODULE_DPCC:
|
mod_id = RK_ISP2X_DPCC_ID;
|
break;
|
case RK_MODULE_BLS:
|
mod_id = RK_ISP2X_BLS_ID;
|
break;
|
case RK_MODULE_LSC:
|
mod_id = RK_ISP2X_LSC_ID;
|
break;
|
case RK_MODULE_CTK:
|
mod_id = RK_ISP2X_CTK_ID;
|
break;
|
case RK_MODULE_AWB:
|
mod_id = RK_ISP2X_RAWAWB_ID;
|
break;
|
case RK_MODULE_GOC:
|
mod_id = RK_ISP2X_GOC_ID;
|
break;
|
case RK_MODULE_NR:
|
mod_id = RK_ISP2X_PP_NR_ID;
|
break;
|
case RK_MODULE_3DLUT:
|
mod_id = RK_ISP2X_3DLUT_ID;
|
break;
|
case RK_MODULE_LDCH:
|
mod_id = RK_ISP2X_LDCH_ID;
|
break;
|
case RK_MODULE_GIC:
|
mod_id = RK_ISP2X_GIC_ID;
|
break;
|
case RK_MODULE_AWB_GAIN:
|
mod_id = RK_ISP2X_GAIN_ID;
|
break;
|
case RK_MODULE_SHARP:
|
mod_id = RK_ISP2X_PP_TSHP_ID;
|
break;
|
case RK_MODULE_AE:
|
mod_id = RK_ISP2X_RAWAE_LITE_ID;
|
break;
|
case RK_MODULE_FEC:
|
mod_id = RK_ISP2X_PP_TFEC_ID;
|
break;
|
//case RK_MODULE_DHAZ:
|
// mod_id = RK_ISP2X_DHAZ_ID;
|
break;
|
}
|
|
if (mod_id < 0)
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "input param: module ID is wrong!");
|
else
|
en = getModuleForceEn(mod_id);
|
}
|
|
bool Isp20Params::getModuleForceFlag(int module_id)
|
{
|
SmartLock locker (_mutex);
|
return ((_force_module_flags & (1LL << module_id)) >> module_id);
|
}
|
|
void Isp20Params::setModuleForceFlagInverse(int module_id)
|
{
|
SmartLock locker (_mutex);
|
_force_module_flags &= (~(1LL << module_id));
|
}
|
|
bool Isp20Params::getModuleForceEn(int module_id)
|
{
|
SmartLock locker (_mutex);
|
if(module_id == RK_ISP2X_PP_TNR_ID)
|
return (_force_ispp_module_ens & ISPP_MODULE_TNR) >> 0;
|
else if(module_id == RK_ISP2X_PP_NR_ID)
|
return (_force_ispp_module_ens & ISPP_MODULE_NR) >> 1;
|
else if(module_id == RK_ISP2X_PP_TSHP_ID)
|
return (_force_ispp_module_ens & ISPP_MODULE_SHP) >> 2;
|
else if(module_id == RK_ISP2X_PP_TFEC_ID)
|
return (_force_ispp_module_ens & ISPP_MODULE_FEC) >> 3;
|
else
|
return ((_force_isp_module_ens & (1LL << module_id)) >> module_id);
|
}
|
|
void Isp20Params::updateIspModuleForceEns(u64 module_ens)
|
{
|
SmartLock locker (_mutex);
|
_force_isp_module_ens = module_ens;
|
}
|
|
void Isp20Params::updateIsppModuleForceEns(u32 module_ens)
|
{
|
SmartLock locker (_mutex);
|
_force_ispp_module_ens = module_ens;
|
}
|
|
#if 0
|
void
|
Isp20Params::forceOverwriteAiqIsppCfg(struct rkispp_params_cfg& pp_cfg,
|
SmartPtr<RkAiqIspParamsProxy> aiq_meas_results,
|
SmartPtr<RkAiqIspParamsProxy> aiq_other_results)
|
{
|
rk_aiq_ispp_meas_params_t* ispp_meas_param =
|
static_cast<rk_aiq_ispp_meas_params_t*>(aiq_meas_results->data().ptr());
|
rk_aiq_ispp_other_params_t* ispp_other_param =
|
static_cast<rk_aiq_ispp_other_params_t*>(aiq_other_results->data().ptr());
|
|
for (int i = RK_ISP2X_PP_TNR_ID; i <= RK_ISP2X_PP_MAX_ID; i++) {
|
if (getModuleForceFlag(i)) {
|
switch (i) {
|
case RK_ISP2X_PP_TNR_ID:
|
if (!ispp_other_param)
|
break;
|
if (getModuleForceEn(RK_ISP2X_PP_TNR_ID)) {
|
if(ispp_other_param->tnr.tnr_en) {
|
pp_cfg.module_ens |= ISPP_MODULE_TNR;
|
pp_cfg.module_en_update |= ISPP_MODULE_TNR;
|
pp_cfg.module_cfg_update |= ISPP_MODULE_TNR;
|
} else {
|
setModuleForceFlagInverse(RK_ISP2X_PP_TNR_ID);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "algo isn't enabled, so enable module failed!");
|
}
|
} else {
|
pp_cfg.module_ens &= ~ISPP_MODULE_TNR;
|
pp_cfg.module_en_update |= ISPP_MODULE_TNR;
|
pp_cfg.module_cfg_update &= ~ISPP_MODULE_TNR;
|
}
|
break;
|
case RK_ISP2X_PP_NR_ID:
|
if (!ispp_other_param)
|
break;
|
if (getModuleForceEn(RK_ISP2X_PP_NR_ID)) {
|
if( ispp_other_param->tnr.tnr_en) {
|
pp_cfg.module_ens |= ISPP_MODULE_NR;
|
pp_cfg.module_en_update |= ISPP_MODULE_NR;
|
pp_cfg.module_cfg_update |= ISPP_MODULE_NR;
|
} else {
|
setModuleForceFlagInverse(RK_ISP2X_PP_NR_ID);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "algo isn't enabled, so enable module failed!");
|
}
|
} else {
|
pp_cfg.module_ens &= ~ISPP_MODULE_NR;
|
pp_cfg.module_en_update |= ISPP_MODULE_NR;
|
pp_cfg.module_cfg_update &= ~ISPP_MODULE_NR;
|
}
|
break;
|
case RK_ISP2X_PP_TSHP_ID:
|
if (!ispp_other_param)
|
break;
|
if (getModuleForceEn(RK_ISP2X_PP_TSHP_ID)) {
|
if(ispp_other_param->sharpen.stSharpFixV1.sharp_en ||
|
ispp_other_param->edgeflt.edgeflt_en) {
|
pp_cfg.module_ens |= ISPP_MODULE_SHP;
|
pp_cfg.module_en_update |= ISPP_MODULE_SHP;
|
pp_cfg.module_cfg_update |= ISPP_MODULE_SHP;
|
} else {
|
setModuleForceFlagInverse(RK_ISP2X_PP_TSHP_ID);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "algo isn't enabled, so enable module failed!");
|
}
|
} else {
|
pp_cfg.module_ens &= ~ISPP_MODULE_SHP;
|
pp_cfg.module_en_update |= ISPP_MODULE_SHP;
|
pp_cfg.module_cfg_update &= ~ISPP_MODULE_SHP;
|
}
|
break;
|
}
|
}
|
}
|
updateIsppModuleForceEns(pp_cfg.module_ens);
|
}
|
|
void
|
Isp20Params::forceOverwriteAiqIspCfg(struct isp2x_isp_params_cfg& isp_cfg,
|
SmartPtr<RkAiqIspParamsProxy> aiq_results,
|
SmartPtr<RkAiqIspParamsProxy> aiq_other_results)
|
{
|
rk_aiq_isp_meas_params_v20_t* isp20_meas_result =
|
static_cast<rk_aiq_isp_meas_params_v20_t*>(aiq_results->data().ptr());
|
rk_aiq_isp_other_params_v20_t* isp20_other_result =
|
static_cast<rk_aiq_isp_other_params_v20_t*>(aiq_other_results->data().ptr());
|
for (int i = 0; i <= RK_ISP2X_MAX_ID; i++) {
|
if (getModuleForceFlag(i)) {
|
switch (i) {
|
case RK_ISP2X_DPCC_ID:
|
if (getModuleForceEn(RK_ISP2X_DPCC_ID)) {
|
if(isp20_meas_result->dpcc.stBasic.enable) {
|
isp_cfg.module_ens |= ISP2X_MODULE_DPCC;
|
isp_cfg.module_en_update |= ISP2X_MODULE_DPCC;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_DPCC;
|
} else {
|
setModuleForceFlagInverse(RK_ISP2X_DPCC_ID);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "dpcc algo isn't enabled, so enable module failed!");
|
}
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_DPCC;
|
isp_cfg.module_en_update |= ISP2X_MODULE_DPCC;
|
isp_cfg.module_cfg_update &= ~ISP2X_MODULE_DPCC;
|
}
|
break;
|
case RK_ISP2X_BLS_ID:
|
if (getModuleForceEn(RK_ISP2X_BLS_ID)) {
|
if(isp20_other_result->blc.enable) {
|
isp_cfg.module_ens |= ISP2X_MODULE_BLS;
|
isp_cfg.module_en_update |= ISP2X_MODULE_BLS;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_BLS;
|
} else {
|
setModuleForceFlagInverse(RK_ISP2X_BLS_ID);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "bls algo isn't enabled, so enable module failed!");
|
}
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_BLS;
|
isp_cfg.module_en_update |= ISP2X_MODULE_BLS;
|
isp_cfg.module_cfg_update &= ~ISP2X_MODULE_BLS;
|
}
|
break;
|
case RK_ISP2X_LSC_ID:
|
if (getModuleForceEn(RK_ISP2X_LSC_ID)) {
|
if(isp20_meas_result->lsc.lsc_en) {
|
isp_cfg.module_ens |= ISP2X_MODULE_LSC;
|
isp_cfg.module_en_update |= ISP2X_MODULE_LSC;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_LSC;
|
} else {
|
setModuleForceFlagInverse(RK_ISP2X_LSC_ID);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "lsc algo isn't enabled, so enable module failed!");
|
}
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_LSC;
|
isp_cfg.module_en_update |= ISP2X_MODULE_LSC;
|
isp_cfg.module_cfg_update &= ~ISP2X_MODULE_LSC;
|
}
|
break;
|
case RK_ISP2X_CTK_ID:
|
if (getModuleForceEn(RK_ISP2X_CTK_ID)) {
|
if(isp20_meas_result->lsc.lsc_en) {
|
isp_cfg.module_ens |= ISP2X_MODULE_CCM;
|
isp_cfg.module_en_update |= ISP2X_MODULE_CCM;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_CCM;
|
} else {
|
setModuleForceFlagInverse(RK_ISP2X_CTK_ID);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "ccm algo isn't enabled, so enable module failed!");
|
}
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_CCM;
|
isp_cfg.module_en_update |= ISP2X_MODULE_CCM;
|
isp_cfg.module_cfg_update &= ~ISP2X_MODULE_CCM;
|
}
|
break;
|
case RK_ISP2X_RAWAWB_ID:
|
if (getModuleForceEn(RK_ISP2X_RAWAWB_ID)) {
|
if(isp20_meas_result->awb_cfg.awbEnable) {
|
isp_cfg.module_ens |= ISP2X_MODULE_RAWAWB;
|
isp_cfg.module_en_update |= ISP2X_MODULE_RAWAWB;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_RAWAWB;
|
} else {
|
setModuleForceFlagInverse(RK_ISP2X_RAWAWB_ID);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "awb algo isn't enabled, so enable module failed!");
|
}
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_RAWAWB;
|
isp_cfg.module_en_update |= ISP2X_MODULE_RAWAWB;
|
isp_cfg.module_cfg_update &= ~ISP2X_MODULE_RAWAWB;
|
}
|
break;
|
case RK_ISP2X_GOC_ID:
|
if (getModuleForceEn(RK_ISP2X_GOC_ID)) {
|
if(isp20_other_result->agamma.gamma_en) {
|
isp_cfg.module_ens |= ISP2X_MODULE_GOC;
|
isp_cfg.module_en_update |= ISP2X_MODULE_GOC;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_GOC;
|
} else {
|
setModuleForceFlagInverse(RK_ISP2X_GOC_ID);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "goc algo isn't enabled, so enable module failed!");
|
}
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_GOC;
|
isp_cfg.module_en_update |= ISP2X_MODULE_GOC;
|
isp_cfg.module_cfg_update &= ~ISP2X_MODULE_GOC;
|
}
|
break;
|
case RK_ISP2X_RAWNR_ID:
|
if (getModuleForceEn(RK_ISP2X_RAWNR_ID)) {
|
if(isp20_other_result->rawnr.rawnr_en) {
|
isp_cfg.module_ens |= ISP2X_MODULE_RAWNR;
|
isp_cfg.module_en_update |= ISP2X_MODULE_RAWNR;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_RAWNR;
|
} else {
|
setModuleForceFlagInverse(RK_ISP2X_RAWNR_ID);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "rawnr algo isn't enabled, so enable module failed!");
|
}
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_RAWNR;
|
isp_cfg.module_en_update |= ISP2X_MODULE_RAWNR;
|
isp_cfg.module_cfg_update &= ~ISP2X_MODULE_RAWNR;
|
}
|
break;
|
case RK_ISP2X_3DLUT_ID:
|
if (getModuleForceEn(RK_ISP2X_3DLUT_ID)) {
|
if(isp20_other_result->rawnr.rawnr_en) {
|
isp_cfg.module_ens |= ISP2X_MODULE_3DLUT;
|
isp_cfg.module_en_update |= ISP2X_MODULE_3DLUT;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_3DLUT;
|
} else {
|
setModuleForceFlagInverse(RK_ISP2X_3DLUT_ID);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "3dlut algo isn't enabled, so enable module failed!");
|
}
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_3DLUT;
|
isp_cfg.module_en_update |= ISP2X_MODULE_3DLUT;
|
isp_cfg.module_cfg_update &= ~ISP2X_MODULE_3DLUT;
|
}
|
break;
|
case RK_ISP2X_LDCH_ID:
|
if (getModuleForceEn(RK_ISP2X_LDCH_ID)) {
|
if(isp20_other_result->ldch.ldch_en) {
|
isp_cfg.module_ens |= ISP2X_MODULE_LDCH;
|
isp_cfg.module_en_update |= ISP2X_MODULE_LDCH;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_LDCH;
|
} else {
|
setModuleForceFlagInverse(RK_ISP2X_LDCH_ID);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "ldch algo isn't enabled, so enable module failed!");
|
}
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_LDCH;
|
isp_cfg.module_en_update |= ISP2X_MODULE_LDCH;
|
isp_cfg.module_cfg_update &= ~ISP2X_MODULE_LDCH;
|
}
|
break;
|
case RK_ISP2X_GIC_ID:
|
if (getModuleForceEn(RK_ISP2X_GIC_ID)) {
|
if(isp20_other_result->gic.gic_en) {
|
isp_cfg.module_ens |= ISP2X_MODULE_GIC;
|
isp_cfg.module_en_update |= ISP2X_MODULE_GIC;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_GIC;
|
} else {
|
setModuleForceFlagInverse(RK_ISP2X_GIC_ID);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "gic algo isn't enabled, so enable module failed!");
|
}
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_GIC;
|
isp_cfg.module_en_update |= ISP2X_MODULE_GIC;
|
isp_cfg.module_cfg_update &= ~ISP2X_MODULE_GIC;
|
}
|
break;
|
case RK_ISP2X_GAIN_ID:
|
if (getModuleForceEn(RK_ISP2X_GAIN_ID)) {
|
if(isp20_other_result->gain_config.gain_table_en) {
|
isp_cfg.module_ens |= ISP2X_MODULE_GAIN;
|
isp_cfg.module_en_update |= ISP2X_MODULE_GAIN;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_GAIN;
|
} else {
|
setModuleForceFlagInverse(RK_ISP2X_GAIN_ID);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "gain algo isn't enabled, so enable module failed!");
|
}
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_GAIN;
|
isp_cfg.module_en_update |= ISP2X_MODULE_GAIN;
|
isp_cfg.module_cfg_update &= ~ISP2X_MODULE_GAIN;
|
}
|
break;
|
case RK_ISP2X_DHAZ_ID:
|
if (getModuleForceEn(RK_ISP2X_DHAZ_ID)) {
|
if(isp20_other_result->adhaz.enable) {
|
isp_cfg.module_ens |= ISP2X_MODULE_DHAZ;
|
isp_cfg.module_en_update |= ISP2X_MODULE_DHAZ;
|
isp_cfg.module_cfg_update |= ISP2X_MODULE_DHAZ;
|
} else {
|
setModuleForceFlagInverse(RK_ISP2X_DHAZ_ID);
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "dehaze algo isn't enabled, so enable module failed!");
|
}
|
} else {
|
isp_cfg.module_ens &= ~ISP2X_MODULE_DHAZ;
|
isp_cfg.module_en_update |= ISP2X_MODULE_DHAZ;
|
isp_cfg.module_cfg_update &= ~ISP2X_MODULE_DHAZ;
|
}
|
break;
|
}
|
}
|
}
|
updateIspModuleForceEns(isp_cfg.module_ens);
|
}
|
#endif
|
|
void
|
Isp20Params::hdrtmoGetLumaInfo(rk_aiq_luma_params_t * Next, rk_aiq_luma_params_t *Cur,
|
s32 frameNum, int PixelNumBlock, float blc, float *luma)
|
{
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "PixelNumBlock:%d blc:%f\n", PixelNumBlock, blc);
|
|
float nextSLuma[16] ;
|
float curSLuma[16] ;
|
float nextMLuma[16] ;
|
float curMLuma[16] ;
|
float nextLLuma[16];
|
float curLLuma[16];
|
|
if (frameNum == 1)
|
{
|
for(int i = 0; i < ISP2X_MIPI_LUMA_MEAN_MAX; i++) {
|
nextLLuma[i] = 0;
|
curLLuma[i] = 0;
|
nextMLuma[i] = 0;
|
curMLuma[i] = 0;
|
nextSLuma[i] = (float)Next->luma[0][i];
|
nextSLuma[i] /= (float)PixelNumBlock;
|
nextSLuma[i] -= blc;
|
curSLuma[i] = (float)Cur->luma[0][i];
|
curSLuma[i] /= (float)PixelNumBlock;
|
curSLuma[i] -= blc;
|
}
|
} else if (frameNum == 2) {
|
for(int i = 0; i < ISP2X_MIPI_LUMA_MEAN_MAX; i++) {
|
nextSLuma[i] = (float)Next->luma[1][i];
|
nextSLuma[i] /= (float)PixelNumBlock;
|
nextSLuma[i] -= blc;
|
curSLuma[i] = (float)Cur->luma[1][i];
|
curSLuma[i] /= (float)PixelNumBlock;
|
curSLuma[i] -= blc;
|
nextMLuma[i] = 0;
|
curMLuma[i] = 0;
|
nextLLuma[i] = (float)Next->luma[0][i];
|
nextLLuma[i] /= (float)PixelNumBlock;
|
nextLLuma[i] -= blc;
|
curLLuma[i] = (float)Cur->luma[0][i];
|
curLLuma[i] /= (float)PixelNumBlock;
|
curLLuma[i] -= blc;
|
}
|
} else if (frameNum == 3) {
|
|
for(int i = 0; i < ISP2X_MIPI_LUMA_MEAN_MAX; i++) {
|
nextSLuma[i] = (float)Next->luma[2][i];
|
nextSLuma[i] /= (float)PixelNumBlock;
|
nextSLuma[i] -= blc;
|
curSLuma[i] = (float)Cur->luma[2][i];
|
curSLuma[i] /= (float)PixelNumBlock;
|
curSLuma[i] -= blc;
|
nextMLuma[i] = (float)Next->luma[1][i];
|
nextMLuma[i] /= (float)PixelNumBlock;
|
nextMLuma[i] -= blc;
|
curMLuma[i] = (float)Cur->luma[1][i];
|
curMLuma[i] /= (float)PixelNumBlock;
|
curMLuma[i] -= blc;
|
nextLLuma[i] = (float)Next->luma[0][i];
|
nextLLuma[i] /= (float)PixelNumBlock;
|
nextLLuma[i] -= blc;
|
curLLuma[i] = (float)Cur->luma[0][i];
|
curLLuma[i] /= (float)PixelNumBlock;
|
curLLuma[i] -= blc;
|
}
|
}
|
|
for(int i = 0; i < ISP2X_MIPI_LUMA_MEAN_MAX; i++) {
|
luma[i] = curSLuma[i];
|
luma[i + 16] = curMLuma[i];
|
luma[i + 32] = curLLuma[i];
|
luma[i + 48] = nextSLuma[i];
|
luma[i + 64] = nextMLuma[i];
|
luma[i + 80] = nextLLuma[i];
|
}
|
}
|
|
void
|
Isp20Params::hdrtmoGetAeInfo(RKAiqAecExpInfo_t* Next, RKAiqAecExpInfo_t* Cur, s32 frameNum, float* expo)
|
{
|
float nextLExpo = 0;
|
float curLExpo = 0;
|
float nextMExpo = 0;
|
float curMExpo = 0;
|
float nextSExpo = 0;
|
float curSExpo = 0;
|
|
if (frameNum == 1)
|
{
|
nextLExpo = 0;
|
curLExpo = 0;
|
nextMExpo = 0;
|
curMExpo = 0;
|
nextSExpo = Next->LinearExp.exp_real_params.analog_gain * \
|
Next->LinearExp.exp_real_params.integration_time;
|
curSExpo = Cur->LinearExp.exp_real_params.analog_gain * \
|
Cur->LinearExp.exp_real_params.integration_time;
|
} else if (frameNum == 2) {
|
nextLExpo = Next->HdrExp[1].exp_real_params.analog_gain * \
|
Next->HdrExp[1].exp_real_params.integration_time;
|
curLExpo = Cur->HdrExp[1].exp_real_params.analog_gain * \
|
Cur->HdrExp[1].exp_real_params.integration_time;
|
nextMExpo = nextLExpo;
|
curMExpo = curLExpo;
|
nextSExpo = Next->HdrExp[0].exp_real_params.analog_gain * \
|
Next->HdrExp[0].exp_real_params.integration_time;
|
curSExpo = Cur->HdrExp[0].exp_real_params.analog_gain * \
|
Cur->HdrExp[0].exp_real_params.integration_time;
|
} else if (frameNum == 3) {
|
nextLExpo = Next->HdrExp[2].exp_real_params.analog_gain * \
|
Next->HdrExp[2].exp_real_params.integration_time;
|
curLExpo = Cur->HdrExp[2].exp_real_params.analog_gain * \
|
Cur->HdrExp[2].exp_real_params.integration_time;
|
nextMExpo = Next->HdrExp[1].exp_real_params.analog_gain * \
|
Next->HdrExp[1].exp_real_params.integration_time;
|
curMExpo = Cur->HdrExp[1].exp_real_params.analog_gain * \
|
Cur->HdrExp[1].exp_real_params.integration_time;
|
nextSExpo = Next->HdrExp[0].exp_real_params.analog_gain * \
|
Next->HdrExp[0].exp_real_params.integration_time;
|
curSExpo = Cur->HdrExp[0].exp_real_params.analog_gain * \
|
Cur->HdrExp[0].exp_real_params.integration_time;
|
}
|
|
expo[0] = curSExpo;
|
expo[1] = curMExpo;
|
expo[2] = curLExpo;
|
expo[3] = nextSExpo;
|
expo[4] = nextMExpo;
|
expo[5] = nextLExpo;
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "Cur Expo: S:%f M:%f L:%f\n", curSExpo, curMExpo, curLExpo);
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "Next Expo: S:%f M:%f L:%f\n", nextSExpo, nextMExpo, nextLExpo);
|
|
}
|
|
bool
|
Isp20Params::hdrtmoSceneStable(sint32_t frameId, int IIRMAX, int IIR, int SetWeight, s32 frameNum, float *LumaDeviation, float StableThr)
|
{
|
bool SceneStable = true;
|
float LumaDeviationL = 0;
|
float LumaDeviationM = 0;
|
float LumaDeviationS = 0;
|
float LumaDeviationLinear = 0;
|
float LumaDeviationFinnal = 0;
|
|
//set default value when secne change or flow restart
|
if(AntiTmoFlicker.preFrameNum != frameNum || frameId == 0) {
|
AntiTmoFlicker.preFrameNum = 0;
|
AntiTmoFlicker.FirstChange = false;
|
AntiTmoFlicker.FirstChangeNum = 0;
|
AntiTmoFlicker.FirstChangeDone = false;
|
AntiTmoFlicker.FirstChangeDoneNum = 0;
|
}
|
|
//get LumaDeviationFinnal value
|
if(frameNum == 1) {
|
LumaDeviationLinear = LumaDeviation[0];
|
LumaDeviationFinnal = LumaDeviationLinear;
|
}
|
else if(frameNum == 2) {
|
LumaDeviationS = LumaDeviation[0];
|
LumaDeviationL = LumaDeviation[1];
|
|
if(LumaDeviationL > 0)
|
LumaDeviationFinnal = LumaDeviationL;
|
else if(LumaDeviationL == 0 && LumaDeviationS > 0)
|
LumaDeviationFinnal = LumaDeviationS;
|
|
}
|
else if(frameNum == 3) {
|
LumaDeviationS = LumaDeviation[0];
|
LumaDeviationM = LumaDeviation[1];
|
LumaDeviationL = LumaDeviation[2];
|
|
if(LumaDeviationM > 0)
|
LumaDeviationFinnal = LumaDeviationM;
|
else if(LumaDeviationM == 0 && LumaDeviationL > 0)
|
LumaDeviationFinnal = LumaDeviationL;
|
else if(LumaDeviationM == 0 && LumaDeviationL == 0 && LumaDeviationS == 0)
|
LumaDeviationFinnal = LumaDeviationS;
|
|
}
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "frameId:%ld LumaDeviationLinear:%f LumaDeviationS:%f LumaDeviationM:%f LumaDeviationL:%f\n",
|
frameId, LumaDeviationLinear, LumaDeviationS, LumaDeviationM, LumaDeviationL);
|
|
//skip first N frame for starting
|
if(AntiTmoFlicker.FirstChange == false) {
|
if(LumaDeviationFinnal) {
|
AntiTmoFlicker.FirstChange = true;
|
AntiTmoFlicker.FirstChangeNum = frameId;
|
}
|
}
|
|
if(AntiTmoFlicker.FirstChangeDone == false && AntiTmoFlicker.FirstChange == true) {
|
if(LumaDeviationFinnal == 0) {
|
AntiTmoFlicker.FirstChangeDone = true;
|
AntiTmoFlicker.FirstChangeDoneNum = frameId;
|
}
|
}
|
|
//detect stable
|
if(AntiTmoFlicker.FirstChangeDoneNum && AntiTmoFlicker.FirstChangeNum) {
|
if(LumaDeviationFinnal <= StableThr)
|
SceneStable = true;
|
else
|
SceneStable = false;
|
}
|
else
|
SceneStable = true;
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "preFrameNum:%d frameNum:%d FirstChange:%d FirstChangeNum:%d FirstChangeDone:%d FirstChangeDoneNum:%d\n",
|
AntiTmoFlicker.preFrameNum, frameNum, AntiTmoFlicker.FirstChange, AntiTmoFlicker.FirstChangeNum,
|
AntiTmoFlicker.FirstChangeDone, AntiTmoFlicker.FirstChangeDoneNum);
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "LumaDeviationFinnal:%f StableThr:%f SceneStable:%d \n", LumaDeviationFinnal, StableThr, SceneStable);
|
|
//store framrnum
|
AntiTmoFlicker.preFrameNum = frameNum;
|
|
return SceneStable;
|
}
|
|
s32
|
Isp20Params::hdrtmoPredictK(float* luma, float* expo, s32 frameNum, PredictKPara_t *TmoPara)
|
{
|
int PredictK = 0;
|
float PredictKfloat = 0;
|
|
float curSExpo = expo[0];
|
float curMExpo = expo[1];
|
float curLExpo = expo[2];
|
float nextSExpo = expo[3];
|
float nextMExpo = expo[4];
|
float nextLExpo = expo[5];
|
|
float nextLLuma[16];
|
float curLLuma[16];
|
float nextSLuma[16];
|
float curSLuma[16];
|
float nextMLuma[16];
|
float curMLuma[16];
|
|
for(int i = 0; i < ISP2X_MIPI_LUMA_MEAN_MAX; i++)
|
{
|
curSLuma[i] = luma[i];
|
curMLuma[i] = luma[i + 16];
|
curLLuma[i] = luma[i + 32];
|
nextSLuma[i] = luma[i + 48];
|
nextMLuma[i] = luma[i + 64];
|
nextLLuma[i] = luma[i + 80];
|
}
|
|
float correction_factor = TmoPara->correction_factor;
|
float ratio = 1;
|
float offset = TmoPara->correction_offset;
|
float LongExpoRatio = 1;
|
float ShortExpoRatio = 1;
|
float MiddleExpoRatio = 1;
|
float MiddleLumaChange = 1;
|
float LongLumaChange = 1;
|
float ShortLumaChange = 1;
|
float EnvLvChange = 0;
|
|
//get expo change
|
if(frameNum == 3 || frameNum == 2) {
|
if(nextLExpo != 0 && curLExpo != 0)
|
LongExpoRatio = nextLExpo / curLExpo;
|
else
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "Wrong Long frame expo!!!");
|
}
|
|
if(frameNum == 3) {
|
if(nextMExpo != 0 && curMExpo != 0)
|
ShortExpoRatio = nextMExpo / curMExpo;
|
else
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "Wrong Short frame expo!!!");
|
}
|
|
if(nextSExpo != 0 && curSExpo != 0)
|
ShortExpoRatio = nextSExpo / curSExpo;
|
else
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "Wrong Short frame expo!!!");
|
|
float nextLMeanLuma = 0;
|
float curLMeanLuma = 0;
|
float curMMeanLuma = 0;
|
float nextMMeanLuma = 0;
|
float nextSMeanLuma = 0;
|
float curSMeanLuma = 0;
|
for(int i = 0; i < ISP2X_MIPI_LUMA_MEAN_MAX; i++)
|
{
|
nextLMeanLuma += nextLLuma[i];
|
curLMeanLuma += curLLuma[i];
|
nextMMeanLuma += nextMLuma[i];
|
curMMeanLuma += curMLuma[i];
|
nextSMeanLuma += nextSLuma[i];
|
curSMeanLuma += curSLuma[i];
|
}
|
nextLMeanLuma /= ISP2X_MIPI_LUMA_MEAN_MAX;
|
curLMeanLuma /= ISP2X_MIPI_LUMA_MEAN_MAX;
|
nextMMeanLuma /= ISP2X_MIPI_LUMA_MEAN_MAX;
|
curMMeanLuma /= ISP2X_MIPI_LUMA_MEAN_MAX;
|
nextSMeanLuma /= ISP2X_MIPI_LUMA_MEAN_MAX;
|
curSMeanLuma /= ISP2X_MIPI_LUMA_MEAN_MAX;
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextLLuma:%f curLLuma:%f\n", nextLMeanLuma, curLMeanLuma);
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextSLuma:%f curSLuma:%f\n", nextSMeanLuma, curSMeanLuma);
|
|
//get luma change
|
if(frameNum == 3 || frameNum == 2) {
|
if(nextLMeanLuma > 0 && curLMeanLuma > 0)
|
LongLumaChange = nextLMeanLuma / curLMeanLuma;
|
else if(nextLMeanLuma <= 0 && curLMeanLuma > 0)
|
{
|
nextLMeanLuma = 1;
|
LongLumaChange = nextLMeanLuma / curLMeanLuma;
|
}
|
else if(nextLMeanLuma > 0 && curLMeanLuma <= 0)
|
{
|
curLMeanLuma = 1;
|
LongLumaChange = nextLMeanLuma / curLMeanLuma;
|
}
|
else {
|
curLMeanLuma = 1;
|
nextLMeanLuma = 1;
|
LongLumaChange = nextLMeanLuma / curLMeanLuma;
|
}
|
}
|
|
if(frameNum == 3) {
|
if(nextMMeanLuma > 0 && curMMeanLuma > 0)
|
MiddleLumaChange = nextMMeanLuma / curMMeanLuma;
|
else if(nextMMeanLuma <= 0 && curMMeanLuma > 0)
|
{
|
nextMMeanLuma = 1;
|
MiddleLumaChange = nextMMeanLuma / curMMeanLuma;
|
}
|
else if(nextMMeanLuma > 0 && curMMeanLuma <= 0)
|
{
|
curMMeanLuma = 1;
|
MiddleLumaChange = nextMMeanLuma / curMMeanLuma;
|
}
|
else {
|
curMMeanLuma = 1;
|
nextMMeanLuma = 1;
|
MiddleLumaChange = nextMMeanLuma / curMMeanLuma;
|
}
|
}
|
|
if(nextSMeanLuma > 0 && curSMeanLuma > 0)
|
ShortLumaChange = nextSMeanLuma / curSMeanLuma;
|
else if(nextSMeanLuma <= 0 && curSMeanLuma > 0)
|
{
|
nextSMeanLuma = 1;
|
ShortLumaChange = nextSMeanLuma / curSMeanLuma;
|
}
|
else if(nextSMeanLuma > 0 && curSMeanLuma <= 0)
|
{
|
curSMeanLuma = 1;
|
ShortLumaChange = nextSMeanLuma / curSMeanLuma;
|
}
|
else {
|
curSMeanLuma = 1;
|
nextSMeanLuma = 1;
|
ShortLumaChange = nextSMeanLuma / curSMeanLuma;
|
}
|
|
//cal predictK
|
if (frameNum == 1)
|
{
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextLuma:%f curLuma:%f LumaChange:%f\n", nextSMeanLuma, curSMeanLuma, ShortLumaChange);
|
ratio = ShortLumaChange;
|
|
EnvLvChange = nextSMeanLuma / nextSExpo - curSMeanLuma / curSExpo;
|
EnvLvChange = EnvLvChange >= 0 ? EnvLvChange : (-EnvLvChange);
|
EnvLvChange /= curSMeanLuma / curSExpo;
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextEnvLv:%f curEnvLv:%f EnvLvChange:%f\n", nextSMeanLuma / nextSExpo,
|
curSMeanLuma / curSExpo, EnvLvChange);
|
}
|
else if (frameNum == 2)
|
{
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextLLuma:%f curLLuma:%f LongLumaChange:%f\n", nextLMeanLuma, curLMeanLuma, LongLumaChange);
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextSLuma:%f curSLuma:%f ShortLumaChange:%f\n", nextSMeanLuma, curSMeanLuma, ShortLumaChange);
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "LongPercent:%f UseLongLowTh:%f UseLongUpTh:%f\n", 1, TmoPara->UseLongLowTh, TmoPara->UseLongUpTh);
|
|
if(LongLumaChange > TmoPara->UseLongLowTh || LongLumaChange < TmoPara->UseLongUpTh)
|
ratio = LongLumaChange;
|
else
|
ratio = ShortLumaChange;
|
|
EnvLvChange = nextLMeanLuma / nextLExpo - curLMeanLuma / curLExpo;
|
EnvLvChange = EnvLvChange >= 0 ? EnvLvChange : (-EnvLvChange);
|
EnvLvChange /= curLMeanLuma / curLExpo;
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextEnvLv:%f curEnvLv:%f EnvLvChange:%f\n", nextLMeanLuma / nextLExpo,
|
curLMeanLuma / curLExpo, EnvLvChange);
|
|
}
|
else if (frameNum == 3)
|
{
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextLLuma:%f curLLuma:%f LongLumaChange:%f\n", nextLMeanLuma, curLMeanLuma, LongLumaChange);
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextMLuma:%f curMLuma:%f MiddleLumaChange:%f\n", nextMMeanLuma, curMMeanLuma, MiddleLumaChange);
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextSLuma:%f curSLuma:%f ShortLumaChange:%f\n", nextSMeanLuma, curSMeanLuma, ShortLumaChange);
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "LongPercent:%f UseLongLowTh:%f UseLongUpTh:%f\n", TmoPara->Hdr3xLongPercent,
|
TmoPara->UseLongLowTh, TmoPara->UseLongUpTh);
|
|
float LongLumaChangeNew = TmoPara->Hdr3xLongPercent * LongLumaChange + (1 - TmoPara->Hdr3xLongPercent) * MiddleLumaChange;
|
if(LongLumaChangeNew > TmoPara->UseLongLowTh || LongLumaChangeNew < TmoPara->UseLongUpTh)
|
ratio = LongLumaChangeNew;
|
else
|
ratio = ShortLumaChange;
|
|
EnvLvChange = nextMMeanLuma / nextMExpo - curMMeanLuma / curMExpo;
|
EnvLvChange = EnvLvChange >= 0 ? EnvLvChange : (-EnvLvChange);
|
EnvLvChange /= curMMeanLuma / curMExpo;
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "nextEnvLv:%f curEnvLv:%f EnvLvChange:%f\n", nextMMeanLuma / nextMExpo,
|
curMMeanLuma / curMExpo, EnvLvChange);
|
}
|
|
if(ratio >= 1)
|
PredictKfloat = log(correction_factor * ratio + offset) / log(2);
|
else if(ratio < 1 && ratio > 0)
|
{
|
float tmp = ratio / correction_factor - offset;
|
tmp = tmp >= 1 ? 1 : tmp <= 0 ? 0.00001 : tmp;
|
PredictKfloat = log(tmp) / log(2);
|
}
|
else
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "Wrong luma change!!!");
|
|
//add EnvLv judge
|
if(EnvLvChange > 0.005) {
|
float tmp = curLMeanLuma - nextLMeanLuma;
|
tmp = tmp >= 0 ? tmp : (-tmp);
|
if(tmp < 1)
|
PredictKfloat = 0;
|
}
|
else
|
PredictKfloat = 0;
|
|
PredictKfloat *= 2048;
|
PredictK = (int)PredictKfloat;
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "ratio:%f EnvLvChange:%f PredictKfloat:%f PredictK:%d\n",
|
ratio, EnvLvChange, PredictKfloat, PredictK);
|
return PredictK;
|
}
|
|
bool Isp20Params::convert3aResultsToIspCfg(SmartPtr<cam3aResult> &result,
|
void* isp_cfg_p)
|
{
|
struct isp2x_isp_params_cfg& isp_cfg = *(struct isp2x_isp_params_cfg*)isp_cfg_p;
|
|
if (result.ptr() == NULL) {
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "3A result empty");
|
return false;
|
}
|
|
int32_t type = result->getType();
|
// LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, module (0x%x) convert params!\n", __FUNCTION__, type);
|
switch (type)
|
{
|
case RESULT_TYPE_AEC_PARAM:
|
{
|
SmartPtr<RkAiqIspAecParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspAecParamsProxy>();
|
if (params.ptr()) {
|
convertAiqAeToIsp20Params(isp_cfg, params->data()->result);
|
}
|
}
|
break;
|
case RESULT_TYPE_HIST_PARAM:
|
{
|
SmartPtr<RkAiqIspHistParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspHistParamsProxy>();
|
if (params.ptr())
|
convertAiqHistToIsp20Params(isp_cfg, params->data()->result);
|
}
|
break;
|
case RESULT_TYPE_AWB_PARAM:
|
{
|
SmartPtr<RkAiqIspAwbParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspAwbParamsProxy>();
|
if (params.ptr())
|
convertAiqAwbToIsp20Params(isp_cfg, params->data()->result, true);
|
}
|
break;
|
case RESULT_TYPE_AWBGAIN_PARAM:
|
{
|
SmartPtr<RkAiqIspAwbGainParamsProxy> awb_gain = result.dynamic_cast_ptr<RkAiqIspAwbGainParamsProxy>();
|
if (awb_gain.ptr() && mBlcResult.ptr()) {
|
SmartPtr<RkAiqIspBlcParamsProxy> blc = mBlcResult.dynamic_cast_ptr<RkAiqIspBlcParamsProxy>();
|
convertAiqAwbGainToIsp20Params(isp_cfg,
|
awb_gain->data()->result, blc->data()->result, true);
|
|
} else
|
LOGE("don't get %s params, convert awbgain params failed!",
|
awb_gain.ptr() ? "blc" : "awb_gain");
|
}
|
break;
|
case RESULT_TYPE_AF_PARAM:
|
{
|
SmartPtr<RkAiqIspAfParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspAfParamsProxy>();
|
if (params.ptr())
|
convertAiqAfToIsp20Params(isp_cfg, params->data()->result, true);
|
}
|
break;
|
case RESULT_TYPE_DPCC_PARAM:
|
{
|
SmartPtr<RkAiqIspDpccParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspDpccParamsProxy>();
|
if (params.ptr())
|
convertAiqDpccToIsp20Params(isp_cfg, params->data()->result);
|
}
|
break;
|
case RESULT_TYPE_MERGE_PARAM:
|
{
|
SmartPtr<RkAiqIspMergeParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspMergeParamsProxy>();
|
if (params.ptr()) {
|
convertAiqMergeToIsp20Params(isp_cfg, params->data()->result);
|
}
|
}
|
break;
|
case RESULT_TYPE_TMO_PARAM:
|
{
|
SmartPtr<RkAiqIspTmoParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspTmoParamsProxy>();
|
if (params.ptr()) {
|
convertAiqTmoToIsp20Params(isp_cfg, params->data()->result);
|
}
|
}
|
break;
|
case RESULT_TYPE_CCM_PARAM:
|
{
|
SmartPtr<RkAiqIspCcmParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspCcmParamsProxy>();
|
if (params.ptr())
|
convertAiqCcmToIsp20Params(isp_cfg, params->data()->result);
|
}
|
break;
|
case RESULT_TYPE_LSC_PARAM:
|
{
|
SmartPtr<RkAiqIspLscParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspLscParamsProxy>();
|
if (params.ptr())
|
convertAiqLscToIsp20Params(isp_cfg, params->data()->result);
|
}
|
break;
|
case RESULT_TYPE_BLC_PARAM:
|
{
|
SmartPtr<RkAiqIspBlcParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspBlcParamsProxy>();
|
if (params.ptr())
|
convertAiqBlcToIsp20Params(isp_cfg, params->data()->result);
|
}
|
case RESULT_TYPE_RAWNR_PARAM:
|
{
|
SmartPtr<RkAiqIspRawnrParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspRawnrParamsProxy>();
|
if (params.ptr())
|
convertAiqRawnrToIsp20Params(isp_cfg, params->data()->result);
|
}
|
break;
|
case RESULT_TYPE_GIC_PARAM:
|
{
|
SmartPtr<RkAiqIspGicParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspGicParamsProxy>();
|
if (params.ptr())
|
convertAiqGicToIsp20Params(isp_cfg, params->data()->result);
|
}
|
break;
|
case RESULT_TYPE_DEBAYER_PARAM:
|
{
|
SmartPtr<RkAiqIspDebayerParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspDebayerParamsProxy>();
|
if (params.ptr())
|
convertAiqAdemosaicToIsp20Params(isp_cfg, params->data()->result);
|
}
|
break;
|
case RESULT_TYPE_LDCH_PARAM:
|
{
|
SmartPtr<RkAiqIspLdchParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspLdchParamsProxy>();
|
if (params.ptr())
|
convertAiqAldchToIsp20Params(isp_cfg, params->data()->result);
|
}
|
break;
|
case RESULT_TYPE_LUT3D_PARAM:
|
{
|
SmartPtr<RkAiqIspLut3dParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspLut3dParamsProxy>();
|
if (params.ptr())
|
convertAiqA3dlutToIsp20Params(isp_cfg, params->data()->result);
|
}
|
break;
|
case RESULT_TYPE_DEHAZE_PARAM:
|
{
|
SmartPtr<RkAiqIspDehazeParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspDehazeParamsProxy>();
|
if (params.ptr())
|
convertAiqAdehazeToIsp20Params(isp_cfg, params->data()->result);
|
}
|
break;
|
case RESULT_TYPE_AGAMMA_PARAM:
|
{
|
SmartPtr<RkAiqIspAgammaParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspAgammaParamsProxy>();
|
if (params.ptr())
|
convertAiqAgammaToIsp20Params(isp_cfg, params->data()->result);
|
}
|
break;
|
case RESULT_TYPE_ADEGAMMA_PARAM:
|
{
|
SmartPtr<RkAiqIspAdegammaParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspAdegammaParamsProxy>();
|
if (params.ptr())
|
convertAiqAdegammaToIsp20Params(isp_cfg, params->data()->result);
|
}
|
break;
|
case RESULT_TYPE_WDR_PARAM:
|
#if 0
|
{
|
SmartPtr<RkAiqIspWdrParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspWdrParamsProxy>();
|
if (params.ptr())
|
convertAiqWdrToIsp20Params(isp_cfg, params->data()->result);
|
}
|
#endif
|
break;
|
case RESULT_TYPE_CSM_PARAM:
|
#if 0
|
{
|
SmartPtr<RkAiqIspCsmParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspCsmParamsProxy>();
|
if (params.ptr())
|
convertAiqToIsp20Params(isp_cfg, params->data()->result);
|
}
|
#endif
|
break;
|
case RESULT_TYPE_CGC_PARAM:
|
break;
|
case RESULT_TYPE_CONV422_PARAM:
|
break;
|
case RESULT_TYPE_YUVCONV_PARAM:
|
break;
|
case RESULT_TYPE_GAIN_PARAM:
|
{
|
SmartPtr<RkAiqIspGainParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspGainParamsProxy>();
|
if (params.ptr())
|
convertAiqGainToIsp20Params(isp_cfg, params->data()->result);
|
}
|
break;
|
case RESULT_TYPE_CP_PARAM:
|
{
|
SmartPtr<RkAiqIspCpParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspCpParamsProxy>();
|
if (params.ptr())
|
convertAiqCpToIsp20Params(isp_cfg, params->data()->result);
|
}
|
break;
|
case RESULT_TYPE_IE_PARAM:
|
{
|
SmartPtr<RkAiqIspIeParamsProxy> params = result.dynamic_cast_ptr<RkAiqIspIeParamsProxy>();
|
if (params.ptr())
|
convertAiqIeToIsp20Params(isp_cfg, params->data()->result);
|
}
|
break;
|
default:
|
LOGE("unknown param type: 0x%x!", type);
|
return false;
|
}
|
|
/*
|
* cam3aResultList &list = _cam3aConfig[result->getFrameId()];
|
* list.push_back(result);
|
*/
|
|
return true;
|
}
|
|
XCamReturn Isp20Params::merge_isp_results(cam3aResultList &results, void* isp_cfg)
|
{
|
if (results.empty())
|
return XCAM_RETURN_ERROR_PARAM;
|
|
mBlcResult = get_3a_result(results, RESULT_TYPE_BLC_PARAM);
|
if (!mBlcResult.ptr())
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "get blc params failed!\n");
|
|
LOGD_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, isp cam3a results size: %d\n", __FUNCTION__, results.size());
|
for (cam3aResultList::iterator iter = results.begin ();
|
iter != results.end (); iter++)
|
{
|
SmartPtr<cam3aResult> &cam3a_result = *iter;
|
|
convert3aResultsToIspCfg(cam3a_result, isp_cfg);
|
}
|
results.clear();
|
mBlcResult.release();
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
template<>
|
XCamReturn Isp20Params::merge_results<struct rkispp_params_nrcfg>(cam3aResultList &results, struct rkispp_params_nrcfg &pp_cfg)
|
{
|
if (results.empty())
|
return XCAM_RETURN_ERROR_PARAM;
|
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, pp cam3a results size: %d\n", __FUNCTION__, results.size());
|
|
SmartPtr<RkAiqIspSharpenParamsProxy> sharpen = nullptr;
|
SmartPtr<RkAiqIspEdgefltParamsProxy> edgeflt = nullptr;
|
|
for (cam3aResultList::iterator iter = results.begin ();
|
iter != results.end ();)
|
{
|
SmartPtr<cam3aResult> &cam3a_result = *iter;
|
|
if (cam3a_result->getType() == RESULT_TYPE_SHARPEN_PARAM || \
|
cam3a_result->getType() == RESULT_TYPE_EDGEFLT_PARAM) {
|
if (cam3a_result->getType() == RESULT_TYPE_SHARPEN_PARAM)
|
sharpen = cam3a_result.dynamic_cast_ptr<RkAiqIspSharpenParamsProxy>();
|
else if (cam3a_result->getType() == RESULT_TYPE_EDGEFLT_PARAM)
|
edgeflt = cam3a_result.dynamic_cast_ptr<RkAiqIspEdgefltParamsProxy>();
|
if (sharpen.ptr() && edgeflt.ptr())
|
convertAiqSharpenToIsp20Params(pp_cfg, sharpen->data()->result, edgeflt->data()->result);
|
|
iter = results.erase (iter);
|
continue;
|
}
|
if (cam3a_result->getType() == RESULT_TYPE_UVNR_PARAM) {
|
SmartPtr<RkAiqIspUvnrParamsProxy> uvnr = cam3a_result.dynamic_cast_ptr<RkAiqIspUvnrParamsProxy>();
|
convertAiqUvnrToIsp20Params(pp_cfg, uvnr->data()->result);
|
iter = results.erase (iter);
|
continue;
|
}
|
if (cam3a_result->getType() == RESULT_TYPE_YNR_PARAM) {
|
SmartPtr<RkAiqIspYnrParamsProxy> ynr = cam3a_result.dynamic_cast_ptr<RkAiqIspYnrParamsProxy>();
|
convertAiqYnrToIsp20Params(pp_cfg, ynr->data()->result);
|
iter = results.erase (iter);
|
continue;
|
}
|
if (cam3a_result->getType() == RESULT_TYPE_ORB_PARAM) {
|
SmartPtr<RkAiqIspOrbParamsProxy> orb = cam3a_result.dynamic_cast_ptr<RkAiqIspOrbParamsProxy>();
|
convertAiqOrbToIsp20Params(pp_cfg, orb->data()->result);
|
iter = results.erase (iter);
|
continue;
|
}
|
++iter;
|
}
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn Isp20Params::get_tnr_cfg_params(cam3aResultList &results, struct rkispp_params_tnrcfg &tnr_cfg)
|
{
|
if (results.empty())
|
return XCAM_RETURN_ERROR_PARAM;
|
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, pp cam3a results size: %d\n", __FUNCTION__, results.size());
|
SmartPtr<cam3aResult> cam3a_result = get_3a_result(results, RESULT_TYPE_TNR_PARAM);
|
if (cam3a_result.ptr()) {
|
SmartPtr<RkAiqIspTnrParamsProxy> tnr = nullptr;
|
tnr = cam3a_result.dynamic_cast_ptr<RkAiqIspTnrParamsProxy>();
|
if (tnr.ptr())
|
convertAiqTnrToIsp20Params(tnr_cfg, tnr->data()->result);
|
}
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn Isp20Params::get_fec_cfg_params(cam3aResultList &results, struct rkispp_params_feccfg &fec_cfg)
|
{
|
if (results.empty())
|
return XCAM_RETURN_ERROR_PARAM;
|
|
LOGE_CAMHW_SUBM(ISP20PARAM_SUBM, "%s, pp cam3a results size: %d\n", __FUNCTION__, results.size());
|
SmartPtr<cam3aResult> cam3a_result = get_3a_result(results, RESULT_TYPE_FEC_PARAM);
|
if (cam3a_result.ptr()) {
|
SmartPtr<RkAiqIspFecParamsProxy> fec = nullptr;
|
fec = cam3a_result.dynamic_cast_ptr<RkAiqIspFecParamsProxy>();
|
if (fec.ptr()) {
|
convertAiqFecToIsp20Params(fec_cfg, fec->data()->result);
|
}
|
}
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
SmartPtr<cam3aResult>
|
Isp20Params::get_3a_result (cam3aResultList &results, int32_t type)
|
{
|
cam3aResultList::iterator i_res = results.begin();
|
SmartPtr<cam3aResult> res;
|
|
for ( ; i_res != results.end(); ++i_res) {
|
if (type == (*i_res)->getType ()) {
|
res = (*i_res);
|
break;
|
}
|
}
|
|
return res;
|
}
|
|
}; //namspace RkCam
|
//TODO: to solve template ld compile issue, add isp21 source file here now.
|
#include "isp21/Isp21Params.cpp"
|