(1)源码解析

  • 获取midSensitivity对应的shutter/gain值;
  • 将shutter乘以系数(0.8,0.9, 1.0, 1.1, 1.2)计算出一组shutter的值;
  • 每个shutter值+获取的gain值搭配manul mode参数进行拍照,取中心10%计算RGB的值;
  • Pass的条件是R,G,B值是递增的;
import os.pathimport its.caps
import its.device
import its.image
import its.objects
import its.targetimport matplotlib
from matplotlib import pylabNAME = os.path.basename(__file__).split('.')[0]def main():"""Test that the android.sensor.exposureTime parameter is applied."""exp_times = []r_means = []g_means = []b_means = []with its.device.ItsSession() as cam:props = cam.get_camera_properties()//(1)判断测试条件its.caps.skip_unless(its.caps.compute_target_exposure(props))sync_latency = its.caps.sync_latency(props)//(2)获取测试sizedebug = its.caps.debug_mode()largest_yuv = its.objects.get_largest_yuv_format(props)if debug:fmt = largest_yuvelse:match_ar = (largest_yuv['width'], largest_yuv['height'])fmt = its.objects.get_smallest_yuv_format(props, match_ar=match_ar)//(3)获取sensor支持的midExposureTime对应的shutter和gain值e, s = its.target.get_target_exposure_combos(cam)['midExposureTime']print 'fmt = ', fmt, ',s = ', s, ',e = ', efor i, e_mult in enumerate([0.8, 0.9, 1.0, 1.1, 1.2]):print 'e_mult = ', e_mult, ',e * e_mult = ', e * e_mult//(4)根据获取的shutter值乘以系数(0.8, 0.9, 1.0, 1.1, 1.2)计算出一组shutter的值,每个shutter+获取的gain值搭配manul mode参数进行拍照req = its.objects.manual_capture_request(s, e * e_mult, 0.0, True, props)cap = its.device.do_capture_with_latency(cam, req, sync_latency, fmt)img = its.image.convert_capture_to_rgb_image(cap)its.image.write_image(img, '%s_frame%d.jpg' % (NAME, i))//(5)取中心10%计算RGB的值tile = its.image.get_image_patch(img, 0.45, 0.45, 0.1, 0.1)rgb_means = its.image.compute_image_means(tile)exp_times.append(e * e_mult)r_means.append(rgb_means[0])g_means.append(rgb_means[1])b_means.append(rgb_means[2])# Draw a plot.//(6)根据各个shutter下的RGB值进行画图,并且判断R/G/B值是否根据shutter的增加成递增的关系pylab.plot(exp_times, r_means, '-ro')pylab.plot(exp_times, g_means, '-go')pylab.plot(exp_times, b_means, '-bo')pylab.ylim([0, 1])pylab.title(NAME)pylab.xlabel('Exposure times (ns)')pylab.ylabel('RGB means')plot_name = '%s_plot_means.png' % NAMEmatplotlib.pyplot.savefig(plot_name)# Test for pass/fail: check that each shot is brighter than the previous.for means in [r_means, g_means, b_means]:for i in range(len(means)-1):assert means[i+1] > means[i], 'See %s' % plot_nameif __name__ == '__main__':main()

(2)参数影响

//config_static_metadata.sensor.xxxx_mipi_raw.hCONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_SENSITIVITY_RANGE)CONFIG_ENTRY_VALUE(100, MINT32)CONFIG_ENTRY_VALUE(1600, MINT32)CONFIG_METADATA_END()CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_EXPOSURE_TIME_RANGE)// 1 us - 30 secCONFIG_ENTRY_VALUE(  100000L, MINT64)CONFIG_ENTRY_VALUE(300000000L, MINT64)CONFIG_METADATA_END()CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_MAX_FRAME_DURATION)// 30 secCONFIG_ENTRY_VALUE(300000000L, MINT64)CONFIG_METADATA_END()CONFIG_METADATA_BEGIN(MTK_SENSOR_MAX_ANALOG_SENSITIVITY)CONFIG_ENTRY_VALUE(400, MINT32)CONFIG_METADATA_END()//Sensor的最小gain值需要配置为100(1倍gain)
//xxxx_mipiraw_Sensor.cstatic struct imgsensor_struct imgsensor = {.mirror = IMAGE_H_MIRROR,                //mirrorflip information.sensor_mode = IMGSENSOR_MODE_INIT, //IMGSENSOR_MODE enum value,record current sensor mode,such as: INIT, Preview, Capture, Video,High Speed Video, Slim Video.shutter = 0x3D0,                    //current shutter.gain = 0x100,                        //current gain.dummy_pixel = 0,                    //current dummypixel.dummy_line = 0,                    //current dummyline.current_fps = 0,  //full size current fps : 24fps for PIP, 30fps for Normal or ZSD.autoflicker_en = KAL_FALSE,  //auto flicker enable: KAL_FALSE for disable auto flicker, KAL_TRUE for enable auto flicker.test_pattern = KAL_FALSE,        //test pattern mode or not. KAL_FALSE for in test pattern mode, KAL_TRUE for normal output.current_scenario_id = MSDK_SCENARIO_ID_CAMERA_PREVIEW,//current scenario id.ihdr_en = 0, //sensor need support LE, SE with HDR feature.i2c_write_id = 0x00,//record current sensor's i2c write id
};

(3)测试结果和Log分析

(A)测试过程和结果展示

//python tests/scene1_1/test_param_exposure_time.py camera=0 scenes=1_1fmt =  {'width': 320, 'height': 240, 'format': 'yuv'} ,s =  100 ,e =  144403538e_mult =  0.8 ,e * e_mult =  115522830.4
Capturing 1 frame with 1 format [yuv]e_mult =  0.9 ,e * e_mult =  129963184.2
Capturing 1 frame with 1 format [yuv]e_mult =  1.0 ,e * e_mult =  144403538.0
Capturing 1 frame with 1 format [yuv]e_mult =  1.1 ,e * e_mult =  158843891.8
Capturing 1 frame with 1 format [yuv]e_mult =  1.2 ,e * e_mult =  173284245.6
Capturing 1 frame with 1 format [yuv]


会画出归一化之后的RGB的值,以及保存每一个shutter和gain组合对应的照片。

(B)Main_Log查看过程

I ItsSerializer: [555785] Set: android.sensor.exposureTime -> 115522830
I ItsSerializer: [555787] Set: android.sensor.sensitivity -> 100
I FlashMgrM: setManualExposureTime(): manualExp(115522).
I FlashMgrM: setManualSensitivity(): ISO(100)
D ae_mgr  : [updateAEInfo2ISP()] State:10 eAEstate:0 VDNum:0 Exp/Afe/Isp/ISO:115522/1024/1024/100I ItsSerializer: [556494] Set: android.sensor.exposureTime -> 129963184
I ItsSerializer: [556496] Set: android.sensor.sensitivity -> 100
I FlashMgrM: setManualExposureTime(): manualExp(129963).
I FlashMgrM: setManualSensitivity(): ISO(100)
D ae_mgr  : [updateAEInfo2ISP()] State:10 eAEstate:0 VDNum:0 Exp/Afe/Isp/ISO:129963/1024/1024/100I ItsSerializer: [557253] Set: android.sensor.exposureTime -> 144403538
I ItsSerializer: [557255] Set: android.sensor.sensitivity -> 100
I FlashMgrM: setManualExposureTime(): manualExp(144403).
I FlashMgrM: setManualSensitivity(): ISO(100)
D ae_mgr  : [updateAEInfo2ISP()] State:10 eAEstate:0 VDNum:0 Exp/Afe/Isp/ISO:144403/1024/1024/100I ItsSerializer: [558018] Set: android.sensor.exposureTime -> 158843891
I ItsSerializer: [558019] Set: android.sensor.sensitivity -> 100
I FlashMgrM: setManualExposureTime(): manualExp(158843).
I FlashMgrM: setManualSensitivity(): ISO(100)
D ae_mgr  : [updateAEInfo2ISP()] State:10 eAEstate:0 VDNum:0 Exp/Afe/Isp/ISO:158843/1024/1024/100I ItsSerializer: [558797] Set: android.sensor.exposureTime -> 173284245
I ItsSerializer: [558799] Set: android.sensor.sensitivity -> 100
I FlashMgrM: setManualExposureTime(): manualExp(173284).
I FlashMgrM: setManualSensitivity(): ISO(100)
D ae_mgr  : [updateAEInfo2ISP()] State:10 eAEstate:0 VDNum:0 Exp/Afe/Isp/ISO:173284/1024/1024/100

(C)Kernel_Log查看过程

//100 = 0x64
(0)[10414:3AEventThd]OV13853_camera_sensor[set_shutter] Enter! shutter =11552
(1)[1077:kworker/u8:16]OV13853_camera_sensor[set_gain] gain = 64 , reg_gain = 0x10(2)[10480:3AEventThd]OV13853_camera_sensor[set_shutter] Enter! shutter =12996
(2)[0:swapper/2]OV13853_camera_sensor[set_gain] gain = 64 , reg_gain = 0x10(2)[10545:3AEventThd]OV13853_camera_sensor[set_shutter] Enter! shutter =14440
(0)[0:swapper/0]OV13853_camera_sensor[set_gain] gain = 64 , reg_gain = 0x10(2)[10610:3AEventThd]OV13853_camera_sensor[set_shutter] Enter! shutter =15884
(0)[0:swapper/0]OV13853_camera_sensor[set_gain] gain = 64 , reg_gain = 0x10(3)[10675:3AEventThd]OV13853_camera_sensor[set_shutter] Enter! shutter =17328
(0)[0:swapper/0]OV13853_camera_sensor[set_gain] gain = 64 , reg_gain = 0x10

Camera ITS当中的test_param_exposure_time测试相关推荐

  1. Camera ITS当中的test_lens_shading_and_color_uniformity测试

    (1)源码解析 此项是scene5当中的测试项,需要使用灰卡将摄像头遮住,用来测试摄像头成像的均匀性. Shading 测试包括两部分:lens shading(亮度均匀性)和color shadin ...

  2. Camera ITS当中的test_exposure测试

    (1)测试源码 这个测试项主要是测试不同的shutter和gain 组合,拍的照片亮度差异要小于range. import os.pathimport its.caps import its.devi ...

  3. Camera ITS当中的test_ev_compensation_basic测试

    (1)测试源码 此项是设置5组不同的EV值,然后求每组EV进行拍照(每组EV各拍摄8张照片),拍下来的之间的亮度差异,要求随着EV的增加亮度随之增加. import os.pathimport its ...

  4. Camera ITS当中的部分测试项文档

    (1)部分测试项的文档介绍 有Camera ITS当中Scenes1_1的部分文档,如下: test_3a.py test_auto_vs_manual.py test_ev_compensation ...

  5. Camera ITS当中的gain/shutter组合测试

    (1)Hal流程的代码 (A)updateAEInfo2ISP(ae_mgr.cpp) //vendor/mediatek/proprietary/hardware/mtkcam/aaa/source ...

  6. Camera ITS测试

    一.手机端设置: 将 CtsVerifier.apk 安装到设备上, 连接上linux主机. 二.主机端设置: 基础:CTS测试运行环境 然后,主机安装python2.7,及numpy/scipy/m ...

  7. 独家 | 115个A/B测试的分析结果︰平均提升为4%,大部分缺乏统计检定力

    作者 : Georgi Georgiev 翻译:Gabriel Ng 校对:张玲本文约6400字,建议阅读10分钟 本文讨论初始数据必要的修剪,然后分享元分析的详细结果,最后作出一个简短的总结. 从1 ...

  8. 计算机视觉测试数据集 dataset

    WallFlower dataset: 用于评价背景建模算法的好坏. Ground-truth foreground provided.  Foreground/Background segmenta ...

  9. 不要再用main方法测试代码性能了,用这款JDK自带工具

    前言 作为软件开发人员,我们通常会写一些测试程序用来对比不同算法.不同工具的性能问题.而最常见的做法是写一个main方法,构造模拟场景进行并发测试. 如果细心的朋友可能已经发现,每次测试结果误差很大, ...

最新文章

  1. MySQL主从复制原理图
  2. UnicodeEncodeError: 'ascii' codec can't encode character '\xe3' in position 0: ordinal not in range
  3. 【问链财经-区块链基础知识系列】 第二十二课 贸易金融区块链平台的技术机理与现实意义
  4. idea修改新的git提交地址
  5. Java基础夺命连环16问
  6. 微信小程序盲盒-可对接微信支付
  7. model数据库orm操作
  8. 内网信息安全厂商对客户的误导
  9. javaScript判断输入框是否为空
  10. JSONArray.fromObject(); 引入问题
  11. LoadRunner11代理在Win10操作系统启动不起来,或者报错:该内存不能为written
  12. 腾讯云:服务器资源池化技术发展趋势
  13. 生活随记 - 尝试与师傅沟通争取自己的权益
  14. 前端DES加密、base64编码,后端DES解密、base64解码
  15. Emacs 显示左侧行号
  16. [GBase 8s 教程]GBase 8s UNION 操作符
  17. 包头师范学院计算机系,包头师范学院数学科学学院
  18. 买的美国服务器怎么上传文件,虚拟主机空间的文件怎样上传和实现的
  19. 目前最完美的Windows Server 2008企业版激活方法
  20. Hexo系列 | Hexo安装、启动

热门文章

  1. 行为型模式:观察者模式
  2. DDD(Domain-Driven Design)领域驱动架构介绍
  3. android studio项目改成android.mk编译APP闪退java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader
  4. 当我精通vue2的源码dep和watcher的关系时
  5. creator 反复横跳瞄准线的实现
  6. Java 数组和List的使用
  7. Ingest Node Pipeline Processor
  8. 制作stlink(烧录部分)
  9. 苹果CMS V10自动采集脚本开始执行 版本:v1.0
  10. 【互动赠书】第 4 期开奖,第 5 期书单(21本)