高通 Camera HAL3:添加一个VendorTag

一.概述

MetadataTag在CamX中有两种体现,可以是预定义的AndroidTag或是自定义VendorTag

VendorTag在HAL中定义,用来支持Camx和Chi所需的额外metadata

VendorTag类型有三种:

  • hwVendorTagInfo
  • componentvendortaginfo
  • coreVendorTagInfo

根据不同具体情况添加对应的VendorTag

  • hwVendorTagInfo:在 camxtitan17xcontext.cpp 中定义,并被Core、HWL, SWL 和etc使用,多数这类VendorTag都不属于HWL,并且他们是HW独立的。
  • componentvendortaginfo:这些VendorTag依赖于CHI node,并相应地在每个CHI组件中定义。
  • coreVendorTagInfo:在core layer(camxvendortags.cpp)中定义,并由core或其他层使用。

通过VendorTag访问metadata的接口在每一层(layer)中都不一样,下面是一个如何在APP中设置metadata,并通过使用VendorTag得不同层中的metadata的Sample Code(所有的操作都在 processRequests 阶段)。

例:

添加一个VendorTag,用于控制超夜Feature:
//由于项目中超夜的Feature用的是RawHdr Feature实现的,所以相关代码使用的都是"HDR",实际功能是用于控制超夜Feature

二.定义,填充VendorTag:

2.1 Step1:

\chi-cdk\api\common\chivendortagdefines.h

添加CHIVENDORTAGDATA Static变量:

2.2 Step2:

\camx\src\api\vendortag\camxvendortagdefines.h

这一段可以添加在 camxvendortagdefines.h 的 g_HwVendorTagSections[ ]

也可以添加在 chivendortagdefines.h 的 g_VendorTagSectionDataChiOverride[ ]

添加在Camx中是HWVendorTag,最好还是加在chivendortagdefines.h

2.3 Step3:填充Metadata默认数据

\camx\src\core\chi\camxchicontext.cpp

2.4 Step4:添加枚举Index

\chi-cdk\core\chiutils\chxdefs.h

2.5 Step5:

\chi-cdk\core\chiframework\chxextensionmodule.cpp

三.使用VendorTag:

3.1 Step1:

\chi-cdk\oem\qcom\feature2\chifeature2graphselector\chifeature2graphselector.cpp

选择FeatureGraph前解析pAppSettings

3.2 Step2:ParseAppRequestSetting()

3.3 Step3:相关枚举、变量、函数说明:

(1).\chi-cdk\oem\qcom\feature2\chifeature2graphselector\chifeature2graphselector.h

TEnable:用于标识HDR状态的枚举,实际超夜只用到了 T_OFF 和 T_ON 两个状态

m_hdrEnable:用于记录上层传下来的HDR状态的变量

(2).\chi-cdk\oem\qcom\feature2\chifeature2graphselector\chifeature2graphselector.cpp

判断HDR状态后,被其他函数调用

(3).\chi-cdk\oem\qcom\feature2\chifeature2graphselector\chifeature2graphselector.cpp

在拍照时选择FeatureGraph的函数中调用 isHDREanble()

四.结束

VendorTag加完,编译,Push So之后,

可以使用命令: adb shell dumpsys media.camera > D:\temp\media.camera.txt 检查Tag是否有正常添加

猜你喜欢

转载自blog.csdn.net/geyichongchujianghu/article/details/131033898