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 */