目录
引入config.yml
测试命令
新增测试项
Android 12 Camera ITS所需的环境配置如下,测试包中的 CameraITS.pdf 的 2.2. Host machine setup 小节已有陈述,不再赘述。请先确认环境配置OK后再看具体测试细节
Python 3.7.9 or Python 3.7.10
OpenCV 3.4.2
Numpy 1.19.2
Matplotlib 3.3.2
Scipy 1.5.2
pySerial 3.5
Pillow 8.1.0
PyYAML 5.3.1
参考Android 12以前直接输入测试命令,有如下报错
Command '['adb', '-s', '', 'shell', 'appops', 'set', 'com.android.cts.verifier', 'MANAGE_EXTERNAL_STORAGE', 'allow']' returned non-zero exit status 1.
问题定位:测试脚本找不到
Android 12以后,ITS测试包中增加了config.yml配置文件,需在其中填写待测机器序列号,若使用打印图纸进行测试的话,还需将测试模式改为TEST_BED_MANUAL并删掉两行代码。(与之对应的另一个测试模式为TEST_BED_TABLET_SCENES,使用平板辅助测试,暂未试过)
修改demo如下,需改动的位置已由中文注释出。
TestBeds:
- Name: TEST_BED_MANUAL # 使用打印图片测试的话,将这里改为TEST_BED_MANUAL
# Use TEST_BED_MANUAL for manual testing and remove below lines:
# - serial
# label: tablet
# Test configuration for scenes[0:4, 6, _change]
Controllers:
AndroidDevice:
- serial: 0123456789ABCDEF # 在这里填入待测机器序列号(注意将<>括号去掉)
label: dut
# 使用打印图片测试的话,将以下两行删除或注释
#- serial: # 使用打印图片测试的话,将这两行删除或注释
# label: tablet
TestParams:
brightness: 96
chart_distance: 31.0
debug_mode: "False" # quotes are needed here
chart_loc_arg: ""
camera: # 若不修改需要在测试命令中添加camera=0(或1,…等)命令才能测试
scene: # 若不修改可默认跑全部scenes
- Name: TEST_BED_SENSOR_FUSION # Need 'sensor_fusion' in name for SF tests
# Test configuration for sensor_fusion/test_sensor_fusion.py
Controllers:
AndroidDevice:
- serial: 0123456789ABCDEF # 在这里填入待测机器序列号
label: dut
TestParams:
fps: 30
img_size: 640,480
test_length: 7
debug_mode: "False" # quotes are needed here
chart_distance: 25
rotator_cntl: # arduino, canakit, or as-is for manual
rotator_ch:
camera:
如果已填写序列号仍有前述报错,检查:
1.序列号是否填写正确?(默认demo中的<>括号需去掉)
2.测试机器是否已adb连接到测试电脑上?(使用命令adb devices查看连接列表)
$ cd CameraITS/
$ source build/envsetup.sh
$ python tools/run_all_tests.py camera=0 scenes=0
与Android 12之前不同,在Android 12之前可通过 python tools/run_all_tests.py 不添加任何参数一次性全跑所有camera id的所有scenes,但Android 12需添加 camera=0(1,…等camera id)才能开始测试,或者直接在yml文件中填写:
camera: 0,1
scenes= 一项依旧可加可不加,默认测试全部scenes。
在Android 12的 Camera ITS scene0 新增了一个测试项 test_solid_color_test_pattern,以下以MTK平台为例修复该项fail。
AssertionError: neither SOLID_COLOR or BLACK are in android.sensor.availableTestPatternModes.
首先检查对应sensor的metadata是否配置SOLID_COLOR或者BLACK
CONFIG_METADATA_BEGIN(MTK_SENSOR_AVAILABLE_TEST_PATTERN_MODES)
CONFIG_ENTRY_VALUE(MTK_SENSOR_TEST_PATTERN_MODE_OFF, MINT32)
CONFIG_ENTRY_VALUE(MTK_SENSOR_TEST_PATTERN_MODE_BLACK, MINT32)
CONFIG_ENTRY_VALUE(MTK_SENSOR_TEST_PATTERN_MODE_SOLID_COLOR, MINT32)
CONFIG_METADATA_END()
添加后若有更新其他报错内容,根据你所填写的模式及报错内容去修改对应驱动的内容。这里贴上我配置MTK_SENSOR_TEST_PATTERN_MODE_BLACK后对驱动的修改供参考。
注意:MTK_SENSOR_TEST_PATTERN_MODE_SOLID_COLOR传下来的mode是1,MTK_SENSOR_TEST_PATTERN_MODE_BLACK传下来的的mode是5。
diff ov8856mipiraw_Sensor.c
@@ -161,7 +161,7 @@ static struct imgsensor_struct imgsensor = {
.current_fps = 30,
.autoflicker_en = KAL_FALSE,
- .test_pattern = KAL_FALSE,
+ .test_pattern = 0,
.current_scenario_id = MSDK_SCENARIO_ID_CAMERA_PREVIEW,
.ihdr_en = 0, /*sensor need support LE, SE with HDR feature*/
@@ -1433,7 +1433,7 @@ static kal_uint32 open(void)
imgsensor.dummy_pixel = 0;
imgsensor.dummy_line = 0;
imgsensor.ihdr_en = 0;
- imgsensor.test_pattern = KAL_FALSE;
+ imgsensor.test_pattern = 0;
imgsensor.current_fps = imgsensor_info.pre.max_framerate;
spin_unlock(&imgsensor_drv_lock);
@@ -1916,0 +1916,0 @@ static kal_uint32 get_default_framerate_by_scenario(
-static kal_uint32 set_test_pattern_mode(kal_bool enable)
+static kal_uint32 set_test_pattern_mode(kal_uint32 modes, struct SET_SENSOR_PATTERN_SOLID_COLOR *pdata)
{
- LOG_INF("enable: %d\n", enable);
+ LOG_INF("set_test_pattern modes: %d\n", modes);
-
- if (enable) {
+ if (modes){
write_cmos_sensor(0x5000, 0x57);
write_cmos_sensor(0x5001, 0x02);
- write_cmos_sensor(0x5e00, 0x80);
- } else {
+ write_cmos_sensor(0x5e00, 0x80); //default color bar
+ if (modes == 5 && (pdata != NULL)) { //BLACK对应mode 5,SOLID_COLOR对应mode 1
+ write_cmos_sensor(0x5e00, 0x83); //从sensor端输出black image
+ }
+ } else { /*No pattern*/
write_cmos_sensor(0x5000, 0x77);
write_cmos_sensor(0x5001, 0x0a);
write_cmos_sensor(0x5e00, 0x00);
}
spin_lock(&imgsensor_drv_lock);
- imgsensor.test_pattern = enable;
+ imgsensor.test_pattern = modes;
spin_unlock(&imgsensor_drv_lock);
+ LOG_INF("final set_test_pattern modes: %d\n", modes);
return ERROR_NONE;
}
@@ -2009,7 +2013,7 @@ static kal_uint32 feature_control(MSDK_SENSOR_FEATURE_ENUM feature_id,
(MUINT32 *)(uintptr_t)(*(feature_data+1)));
break;
case SENSOR_FEATURE_SET_TEST_PATTERN:
- set_test_pattern_mode((BOOL)*feature_data);
+ set_test_pattern_mode((UINT32)*feature_data, (struct SET_SENSOR_PATTERN_SOLID_COLOR *)(feature_data+1));
break;
case SENSOR_FEATURE_GET_TEST_PATTERN_CHECKSUM_VALUE: /*for factory mode auto testing*/
*feature_return_para_32 = imgsensor_info.checksum_value;
diff ov8856mipiraw_Sensor.h
@@ -70,7 +70,7 @@ struct imgsensor_struct {
kal_uint16 current_fps; /*current max fps*/
kal_bool autoflicker_en; /*record autoflicker enable or disable*/
- kal_bool test_pattern; /*record test pattern mode or not*/
+ kal_uint8 test_pattern; /*record test pattern mode or not*/
enum MSDK_SCENARIO_ID_ENUM current_scenario_id; /*current scenario id*/
kal_uint8 ihdr_en; /*ihdr enable or disable*/
PS:该项不能跳过,其他GMS测试也会用到相应配置。
PSS:推荐配置成BLACK,报错简单易懂,修改简单易行,且可以通过所有GMS测试。
PSSS:后续bring up工作中发现,在Android 12中,若MTK_SENSOR_AVAILABLE_TEST_PATTERN_MODES没有填写MTK_SENSOR_TEST_PATTERN_MODE_OFF,会导致sensor一直处于test pattern状态,调试点亮时若发现黑屏花屏注意考虑这一点。