欧美在线专区-欧美在线伊人-欧美在线一区二区三区欧美-欧美在线一区二区三区-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

主站蜘蛛池模板: 日本tvvivodes人妖| 中文字幕热久久久久久久| 12至16末成年毛片| 久久九色综合九色99伊人| 免费看的黄色大片| 狠狠干2022| 久久亚洲精品人成综合网| 里番全彩acg★无翼娜美| 亚洲视频手机在线| 黄a大片av永久免费| 午夜爽爽视频| 99热在线观看| 女人被男人躁到呻吟的| 久久精品国内一区二区三区| 午夜影皖| 明星ai换脸资源在线播放| 欧美日韩网站| 欧美午夜影院| 亚洲一级毛片免费观看| 日日日操| 韩国三级香港三级日本三级| 亚洲剧情在线观看| 激情欧美日韩一区二区| 八戒在线视频| 特黄一级大片| 国产一在线精品一区在线观看| 男女做爽爽免费视频| 美女免费视频一区二区三区| 亚洲欧美视频一区| 中国老太大bbw| 亚洲免费影院| 2021日产国产麻豆| 热99re久久免费视精品频软件| 再深点灬舒服灬太大了np视频| 午夜精品久久久久久久久| 天天操天天干天天干| 欧美天堂视频| 喝乖女的奶水h1v| 国产精品综合一区二区三区| 男生与女生差差| 2022国产精品最新在线 |