CTS测试中testYuvBurst[1]项
(1)源码分析
//cts/tests/camera/src/android/hardware/camera2/cts/BurstCaptureTest.java/*** Test YUV burst capture with full-AUTO control.* Also verifies sensor settings operation if READ_SENSOR_SETTINGS is available.*/@Testpublic void testYuvBurst() throws Exception {final int YUV_BURST_SIZE = 100;testBurst(ImageFormat.YUV_420_888, YUV_BURST_SIZE, true/*checkFrameRate*/,false/*testStillBokeh*/);}/*** Test JPEG burst capture with full-AUTO control.** Also verifies sensor settings operation if READ_SENSOR_SETTINGS is available.* Compared to testYuvBurst, this test uses STILL_CAPTURE intent, and exercises path where* enableZsl is enabled.*/@Testpublic void testJpegBurst() throws Exception {final int JPEG_BURST_SIZE = 10;testBurst(ImageFormat.JPEG, JPEG_BURST_SIZE, false/*checkFrameRate*/,false/*testStillBokeh*/);}/*** Test YUV burst capture with full-AUTO control and STILL_CAPTURE bokeh mode.* Also verifies sensor settings operation if READ_SENSOR_SETTINGS is available.*/@Testpublic void testYuvBurstWithStillBokeh() throws Exception {final int YUV_BURST_SIZE = 100;testBurst(ImageFormat.YUV_420_888, YUV_BURST_SIZE, true/*checkFrameRate*/,true/*testStillBokeh*/);}//...
- 拿到previewSize (最大的preview size,不大于1080P),拿到stillSize (最大的YUV_420_888 Size);
- 拿到maxPipelineDepth (REQUEST_PIPELINE_MAX_DEPTH),拿到maxSyncLatency (SYNC_MAX_LATENCY);
- 拿到minStillFrameDuration(stillSize的OutputMinFrameDuration);
- 分别创建previewBuilder 和 burstBuilder (都是TEMPLATE_PREVIEW),并为burstBuilder设置CONTROL_AE_TARGET_FPS_RANGE 、CONTROL_AE_LOCK (true)、CONTROL_AWB_LOCK (true);
- 开始预览(用resultListener 监听预览结果),并创建100个burst request;
- while循环遍历每个resultListener 结果,并检查其CONTROL_AE_STATE 、 CONTROL_AWB_STATE,如果aeState 是 AE_STATE_CONVERGED或者AE_STATE_FLASH_REQUIRED ,且awbState 是AWB_STATE_CONVERGED算有效帧,检测:如果前150帧以内都没有检测到有效帧,报failed;
- lock住previewBuilder的 CONTROL_AE_LOCK 、CONTROL_AWB_LOCK 、CONTROL_AF_TRIGGER_START,重新预览;
- 检测此时的sensor setting (burstExposure / burstFrameDuration / burstSensitivity 都要大于0);
- 进行burst拍照,检测burstResult(SENSOR_EXPOSURE_TIME和SENSOR_SENSITIVITY),并计算每一侦的frameDurations;
- 检测平均frameDurations是否小于等于minStillFrameDuration;
简单看一下判断条件:
final float FRAME_DURATION_MARGIN_FRACTION = 0.1f;
//获取的metadata当中的frame duration
final long minStillFrameDuration = config.getOutputMinFrameDuration(fmt, stillSize);//计算出frameDurationBound
final long frameDurationBound = (long) (minStillFrameDuration * (1 + FRAME_DURATION_MARGIN_FRACTION) );//计算出平均frameDurations
float meanFrameDuration = (float) meanFrameSum / frameDurations.size();//判断平均frameDurations是否小于frameDurationBound
assertTrue(String.format("Cam %s: Burst frame duration mean %.1f ns is larger than " +"acceptable, expecting below %d ns, allowing below %d", cameraId,meanFrameDuration, minStillFrameDuration, frameDurationBound),meanFrameDuration <= frameDurationBound);
(2)Failed Demo
03-10 09:39:52.590 19601 19630 E TestRunner: failed: testYuvBurst[1](android.hardware.camera2.cts.BurstCaptureTest)
03-10 09:39:52.590 19601 19630 E TestRunner: ----- begin exception -----
03-10 09:39:52.591 19601 19630 E TestRunner: junit.framework.AssertionFailedError: Cam 0: Burst frame duration mean 72727504.0 ns is larger than acceptable, expecting below 50000000 ns, allowing below 55000000
03-10 09:39:52.591 19601 19630 E TestRunner: at junit.framework.Assert.fail(Assert.java:50)
03-10 09:39:52.591 19601 19630 E TestRunner: at junit.framework.Assert.assertTrue(Assert.java:20)
03-10 09:39:52.591 19601 19630 E TestRunner: at android.hardware.camera2.cts.BurstCaptureTest.burstTestByCamera(BurstCaptureTest.java:417)
03-10 09:39:52.591 19601 19630 E TestRunner: at android.hardware.camera2.cts.BurstCaptureTest.testBurst(BurstCaptureTest.java:123)
03-10 09:39:52.591 19601 19630 E TestRunner: at android.hardware.camera2.cts.BurstCaptureTest.testYuvBurst(BurstCaptureTest.java:56)
可以看到实际的平均frameDurations = 72727504.0,而frameDurationBound = 50000000 * (1 + 0.1) = 55000000,从而导致frameDurations大于frameDurationBound,进而出现Failed项。
(3)修改方案
在metadata当中修改最大YUV_420_888 Size的frame duration。
CONFIG_ENTRY_VALUE(HAL_PIXEL_FORMAT_BLOB, MINT64) //13mp 4:3CONFIG_ENTRY_VALUE(4160, MINT64) // widthCONFIG_ENTRY_VALUE(3120, MINT64) // heightCONFIG_ENTRY_VALUE(MTK_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, MINT64) // output//CONFIG_ENTRY_VALUE(50000000, MINT64) // frame durationCONFIG_ENTRY_VALUE(66666666, MINT64) // frame durationCONFIG_ENTRY_VALUE(33333333, MINT64) // stall duration
将metadata当中的最大YUV Size的 frame duration由原来的50000000修改成66666666,按照上面的计算公式可得:
72727504.0 < 66666666 * (1 + 0.1) = 73333332.6,进而得到frameDurations <= frameDurationBound,所以可以Pass。
CTS测试中testYuvBurst[1]项相关推荐
- CTS测试中Camera FOV Calibration标准测试环境搭建
CTS测试分为自动测试和手动测试,CTS Verifier测试是CTS测试的手动测试部分.以下是CTS Verifier测试的Camera FOV Calibration测试环境搭建. 安装CTS V ...
- 从RE到RSE:聊聊无线产品EMC认证测试中的辐射项(上)
无线产品的EMC认证测试里,有两个与辐射发射有关的项目:Radiated Emission(RE)和Radiated Spurious Emission(RSE). RE和RSE,名字上仅一字之差,测 ...
- Android 4.0.3 CTS 测试
Android-CTS 4.0.3测试基本配置 1. Download CTS CTS的获取方式有两种: 1.1.由Google提供 1.1.1.打开浏览器输入连接: http://source.an ...
- 【转】Android CTS 测试
http://blog.csdn.net/zxm317122667/article/details/8508013 Android-CTS 4.0.3测试基本配置 1. Download CTS CT ...
- 【转】Android 4.0.3 CTS 测试
原文网址:http://blog.csdn.net/zxm317122667/article/details/8508013 Android-CTS 4.0.3测试基本配置 1. Download C ...
- cts测试终于全测了一遍了
郁闷了好几天,做CTS测试快两周了,而进展却只有那么一点点,人们常说成功属于坚持不懈的人,一次次的尝试,一次次地与预测的不一样,然而今天通过一个群里的热心人的帮助,一下子解决了好几个难题,happy ...
- CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法
在最近的Android 11项目中用R5 的CTS工具测试发现CtsWindowManagerDeviceTestCases 有很多错误,前面几项测试失败了后面都不跑了. 解决思路: 首先使用命令ru ...
- maven mockito_如何:测试Maven项目(JUnit,Mockito,Hamcrest,AssertJ)中的依赖项
maven mockito 对于当今的大多数Java项目而言,JUnit本身还远远不够. 您还需要一个模拟库,也许还有其他东西. 在此迷你操作指南中,我介绍了可以在新的Java项目中开始的测试依赖项. ...
- CTS(5)---Android8.0中CTS测试对于TEE的要求
Android8.0中CTS测试对于TEE的要求 我们知道TEE在Google Android7.0后成为一种强制性要求,那么Android8.0又是如何要求的呢? 对于Android8.0中CTS测 ...
- 士兵职业基本适应性测试软件,征兵体检中最后一项“士兵职业基本适应性检测”是什么意思?...
就是原来的计算机心理检测.2014年征兵体检的计算机心理检测更名为"士兵职业基本适应性检测",采用全新检测软件,更加灵活和便捷,也更加人性化合理化. 士兵职业基本适应性检测: 第六 ...
最新文章
- AI如何帮助我们理解意识——麻省理工最新大脑研究
- mysql select操作
- python Tkinter Text的简单用法
- 【渝粤题库】广东开放大学 市场营销 形成性考核
- twrp3.3.0刷n9002_插画师必备笔刷,送你5套iPad5.0新出300款大神笔刷
- map的详解及常见面试题
- 新格局初现、新玩家加入、新融资升温,2017年数据库领域有点热闹
- curl 安装_实用干货——如何使用curl命令下载文件
- 计算机网络技术超星尔雅章节检测,超星尔雅计算机网络技术第二章节测验答案...
- ARKit入门到精通-1.5 -基础内容-史小川-专题视频课程
- 2019年linux云计算就业前景,云计算前景与网络前景
- 【图像分割】基于模糊聚类算法FCM实现图像分割matlab代码
- 清默网络多区域 OSPF
- Chrome浏览器配置阿里云DNS方法
- 重理工疫情期间自动打卡JS实现(每日上报+体温上报)
- Go语言的GPM模型
- iOS开发系列–打造自己的“美图秀秀”(上)
- ScrollRect实时定位到最下面
- 饥荒服务器身份验证错误,饥荒服务器身份验证失败 | 手游网游页游攻略大全
- 手柄映射软件_生化危机3该用哪款游戏手柄?北通宙斯给你四维游戏体验
热门文章
- c语言小球消砖块的游戏,求大神帮忙看看这个弹弹球消砖块的游戏代码,为什么speed只能15...
- Window平台Git-Bash的主题配置
- gphp32.exe是什么文件?
- DoS攻击服务器过程
- c3p0-0.9.1.2.jar与c3p0-0.9.5.2.jar
- 自动刷票工具的实现机理简介
- 安卓Dalvik VM虚拟机
- C++互斥量、原子锁、自旋锁等比较
- Qt调节电脑屏幕亮度
- Android实践:基于聚合数据的手机号码归属地查询