算法概覽
為了給用戶提供更好的算法實現成像效果,現在的集成手機都會接入一些第三方的圖像處理算法。MTK平臺的指南HAL3也在P2這一層提供接入的plugin。按圖像處理算法需要的算法實現幀數和攝像頭數量,大體可以分為三類:
單幀算法:
常見的集成單幀算法有:美顏算法(瘦臉、磨皮、指南大眼)、算法實現廣角鏡頭畸變校正算法、集成附加表情算法、指南單攝背景虛化算法(偽雙攝算法)等等,算法實現僅需單幀圖像輸入的集成算法都屬于單幀算法。一般情況下,指南輸入一幀圖像,算法實現算法處理完輸出一幀處理后的集成圖像。
多幀算法:
常見的指南多幀算法有:MFNR(多幀降噪)、HDR(高動態范圍)等等,需要連續多幀圖像輸入的算法都屬于多幀算法。一般情況下,輸入連續多幀圖像,算法處理完輸出一幀處理后的圖像。
雙攝算法:
最常見的雙攝算法是雙攝景深算法或者叫雙攝背景虛化算法,除此之外,也有彩色+黑白用于增強夜拍效果的雙攝算法。單幀算法和多幀算法僅需要獲取一個攝像頭的圖像。而雙攝算法需要獲取主、輔兩個攝像頭的圖像,并且一般還會要求主、輔攝像頭同步。分別獲取主、輔攝像頭的兩幀同步圖像,處理后輸出一幀主攝圖像,用戶也僅能看到主攝圖像。
根據這個大體上的分類,MTK HAL算法集成系列文章共三篇:
MTK HAL算法集成之單幀算法
MTK HAL算法集成之多幀算法
MTK HAL算法集成之雙攝算法
本文是其中的第一篇。這個系列文章均基于Android9.0,MT6763平臺,HAL版本是HAL3。
一、算法集成前的準備
在開展集成工作之前,首先要對算法有一個基本的評估,并且對于集成也應有一定的要求。
1. 1 算法要求及評估
處理效果好,不能比競品差,超過競品更佳。(這條和camera調試的主觀效果一樣,主觀性較強,往往一廂情愿,具體看項目要求吧)
各個場景及壓力測試下效果穩定。
處理后照片無色差、銳度和飽和度無損失,或者損失在可接受范圍。
達到可接受的分辨率,最好可達到攝像頭的最大分辨率。
處理時間越快越好,不超過競品時間、不超過項目和產品的目標時間。
無內存泄露,占用內存少。
提供必要的集成說明文檔,包括算法類型、輸入及輸出圖像要求、輸入參數要求等等。
注意:如果有條件,處理時間、內存占用、分辨率等等可量化的指標可要求算法提供方給出具體的參考數據,以便集成完后測試驗證。
1.2 算法集成要求
編譯時可根據項目控制是否集成算法。
運行時可以用參數控制是否啟用算法。
集成算法庫正常運行、壓力測試下效果穩定、無內存泄露。
1.3 算法集成的步驟
(1).根據算法選擇feature類型,如果與MTK提供的feature不能對號入座,則需要添加自定義feature。
(2).將算法對應的feature類型添加到scenario配置表。
(3).根據算法選擇plugin類型,編寫CPP文件實現plugin,掛載算法。
(4).如果算法不能復用Android和MTK提供的metadata,則還需要為算法配置自定義的metadata以便APP控制是否啟用算法。
首先,我準備了一個libwatermark.so,它僅僅實現了一個添加水印的功能,用它來模擬第三方的單幀算法庫。如果想了解添加水印的實現代碼,可以參考我另外一篇文章:Android 實現圖片加水印或logo。接下來,我們就按照集成步驟,逐步詳細講解。
二、 為算法選擇feature
2.1 MTK提供的feature
MTK在mtk_feature_type.h和customer_feature_type.h已經提供了一些feature。
vendor/mediatek/proprietary/hardware/mtkcam3/include/mtkcam3/3rdparty/mtk/mtk_feature_type.h:
NO_FEATURE_NORMAL = 0ULL, // MTK (bit 0-31) MTK_FEATURE_MFNR = 1ULL << 0, MTK_FEATURE_HDR = 1ULL << 1, MTK_FEATURE_REMOSAIC = 1ULL << 2, MTK_FEATURE_ABF = 1ULL << 3, MTK_FEATURE_NR = 1ULL << 4, MTK_FEATURE_FB = 1ULL << 5, MTK_FEATURE_CZ = 1ULL << 6, MTK_FEATURE_DRE = 1ULL << 7, MTK_FEATURE_DEPTH = 1ULL << 8, MTK_FEATURE_BOKEH = 1ULL << 9, MTK_FEATURE_VSDOF = (MTK_FEATURE_DEPTH|MTK_FEATURE_BOKEH), MTK_FEATURE_FSC = 1ULL << 10, MTK_FEATURE_3DNR = 1ULL << 11, MTK_FEATURE_EIS = 1ULL << 12, MTK_FEATURE_AINR = 1ULL << 13, MTK_FEATURE_DUAL_YUV = 1ULL << 14, MTK_FEATURE_DUAL_HWDEPTH = 1ULL << 15, MTK_FEATURE_AIS = 1ULL << 16, MTK_FEATURE_HFG = 1ULL << 17, MTK_FEATURE_DCE = 1ULL << 18,
vendor/mediatek/proprietary/hardware/mtkcam3/include/mtkcam3/3rdparty/customer/customer_feature_type.h:
// ThirdParty (bit 32-63) TP_FEATURE_HDR = 1ULL << 32, TP_FEATURE_MFNR = 1ULL << 33, TP_FEATURE_EIS = 1ULL << 34, TP_FEATURE_FB = 1ULL << 35, TP_FEATURE_FILTER = 1ULL << 36, TP_FEATURE_DEPTH = 1ULL << 37, TP_FEATURE_BOKEH = 1ULL << 38, TP_FEATURE_VSDOF = (TP_FEATURE_DEPTH|TP_FEATURE_BOKEH), TP_FEATURE_FUSION = 1ULL << 39, TP_FEATURE_HDR_DC = 1ULL << 40, // used by DualCam TP_FEATURE_DUAL_YUV = 1ULL << 41, TP_FEATURE_DUAL_HWDEPTH = 1ULL << 42, TP_FEATURE_PUREBOKEH = 1ULL << 43, TP_FEATURE_RAW_HDR = 1ULL << 44, TP_FEATURE_RELIGHTING = 1ULL << 45,
MTK提供的這些feature可以滿足絕大多數算法的集成,在可以對號入座的情況下,我們直接使用已有feature即可。如果不能夠滿足我們的要求,可以參考下節內容添加新的feature。
2.2 添加自定義feature
本來單幀算法對應的feature可以選擇MTK提供的MTK_FEATURE_FB和TP_FEATURE_FB,但是為了講解如何添加新feature,我們選擇添加一個自定義feature:TP_FEATURE_WATERMARK。
vendor/mediatek/proprietary/hardware/mtkcam3/include/mtkcam3/3rdparty/customer/customer_feature_type.h:
diff --git a/vendor/mediatek/proprietary/hardware/mtkcam3/include/mtkcam3/3rdparty/customer/customer_feature_type.h b/vendor/mediatek/proprietary/hardware/mtkcam3/include/mtkcam3/3rdparty/customer/customer_feature_type.hold mode 100644new mode 100755index a41fd864f5..17bc35eea8--- a/vendor/mediatek/proprietary/hardware/mtkcam3/include/mtkcam3/3rdparty/customer/customer_feature_type.h+++ b/vendor/mediatek/proprietary/hardware/mtkcam3/include/mtkcam3/3rdparty/customer/customer_feature_type.h@@ -59,6 +59,7 @@ enum eFeatureIndexCustomer { TP_FEATURE_PUREBOKEH = 1ULL << 43, TP_FEATURE_RAW_HDR = 1ULL << 44, TP_FEATURE_RELIGHTING = 1ULL << 45,+ TP_FEATURE_WATERMARK = 1ULL << 46, // TODO: reserve for customer feature index (bit 32-63) };
vendor/mediatek/proprietary/hardware/mtkcam3/feature/core/featurePipe/capture/CaptureFeature_Common.cpp:
diff --git a/vendor/mediatek/proprietary/hardware/mtkcam3/feature/core/featurePipe/capture/CaptureFeature_Common.cpp b/vendor/mediatek/proprietary/hardware/mtkcam3/feature/core/featurePipe/capture/CaptureFeature_Common.cppold mode 100644new mode 100755index e32f80a609..47273b01c7--- a/vendor/mediatek/proprietary/hardware/mtkcam3/feature/core/featurePipe/capture/CaptureFeature_Common.cpp+++ b/vendor/mediatek/proprietary/hardware/mtkcam3/feature/core/featurePipe/capture/CaptureFeature_Common.cpp@@ -599,6 +599,7 @@ const char* FeatID2Name(FeatureID_T fid) case FID_FUSION_3RD_PARTY: return "fusion_3rd_party"; case FID_PUREBOKEH_3RD_PARTY: return "purebokeh_3rd_party"; case FID_RELIGHTING_3RD_PARTY: return "relighting_3rd_party";+ case FID_WATERMARK_3RD_PARTY: return "watermark_3rd_party"; default: return "unknown"; };
vendor/mediatek/proprietary/hardware/mtkcam3/feature/core/featurePipe/capture/nodes/YUVNode.cpp:
diff --git a/vendor/mediatek/proprietary/hardware/mtkcam3/feature/core/featurePipe/capture/nodes/YUVNode.cpp b/vendor/mediatek/proprietary/hardware/mtkcam3/feature/core/featurePipe/capture/nodes/YUVNode.cppindex 8bb794ba02..d4343aaccf 100755--- a/vendor/mediatek/proprietary/hardware/mtkcam3/feature/core/featurePipe/capture/nodes/YUVNode.cpp+++ b/vendor/mediatek/proprietary/hardware/mtkcam3/feature/core/featurePipe/capture/nodes/YUVNode.cpp@@ -779,7 +779,8 @@ MBOOL YUVNode::onInit() featId = FID_FB_3RD_PARTY; else if (rProperty.mFeatures & TP_FEATURE_RELIGHTING) featId = FID_RELIGHTING_3RD_PARTY;-+ else if (rProperty.mFeatures & TP_FEATURE_WATERMARK)+ featId = FID_WATERMARK_3RD_PARTY; if (featId != NULL_FEATURE) { MY_LOGD_IF(mLogLevel, "%s finds plugin:%s, priority:%d",
vendor/mediatek/proprietary/hardware/mtkcam3/include/mtkcam3/feature/featurePipe/ICaptureFeaturePipe.h:
diff --git a/vendor/mediatek/proprietary/hardware/mtkcam3/include/mtkcam3/feature/featurePipe/ICaptureFeaturePipe.h b/vendor/mediatek/proprietary/hardware/mtkcam3/include/mtkcam3/feature/featurePipe/ICaptureFeaturePipe.hold mode 100644new mode 100755index 2f1ad8a665..ab47aae456--- a/vendor/mediatek/proprietary/hardware/mtkcam3/include/mtkcam3/feature/featurePipe/ICaptureFeaturePipe.h+++ b/vendor/mediatek/proprietary/hardware/mtkcam3/include/mtkcam3/feature/featurePipe/ICaptureFeaturePipe.h@@ -172,6 +172,7 @@ enum CaptureFeatureFeatureID { FID_FUSION_3RD_PARTY, FID_PUREBOKEH_3RD_PARTY, FID_RELIGHTING_3RD_PARTY,+ FID_WATERMARK_3RD_PARTY, NUM_OF_FEATURE, NULL_FEATURE = 0xFF, };
vendor/mediatek/proprietary/hardware/mtkcam3/pipeline/hwnode/p2/P2_CaptureProcessor.cpp:
diff --git a/vendor/mediatek/proprietary/hardware/mtkcam3/pipeline/hwnode/p2/P2_CaptureProcessor.cpp b/vendor/mediatek/proprietary/hardware/mtkcam3/pipeline/hwnode/p2/P2_CaptureProcessor.cppold mode 100644new mode 100755index cc1dc549fd..00559cbc30--- a/vendor/mediatek/proprietary/hardware/mtkcam3/pipeline/hwnode/p2/P2_CaptureProcessor.cpp+++ b/vendor/mediatek/proprietary/hardware/mtkcam3/pipeline/hwnode/p2/P2_CaptureProcessor.cpp@@ -428,6 +428,9 @@ MBOOL CaptureProcessor::onEnque(const sp&pP2Frame) pCapRequest->addFeature(FID_HFG); if (feature & MTK_FEATURE_DCE) pCapRequest->addFeature(FID_DCE);+ if (feature & TP_FEATURE_WATERMARK)+ pCapRequest->addFeature(FID_WATERMARK_3RD_PARTY);+ } }
三、 將算法對應的feature添加到scenario配置表
在我們打開camera進行預覽和拍照的時候,MTK HAL3會執行vendor/mediatek/proprietary/hardware/mtkcam3/pipeline/policy/FeatureSettingPolicy.cpp的代碼,會分別調用
vendor/mediatek/proprietary/hardware/mtkcam3/3rdparty/scenario_mgr.cpp的
get_streaming_scenario函數和get_capture_scenario函數。它們會讀取一個scenario的feature配置表,遍歷所有的feature,決定哪些feature會被執行。這個配置表中有許多的scenario,一個scenario可能對應多個feature。因此添加自定義feature后,還需將自定義的feature添加到配置表中。MTK feature 對應的配置表是 gMtkScenarioFeaturesMaps,customer feature 對應的配置表是 gCustomerScenarioFeaturesMaps。
vendor/mediatek/proprietary/hardware/mtkcam3/3rdparty/customer/customer_scenario_mgr.cpp:
diff --git a/vendor/mediatek/proprietary/hardware/mtkcam3/3rdparty/customer/customer_scenario_mgr.cpp b/vendor/mediatek/proprietary/hardware/mtkcam3/3rdparty/customer/customer_scenario_mgr.cppold mode 100644new mode 100755index f8d081e433..577f85797e--- a/vendor/mediatek/proprietary/hardware/mtkcam3/3rdparty/customer/customer_scenario_mgr.cpp+++ b/vendor/mediatek/proprietary/hardware/mtkcam3/3rdparty/customer/customer_scenario_mgr.cpp@@ -93,30 +93,30 @@ using namespace NSCam::v3::pipeline::policy::scenariomgr; // #define(key feature | post-processing features | ...) // // single cam capture feature combination-#define TP_FEATURE_COMBINATION_SINGLE (NO_FEATURE_NORMAL | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB)-#define TP_FEATURE_COMBINATION_HDR (TP_FEATURE_HDR | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB)-#define TP_FEATURE_COMBINATION_AINR (MTK_FEATURE_AINR | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB)-#define TP_FEATURE_COMBINATION_MFNR (MTK_FEATURE_MFNR | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB)-#define TP_FEATURE_COMBINATION_REMOSAIC (MTK_FEATURE_REMOSAIC| MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB)+#define TP_FEATURE_COMBINATION_SINGLE (NO_FEATURE_NORMAL | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB| TP_FEATURE_WATERMARK)+#define TP_FEATURE_COMBINATION_HDR (TP_FEATURE_HDR | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB| TP_FEATURE_WATERMARK)+#define TP_FEATURE_COMBINATION_AINR (MTK_FEATURE_AINR | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB| TP_FEATURE_WATERMARK)+#define TP_FEATURE_COMBINATION_MFNR (MTK_FEATURE_MFNR | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB| TP_FEATURE_WATERMARK)+#define TP_FEATURE_COMBINATION_REMOSAIC (MTK_FEATURE_REMOSAIC| MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB| TP_FEATURE_WATERMARK) #define TP_FEATURE_COMBINATION_CSHOT (NO_FEATURE_NORMAL | MTK_FEATURE_CZ| MTK_FEATURE_HFG)-#define TP_FEATURE_COMBINATION_YUV_REPROCESS (NO_FEATURE_NORMAL | MTK_FEATURE_NR| TP_FEATURE_FB)-#define TP_FEATURE_COMBINATION_RAW_REPROCESS (NO_FEATURE_NORMAL | MTK_FEATURE_NR| TP_FEATURE_FB)+#define TP_FEATURE_COMBINATION_YUV_REPROCESS (NO_FEATURE_NORMAL | MTK_FEATURE_NR| TP_FEATURE_FB| TP_FEATURE_WATERMARK)+#define TP_FEATURE_COMBINATION_RAW_REPROCESS (NO_FEATURE_NORMAL | MTK_FEATURE_NR| TP_FEATURE_FB| TP_FEATURE_WATERMARK) #define TP_FEATURE_COMBINATION_PRO (NO_FEATURE_NORMAL | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE)-#define TP_FEATURE_COMBINATION_SUPER_NIGHT_RAW_REPROCESS (NO_FEATURE_NORMAL | MTK_FEATURE_NR| TP_FEATURE_FB)+#define TP_FEATURE_COMBINATION_SUPER_NIGHT_RAW_REPROCESS (NO_FEATURE_NORMAL | MTK_FEATURE_NR| TP_FEATURE_FB| TP_FEATURE_WATERMARK) // dual cam capture feature combination // the VSDOF means the combination of Bokeh feature and Depth feature-#define TP_FEATURE_COMBINATION_TP_VSDOF (NO_FEATURE_NORMAL | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB| TP_FEATURE_VSDOF)-#define TP_FEATURE_COMBINATION_TP_VSDOF_HDR (TP_FEATURE_HDR_DC | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB| TP_FEATURE_VSDOF)-#define TP_FEATURE_COMBINATION_TP_VSDOF_MFNR (MTK_FEATURE_MFNR | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB| TP_FEATURE_VSDOF)-#define TP_FEATURE_COMBINATION_TP_FUSION (NO_FEATURE_NORMAL | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB| TP_FEATURE_FUSION)-#define TP_FEATURE_COMBINATION_TP_PUREBOKEH (NO_FEATURE_NORMAL | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB| TP_FEATURE_PUREBOKEH)+#define TP_FEATURE_COMBINATION_TP_VSDOF (NO_FEATURE_NORMAL | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB| TP_FEATURE_VSDOF| TP_FEATURE_WATERMARK)+#define TP_FEATURE_COMBINATION_TP_VSDOF_HDR (TP_FEATURE_HDR_DC | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB| TP_FEATURE_VSDOF| TP_FEATURE_WATERMARK)+#define TP_FEATURE_COMBINATION_TP_VSDOF_MFNR (MTK_FEATURE_MFNR | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB| TP_FEATURE_VSDOF| TP_FEATURE_WATERMARK)+#define TP_FEATURE_COMBINATION_TP_FUSION (NO_FEATURE_NORMAL | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB| TP_FEATURE_FUSION| TP_FEATURE_WATERMARK)+#define TP_FEATURE_COMBINATION_TP_PUREBOKEH (NO_FEATURE_NORMAL | MTK_FEATURE_NR| MTK_FEATURE_ABF| MTK_FEATURE_CZ| MTK_FEATURE_DRE| MTK_FEATURE_HFG| MTK_FEATURE_DCE| TP_FEATURE_FB| TP_FEATURE_PUREBOKEH| TP_FEATURE_WATERMARK) // streaming feature combination (TODO: it should be refined by streaming scenario feature)-#define TP_FEATURE_COMBINATION_VIDEO_NORMAL (MTK_FEATURE_FB|TP_FEATURE_FB)-#define TP_FEATURE_COMBINATION_VIDEO_DUAL_YUV (MTK_FEATURE_FB|MTK_FEATURE_DUAL_YUV|TP_FEATURE_FB|TP_FEATURE_DUAL_YUV)-#define TP_FEATURE_COMBINATION_VIDEO_DUAL_HWDEPTH (MTK_FEATURE_FB|MTK_FEATURE_DUAL_HWDEPTH|TP_FEATURE_FB|TP_FEATURE_DUAL_HWDEPTH)-#define TP_FEATURE_COMBINATION_VIDEO_DUAL_HWVSDOF (MTK_FEATURE_FB|TP_FEATURE_FB)+#define TP_FEATURE_COMBINATION_VIDEO_NORMAL (MTK_FEATURE_FB|TP_FEATURE_FB|TP_FEATURE_WATERMARK)+#define TP_FEATURE_COMBINATION_VIDEO_DUAL_YUV (MTK_FEATURE_FB|MTK_FEATURE_DUAL_YUV|TP_FEATURE_FB|TP_FEATURE_DUAL_YUV|TP_FEATURE_WATERMARK)+#define TP_FEATURE_COMBINATION_VIDEO_DUAL_HWDEPTH (MTK_FEATURE_FB|MTK_FEATURE_DUAL_HWDEPTH|TP_FEATURE_FB|TP_FEATURE_DUAL_HWDEPTH|TP_FEATURE_WATERMARK)+#define TP_FEATURE_COMBINATION_VIDEO_DUAL_HWVSDOF (MTK_FEATURE_FB|TP_FEATURE_FB|TP_FEATURE_WATERMARK) // ====================================================================================================== // /