(1)Vendor Tag Structure

Google用一个 VendorTagSection 来描述一个 VendorTag,sectionName必须以供应商名称命名,例
如"com.mediatek.control.capture"。注意必须以 com 等开头,否则 CTS 测试会 Failed。

//hardware/interfaces/camera/common/1.0/types.halstruct VendorTagSection {string sectionName; // Section name; must be namespaced within vendor's namevec<VendorTag> tags; // List of tags in this section
};/*** A single vendor-unique metadata tag.* The full name of the tag is <sectionName>.<tagName>*/
struct VendorTag {uint32_t tagId; // Tag identifier, must be >= TagBoundaryId::VENDORstring tagName; // Name of tag, not including section nameCameraMetadataType tagType;
};enum CameraMetadataType : uint32_t {// Unsigned 8-bit integer (uint8_t)BYTE = 0,// Signed 32-bit integer (int32_t)INT32 = 1,// 32-bit float (float)FLOAT = 2,// Signed 64-bit integer (int64_t)INT64 = 3,// 64-bit float (double)DOUBLE = 4,// A 64-bit fraction (camera_metadata_rational_t)RATIONAL = 5
};


(2)How to add vendor tag

涉及的代码路径如下:

/vendor/mediatek/proprietary/hardware/mtkcam/include/mtkcam/utils/metadata/client/mtk_metadata_tag.h
/vendor/mediatek/proprietary/hardware/mtkcam/include/mtkcam/utils/metadata/client/mtk_metadata_tag_info.inl/vendor/mediatek/proprietary/hardware/mtkcam/utils/metadata/vendortag/VendorTagTable.h

添加 request 阶段的 control vendor tag(Eg:com.mediatek.control.capture.flipmode)

(A)在 mtk_metadata_tag.h 中的 mtk_camera_metadata_section 中定义 vendor tag 所属的 section
ID,需要定义在 MTK_VENDOR_TAG_SECTION 之后,如MTK_CONTROL_CAPTURE。

//vendor/mediatek/proprietary/hardware/mtkcam/include/mtkcam/utils/metadata/client/mtk_metadata_tag.htypedef enum mtk_camera_metadata_section {//...//vendor tagMTK_VENDOR_TAG_SECTION          = 0x8000,MTK_FACE_FEATURE                = 0,MTK_NR_FEATURE                  = 1,MTK_STEREO_FEATURE              = 2,MTK_HDR_FEATURE                 = 3,MTK_MFNR_FEATURE                = 4,MTK_CSHOT_FEATURE               = 5,MTK_3A_FEATURE                  = 6,MTK_EIS_FEATURE                 = 7,MTK_STREAMING_FEATURE           = 8,MTK_VSDOF_FEATURE               = 9,MTK_MULTI_CAM_FEATURE           = 10,MTK_CONTROL_CAPTURE             = 11, //MTK_CONTROL_CAPTUREMTK_BGSERVICE_FEATURE           = 12,MTK_CONFIGURE_SETTING           = 13,MTK_FLASH_FEATURE               = 14,MTK_SMVR_FEATURE                = 15,MTK_SINGLEHW_SETTING            = 16,MTK_ABF_FEATURE                 = 17,MTK_TRACKINGAF_FEATURE          = 18,MTK_AOVSERVICE_FEATURE          = 19,MTK_MDPTZ_FEATURE               = 20,//...
} mtk_camera_metadata_section_t;

(B) 在 mtk_metadata_tag.h 中的 mtk_camera_metadata_section_start 中定义 vendor tag 所属的
section 的起始 ID,如MTK_CONTROL_CAPTURE_START。

//vendor/mediatek/proprietary/hardware/mtkcam/include/mtkcam/utils/metadata/client/mtk_metadata_tag.htypedef enum mtk_camera_metadata_section_start {//...MTK_STREAMING_FEATURE_START                 = (MTK_STREAMING_FEATURE + MTK_VENDOR_TAG_SECTION) << 16,MTK_VSDOF_FEATURE_START                     = (MTK_VSDOF_FEATURE + MTK_VENDOR_TAG_SECTION) << 16,MTK_MULTI_CAM_FEATURE_START                 = (MTK_MULTI_CAM_FEATURE + MTK_VENDOR_TAG_SECTION) << 16,MTK_CONTROL_CAPTURE_START                   = (MTK_CONTROL_CAPTURE + MTK_VENDOR_TAG_SECTION) << 16, //MTK_CONTROL_CAPTURE_STARTMTK_BGSERVICE_FEATURE_START                 = (MTK_BGSERVICE_FEATURE + MTK_VENDOR_TAG_SECTION) << 16,MTK_CONFIGURE_SETTING_START                 = (MTK_CONFIGURE_SETTING + MTK_VENDOR_TAG_SECTION) << 16,MTK_FLASH_FEATURE_START                     = (MTK_FLASH_FEATURE + MTK_VENDOR_TAG_SECTION) << 16,//...
} mtk_camera_metadata_section_start_t;

(C)在 mtk_metadata_tag.h 中的 mtk_camera_metadata_tag 中定义 vendor tag 的 ID,如MTK_CONTROL_CAPTURE_JPEG_FLIP_MODE。

如果需要再定义一个可以与 MTK_CONTROL_CAPTURE_JPEG_FLIP_MODE 归为同一个Section的Tag,则可以忽略第 1、2 步,直接在后面添加 vendor tag,如MTK_CONTROL_CAPTURE_POSTVIEW_SIZE,MTK_CONTROL_CAPTURE_ZSL_MODE等,最后在加上一个End tag(MTK_CONTROL_CAPTURE_END)。

//vendor/mediatek/proprietary/hardware/mtkcam/include/mtkcam/utils/metadata/client/mtk_metadata_tag.htypedef enum mtk_camera_metadata_tag {//...MTK_CONTROL_CAPTURE_EARLY_NOTIFICATION_SUPPORT  = MTK_CONTROL_CAPTURE_START,MTK_CONTROL_CAPTURE_EARLY_NOTIFICATION_TRIGGER,MTK_CONTROL_CAPTURE_NEXT_READY,MTK_CONTROL_CAPTURE_JPEG_FLIP_MODE,   //MTK_CONTROL_CAPTURE_JPEG_FLIP_MODEMTK_CONTROL_CAPTURE_AVAILABLE_POSTVIEW_MODES,MTK_CONTROL_CAPTURE_POSTVIEW_SIZE, //MTK_CONTROL_CAPTURE_POSTVIEW_SIZEMTK_CONTROL_CAPTURE_REMOSAIC_EN,MTK_CONTROL_CAPTURE_SEAMLESS_REMOSAIC_EN,MTK_CONTROL_CAPTURE_AVAILABLE_ZSL_MODES, MTK_CONTROL_CAPTURE_DEFAULT_ZSL_MODE,MTK_CONTROL_CAPTURE_ZSL_MODE, //MTK_CONTROL_CAPTURE_ZSL_MODE//...MTK_CONTROL_CAPTURE_END,
}mtk_camera_metadata_tag_t

(D)在 mtk_metadata_tag_info.inl 文件中定义vendor tag的类型与 tag name。如下所示,tag name 是 flipmode,value类型是MINT32。

//vendor/mediatek/proprietary/hardware/mtkcam/include/mtkcam/utils/metadata/client/mtk_metadata_tag_info.inl_IMP_TAG_INFO_( MTK_CONTROL_CAPTURE_EARLY_NOTIFICATION_SUPPORT,MINT32,     "early.notification.support")_IMP_TAG_INFO_( MTK_CONTROL_CAPTURE_EARLY_NOTIFICATION_TRIGGER,MINT32,     "early.notification.trigger")_IMP_TAG_INFO_( MTK_CONTROL_CAPTURE_NEXT_READY,MINT32,     "next.ready")_IMP_TAG_INFO_( MTK_CONTROL_CAPTURE_JPEG_FLIP_MODE,        //MTK_CONTROL_CAPTURE_JPEG_FLIP_MODEMINT32,     "flipmode")_IMP_TAG_INFO_( MTK_CONTROL_CAPTURE_POSTVIEW_SIZE,MSize,      "postviewsize")_IMP_TAG_INFO_( MTK_CONTROL_CAPTURE_AVAILABLE_ZSL_MODES,MUINT8,     "availableZslModes")_IMP_TAG_INFO_( MTK_CONTROL_CAPTURE_DEFAULT_ZSL_MODE,MUINT8,     "defaultZslMode")_IMP_TAG_INFO_( MTK_CONTROL_CAPTURE_ZSL_MODE,MUINT8,     "zslMode")//...

(E)在 VendorTagTable.h 文件中定义 section name 以及这一 SECTION 包含的 vendor tag。
如下所示,section name 是"com.mediatek.control.capture",包含了从 MTK_CONTROL_CAPTURE_START至MTK_CONTROL_CAPTURE_END间的vendor tag。

//vendor/mediatek/proprietary/hardware/mtkcam/utils/metadata/vendortag/VendorTagTable.hstatic auto& _ControlCapture_()
{static const std::map<uint32_t, VendorTag_t>sInst = {_TAG_(MTK_CONTROL_CAPTURE_EARLY_NOTIFICATION_SUPPORT,"early.notification.support",    TYPE_INT32),_TAG_(MTK_CONTROL_CAPTURE_EARLY_NOTIFICATION_TRIGGER,"early.notification.trigger",    TYPE_INT32),_TAG_(MTK_CONTROL_CAPTURE_NEXT_READY,"next.ready",    TYPE_INT32),_TAG_(MTK_CONTROL_CAPTURE_JPEG_FLIP_MODE,      //MTK_CONTROL_CAPTURE_JPEG_FLIP_MODE"flipmode",     TYPE_INT32),_TAG_(MTK_CONTROL_CAPTURE_AVAILABLE_POSTVIEW_MODES,"availablepostviewmodes",    TYPE_INT32),_TAG_(MTK_CONTROL_CAPTURE_POSTVIEW_SIZE,"postviewsize",    TYPE_INT32),_TAG_(MTK_CONTROL_CAPTURE_AVAILABLE_ZSL_MODES,"available.zsl.modes",    TYPE_BYTE),_TAG_(MTK_CONTROL_CAPTURE_DEFAULT_ZSL_MODE,"default.zsl.mode",    TYPE_BYTE),_TAG_(MTK_CONTROL_CAPTURE_ZSL_MODE,"zsl.mode",    TYPE_BYTE),//...};return sInst;
}static auto& getGlobalSections()
{static std::vector<VendorTagSection_t>sMTKSections = {_SECTION_( "com.mediatek.control.capture",MTK_CONTROL_CAPTURE_START,MTK_CONTROL_CAPTURE_END,_ControlCapture_() ),//...}return sGlobalSections;
}

然后,通过_ControlCapture_将section name 与 tag name绑定起来,一个完整的vendor tag ID 是 MTK_CONTROL_CAPTURE_JPEG_FLIP_MODE,value 类型是 MINT32,即:

name = section name + tag name = com.mediatek.control.capture + flipmode

(3)App当中如何使用Vendor Tag

(A)水印WaterMark

CaptureRequest.Key<int[]> mWaterMarkValue =  new CaptureRequest.Key<int[]>("com.mediatek.control.capture.hctHalWatermakr", int[].class);private static final int[] HAL_WATERMARK_VALUE = new int[]{0};if(Config.HalWaterMarkSupport()){if(WATERMARK_ON.equals(mWaterMark.getValue())){HAL_WATERMARK_VALUE[0] = 1;}else{HAL_WATERMARK_VALUE[0] = 0;}captureBuilder.set(mWaterMarkValue, HAL_WATERMARK_VALUE);
}

(B)Mirror效果

private static final String FLIP_KEY_MODE_REQUEST = "com.mediatek.control.capture.flipmode";
private CaptureRequest.Key<int[]> mKeyFlipMode;List<CaptureRequest.Key<?>> requestKeyList = cs.getAvailableCaptureRequestKeys();for (CaptureRequest.Key<?> requestKey : requestKeyList) {if (requestKey.getName().equals(FLIP_KEY_MODE_REQUEST)){mKeyFlipMode = (CaptureRequest.Key<int[]>) requestKey;}}if (value != null && captureBuilder != null) {int[] mode = new int[1];mode[0] = Integer.parseInt(value);captureBuilder.set(mKeyFlipMode, mode);
}

MTK Camera自定义Vendor Tag相关推荐

  1. Mtk Camera中Hal1/Hal3的Picture size和Preview size配置

    在进行camera系统开发时,总会碰到产品需要,需要一个添加一个多少多少M的照片大小,比如产品经理说我们也要添加一个1:1,添加一个18:9的照片大小.这个情况很常见了,所以这篇文章总结一下平常工作中 ...

  2. MTK Camera 基础知识

    文章目录 数字成像系统流程综述 曝光 对焦马达 镜头(lens) MIPI数据与RAW数据的转换(未完待续) ISP的主要内容和Bayer Raw的处理 RGB.YUV和YCbCr三种颜色空间 补充 ...

  3. MTK平台开机初始化时 camera驱动流程|MTK camera调试常见几十种问题处理方法

    转载:https://www.jianshu.com/p/75ab1d82bbd3 mtk的驱动多是以模块加载的方式(module_init():module_exit():)加载到内核中去的:正因为 ...

  4. MTK camera flashlight bring up

    MTK camera flashlight bring up MTK camera flashlight bring up 一查看硬件原理图 front camera rear camera key ...

  5. android mtk camera startpreview,android8.1 mtk camera hal各种操作流程

    最近一年,一直在做android上的视频编解码和录相.以及camera hal和系统框架这一块.随着做的慢慢的深入,越发觉得mtk的camera hal这一块,有其独到之处.偏偏网上相关的资料却是极少 ...

  6. Android 8.1/9.0 MTK Camera源码分析之录像快门声音控制流程

    前面已经针对拍照快门声音控制流程进行了分析,接下来分析一下录像快门声音的控制流程. Android 8.1/9.0 MTK Camera源码分析之快门声音控制流程 这两篇文章其实都是相对于手机系统RO ...

  7. Android 8.1/9.0 MTK Camera源码分析之快门声音控制流程

    Android 8.1/9.0 MTK Camera源码分析之快门声音控制 在Android 8.1上mtk camera有控制快门声音的接口,但是并没有了控制录像快门声音的接口.之所以会有这个现象, ...

  8. 【Mtk Camera Hal到驱动的流程(1)】

    Mtk Camera Hal到驱动的流程(1) (1)架构介绍 (A)Camera 的框架分为 Kernel 部分和 Hal 部分 Kernel部分: image sensor driver -- 负 ...

  9. Mtk Camera 对预览和拍照做Flip + Mirror

    (1)Sensor Drv做Flip + Mirror效果 这里列举几个示例(会影响所有输出流) path: /kernel-4.19/drivers/misc/mediatek/imgsensor/ ...

  10. mtk camera 移植步骤

    mtk camera 移植步骤: 1, Kernel层驱动代码文件添加 /mediatek/custom/doov92_wet_tdd/kernel/imgsensor/下添加imx179_mipi_ ...

最新文章

  1. webDriver测试百度登录java版
  2. 架构师最怕程序员知道的十件事
  3. python getopt模块_python之getopt模块使用
  4. linux 4412跑程序,荣品4412的板子上跑纯linux
  5. java中intvalue_Java Byte类intValue()方法的示例
  6. 2020品牌情商指数报告
  7. CSharp for Jupyter Notebook
  8. 【ACDU推荐好文】手把手教你 DBCA 搭建 Oracle ADG
  9. 单链表的归并算法思路总结
  10. Atitit.软件开发的几大规则,法则,与原则p821.doc
  11. HTTP协议详解(经典)
  12. sql获取服务器系统时间,SQL Server取系统当前时间
  13. 微信小程序--简约加载动画合集
  14. uni-app 中英文切换
  15. 恐怕我今天不能在计算机上工作英语,英语翻译1、恐怕我现在不能走,因为我还没做完作业.( )i cannot leave now because i hav...
  16. python输出100以内偶数_Python求取100以内的所有偶数和奇数以及和
  17. 普林斯顿大学计算机专业,普林斯顿大学计算机专业就业前景怎么样?
  18. 深度学习04 -模型管理
  19. Artoolkit学习之一error LNK2019错误解决
  20. 推动人工智能产业创新发展 2019中国人工智能创新创业大赛圆满成功

热门文章

  1. 浏览器点击后退提示_当点击浏览器后退时会发生什么
  2. 诛仙账号合并服务器,《诛仙3》10/17 服务器数据互通公告
  3. 如何在微信开发工具装插件教程
  4. 网络会议openmeetings下的openmeetings-util文件分析7
  5. dh模型表matlab,建立DH模型的三种方法以及区别
  6. kali如何对网站进行ddos攻击
  7. 被野性消费的黄桃罐头,还能火多久!
  8. 如何使用4G模块通过MQTT协议传输温湿度数据到onenet
  9. Fedora9的虚拟机安装
  10. 1296. 划分数组为连续数字的集合