第32讲 ae自动曝光 part 2 -凯发k8旗舰厅

本讲是android camera专题系列的第32讲,我们介绍android camera2 api专题的ae自动曝光第2部分。
更多资源:

资源 描述
在线课程
知识星球 星球名称:深入浅出android camera
星球id: 17296815
wechat 极客笔记圈

曝光补偿(ev)

capturerequest#control_ae_exposure_compensation调节ae算法的目标亮度

  1. 是否支持:读取cameracharacteristics#control_ae_compensation_range,为空或者[0,0]表示不支持调整曝光补偿
  2. ev的计算:0ev表示不做曝光补偿,1ev表示提升1倍图像亮度, -1ev表示消减一半图像亮度,在android中需要读取cameracharacteristics#control_ae_compensation_step来计算ev:

  • ev range为[min.exposure compensation * aecompensationstep, max.exposure compensation * aecompensationstep],要求

    • full和limited设备ev range必须包含[-2, 2]
    • legacy设备没要求

  1. 只有在android.control.aemode != off时才生效

  2. 修改曝光补偿后,如果ae没有lock住,ae算法需要重新收敛,可能需要多帧才能完成曝光补偿动作

ae lock

capturerequest#control_ae_lock标识是否将ae参数锁定在参数上

  1. 是否支持:需要读取cameracharacteristics#control_ae_lock_available,支持manual_sensor和burst_capture的设备必须要支持ae lock
  2. 该动作不能锁住flash,当ae模式为on_auto_flash / on_always_flash / on_auto_flash_redeye,ae lock后flash仍然可能打闪

    • on_auto_flash / on_auto_flash_redeye:在暗环境下会打闪
    • on_always_flash:总是会打闪,因为ae参数锁定了,所以可能会过曝
  3. 该动作不能锁住曝光补偿(capturerequest#control_ae_exposure_compensation),设置曝光补偿仍然生效
  4. ae lock后,做ae precapture trigger start/cancel是没有效果的

  5. 在自动ae和手动ae间切换时,如果避免flicker现象,建议操作步骤如下

    1. 设置ae模式为on
    2. lock ae
    3. 从captureresult中等待ae lock成功
    4. 将曝光参数(曝光时间,sensitivity)从captureresult中获取出来,设置给手动ae的capturerequest
    5. 提交手动ae的capturerequest
    6. 然后随意更改手动曝光参数

ae状态转换

ae状态转换-off

ae状态转换-off

ae状态转换-on

ae状态转换-on

ae状态转换-on 两个相邻captureresults多个状态切换

ae状态转换-on 两个相邻captureresults多个状态切换

ae测光区域

capturerequest#control_ae_regions设置ae的测光区域

  1. 判断是否支持:读取cameracharacteristics#control_max_regions_ae
    • hardware level为full的设备必须支持(> 0)
  2. 设置的值为meteringrectangle(int x, int y, int width, int height, int meteringweight)
    • 当支持设置多个测光区域是,每个测光区域的权重范围是[0, 1000],权重越大的区域对测光结果影响越大,权重为0表示忽略对应的测光区域
  3. 坐标系
    • 不支持畸变矫正的设备(distortion_correction_mode)
      • left, top = [0, 0], right bottom = [activearraysize.width – 1, activearraysize.height – 1]
    • 支持畸变矫正的设备(distortion_correction_mode)
      • off
      • left, top = [0, 0], right bottom = [precorrectionactivearraysize.width – 1, precorrectionactivearraysize.height – 1]
      • not-off
      • left, top = [0, 0], right bottom = [activearraysize.width – 1, activearraysize.height – 1]
    • 当android.sensor.pixelmode 设置为camerametadata.sensor_pixel_mode_maximum_resolution时,需要参考activearraysizemaximumresolution / precorrectionactivearraysizemaximumresolution
  4. 受crop region的限制
    • raw转换为yuv后,设置的crop region才会生效,也就是crop region不是在raw域生效的
    • 只有在crop region区域内的测光区域才能生效,crop region是由zoom决定的
    • >= api level 30
      • 如果通过zoomratio来进行zoom,相同的aeregions在不同的zoomratio下面代表不同的区域(可以理解为使用zoomratio时,hal会自动计算crop region和ae regions填到captureresult里面)
      • 如果通过crop region来进行zoom,相同的aeregions在不同的crop regions下面还是代表相同的区域
      • 举例
      • aeregion的计算的坐标系为[0,0,2000,1500],放大2倍的情况下,想将左上角1/4的区域设置为测光区域
        • 如果通过zoomratio设置为2来实现,需要将aeregion设置为[0,0,1000,750]
        • 如果通过zoomratio设置为1,crop region设置为[500, 375, 1500, 1125]来实现,需要将aeregion设置为[500, 375,1000,750]

帧率控制

capturerequest#control_ae_target_fps_range设置帧率,ae算法计算曝光时间时会受到该值的影响,最大曝光时间不能超过最小帧率对应的曝光时间

  1. 只对ae自动模式有用,ae手动模式不受该值的影响
  2. 可以设置哪些range
    • 从cameracharacteristics#control_ae_available_target_fps_ranges获取支持的列表
    • 录像时选定恒定帧率,也即range的最小值等于最大值
    • 该列表不包含高帧率的range,录制高帧率时也是通过设置capturerequest#control_ae_target_fps_range来控制帧率

camera课程

python教程

java教程

web教程

数据库教程

图形图像教程

办公软件教程

linux教程

计算机教程

大数据教程

开发工具教程

android camera2 api

网站地图