领导突然给我安排解决cts,我也很慌张。之前从来没有搞过,时间还很紧急在两个星期之内搞定。高不忘通宵。慌的一批。
最近又遇到这个问题就加在这里吧,不知不觉我在这个项目上已经成解决xts的主力啦,感觉过的好快,当时感觉自己还是小白,现在都要撑起一个项目了。唉~,又加了好几天的班,熬了几天夜
1.Camera FOV Calibration
这个是驱动同事改的,留个钩子,以后遇到有个改的方向吧。
1.刚开始跑就出现跑死机的问题
抓log看出问题对应的size,在底层进行屏蔽然后就可以跑起来了,这样就不会delay其他测试。问题也提了case找高通跟进。
2.junit.framework.AssertionFailedError: Video size xxx x xxx for profile ID x must be one of the camera device supported video size
在profile的那个xml删除掉对应的size。这个需要对比sensor支持的最大尺寸,如果配置的尺寸大于sensor的输出尺寸的话就会出问题。
3.排除一下是底层加的算法导致测试项不过。把加的node去掉
4.junit.framework.AssertionFailedError: Number of cameras changed from 2 to 0 这样的错肯定是有crash,需要抓log看是什么原因
5.SystemFeatureTest#testCameraFeaures failed
frameworks/native/data/etc/android.hardware.camera.xml
注释掉//<feature name="android.hardware.camea"/>
6.CtsMediaPerformanceClassTestCases Failed
frameworks/base/data/etc/privapp-permissions-platform.xml
<privapp-permissions package="android.mediapc.cts">
</privapp-permissions>
7.android.hardware.camera2.cts.ExtendedCameraCharacteristicsTest#testCameraPerfClassCharacteristics[1] java.lang.Exception: Primary front camera resolution should be at least 5000000 pixels, is 4013632
这是前置的一个分辨率检查报错。解决方案是
vendor/qcom/proprietary/qcv-utils/libsoc-helper/init.qti.qcv.rc
remove below line:
setprop ro.odm.build.media_performance_class ${ro.vendor.media_performance_class}"
这是高通提供的解决方案
这个文件在手机里面是有的,不需要编译,直接吧手机里面的文件拉出来修改就可以了
path:/vendor/etc/init/init.qti.qcv.rc
8.android.hardware.camera2.cts.ZoomCaptureTest#testRawZoomCapture
我通过查看对应的源码,发现这个会先检查对应的版本和这个对应的meta是不是支持的,要两个条件满足才会走到对应的逻辑里面
最后对比是发现升级测试包,增加了测试项以及升级Android版本跟底层的高通基线不匹配,所以才导致出现了fail项。
把这个注释掉之后就不支持这个meta,其他的地方也没有进行使用最后pass了
我后面遇到其他的问题的话我会持续更新的,感觉解决这个主要就是靠遇见之后的慢慢积累的一个过程。
9.android.camera.cts.HeifWriterTest#testHeif
这样的报错 只需要在亮环境下进行测试就可以。有兴趣可以研究一下这个range和sensitivity怎么算出来的
10.android.hardware.camera2.cts.StillCaptureTest#testAeCompensation
首先通过一系列的计算算出AE的补偿置,然后先获取正常情场景下的曝光时间和ISO(sensitivity),在下发对应的补偿,在获取曝光时间和ISO(sensitivity),通过这两个变量去计算增益的倍数。8=2*2*2,在sensor node中
sensor gain = Again * Dgain
sensitivity = (sensorgain/ISO100Gain)*100
exposuretime是AE算法输出的。在AE算法输出的
linearGain = sensor gain = Again * Dgain
这几个变量可以在camxcaecstatsprocessor.cpp中有两个关键函数ReadHALAECParam、PublishMeta中的PublishPropertyPoolFrameControl。因为是AE输出不对,是联系效果的同事修改的。
11.android.hardware.camera2.cts.RobustnessTest#testConfigureInvalidSensorPixelModes
这个测试项是会有两个pixel mode,一个是有效的一个是无效的,分别进行配流,无效的会配流失败,有效的会配流成功。
我这里遇到的是format = 33 就是JPEG对应的格式,在无效的pixel mode配流成功了。
原因是会去算一个size list,其中对应的有四个list放在一起,无效的时候在heic这个list里面找到了对应的size,原因是在找max 的size的时候没有给这个函数穿参数,导致找个list里面找到了对应的size,CTS我是在这个函数把参数加进去了。
SessionConfigurationUtils.cpp
因为那个修改是在fw修改的,所以gsi还是会出现问题。我在hal没有找到赋值的地方。(android.heic.availableHeicStreamConfigurations)这个meta。后来根据这个时关于heic的,我在hal把heic设置成了不支持。
camxtitan17context,cpp
12.android.hardware.camera2.cts.MultiViewTest#testTextureImageWriterReaderOperation
这一项测试的时候会有两个view显示,在测试的过程中,分别提取一张照片,然后对比两个照片的相似度,我从log分析是IPE的dispaly和video两个port输出的数据是否一致。
我本地用的是把两个target绑在preview或者video port输出就可以了,只需要修改对应pipeline的xml就可以了。
13.android.hardware.camera2.cts.CaptureRequestTest#testFocusDistanceControl
camxsensornode.cpp
VOID SensorNode::PublishPerFrameSensorMetaData( UINT64 requestId )
{
if(0 != pLensInformation->maxFocusDistance)
{
lensFocusRange.max = static_cast<FLOAT>(1.0 / (pLensInformation->maxFocusDistance));
}
if(0 != pLensInformation->minFocusDistance)
{
lensFocusRange.min = static_cast<FLOAT>(1.0 / (pLensInformation->minFocusDistance));
}
}
Android14之后需要这么修改,同时还要tuning也同步修改参数,跟驱动文件也有关系。
14.android.hardware.camera2.cts.DngCreatorTest#testSingleImageThumbnail
android.hardware.camera2.cts.DngCreatorTest#testSingleImageBasic
这两项都是tunning改的参数,这种xts问题一定要提前做好参数分离,切记!!!
14.android.hardware.camera2.cts.ReprocessCaptureTest#testBurstReprocessing
有时候会遇到eprocess测试时配置的preview size(1600x1200)超过了 reprocess usecase preview target最大允许的size(1920x1080)这种情况
GSI的一些注意事项:
有时候我们为了解决一些东西会在fw去增加判断的一些东西,然后在GSI会替换system.img,然后我们在fw增加的东西就会被还原回去,所以我们会在hal增加其他标志来作为gsi的区分
#define VALUEADD_AOSP_SUPPORT_PROPERTY "ro.vendor.qti.va_aosp.support"
UINT isRunningWithVendorEnhancedFramework() {
bool va_aosp_support = false;
va_aosp_support = property_get_bool(VALUEADD_AOSP_SUPPORT_PROPERTY, false);
if (va_aosp_support)
return 1;
return 0;
}
一般情况下我们刷了google的system.img这个prop会返回0,我们自己克制化的会返回1,所以就通过这个区分就可以了。
GTS:
遇到这种GTS的问题根据提供的链接去下载对应的patch,然后打到qssi里面应该就没有什么问题了,第一次遇到这种报camera的GTS问题涨见识了。