跳转至

scene_auto 快速入门

1. 概述与作用

scene_auto 是 Hi3516CV610 SceneAuto(场景自动切换)模块的示例。SceneAuto 依据环境光照与工作模式(linear / IR / HDR 等)自动调整 ISP、AE、AWB、VPSS、VENC 参数,使画面在日夜切换、光源变化时仍保持合适曝光与画质。本样例从用户指定的 ini 配置目录加载场景参数,调用 ot_scene_create_param → ot_scene_init 完成初始化,再通过交互菜单设置/切换 Video mode(0..6),并演示 ot_scene_pause / ot_scene_set_scene_mode / ot_scene_deinit 全周期。

详细内容请参考《图像自适应 使用说明》文档。

2. 执行准备

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

2.1 编译

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

cd samples/mpp/scene_auto && make

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

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,加载命令为:

./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

如果需要调整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。
  • 样例运行时候需要的资源文件

    1. ini 配置目录(须作为 argv[1] 传入):samples/mpp/scene_auto/param/sensor_hy006_3814_0011/,包含
    1. config_cfgaccess_hd.ini(398 字节)
    2. config_product_scene_4m15_ir.ini(186,763 字节)— IR 模式场景参数
    3. config_product_scene_4m15_linear.ini(196,828 字节)— linear 模式场景参数
    4. config_scenemode.ini(9,947 字节)— video mode 定义
    1. scene_auto的运行依赖业务进程先创建的媒体通路,所以需要先运行业务进程。默认与scene_auto搭配运行的是sample_vie,因此也需要提前将sample_vie准备好。最终将sample_vie,sample_scene,param/sensor_xxx一起放在开发板上。

2.4 运行样例

调用命令为:./sample_scene <inidir>,inidir表示ini配置的目录,例如:

./sample_scene ./param/sensor_hy006_3814_0011

3. 支持的 Case 列表

本样例非数字 case,采用 4 个选项交互菜单,选项说明如下:

选项 行为
1 init param, set scene mode, resume — 加载 ini ot_scene_create_param + ot_scene_init,提示输入 videomode index(0..6),调 ot_scene_set_scene_mode + ot_scene_pause(TD_FALSE),打印 The sceneauto is started already. 本样例 ini 仅定义 videomode 0/1,输入 2–6 报错.
2 scene pause — ot_scene_pause(TD_TRUE),打印 The sceneauto is pause. If you want to change videomode, please enter 3.
3 set scene mode and resume — 提示新 videomode index,调 ot_scene_set_scene_mode + ot_scene_pause(TD_FALSE)
4 exit the sample — ot_scene_deinit + sample_scene_notify_server_mem_share(TD_FALSE)

本样例执行的具体过程如下:

  1. 执行 ./sample_vie 0,菜单提示选择 mode 时输入 0,界面如图所示。

  2. 用telnet再打开一个命令窗口,运行scene_auto,根据提示先选择1进行初始化并加载ini参数,然后选择videomode index 0或1即可运行,按4可退出。运行过程中可以输入2暂停,输入3重新选择videomode index 0或1后继续运行。

说明

前面所选择的videomode index 0/1,代表了不同的图像参数,对应于config_cfgaccess_hd.ini中的scene_param_N。

输出文件

无文件输出,全部交互通过控制台。

控制台日志

启动后打印 init success

选 1 时打印 When We Start SceneAuto, we need to set video Pipe mode、Please input videomode index...、videomode type has already been input.、The sceneauto is started already.;内部日志含 (scene_load_scene_param-1817:1): load scene[1817];

选 4 时打印 The scene sample is end.。

正确性判断

满足以下三点视为通过:

  1. 选项 1 执行后打印 The sceneauto is started already.,且无 failed / Error: 行。
  2. 内部日志出现 load scene[N] 表示 ini 参数加载成功。
  3. 选项 4 退出时打印 The scene sample is end.,进程返回 0。

如选项 1 报 ini 加载失败,检查 argv[1] 路径是否指向正确 sensor 子目录、四份 ini 是否齐全。如出现 sample_ipc_client_init fail. 但后续无 failed,且 mem_process_isolation=0,可忽略;否则需先启动 sdk_server 再运行本 sample。videomode index 输入超出 0..6 会触发 SCENE_MAX_VIDEOMODE 校验失败。