camera: intel: ipu6: Read still TNR threshold gain from aiqb
BUG=b:149068439, b:149068672
TEST=Full tested pass for camera functions.
Change-Id: Icdd3840b0ace34c61cfbbbafdeffe45f21e815d4
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2594541
Tested-by: Zong Li <zong.li@intel.com>
Reviewed-by: Ren-Pei Zeng <kamesan@chromium.org>
Commit-Queue: Ren-Pei Zeng <kamesan@chromium.org>
diff --git a/camera/hal/intel/ipu6/src/core/psysprocessor/GPUExecutor.cpp b/camera/hal/intel/ipu6/src/core/psysprocessor/GPUExecutor.cpp
index b65e1b3..c027a71 100644
--- a/camera/hal/intel/ipu6/src/core/psysprocessor/GPUExecutor.cpp
+++ b/camera/hal/intel/ipu6/src/core/psysprocessor/GPUExecutor.cpp
@@ -30,6 +30,7 @@
#include "3a/AiqResult.h"
#include "3a/AiqResultStorage.h"
+#include "AiqInitData.h"
#include "FormatUtils.h"
#include "PSysDAG.h"
#include "SyncManager.h"
@@ -45,6 +46,9 @@
namespace icamera {
+#define STILL_TNR_THRESHOLD_GAIN_ID 722
+#define DEFAULT_TNR_THRESHOLD_GAIN 2.0f
+
std::mutex GPUExecutor::mGPULock;
GPUExecutor::GPUExecutor(int cameraId, const ExecutorPolicy& policy, vector<string> exclusivePGs,
@@ -54,8 +58,8 @@
mIntelTNR(nullptr),
mLastSequence(UINT32_MAX),
mUseInternalTnrBuffer(useTnrOutBuffer),
- mOutBufferSize(0) {
- mStillTnrTG = PlatformData::getTnrThresholdGain(mCameraId);
+ mOutBufferSize(0),
+ mStillTnrTG(DEFAULT_TNR_THRESHOLD_GAIN) {
LOG1("@%s %s", __func__, mName.c_str());
}
@@ -103,6 +107,11 @@
int GPUExecutor::start() {
LOG1("%s executor:%s", __func__, mName.c_str());
+ if (mStreamId == STILL_STREAM_ID &&
+ getStillTnrTG(mPSysDag->getTuningMode(0), &mStillTnrTG) != OK) {
+ mStillTnrTG = DEFAULT_TNR_THRESHOLD_GAIN;
+ LOGW("%s can't get threshold gain from aiqb, use default", __func__);
+ }
mProcessThread = new ProcessThread(this);
@@ -226,6 +235,32 @@
return false;
}
+int GPUExecutor::getStillTnrTG(TuningMode mode, float* tg) {
+ CheckError(!tg, UNKNOWN_ERROR, "invalid input");
+ ia_binary_data otherData = {nullptr, 0};
+ int ret =
+ PlatformData::getCpfAndCmc(mCameraId, nullptr, nullptr, &otherData, nullptr, mode, nullptr);
+ CheckError(ret || !otherData.data || otherData.size == 0, UNKNOWN_ERROR,
+ "Failed to get tunning data");
+
+ uint32_t offset = sizeof(ia_mkn_header);
+ ia_mkn_header* header_ptr = static_cast<ia_mkn_header*>(otherData.data);
+
+ while (offset < header_ptr->size) {
+ ia_mkn_record_header* record =
+ reinterpret_cast<ia_mkn_record_header*>(static_cast<char*>(otherData.data) + offset);
+ if (STILL_TNR_THRESHOLD_GAIN_ID == record->data_name_id) {
+ void* pStillTnr7Tigger = reinterpret_cast<char*>(record) + sizeof(ia_mkn_record_header);
+ MEMCPY_S(tg, sizeof(float), static_cast<char*>(pStillTnr7Tigger), sizeof(float));
+ return OK;
+ } else {
+ offset += record->size;
+ }
+ }
+
+ return UNKNOWN_ERROR;
+}
+
int GPUExecutor::getTotalGain(int64_t seq, float* totalGain) {
CheckError(!totalGain, UNKNOWN_ERROR, "Invalid input");
AiqResult* aiqResults =
diff --git a/camera/hal/intel/ipu6/src/core/psysprocessor/GPUExecutor.h b/camera/hal/intel/ipu6/src/core/psysprocessor/GPUExecutor.h
index 4ad8781..2ba0497 100644
--- a/camera/hal/intel/ipu6/src/core/psysprocessor/GPUExecutor.h
+++ b/camera/hal/intel/ipu6/src/core/psysprocessor/GPUExecutor.h
@@ -54,7 +54,8 @@
int updateTnrISPConfig(Tnr7Param* pbuffer, uint32_t sequence);
int allocTnrOutBufs(uint32_t bufSize);
int dumpTnrParameters(uint32_t sequence);
- int getTotalGain(int64_t seq, float *totalGain);
+ int getTotalGain(int64_t seq, float* totalGain);
+ int getStillTnrTG(TuningMode mode, float* tg);
int runTnrFrame(const std::shared_ptr<CameraBuffer>& inBuf,
std::shared_ptr<CameraBuffer> outbuf);
diff --git a/camera/hal/intel/ipu6/src/platformdata/CameraParser.cpp b/camera/hal/intel/ipu6/src/platformdata/CameraParser.cpp
index 444555c..857a586 100644
--- a/camera/hal/intel/ipu6/src/platformdata/CameraParser.cpp
+++ b/camera/hal/intel/ipu6/src/platformdata/CameraParser.cpp
@@ -483,9 +483,6 @@
} else if (strcmp(name, "tnrExtraFrameNum") == 0) {
int val = atoi(atts[1]);
pCurrentCam->mTnrExtraFrameNum = val > 0 ? val : DEFAULT_TNR_EXTRA_FRAME_NUM;
- } else if (strcmp(name, "tnrThresholdGain") == 0) {
- float val = atof(atts[1]);
- pCurrentCam->mTnrThresholdGain = val > 0 ? val : DEFAULT_TNR_THRESHOLD_GAIN;
}
}
diff --git a/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp b/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp
index d534f12..13ecb1f 100644
--- a/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp
+++ b/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp
@@ -1394,9 +1394,4 @@
{
return getInstance()->mStaticCfg.mCameras[cameraId].mTnrExtraFrameNum;
}
-
-float PlatformData::getTnrThresholdGain(int cameraId)
-{
- return getInstance()->mStaticCfg.mCameras[cameraId].mTnrThresholdGain;
-}
} // namespace icamera
diff --git a/camera/hal/intel/ipu6/src/platformdata/PlatformData.h b/camera/hal/intel/ipu6/src/platformdata/PlatformData.h
index 5a2ab1c..dc1604c 100644
--- a/camera/hal/intel/ipu6/src/platformdata/PlatformData.h
+++ b/camera/hal/intel/ipu6/src/platformdata/PlatformData.h
@@ -53,7 +53,6 @@
#define FACE_ENGINE_DEFAULT_RUNNING_INTERVAL 1
#define DEFAULT_TNR_EXTRA_FRAME_NUM 2
-#define DEFAULT_TNR_THRESHOLD_GAIN 2.0f
/* Max number of the RAW buffer number is 32.
* Max number size of the pipeline depth is 6.
@@ -144,8 +143,7 @@
mSwProcessingAlignWithIsp(false),
mMaxNvmDataSize(0),
mVideoStreamNum(DEFAULT_VIDEO_STREAM_NUM),
- mTnrExtraFrameNum(DEFAULT_TNR_EXTRA_FRAME_NUM),
- mTnrThresholdGain(DEFAULT_TNR_THRESHOLD_GAIN)
+ mTnrExtraFrameNum(DEFAULT_TNR_EXTRA_FRAME_NUM)
{
}
@@ -235,7 +233,6 @@
std::vector<IGraphType::ScalerInfo> mScalerInfo;
int mVideoStreamNum;
int mTnrExtraFrameNum;
- float mTnrThresholdGain;
};
std::vector<CameraInfo> mCameras;
@@ -1198,9 +1195,5 @@
* the extra frame count for still stream
*/
static int getTnrExtraFrameCount(int cameraId);
- /**
- * the threshold gain to trigger still tnr
- */
- static float getTnrThresholdGain(int cameraId);
};
} /* namespace icamera */