(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*/);}//...
  1. 拿到previewSize (最大的preview size,不大于1080P),拿到stillSize (最大的YUV_420_888 Size);
  2. 拿到maxPipelineDepth (REQUEST_PIPELINE_MAX_DEPTH),拿到maxSyncLatency (SYNC_MAX_LATENCY);
  3. 拿到minStillFrameDuration(stillSize的OutputMinFrameDuration);
  4. 分别创建previewBuilder 和 burstBuilder (都是TEMPLATE_PREVIEW),并为burstBuilder设置CONTROL_AE_TARGET_FPS_RANGE 、CONTROL_AE_LOCK (true)、CONTROL_AWB_LOCK (true);
  5. 开始预览(用resultListener 监听预览结果),并创建100个burst request;
  6. while循环遍历每个resultListener 结果,并检查其CONTROL_AE_STATE 、 CONTROL_AWB_STATE,如果aeState 是 AE_STATE_CONVERGED或者AE_STATE_FLASH_REQUIRED ,且awbState 是AWB_STATE_CONVERGED算有效帧,检测:如果前150帧以内都没有检测到有效帧,报failed;
  7. lock住previewBuilder的 CONTROL_AE_LOCK 、CONTROL_AWB_LOCK 、CONTROL_AF_TRIGGER_START,重新预览;
  8. 检测此时的sensor setting (burstExposure / burstFrameDuration / burstSensitivity 都要大于0);
  9. 进行burst拍照,检测burstResult(SENSOR_EXPOSURE_TIME和SENSOR_SENSITIVITY),并计算每一侦的frameDurations;
  10. 检测平均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]项相关推荐

  1. CTS测试中Camera FOV Calibration标准测试环境搭建

    CTS测试分为自动测试和手动测试,CTS Verifier测试是CTS测试的手动测试部分.以下是CTS Verifier测试的Camera FOV Calibration测试环境搭建. 安装CTS V ...

  2. 从RE到RSE:聊聊无线产品EMC认证测试中的辐射项(上)

    无线产品的EMC认证测试里,有两个与辐射发射有关的项目:Radiated Emission(RE)和Radiated Spurious Emission(RSE). RE和RSE,名字上仅一字之差,测 ...

  3. Android 4.0.3 CTS 测试

    Android-CTS 4.0.3测试基本配置 1. Download CTS CTS的获取方式有两种: 1.1.由Google提供 1.1.1.打开浏览器输入连接: http://source.an ...

  4. 【转】Android CTS 测试

    http://blog.csdn.net/zxm317122667/article/details/8508013 Android-CTS 4.0.3测试基本配置 1. Download CTS CT ...

  5. 【转】Android 4.0.3 CTS 测试

    原文网址:http://blog.csdn.net/zxm317122667/article/details/8508013 Android-CTS 4.0.3测试基本配置 1. Download C ...

  6. cts测试终于全测了一遍了

    郁闷了好几天,做CTS测试快两周了,而进展却只有那么一点点,人们常说成功属于坚持不懈的人,一次次的尝试,一次次地与预测的不一样,然而今天通过一个群里的热心人的帮助,一下子解决了好几个难题,happy ...

  7. CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法

    在最近的Android 11项目中用R5 的CTS工具测试发现CtsWindowManagerDeviceTestCases 有很多错误,前面几项测试失败了后面都不跑了. 解决思路: 首先使用命令ru ...

  8. maven mockito_如何:测试Maven项目(JUnit,Mockito,Hamcrest,AssertJ)中的依赖项

    maven mockito 对于当今的大多数Java项目而言,JUnit本身还远远不够. 您还需要一个模拟库,也许还有其他东西. 在此迷你操作指南中,我介绍了可以在新的Java项目中开始的测试依赖项. ...

  9. CTS(5)---Android8.0中CTS测试对于TEE的要求

    Android8.0中CTS测试对于TEE的要求 我们知道TEE在Google Android7.0后成为一种强制性要求,那么Android8.0又是如何要求的呢? 对于Android8.0中CTS测 ...

  10. 士兵职业基本适应性测试软件,征兵体检中最后一项“士兵职业基本适应性检测”是什么意思?...

    就是原来的计算机心理检测.2014年征兵体检的计算机心理检测更名为"士兵职业基本适应性检测",采用全新检测软件,更加灵活和便捷,也更加人性化合理化. 士兵职业基本适应性检测: 第六 ...

最新文章

  1. AI如何帮助我们理解意识——麻省理工最新大脑研究
  2. mysql select操作
  3. python Tkinter Text的简单用法
  4. 【渝粤题库】广东开放大学 市场营销 形成性考核
  5. twrp3.3.0刷n9002_插画师必备笔刷,送你5套iPad5.0新出300款大神笔刷
  6. map的详解及常见面试题
  7. 新格局初现、新玩家加入、新融资升温,2017年数据库领域有点热闹
  8. curl 安装_实用干货——如何使用curl命令下载文件
  9. 计算机网络技术超星尔雅章节检测,超星尔雅计算机网络技术第二章节测验答案...
  10. ARKit入门到精通-1.5 -基础内容-史小川-专题视频课程
  11. 2019年linux云计算就业前景,云计算前景与网络前景
  12. 【图像分割】基于模糊聚类算法FCM实现图像分割matlab代码
  13. 清默网络多区域 OSPF
  14. Chrome浏览器配置阿里云DNS方法
  15. 重理工疫情期间自动打卡JS实现(每日上报+体温上报)
  16. Go语言的GPM模型
  17. iOS开发系列–打造自己的“美图秀秀”(上)
  18. ScrollRect实时定位到最下面
  19. 饥荒服务器身份验证错误,饥荒服务器身份验证失败 | 手游网游页游攻略大全
  20. 手柄映射软件_生化危机3该用哪款游戏手柄?北通宙斯给你四维游戏体验

热门文章

  1. c语言小球消砖块的游戏,求大神帮忙看看这个弹弹球消砖块的游戏代码,为什么speed只能15...
  2. Window平台Git-Bash的主题配置
  3. gphp32.exe是什么文件?
  4. DoS攻击服务器过程
  5. c3p0-0.9.1.2.jar与c3p0-0.9.5.2.jar
  6. 自动刷票工具的实现机理简介
  7. 安卓Dalvik VM虚拟机
  8. C++互斥量、原子锁、自旋锁等比较
  9. Qt调节电脑屏幕亮度
  10. Android实践:基于聚合数据的手机号码归属地查询