class MulticameraApkHelper: MULTI_CAMERA_CONFIG_DICT = { "camera0_input_field": 1, "camera0_input_resolution": 3, "camera0_input_format": 4, "camera0_input_default": 5, "camera0_output_resolution": 0, "camera0_output_format": 2, "camera1_input_field": 7, "camera1_input_resolution": 9, "camera1_input_format": 10, "camera1_input_default": 11, "camera1_output_resolution": 6, "camera1_output_format": 8 } def __init__(self): self.d = g_common_obj.get_device() self.camera_common = CameraCommon() self.get_cfg_file_helper = GetConfigFileHelper( "", "multicamera_apk_helper.conf") self.multimedia_setting = MultiMediaSetting( self.get_cfg_file_helper.cfg_file) need_install_result = self.multimedia_setting.install_apk( "multicamera_apk") if need_install_result: adb32._adb_reboot() time.sleep(15) self.multicamera_apk_package_name, _ = self.multimedia_setting.get_package_and_activity_name( "multicamera_apk") MULTI_CAMERA_PERMISSION_LIST = ["android.permission.CAMERA"] self.camera_common.grantPermission(self.multicamera_apk_package_name, MULTI_CAMERA_PERMISSION_LIST) def launch_multicamera_apk(self): return self.multimedia_setting.launch_apk("multicamera_apk") def stop_multicamera_apk(self): return self.multimedia_setting.stop_apk("multicamera_apk") def set_multicamera_config(self, config_list): logger.debug("set_multicamera_config start. config_list=%s" % config_list) for config_str in config_list: config_item, config_value = config_str.split(":") if config_item not in self.MULTI_CAMERA_CONFIG_DICT.keys(): continue logger.debug("config_item:%s, config_value:%s" % (config_item, config_value)) self.d(className="android.widget.Spinner")[ self.MULTI_CAMERA_CONFIG_DICT[config_item]].click.wait() time.sleep(1) self.d(textContains=config_value).click.wait() time.sleep(1) logger.debug("set_multicamera_config end.")
class CameraTest(CameraTestBase): """ @summary: This test used to test camera function """ MULTI_CAMERA_CONFIG_DICT = {"input_field" : 1 ,"input_resolution" :3 ,"input_format" : 4 ,"input_default" : 5 ,"output_resolution" : 0 ,"output_format" : 2} def setUp(self): """ @summary: set up @return: None """ super(CameraTest, self).setUp() self._test_name = __name__ self.logger.debug("[Setup]: %s" % self._test_name) g_common_obj.root_on_device() self.camera_common = CameraCommon() self.host_path = self.camera_common.getTmpDir() self.rvc_camera = MultiMediaSwitchCameraHelper().camera self.camera_common.removeDeivceFile() self.camera_common.removeFile(self.host_path + "/*") self.camera_common.unlockScreen() self.rvc_camera.skipAccountLoginLyout() self.rvc_camera.backHome() self.d = g_common_obj.get_device() if self.d(text="Got it").exists: self.d(text="Got it").click.wait() self.multimedia_setting = MultiMediaSetting(self.camera_common.DEFAULT_CONFIG_FILE) need_install_result = self.multimedia_setting.install_apk("multi_camera_apk") if need_install_result: self.reboot_device() self.multi_camera_package_name, _ = self.multimedia_setting.get_package_and_activity_name("multi_camera_apk") MULTI_CAMERA_PERMISSION_LIST = ["android.permission.CAMERA"] self.camera_common.grantPermission(self.multi_camera_package_name, MULTI_CAMERA_PERMISSION_LIST) def tearDown(self): """ @summary: tearDown @return: None """ super(CameraTest, self).tearDown() self.logger.debug("[Teardown]: %s" % self._test_name) g_common_obj.stop_exp_handle() self.camera_common.removeDeivceFile() self.camera_common.clean_app_data(self.multi_camera_package_name) time.sleep(3) self.rvc_camera.backHome() def reboot_device(self): self.rvc_camera.pressPowerKey(10) time.sleep(5) self.rvc_camera.pressPowerKey(2) time.sleep(30) g_common_obj.root_on_device() self.camera_common.unlockScreen() self.rvc_camera.backHome() self.check_home_or_lock_layout() def set_multicamera_input_config_format(self, input_config_format): if "multicamera_input_config_format" in os.environ: previous_input_config_format = os.environ["multicamera_input_config_format"] if previous_input_config_format == input_config_format: self.logger.debug("skip set multicamera_input_config_format") return False g_common_obj.adb_cmd("setprop camera.input.config.format %s" % input_config_format) os.environ["multicamera_input_config_format"] = input_config_format self.logger.debug("set multicamera_input_config_format = %s" % input_config_format) return True def launch_multi_camera_apk(self): return self.multimedia_setting.launch_apk("multi_camera_apk") def stop_multi_camera_apk(self): return self.multimedia_setting.stop_apk("multi_camera_apk") def check_home_or_lock_layout(self, check_exist=True): if self.d(text="Got it").exists: self.d(text="Got it").click.wait() assert self.rvc_camera.isHomeLayoutExists() or self.rvc_camera.isLockLayoutExists(), "Home or Lock layout not exist!" def check_logcat_data(self, data_list, fps): self.logger.debug("check_logcat_data data_list=%s" % data_list) for t_fps in data_list: t_fps = float(t_fps) if fps * 0.97 > t_fps or t_fps > fps * 1.03: return False, t_fps return True, 1 def set_multi_camera_config(self, config_list): self.logger.debug("set_multi_camera_config start. config_list=%s" % config_list) for config_str in config_list: config_item, config_value = config_str.split(":") self.logger.debug("config_item:%s, config_value:%s" % (config_item, config_value)) self.d(className="android.widget.Spinner")[self.MULTI_CAMERA_CONFIG_DICT[config_item]].click.wait() time.sleep(1) self.d(textContains=config_value).click.wait() time.sleep(1) self.logger.debug("set_multi_camera_config end.") def check_multi_camera(self, input_size, output_size): config_list = ["input_field:interlaced" ,"input_resolution:%s" % input_size ,"input_format:default" ,"input_default:HW_Weaving" ,"output_resolution:%s" % output_size ,"output_format:NV21" ] self.set_multicamera_input_config_format("uyvy") self.launch_multi_camera_apk() self.set_multi_camera_config(config_list) self.d(textContains="Camera0:OFF").click.wait() time.sleep(10) self.camera_common.checkCameraCrash() assert self.d(packageName="com.example.tim.multicamera").exists, "Can't find multicamera in layout, maybe apk crashed." self.stop_multi_camera_apk() def check_multi_camera_with_fps(self, input_size, output_size): config_list = ["input_field:interlaced" ,"input_resolution:%s" % input_size ,"input_format:default" ,"input_default:HW_Weaving" ,"output_resolution:%s" % output_size ,"output_format:NV21" ] expect_fps = 50 self.set_multicamera_input_config_format("uyvy") self.launch_multi_camera_apk() self.set_multi_camera_config(config_list) g_common_obj.adb_cmd("setprop camera.hal.perf 3") time.sleep(2) self.d(textContains="Camera0:OFF").click.wait() self.camera_common.checkCameraCrash() self.multimedia_logcat_helper = MultiMediaLogcatHelper("adb logcat CameraHardwareSoc:D *:S") self.multimedia_logcat_helper.get_logcat_data_start() time.sleep(5*60) result_list = self.multimedia_logcat_helper.get_logcat_data_end("total fps is (.*),") check_logcat_data_result, error_fps = self.check_logcat_data(result_list, expect_fps) assert check_logcat_data_result, "Fps error! error_fps=%s, expect_fps=%s, result_list=%s" % (error_fps, expect_fps, result_list) self.camera_common.checkCameraCrash() self.stop_multi_camera_apk() def test_Camera_Scale_AVM737_720x480_to_1280x720(self): self.check_multi_camera("720x480", "1280x720") def test_Camera_Scale_AVM737_720x480_to_1920x1080(self): self.check_multi_camera("720x480", "1920x1080") def test_Camera_Scale_AVM737_720x480_to_640x480(self): self.check_multi_camera("720x480", "640x480") def test_Camera_Scale_AVM737_720x480_to_720x480(self): self.check_multi_camera("720x480", "720x480") def test_Camera_Scale_AVM737_720x480_to_320x240(self): self.check_multi_camera("720x480", "320x240") def test_Camera_Scale_AVM737_720x480_to_176x144(self): self.check_multi_camera("720x480", "176x144") def test_Camera_Scale_AVM737_720x480_to_1280x720_50fps(self): self.check_multi_camera_with_fps("720x480", "1280x720") def test_Camera_Scale_AVM737_720x480_to_1920x1080_50fps(self): self.check_multi_camera_with_fps("720x480", "1920x1080") def test_Camera_Scale_AVM737_720x480_to_640x480_50fps(self): self.check_multi_camera_with_fps("720x480", "640x480") def test_Camera_Scale_AVM737_720x480_to_720x480_50fps(self): self.check_multi_camera_with_fps("720x480", "720x480") def test_Camera_Scale_TP_UYVY_640x480_Progressive_fps_60(self): pass