camera: intel: ipu6: Add config for still tnr extra frame count

Default still tnr use 3 frames, and extra frame
count is 2. add setting in xml to config the
extra frame count

BUG=b:149068439, b:149068672
TEST=Full tested pass for camera functions

Cq-Depend: chromium:2599681, chromium:2600371
Cq-Depend: chrome-internal:3469844
Change-Id: I4c79213b05ea32b2add6e09b2c990456054f7e93
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2594539
Tested-by: Tianshu Qiu <tian.shu.qiu@intel.com>
Commit-Queue: Ren-Pei Zeng <kamesan@chromium.org>
Reviewed-by: Ren-Pei Zeng <kamesan@chromium.org>
diff --git a/camera/hal/intel/ipu6/src/core/PSysProcessor.cpp b/camera/hal/intel/ipu6/src/core/PSysProcessor.cpp
index cea1c8e..6bc03b7 100644
--- a/camera/hal/intel/ipu6/src/core/PSysProcessor.cpp
+++ b/camera/hal/intel/ipu6/src/core/PSysProcessor.cpp
@@ -37,8 +37,6 @@
  */
 #define SOF_EVENT_MARGIN (5000000)  // 5ms
 #define SOF_EVENT_MAX_MARGIN (60000000)  // 60ms
-// GPU TNR needs to run extra 2 iterators to converge
-#define TNR_CONVERGE_COUNT 2
 
 #define EXTREME_NEGATIVE_STRENGTH (-60)
 #define EXTREME_POSITIVE_STRENGTH (20)
@@ -802,7 +800,7 @@
                 fakeTaskBuffers[item.first] = nullptr;
             }
         }
-        for (int i = TNR_CONVERGE_COUNT; i > 0; i--) {
+        for (int i = PlatformData::getTnrExtraFrameCount(mCameraId); i > 0; i--) {
             CameraBufferPortMap srcBuf;
             {
             AutoMutex lock(mBufferMapLock);
diff --git a/camera/hal/intel/ipu6/src/platformdata/CameraParser.cpp b/camera/hal/intel/ipu6/src/platformdata/CameraParser.cpp
index da63d9a..857a586 100644
--- a/camera/hal/intel/ipu6/src/platformdata/CameraParser.cpp
+++ b/camera/hal/intel/ipu6/src/platformdata/CameraParser.cpp
@@ -480,6 +480,9 @@
     } else if (strcmp(name, "videoStreamNum") == 0) {
         int val = atoi(atts[1]);
         pCurrentCam->mVideoStreamNum = val > 0 ? val : DEFAULT_VIDEO_STREAM_NUM;
+    } else if (strcmp(name, "tnrExtraFrameNum") == 0) {
+        int val = atoi(atts[1]);
+        pCurrentCam->mTnrExtraFrameNum = val > 0 ? val : DEFAULT_TNR_EXTRA_FRAME_NUM;
     }
 }
 
diff --git a/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp b/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp
index 7286650..13ecb1f 100644
--- a/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp
+++ b/camera/hal/intel/ipu6/src/platformdata/PlatformData.cpp
@@ -1390,4 +1390,8 @@
     return getInstance()->mStaticCfg.mCommonConfig.isTnrParamForceUpdate;
 }
 
+int PlatformData::getTnrExtraFrameCount(int cameraId)
+{
+    return getInstance()->mStaticCfg.mCameras[cameraId].mTnrExtraFrameNum;
+}
 } // namespace icamera
diff --git a/camera/hal/intel/ipu6/src/platformdata/PlatformData.h b/camera/hal/intel/ipu6/src/platformdata/PlatformData.h
index 5b1f76a..aa6499a 100644
--- a/camera/hal/intel/ipu6/src/platformdata/PlatformData.h
+++ b/camera/hal/intel/ipu6/src/platformdata/PlatformData.h
@@ -52,6 +52,7 @@
 
 #define FACE_ENGINE_DEFAULT_RUNNING_INTERVAL 1
 
+#define DEFAULT_TNR_EXTRA_FRAME_NUM 2
 /* Max number of the RAW buffer number is 32.
  * Max number size of the pipeline depth is 6.
  * Max setting count should be larger than raw buffer number + pipeline depth.
@@ -140,7 +141,8 @@
                 mPsysBundleWithAic(false),
                 mSwProcessingAlignWithIsp(false),
                 mMaxNvmDataSize(0),
-                mVideoStreamNum(DEFAULT_VIDEO_STREAM_NUM)
+                mVideoStreamNum(DEFAULT_VIDEO_STREAM_NUM),
+                mTnrExtraFrameNum(DEFAULT_TNR_EXTRA_FRAME_NUM)
             {
             }
 
@@ -229,6 +231,7 @@
             std::unordered_map<std::string, std::string> mCameraModuleToAiqbMap;
             std::vector<IGraphType::ScalerInfo> mScalerInfo;
             int mVideoStreamNum;
+            int mTnrExtraFrameNum;
         };
 
         std::vector<CameraInfo> mCameras;
@@ -1187,5 +1190,9 @@
      * Check if update tnr7us params every frame
      */
      static bool isTnrParamForceUpdate();
+     /**
+     * the extra frame count for still stream
+     */
+     static int getTnrExtraFrameCount(int cameraId);
 };
 } /* namespace icamera */