Android 12 Camera ITS 测试与修改

目录

引入config.yml

测试命令

新增测试项


        Android 12 Camera ITS所需的环境配置如下,测试包中的 CameraITS.pdf2.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

引入config.yml

        参考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状态,调试点亮时若发现黑屏花屏注意考虑这一点。

你可能感兴趣的:(Android,GMS,android)