跳转至

fast_ae 快速入门

1. 概述与作用

本样例介绍如何使用fast_ae做通路快启,快速收敛曝光。

本样例隶属ISP图像调优域,定位为hy006_3814_0011 sensor的Fast AE(快速自动曝光)参数抓取与复现工具,用于在前3帧内收敛AE/AWB 并打印9个关键参数,便于二次冷启动时直接写入稳定画面。主要解决冷启动初期画面过亮/过暗、AE收敛慢的问题。

专业名词与缩写:

  • AE — Auto Exposure,自动曝光
  • Fast AE / Quick Start AE — 快速收敛 AE,前 3 帧即收敛
  • AWB — Auto White Balance,自动白平衡
  • sns_exp — sensor 曝光行数(非时间)
  • again / dgain — sensor 模拟增益 / 数字增益,最小 1024 = 1x
  • isp_dgain — ISP 数字增益,最小 256 = 1x
  • exposure — ISP 曝光量
  • line_per500ms — 500ms 内曝光行数
  • rgain / ggain / bgain — 白平衡 R/G/B 增益

本文默认sensor为HY006-3814-0011,如需适配新sensor,请参考《Sensor 调试指南》和《Sensor适配说明》

2. 执行准备

在编译本样例之前,请参照Hi3516CV610环境搭建指南和快速上手指南完成编译环境的搭建。

2.1 编译

进入样例目录执行 make 即可完成编译:

cd samples/mpp/vie && make

路径仅供参考,编译成功之后,在当前目录下会生成一个sample_fast_ae的可执行文件,可以放社区支持的开发板上运行。

2.2 加载 KO

ko加载脚本位于 output/mpp/ko/load_ko,有两个脚本,load3516cv610_20s和load3516cv610_20s_debug。区别为load3516cv610_20s_debug脚本会打开 logmpp_show=1(日志记录)、proc_show=1(proc信息打印),并将 mem_process_isolation 置为 0(不启用进程间mmz隔离)。

由于当前版本不支持进程间mmz隔离,因此需要在load3516cv610_20s脚本中将 mem_process_isolation 置为 0或者使用load3516cv610_20s_debug脚本,此处以load3516cv610_20s_debug脚本为例,20s内存大小为128MB,默认分配为 32MB OS、96MB MMZ,-i表示加载全部模块,加载命令为:

./load3516cv610_20s_debug -i

可以通过-h命令查看具体用法:

./load3516cv610_20s_debug -h
Usage:  ./load3516cv610_20s_debug [-option] [-sensor0~1]
options:
    -i                       insert modules
    -r                       remove modules
    -a                       remove modules first, then insert modules
    -sensor0~1 sensor_name   config sensor type    [default: hy006_3814_0011]
    -mmz_start               config MMZ start addr [default: 0x42000000]
    -mmz_size                config MMZ mem size [unit: M, default: 96M]
    -ir_auto                 config ir_auto enable [default: 0]
    -profile                 config sys_profile [default: 0]
    -h                       help information
Available sensors:hy006_3814_0011 bt1120/bt656/bt601
for example: ./load3516cv610_20s_debug -i -sensor0 hy006_3814_0011 -sensor1 hy006_3814_0011 -mmz_start 0x42000000 -mmz_size 96M -ir_auto 1

加载后可以通过lsmod查看ko加载情况:

image-20260820104249254

如果需要调整os和mmz的大小,需要参考《内存布局调整指南》对内存大小进行调整。

如果是使用社区默认提供的镜像,这些ko已经打包到文件系统中,烧录到单板上后位于/ko目录下,在系统启动后会自动加载这些ko。

2.3 运行时依赖

在运行样例前,需要提前准备:

  • 指定运行时依赖的so库路径

MPP样例依赖的so库位于soc/libs/musl下,需要将该目录下的so库拷贝到开发板上(或将这些so库所在的目录挂载到开发板上),并指定运行时依赖库的环境变量,假设这些so库位于/mnt/libs/,执行如下命令:

```shell
export LD_LIBRARY_PATH=/mnt/libs/:$LD_LIBRARY_PATH
```

如果是使用社区默认提供的镜像,这些so库已经打包到文件系统中,烧录到单板上后位于/usr/lib目录下,该目录是系统默认搜索目录,不需要执行export LD_LIBRARY_PATH命令去指定。

  • 启动MPP服务

当前MPP媒体模块处于用户态,通过一个独立进程提供相关接口的调用服务,该进程位于samples/mpp/sdk_server下,执行如下命令即可生成sdk_server可执行文件:

```shell
cd samples/mpp/sdk_server && make
```

在单板上执行./sdk_server &即可启动MPP服务。

  1. sdk_server同样依赖soc/libs/musl下的so库,因此也需要参照上述export LD_LIBRARY_PATH指定路径;
  2. 如果是使用社区默认提供的镜像,sdk_server进程已经打包到文件系统中,烧录到单板上后位于/usr/bin目录下,并在系统启动时会自动启动sdk_server。
  • 样例运行需要的资源文件 无。

2.4 运行样例

可以执行./sample_fast_ae -h查看用法。

image-20260810103756851

3. 支持的 Case 列表

调用命令

调用语法(必须恰好 9 个数值参数,否则打印 usage 并退出):

./sample_fast_ae <sns_exp> <sns_again> <sns_dgain> <isp_dgain> <exposure> <line_per500ms> <r_gain> <g_gain> <b_gain>
步骤 操作 入参(9个参数) 快启模式 预期收敛帧数 验证要点
1 首次执行 sample_fast_ae,AE 自动收敛 0 0 0 0 0 0 0 0 0 模拟无光敏快启(初始值偏离稳态,仅靠 AE 算法收敛) 不要求(等画面收敛后回车退出) 控制台打印 9 个参数:sns_exp、again、dgain、isp_dgain、exposure、line_per500ms、awb_rgain、awb_ggain、awb_bgain
2 用步骤1打印的参数重新执行 <步骤1的9个参数> 模拟有光敏快启(参数即收敛值,初始即稳态) 3帧内收敛 通路起来即收敛 OK,码流亮度稳定,输出 stream_chn0.h265,绿色 program exit normally!
3 将步骤1参数的 exposure ±500 倍后执行 <exposure÷500 或 exposure×500,其余不变> 模拟无光敏快启(初始值偏离稳态,仅靠 AE 算法收敛) 10帧内收敛 码流亮度从过曝/过暗快速收敛至正常,输出 stream_chn0.h265,绿色 program exit normally!

输出文件

文件 说明
stream_chn0.h265 VENC CHN0 H265 25fps 2160p 码流
stream_chn1.h265 VENC CHN1 H265 25fps 480p 码流
控制台 9 个参数 sns_exp、again、dgain、isp_dgain、exposure、line_per500ms、awb_rgain、awb_ggain、awb_bgain

控制台日志

退出时打印:

sns_exp = X again = X dgain = X isp_dgain = X exposure = X line_per500ms = X awb_rgain = X, awb_ggain = X, awb_bgain = X
  • 成功:绿色 program exit normally!
  • 失败:红色 program exit abnormally!

正确性判断

  • 步骤2 验证有光敏快启:入参为准确收敛值,sensor/ISP 初始曝光即正确,叠加 quick_start 机制,3 帧内码流稳定。
  • 步骤3 验证无光敏快启:入参曝光量偏离环境 500 倍(exposure 过大或过小),quick_start 初始值错误,仅靠 AE 快速收敛算法在 10 帧内拉回稳态。

注意事项

  • exposure = sns_exp * again * dgain * isp_dgain * hmax_times,其中hmax_times为行读出时间,为固定系数,exposure增加或减少500倍,sns_exp *again * dgain * isp_dgain也需增加或减少500倍,否则可能会导致收敛帧数增加。
  • 修改参数时需要注意参数的范围限制,避免配置超过限制导致没生效,范围限制参考,其他sensor可参考cmos文件的配置:
参数 配置范围
sns_exp [2, 1490](30fps)
again [1024, 32768](10bit,1024=1x,32768=32x)
dgain [1024, 16128](10bit,1024=1x,16128≈15.75x)
isp_dgain [256, 8192](8bit移位,256=1x,8192=32x, 打印的参数与配置的参数bit精度不同,所以配置的isp_dgain需要将打印的isp_dgain除以4)
exposure [1, 0xFFFFFFFF](默认值148859,为0时兜底1024)

软件配置流程

  1. 使用sample_comm_vi_start_sensor启动mipi_rx和时钟。
  2. 调用sensor接口pfn_set_init配置sensor初始化序列和曝光,以及ae快速收敛使能。
  3. 通路初始化(不包含sensor)。
  4. 待通路收敛后,调用ss_mpi_isp_query_exposure_info,获取并打印收敛后曝光参数。
  5. 保存码流,退出通路。

样例会启动 1 路 VI+VPSS+VENC,ISP quick-start 使用给定曝光参数,收敛后等待用户回车停止样例,打印AE/AWB的9个曝光参数。首次让AE自然收敛,二次用打印值快速收敛。

快速收敛曝光说明

快速收敛曝光区分有光敏快速收敛和无光敏快速收敛。

有光敏快速收敛

  1. 执行fast_ae获取收敛后曝光参数,将这些参数作为光敏模块的输出。
  2. 再将这些曝光参数作为初始值用于fast_ae的输入实现快速收敛。

无光敏快速收敛

  1. 在曝光量偏离环境场景下,执行fast_ae实现快速收敛。