欧美在线专区-欧美在线伊人-欧美在线一区二区三区欧美-欧美在线一区二区三区-pornodoxxx中国妞-pornodoldoo欧美另类

Camera算法集成實現指南

算法概覽

Camera算法集成實現指南

為了給用戶提供更好的算法實現成像效果,現在的集成手機都會接入一些第三方的圖像處理算法。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) // ====================================================================================================== // /	

Popular articles

主站蜘蛛池模板: 野花社区视频在线观看| 男插女下体视频| 狠色狠色狠狠色综合久久| 国产特级毛片aaaaaa毛片| 欧美精品寂寞影院请用uc| 国模视频一区二区| 日本老头变态xxxx| 中文字幕伊人| 厨房娇妻被朋友跨下挺进在线观看| acg里番全彩侵犯本子福利| 成品大香煮伊在2021一| 四虎国产精品免费久久影院| 国内精品久久久久影院蜜芽| 穿透明白衬衫喷奶水在线播放| 色牛影院| 国产a级毛片| 蜜桃成熟时1997在线看免费看| 美女奶口隐私免费视频网站| 嫩草影院在线视频| 在线观看www成人影院| 日韩欧美亚洲国产精品字幕久久久| 中文字幕国语对白在线电影| 波多野结衣欲乱上班族| 能顺利播放的男男网站free| 日韩色在线观看| 国产成a人片在线观看视频下载| jealousvue熟睡入侵中| 国产三级在线播放线| а√天堂地址在线| 鲤鱼乡太大了坐不下去| 午夜一级毛片| 特黄大片aaaaa毛片| 久久天天躁狠狠躁夜夜不卡| 伊人久久精品一区二区三区| 国产欧美日韩精品a在线观看| 有人有看片的资源吗www在线观看| 久久私人影院| 91精品国产色综合久久不卡蜜| 国产一区二区在线观看视频| 好男人好资源在线影视官网| 国产初次破初视频情侣|