MTK Camera自定义Vendor Tag
(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相关推荐
- Mtk Camera中Hal1/Hal3的Picture size和Preview size配置
在进行camera系统开发时,总会碰到产品需要,需要一个添加一个多少多少M的照片大小,比如产品经理说我们也要添加一个1:1,添加一个18:9的照片大小.这个情况很常见了,所以这篇文章总结一下平常工作中 ...
- MTK Camera 基础知识
文章目录 数字成像系统流程综述 曝光 对焦马达 镜头(lens) MIPI数据与RAW数据的转换(未完待续) ISP的主要内容和Bayer Raw的处理 RGB.YUV和YCbCr三种颜色空间 补充 ...
- MTK平台开机初始化时 camera驱动流程|MTK camera调试常见几十种问题处理方法
转载:https://www.jianshu.com/p/75ab1d82bbd3 mtk的驱动多是以模块加载的方式(module_init():module_exit():)加载到内核中去的:正因为 ...
- MTK camera flashlight bring up
MTK camera flashlight bring up MTK camera flashlight bring up 一查看硬件原理图 front camera rear camera key ...
- android mtk camera startpreview,android8.1 mtk camera hal各种操作流程
最近一年,一直在做android上的视频编解码和录相.以及camera hal和系统框架这一块.随着做的慢慢的深入,越发觉得mtk的camera hal这一块,有其独到之处.偏偏网上相关的资料却是极少 ...
- Android 8.1/9.0 MTK Camera源码分析之录像快门声音控制流程
前面已经针对拍照快门声音控制流程进行了分析,接下来分析一下录像快门声音的控制流程. Android 8.1/9.0 MTK Camera源码分析之快门声音控制流程 这两篇文章其实都是相对于手机系统RO ...
- Android 8.1/9.0 MTK Camera源码分析之快门声音控制流程
Android 8.1/9.0 MTK Camera源码分析之快门声音控制 在Android 8.1上mtk camera有控制快门声音的接口,但是并没有了控制录像快门声音的接口.之所以会有这个现象, ...
- 【Mtk Camera Hal到驱动的流程(1)】
Mtk Camera Hal到驱动的流程(1) (1)架构介绍 (A)Camera 的框架分为 Kernel 部分和 Hal 部分 Kernel部分: image sensor driver -- 负 ...
- Mtk Camera 对预览和拍照做Flip + Mirror
(1)Sensor Drv做Flip + Mirror效果 这里列举几个示例(会影响所有输出流) path: /kernel-4.19/drivers/misc/mediatek/imgsensor/ ...
- mtk camera 移植步骤
mtk camera 移植步骤: 1, Kernel层驱动代码文件添加 /mediatek/custom/doov92_wet_tdd/kernel/imgsensor/下添加imx179_mipi_ ...
最新文章
- webDriver测试百度登录java版
- 架构师最怕程序员知道的十件事
- python getopt模块_python之getopt模块使用
- linux 4412跑程序,荣品4412的板子上跑纯linux
- java中intvalue_Java Byte类intValue()方法的示例
- 2020品牌情商指数报告
- CSharp for Jupyter Notebook
- 【ACDU推荐好文】手把手教你 DBCA 搭建 Oracle ADG
- 单链表的归并算法思路总结
- Atitit.软件开发的几大规则,法则,与原则p821.doc
- HTTP协议详解(经典)
- sql获取服务器系统时间,SQL Server取系统当前时间
- 微信小程序--简约加载动画合集
- uni-app 中英文切换
- 恐怕我今天不能在计算机上工作英语,英语翻译1、恐怕我现在不能走,因为我还没做完作业.( )i cannot leave now because i hav...
- python输出100以内偶数_Python求取100以内的所有偶数和奇数以及和
- 普林斯顿大学计算机专业,普林斯顿大学计算机专业就业前景怎么样?
- 深度学习04 -模型管理
- Artoolkit学习之一error LNK2019错误解决
- 推动人工智能产业创新发展 2019中国人工智能创新创业大赛圆满成功