新增1.判断前摄还是后摄fail
grep "camera 0 | camera 1"
后摄failed:
camera 0 is opened
前摄failed:
camera 0 is opened
camera 1 is opened
grep "openID"
后摄failed:
openID:0
openID:1
openID:0
openID:0
openID:0
openID:0
前摄failed:
openID:0
openID:1
openID:0
openID:0
openID:1
openID:1
新增2.Verifier测试结果:
1、Camera Video:后摄选择480P格式,2个视频的大小不一样
前摄任意格式下点击“test”,整个界面变的 很暗,看不清,且选择HIGH/480P格式,2个视频的大小不一样
alps\vendor\mediatek\proprietary\custom\mt6735\hal\D2\sendepfeature\config.ftbl.gc2385smipi_raw.h
// Preview Size
FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
KEY_AS_(MtkCameraParameters::KEY_PREVIEW_SIZE),
SCENE_AS_DEFAULT_SCENE(
ITEM_AS_DEFAULT_("640x480"),
ITEM_AS_VALUES_(
- "176x144", "320x240", "352x288",
- "640x480", "1280x720",
+ "176x144", "320x240", "352x288", "480x320",
+ "640x480", "720x480", "1280x720",
)
),
)
一、局部测试某项fail的步骤:
1. 设置手机中的相关选项
(1)将“显示-休眠”的时长设为“30分钟”或“永不”;
(2)将“安全-屏幕锁定方式”的时长设为“无”;
(3)手机需连接上可以的wifi网络,wifi用户名:CTS-WIFI,wifi密码:qazwsxedc703
2. 用USB线将电脑和手机连接起来,在手机上弹出的“允许USB调试吗?”对话框中勾选“一律允许使用这台计算机进行调试”后点“确定”
3. 执行./cts-tradefed脚本后,执行run cts –m 模块名 –t 包、类名,具体如下
(1)
Cts测试电脑1: \\192.168.108.185\mht-50\Desktop\CTS\cts-7.0-r13\android-cts\tools
./cts-tradefed
Cts测试电脑2: \\192.168.108.186\mht-51\Desktop\CTS\cts-7.0-r13\android-cts\tools
./cts-tradefed
(2)
run cts –m CtsCameraTestCases –t android.hardware.cts.CameraGLTest#testCameraToSurfaceTextureMetadata
参考文档:https://source.android.com/compatibility/cts/run
二、常见报错 - 像素错误,参照《[FAQ17749][M]CTS 配置Camera Feature Table Preview/Picture/Video Size的原则》的以下几点修改
(1)Picture Size请按照16倍数来添加: 1920x1080这种近似16倍数的size在cts 6.0 R2也可以了;
(2)Camera App录制除了MTK Low(176x144)/Mid(640x480)/High(1280x720)/Fine(1920x1088)的级别,还有320x240,352x288,720x480,这几个是为了CTS 测试可以pass,
关于1080P: 1920x1080和1920x1088, 底层有时会在设置1080P的时候,使用1920x1088来配置,所以这两组一起加进来;
(3)Preview Size中必须包含至少一个Video Size值,否则mediaserver初始化会失败;
(4)Preview Size最大请不要超过1080P;
(5)最大的Picture Size的宽和高需要大于(或者等于)所有的Preview Size的相应宽和高;
(6)最大的Picture Size和最大Preview Size请用同样的ratio;
(7)如果最大的Picture Size超过(或者等于)HD(1280x720),就必须包含HD(1280x720)的size,同时(320x240)、(640x480)、(1920x1088)也要添加进来;
以下config.ftbl.gc0310_mipi_yuv.h和config.ftbl.imx045_mipi_raw.h是经验证ok的配置,供参考。
config.ftbl.gc0310_mipi_yuv.h
#if 1
// Picture Size
FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
KEY_AS_(MtkCameraParameters::KEY_PICTURE_SIZE),
SCENE_AS_DEFAULT_SCENE(
ITEM_AS_DEFAULT_("640x480"),
ITEM_AS_VALUES_(
"320x240", "640x480", /* 4:3 */
"320x192", "640x368", /* 16:9 */
"400x240", "640x384", /* 5:3 */
)
),
)
#endif
//==========================================================================
#if 1
// Preview Size
FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
KEY_AS_(MtkCameraParameters::KEY_PREVIEW_SIZE),
SCENE_AS_DEFAULT_SCENE(
ITEM_AS_DEFAULT_("640x480"),
ITEM_AS_VALUES_(
"176x144", "320x240", "352x288",
"640x480",
)
),
)
#endif
//==========================================================================
#if 1
// Video Size
FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
KEY_AS_(MtkCameraParameters::KEY_VIDEO_SIZE),
SCENE_AS_DEFAULT_SCENE(
ITEM_AS_DEFAULT_("640x480"),
ITEM_AS_VALUES_(
"176x144", "320x240", "352x288", "480x320", "640x480",
"720x480", "1280x720", "1920x1080", "1920x1088",
)
),
)
#endif
config.ftbl.imx045_mipi_raw.h
#if 1
// Picture Size (Both width & height must be 16-aligned)
FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
KEY_AS_(MtkCameraParameters::KEY_PICTURE_SIZE),
SCENE_AS_DEFAULT_SCENE(
ITEM_AS_DEFAULT_("2560x1920"),
ITEM_AS_VALUES_(
"320x240", "640x480", "1600x1200", "2048x1536", "2560x1920", /* 4:3 200w-300w-500w*/
"1280x720", "1600x912", "1920x1088", "2048x1152", "2560x1440", /* 16:9 220w-490w*/
"1280x768", "1600x960", "2560x1536", /* 5:3 100w-400w-500w*/
)
),
)
#endif
//==========================================================================
#if 1
// Preview Size
FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
KEY_AS_(MtkCameraParameters::KEY_PREVIEW_SIZE),
SCENE_AS_DEFAULT_SCENE(
ITEM_AS_DEFAULT_("640x480"),
ITEM_AS_VALUES_(
"176x144", "320x240", "352x288",
"640x480", "1280x720",
)
),
)
#endif
//==========================================================================
#if 1
// Video Size
FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
KEY_AS_(MtkCameraParameters::KEY_VIDEO_SIZE),
SCENE_AS_DEFAULT_SCENE(
ITEM_AS_DEFAULT_("640x480"),
ITEM_AS_VALUES_(
"176x144", "320x240", "352x288", "480x320", "640x480",
"720x480", "1280x720", "1920x1080", "1920x1088",
)
),
)
#endif
三、android.hardware.cts.CameraGLTest#testCameraToSurfaceTextureMetadata测试失败的解决办法
出现这个报错的问题,请参考《[FAQ14945]CTS Camera性能导致测试fail的解决方法》,这个FAQ讲得很详细。这个问题比较难弄,需要优先联系fae处理。
做几点补充:
(1) CTS测试中摄像头需要在明亮的环境下测试,怎么确认环境的亮度值:
i.编译出工程版的软件;
ii.用raw的摄像头,打开摄像头进入预览状态,把mtklog拷贝出来,在main log中搜索aaa_state_camera_preview: lv,此值一般要在60以上。
iii.我们的测试环境亮度在70-80左右,testCameraToSurfaceTextureMetadata能测试通过的话,在专业的CTS认证机构那里也能测试通过。
(2) 怎么确认摄像头的帧率值:
i. 编译出工程版的软件;
ii. 用yuv和raw的摄像头均可,打开摄像头进入预览状态,把mtklog拷贝出来,在main log中搜索handleReturnBuffer,如下
D MtkCam/DisplayClient: [handleReturnBuffers] + (99) 34ms < Duration(99), Show frame:0 1 [ion:325 0xe65c4000/3110400 89925290000]
其中Duration(99)就是代表此帧是99ms返回,比较理想的环境下,此值一般为33。
在log中查看到的Duration值能达到30-40的话, testCameraToSurfaceTextureMetadata的测试一般都能通过测试。
(3) raw的摄像头一般联系fae过来优化摄像头的驱动提高帧率即可,像gc0310这样yuv的摄像头,除了要在驱动中提高摄像头帧率,还需在config.ftbl.gc0310_mipi_yuv.h中把15000的帧率配置注释掉才行,如下
// Preview Frame Rate Range
FTABLE_CONFIG_AS_TYPE_OF_USER(
KEY_AS_(MtkCameraParameters::KEY_PREVIEW_FPS_RANGE),
SCENE_AS_DEFAULT_SCENE(
ITEM_AS_DEFAULT_("5000,30000"),
ITEM_AS_USER_LIST_(
+ // "(15000,15000)",
"(20000,20000)",
"(24000,24000)",
"(5000,30000)",
"(30000,30000)",
)
),
)
(4) 一般都会有前后摄像头,不能确定是前摄还是后摄造成testCameraToSurfaceTextureMetadata测试失败,除了参考《[FAQ14945]CTS Camera性能导致测试fail的解决方法》中通过查看log的方法确定外,还可以通过单独给前摄上电或单独给后摄上电,单独测试前摄或单独测试后摄进行确认。
四、如果前置摄像头有闪光灯,测试前闪失败的修改
参照FAQ17593把前摄的 MTK_FLASH_INFO_AVAILABLE_FALSE 改为 MTK_FLASH_INFO_AVAILABLE_TRUE 即可,具体如下:
vendor\mediatek\proprietary\custom\mt6580\hal\imgsensor_metadata\common\config_static_metadata_common.h
case 0:
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_ORIENTATION)
CONFIG_ENTRY_VALUE(90, MINT32)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_WANTED_ORIENTATION)
CONFIG_ENTRY_VALUE(90, MINT32)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_FACING)
CONFIG_ENTRY_VALUE(MTK_LENS_FACING_BACK, MUINT8)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_HAL_VERSION)
CONFIG_ENTRY_VALUE(MTK_HAL_VERSION_1_0, MINT32)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_FLASH_INFO_AVAILABLE)
CONFIG_ENTRY_VALUE(MTK_FLASH_INFO_AVAILABLE_TRUE, MUINT8)
CONFIG_METADATA_END()
//======================================================================
break;
case 1:
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_ORIENTATION)
CONFIG_ENTRY_VALUE(270, MINT32)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_WANTED_ORIENTATION)
CONFIG_ENTRY_VALUE(270, MINT32)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_FACING)
CONFIG_ENTRY_VALUE(MTK_LENS_FACING_FRONT, MUINT8)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_HAL_VERSION)
CONFIG_ENTRY_VALUE(MTK_HAL_VERSION_1_0, MINT32)
CONFIG_METADATA_END()
//======================================================================
CONFIG_METADATA_BEGIN(MTK_FLASH_INFO_AVAILABLE)
- CONFIG_ENTRY_VALUE(MTK_FLASH_INFO_AVAILABLE_FALSE, MUINT8)
+ CONFIG_ENTRY_VALUE(MTK_FLASH_INFO_AVAILABLE_TRUE, MUINT8) // 此处
CONFIG_METADATA_END()
//======================================================================
break;
五、ctsVerifier中,Camera FOV Calibration测项失败的修改
参照《[FAQ17557]Camera FOV Calibration failed(L版本/M版本)》这个文档,测试出前后摄像头的每个picture size下的FOV值,取其平均的值,修改如下代码中的MainSensorHorFOV值和SubSensorHorFOV值
vendor\mediatek\proprietary\custom\mt6580\hal\imgsensor_src\cfg_setting_imgsensor.cpp
getSensorViewAngle()
{
static SensorViewAngle_T const inst = {
MainSensorHorFOV : 47,
MainSensorVerFOV : 49,
SubSensorHorFOV : 49,
SubSensorVerFOV : 40,
Main2SensorHorFOV : 0, //not support
Main2SensorVerFOV : 0,
};
return inst;
}
如果我们测试FOV的条件简陋,可以先粗略地测试出FOV值,合入代码后,把编译的软件包发到专业的CTS认证机构,他们测试出来的FOV值是准确的,
然后读取他们反馈回来的ctsVerifierReport.xml的FOV值,取平均值,再次修改代码中的MainSensorHorFOV值和SubSensorHorFOV值,FOV测试就能通过。
六、若设备没有光感,ctsVerifier光感测试失败的修改
(1)在ProjectConfig.mk中将CUSTOM_KERNEL_ALSPS配置为空
(2)在defconfig中不配置CONFIG_CUSTOM_KERNEL_ALSPS
cts调试案例
案例一 : 指纹相关: android.hardware.fingerprint.cts.FingerprintManagerTest#test_hasFingerprintHardware
现象 :
平台 : androidN,MTK6737
排查过程: 1. 查看cts测试log中报错信息:
avc: denied { call } for scontext=u:r:dumpstate:s0 tcontext=u:r:fingerprintd:s0 tclass=binder permissive=0
2. 修改alps/device/mediatek/common/sepolicy/bsp/dumpstate.te
allow dumpstate GoogleOtaBinder:binder call;
+ allow dumpstate fingerprintd:binder call;
3. make -j8 kernel bootimage 2>&1 | tee build.log,刷boot.img
4. 单项测试通过
run cts -m CtsHardwareTestCases -t android.hardware.fingerprint.cts.FingerprintManagerTest#test_hasFingerprintHardware
总结 : 权限的修改参考【17. 权限添加-解决运行报错(te文件)】
案例二 : camera - android.hardware.camera2.cts.Robustness#testAbandonRepeatingRequestSurface
现象 :
平台 : androidN,MTK6737
排查过程: 1. 刚开始以为是摄像头驱动问题,比如拍照延时等,联系FAE过来,对方也没头绪,不过对方联系了他们其他客户,有碰到过类似的问题,
发过来一个补丁0916613.diff,经验证该补丁有有效果,testAbandonRepeatingRequestSurface可以测试通过。
2. 我们同时也将此问题提交给MTK,MTK反馈的解决办法,和摄像头FAE提供的补丁是一致的,如下:
SurfaceTextureRenderer_old-c9dc2c3241ddc93e0e3f0afe04b20768.java
SurfaceTextureRenderer_new-65364183d1dd53081ac41eb6677dd437.java
0916613.diff
3.
处理方案:
总结 :
案例三 : camera - android.hardware.cts.CameraTest#testFaceDetection
现象 :
平台 : androidN,MTK6737
排查过程: 1.
2.
3.
处理方案:
总结 :
案例四 : CtsSimpleperfTestCases
现象 :
平台 : androidN,MTK6737
排查过程: 1. cts的log中查看有以下权限问题,添加相应的权限后测试验证并未通过,说明不是这里的原因造成
10-25 05:43:26.320 5538 5538 W CtsSimpleperfTe: type=1400 audit(0.0:60): avc: denied { getattr } for path="/proc/mrdump_rst" dev="proc" ino=4026534335 scontext=u:r:shell:s0 tcontext=u:object_r:proc_mrdump_rst:s0 tclass=file permissive=0
10-25 05:43:26.320 5538 5538 W CtsSimpleperfTe: type=1400 audit(0.0:61): avc: denied { getattr } for path="/proc/lk_env" dev="proc" ino=4026533704 scontext=u:r:shell:s0 tcontext=u:object_r:proc_lk_env:s0 tclass=file permissive=0
10-25 05:43:26.320 5538 5538 W CtsSimpleperfTe: type=1400 audit(0.0:62): avc: denied { getattr } for path="/proc/sysrq-trigger" dev="proc" ino=4026533637 scontext=u:r:shell:s0 tcontext=u:object_r:proc_sysrq:s0 tclass=file permissive=0
10-25 05:43:26.320 5538 5538 W CtsSimpleperfTe: type=1400 audit(0.0:63): avc: denied { getattr } for path="/proc/iomem" dev="proc" ino=4026533620 scontext=u:r:shell:s0 tcontext=u:object_r:proc_iomem:s0 tclass=file permissive=0
10-25 05:43:26.580 5538 5538 W CtsSimpleperfTe: type=1400 audit(0.0:64): avc: denied { read } for name="notes" dev="sysfs" ino=61 scontext=u:r:shell:s0 tcontext=u:object_r:sysfs:s0 tclass=file permissive=0
2. 同时将此项测试FAIL项,提交给MTK,MTK的回复如下
【CTS】CtsSimpleperfTestCases fail--“Event type 'cpu-cycles' is not supported by the kernel”
Mediatek , 2017-10-26 16:42
Dear Customer,
請幫忙修正為以下 (compatible部份), 再验证此项case。
arch\arch\arm\mt6735.dtsi
pmu {
compatible = "arm,cortex-a7-pmu";
interrupts = ,
,
,
;
interrupt-affinity = <&cpu0>,
<&cpu1>,
<&cpu2>,
<&cpu3>;
};
3. 直接按照以上MTK提供的代码,测试还是失败的,经查验37_n_base.git上原生的mt6735m.dtsi中关于这块的配置是这么写的,这样修改后ok
pmu {
compatible = "arm,armv8-pmuv3"; // 此处有区别
interrupts = ,
,
,
;
interrupt-affinity = <&cpu0>,
<&cpu1>,
<&cpu2>,
<&cpu3>;
};
处理方案:
总结 : mt6735m.dtsi这个文件可能是从37 6.0上移植过来的,没有以上配置,导致CtsSimpleperfTestCases会测试失败,
后续在新的git上移植原有老项目代码时,一定要基于新的git代码基础上对比修改,而不是把原有老项目的代码配置直接拷贝过来。
案例五 : CtsHardwareTestCases - 指南针相关
现象 :
平台 : androidN,MTK6737
排查过程: 1. android.hardware.cts.SensorBatchingTest#testGeomagneticRotationVector_50hz_batching
2. 我们刚开始创建xxx的mk配置中,有配置指南针和陀螺仪,而实际上xxx这个项目的板子并没有指南针和陀螺仪,
导致在进行CTS测试CtsHardwareTestCases的时候,获取不到相应sensor的数据超时了,
3. 在ProjectConfig.mk、defconfig中将指南针、陀螺仪去掉
处理方案:
总结 :
案例六 :
现象 :
平台 : androidN,MTK6737
排查过程: 1.
2.
3.
处理方案:
总结 :