前言¶
概述
本文为使用HNR的软件开发工程师和图像质量开发工程师而写,目的是为您在开发过程中提供使用指导和帮助。
说明: 本文以SS928V100描述为例,未有特殊说明,SS927V100与SS928V100内容一致。
产品版本
与本文档相对应的产品版本如下。
产品名称 |
产品版本 |
|---|---|
SS928 |
V100 |
SS927 |
V100 |
修订记录
修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。
文档版本 |
发布日期 |
修改说明 |
|---|---|---|
00B02 |
2025-12-25 |
第2次临时版本发布。 ot_hnr_ref_mode【定义】及【成员】涉及修改 |
00B01 |
2025-09-15 |
第1次临时版本发布。 |
概述¶
概述¶
HNR(hypersensitive noise reduction)是一种新型的去噪算法,它能使成像设备在更低照度时噪声去除更干净,细节保留更多,从而提高成像设备极低照度的感光能力。本文主要介绍HNR的接口说明和使用注意事项。
HNR参考帧普通模式性能支持3840 x 2160@30fps,无参考帧模式支持3840 x 2160@40fps,HNR支持的最高帧率为100fps。
基本概念¶
sfs (spatial filter strength),即空域去噪强度。
tfs (temporal filter strength),即时域去噪强度。
性能¶
线性OT_HNR_REF_MODE_NORM模式性能数据如下。
分辨率 |
帧率 |
|---|---|
3840x2160 |
单路30fps |
1920x1080 |
单路96fps |
1920x1080 |
四路25fps |
2688x1520 |
单路57fps |
2688x1520 |
四路14fps |
API参考¶
该功能模块为用户提供以下API:
ss_mpi_hnr_init:初始化HNR模块。
ss_mpi_hnr_exit:去初始化HNR模块。
ss_mpi_hnr_load_cfg:加载HNR的配置文件。
ss_mpi_hnr_unload_cfg:卸载HNR的配置文件。
ss_mpi_hnr_set_alg_cfg:设置HNR算法相关配置参数。
ss_mpi_hnr_get_alg_cfg:获取HNR算法相关配置参数。
ss_mpi_hnr_enable:使能HNR数据流开关。
ss_mpi_hnr_disable:关闭HNR数据流开关。
ss_mpi_hnr_set_attr:设置HNR的属性。
ss_mpi_hnr_get_attr:获取HNR的属性。
ss_mpi_hnr_set_input_depth:设置HNR输入队列的缓存深度。
ss_mpi_hnr_set_thread_attr:设置HNR线程属性。
ss_mpi_hnr_get_thread_attr:获取HNR线程属性。
ss_mpi_hnr_attach_out_vb_pool:HNR输出绑定到某个视频缓存VB池。
ss_mpi_hnr_detach_out_vb_pool:HNR输出与视频缓存VB池解除绑定。
ss_mpi_hnr_init¶
【描述】
初始化HNR模块。
【语法】
td_s32 ss_mpi_hnr_init(td_void);
【参数】
无
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,请参见错误码。 |
【需求】
头文件:ss_mpi_hnr.h
库文件:libss_hnr.a
【注意】
不支持多进程调用。
调用此接口前需要先初始化VI、ISP模块。
【举例】
无
【相关主题】
无
ss_mpi_hnr_exit¶
【描述】
去初始化HNR模块。
【语法】
td_void ss_mpi_hnr_exit(td_void);
【参数】
无
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,请参见错误码。 |
【需求】
头文件:ss_mpi_hnr.h
库文件:libss_hnr.a
【注意】
不支持多进程调用。
调用此接口去初始化HNR模块前,需要关闭HNR数据流开关。
【举例】
无
【相关主题】
无
ss_mpi_hnr_load_cfg¶
【描述】
加载HNR的配置文件。
【语法】
td_s32 ss_mpi_hnr_load_cfg(const ot_hnr_cfg *cfg, td_s32 *cfg_id);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
cfg |
HNR配置文件指针。 |
输入 |
cfg_id |
返回的配置文件ID指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,请参见错误码。 |
【需求】
头文件:ss_mpi_hnr.h
库文件:libss_hnr.a
【注意】
调用该接口前必须先调用ss_mpi_hnr_init初始化HNR模块。
调用该接口前HNR数据流需要保持关闭状态。
相同类型的配置文件,如果图像宽高相等时,不能重复加载。
支持多个配置文件的加载,或者同一配置文件、不同分辨率多次加载。
不支持多进程调用。
WDR模式不支持加载抓拍模型。
【举例】
无
【相关主题】
无
ss_mpi_hnr_unload_cfg¶
【描述】
卸载HNR的配置文件。
【语法】
td_s32 ss_mpi_hnr_unload_cfg(td_s32 cfg_id);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
cfg_id |
配置文件对应的ID。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,请参见错误码。 |
【需求】
头文件:ss_mpi_hnr.h
库文件:libss_hnr.a
【注意】
应用程序退出前,需调用此接口释放已加载配置文件的内存资源,或者调用ss_mpi_hnr_exit接口释放HNR的所有资源。
不支持多进程调用。
调用此接口前需要关闭HNR数据流开关。
【举例】
无
【相关主题】
无
ss_mpi_hnr_set_alg_cfg¶
【描述】
设置HNR算法相关配置参数。
【语法】
td_s32 ss_mpi_hnr_set_alg_cfg(ot_vi_pipe vi_pipe, const ot_hnr_alg_cfg *cfg)
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI模块的PIPE号, 取值范围:[0, OT_VI_MAX_PIPE_NUM)。详见《MPP 媒体处理软件V5.0 开发参考》“视频输入”章节。 |
输入 |
cfg |
HNR算法参数配置结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,请参见错误码。 |
【需求】
头文件:ss_mpi_hnr.h
库文件:libss_hnr.a
【注意】
调用该接口前必须先调用ss_mpi_hnr_init初始化HNR模块。
调用该接口前需要已创建pipe,并且已初始化ISP。
调用该接口时HNR数据流需要保持关闭状态。
如果未调用此接口,默认为有参考帧模式。
如果是拍照场景,必须调用此接口设置为无参考帧模式。
HNR参考帧普通模式支持的最大分辨率为4096×4096;HNR无参考帧模式(OT_HNR_REF_MODE_NONE和OT_HNR_REF_MODE_NONE_ADVANCED)支持的最大分辨率为8192×8192。
当前版本HNR 的无参考帧模式(OT_HNR_REF_MODE_NONE和OT_HNR_REF_MODE_NONE_ADVANCED)不支持BGGR和GRBG的Bayer图像的数据格式。
WDR模式不支持HNR无参考帧模式(OT_HNR_REF_MODE_NONE和OT_HNR_REF_MODE_NONE_ADVANCED)。
OT_HNR_REF_MODE_NONE_ADVANCED模式仅支持在VI视频模式为OT_VI_VIDEO_MODE_ADVANCED时使用。
OT_HNR_REF_MODE_NONE_ADVANCED模式仅支持送帧方式,推荐使用RunOnce方式。
OT_HNR_REF_MODE_NONE_ADVANCED模式的输入帧仅支持非压缩格式。
如果在非主进程中调用此接口,必须先调用ss_mpi_isp_mem_share或ss_mpi_isp_mem_share_all接口,共享ISP相关MMZ buffer。
【举例】
无
【相关主题】
无
ss_mpi_hnr_get_alg_cfg¶
【描述】
获取HNR算法相关配置参数。
【语法】
td_s32 ss_mpi_hnr_get_alg_cfg(ot_vi_pipe vi_pipe, ot_hnr_alg_cfg *cfg);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI模块的PIPE号。 取值范围:[0, OT_VI_MAX_PIPE_NUM)。详见《MPP 媒体处理软件V5.0 开发参考》“视频输入”章节。 |
输入 |
cfg |
HNR算法参数配置结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,请参见错误码。 |
【需求】
头文件:ss_mpi_hnr.h
库文件:libss_hnr.a
【注意】
调用该接口前必须先调用ss_mpi_hnr_init初始化HNR模块。
调用该接口前需要已创建pipe,并且已初始化ISP。
如果在非主进程中调用此接口,必须先调用ss_mpi_isp_mem_share或ss_mpi_isp_mem_share_all接口,共享ISP相关MMZ buffer。
【举例】
无
【相关主题】
无
ss_mpi_hnr_enable¶
【描述】
使能HNR数据流开关。
【语法】
td_s32 ss_mpi_hnr_enable(ot_vi_pipe vi_pipe);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI模块的PIPE号。 取值范围:[0, OT_VI_MAX_PIPE_NUM),详见《MPP 媒体处理软件V5.0 开发参考》“视频输入”章节。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,请参见错误码。 |
【需求】
头文件:ss_mpi_hnr.h
库文件:libss_hnr.a
【注意】
主进程调用该接口前必须先调用ss_mpi_hnr_init初始化HNR模块,并调用ss_mpi_hnr_load_cfg接口加载HNR配置文件。
其他非主进程(例如PQTools)支持使用该接口打开HNR数据流,无需初始化HNR;但需要主进程初始化HNR模块,否则无法实际打开数据流。
如果在非主进程中调用此接口,必须先调用ss_mpi_isp_mem_share或ss_mpi_isp_mem_share_all接口,共享ISP相关MMZ buffer。
enable hnr前有如下限制条件:
对应的pipe必须已经创建。
需要用户调用函数去分配VB池,VB大小计算使用函数ot_hnr_get_pic_buf_size,详见《MPP 媒体处理软件V5.0 开发参考》“系统控制”章节,且分配的VB池需要attach对应的PIPE上。
如果更改了输入Bayer图像的数据格式,需要ss_mpi_hnr_disable关闭之后,在重新调用本接口使能HNR数据流才会生效。
HNR使能之后,有参考帧模式延迟4帧生效,无参考帧模式延迟2帧生效。
HNR仅支持12bit的Bayer图像数据处理。如果sensor输入非12bit的Bayer图像,需设置VI PIPE输出的图像数据格式为Bayer 12bit。
HNR的线性模式使用有如下限制:
如果另一路使用WDR模式,则VI视频模式需要设置为OT_VI_VIDEO_MODE_NORM模式,否则会影响WDR路的BNR效果;
HNR的WDR模式使用有如下限制:
只能在VI离线时生效;
VI视频模式必须设置为OT_VI_VIDEO_MODE_NORM模式;
HNR建议绑定长帧所在的pipe,不能是虚拟pipe;
pipe通路不能开压缩;
当前版本HNR 的WDR模式不支持BGGR和GRBG的Bayer图像的数据格式;
不支持normal_blend模式;
超性能场景可能会出现WDR长短帧丢帧不同步,进而导致WDR融合效果异常。
【举例】
无
【相关主题】
无
ss_mpi_hnr_disable¶
【描述】
关闭HNR数据流开关。
【语法】
td_s32 ss_mpi_hnr_disable(ot_vi_pipe vi_pipe);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI模块的PIPE号。 取值范围:[0, OT_VI_MAX_PIPE_NUM)。详见《MPP 媒体处理软件V5.0 开发参考》“视频输入”章节。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,请参见错误码。 |
【需求】
头文件:ss_mpi_hnr.h
库文件:libss_hnr.a
【注意】
主进程调用该接口前必须先调用ss_mpi_hnr_init初始化HNR模块,并调用ss_mpi_hnr_load_cfg接口加载HNR配置文件。
其他非主进程(例如PQTools)支持使用该接口关闭HNR数据流,无需初始化HNR。
如果在非主进程中调用此接口,必须先调用ss_mpi_isp_mem_share或ss_mpi_isp_mem_share_all接口,共享ISP相关MMZ buffer。
在VI模块销毁对应的pipe之前,需要先调用该接口关闭HNR功能,否则可能出现VB泄漏。
【举例】
无
【相关主题】
无
ss_mpi_hnr_set_attr¶
【描述】
设置HNR的属性。
【语法】
td_s32 ss_mpi_hnr_set_attr(ot_vi_pipe vi_pipe, const ot_hnr_attr *attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI模块的PIPE号, 取值范围:[0, OT_VI_MAX_PIPE_NUM)。详见《MPP 媒体处理软件V5.0 开发参考》“视频输入”章节。 |
输入 |
attr |
HNR属性结构体指针。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,请参见错误码。 |
【需求】
头文件:ss_mpi_hnr.h
库文件:libss_hnr.a
【注意】
调用该接口前必须先调用ss_mpi_hnr_init初始化HNR模块,并调用ss_mpi_hnr_load_cfg接口加载HNR配置文件。
使能HNR数据流开关之后才能调用此接口成功设置HNR属性。
VI视频模式为OT_VI_VIDEO_MODE_NORM时,当attr->enable为TD_FALSE时,bnr_bypass必须为TD_FALSE。
VI视频模式为OT_VI_VIDEO_MODE_ADVANCED时,bnr_bypass不起作用。
VI视频模式为OT_VI_VIDEO_MODE_NORM时,并且bnr_bypass为TD_FALSE时,才能开启normal_blend。
VI视频模式为OT_VI_VIDEO_MODE_NORM时,normal_blend开启,不支持获取HNR处理后的raw,不支持ISP RunOnce方式使用HNR,因为BE灌的raw没有经过HNR处理。
VI视频模式为OT_VI_VIDEO_MODE_NORM时,normal_blend关闭,支持获取HNR处理后的raw, 支持ISP RunOnce方式使用HNR。
如果在非主进程中调用此接口,必须先调用ss_mpi_isp_mem_share或ss_mpi_isp_mem_share_all接口,共享ISP相关MMZ buffer。
【举例】
无
【相关主题】
无
ss_mpi_hnr_get_attr¶
【描述】
获取HNR的属性。
【语法】
td_s32 ss_mpi_hnr_get_attr(ot_vi_pipe vi_pipe, ot_hnr_attr *attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI模块的PIPE号, 取值范围:[0, OT_VI_MAX_PIPE_NUM)。详见《MPP 媒体处理软件V5.0 开发参考》“视频输入”章节。 |
输入 |
attr |
HNR属性结构体指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,请参见错误码。 |
【需求】
头文件:ss_mpi_hnr.h
库文件:libss_hnr.a
【注意】
使能HNR数据流开关之后才能调用此接口成功获取HNR属性。
如果在非主进程中调用此接口,必须先调用ss_mpi_isp_mem_share或ss_mpi_isp_mem_share_all接口,共享ISP相关MMZ buffer。
【举例】
无
【相关主题】
无
ss_mpi_hnr_set_input_depth¶
【描述】
设置HNR输入队列的缓存深度。
【语法】
td_s32 ss_mpi_hnr_set_input_depth(ot_vi_pipe vi_pipe, td_u32 depth);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI模块的PIPE号。 取值范围:[0, OT_VI_MAX_PIPE_NUM)。详见《MPP媒体处理软件V5.0开发参考》“视频输入”章节。 |
输入 |
depth |
输入缓存深度,取值范围:[1, 20] |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,请参见错误码。 |
【需求】
头文件:ss_mpi_hnr.h
库文件:libss_hnr.a
【注意】
调用该接口前必须先调用ss_mpi_hnr_init初始化HNR模块,并且对应的pipe必须已经创建。
【举例】
无
【相关主题】
无
ss_mpi_hnr_set_thread_attr¶
【描述】
设置HNR线程属性。
【语法】
td_s32 ss_mpi_hnr_set_thread_attr(const ot_hnr_thread_attr *thread_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
thread_attr |
HNR线程属性。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,请参见错误码。 |
【需求】
头文件:ss_mpi_hnr.h
库文件:libss_hnr.a
【注意】
调用该接口支持在调用ss_mpi_hnr_init初始化HNR模块前或开启HNR通路后动态修改。
【举例】
无
【相关主题】
无
ss_mpi_hnr_get_thread_attr¶
【描述】
获取HNR线程属性。
【语法】
td_s32 ss_mpi_hnr_get_thread_attr(const ot_hnr_thread_attr *thread_attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
thread_attr |
HNR线程属性。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,请参见错误码。 |
【需求】
头文件:ss_mpi_hnr.h
库文件:libss_hnr.a
【注意】
无
【举例】
无
【相关主题】
无
ss_mpi_hnr_attach_out_vb_pool¶
【描述】
将HNR输出绑定到某个视频缓存VB池。
【语法】
td_s32 ss_mpi_hnr_attach_out_vb_pool(ot_vi_pipe vi_pipe, ot_vb_pool vb_pool);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI模块的PIPE号。 取值范围:[0, OT_VI_MAX_PIPE_NUM)。详见《MPP媒体处理软件V5.0开发参考》“视频输入”章节。 |
输入 |
vb_pool |
视频缓存VB池信息。具体请参见“系统控制”章节。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,请参见错误码。 |
【需求】
头文件:ss_mpi_hnr.h
库文件:libss_hnr.a
【注意】
调用该接口前必须先调用ss_mpi_hnr_init初始化HNR模块。
调用该接口前HNR数据流需要保持关闭状态。
只推荐在VI stagger输入场景且VI视频模式为OT_VI_VIDEO_MODE_NORM时使用;其他场景使用会造成vb利用率下降。
【举例】
无
【相关主题】
无
ss_mpi_hnr_detach_out_vb_pool¶
【描述】
将HNR输出与某个视频缓存VB池解绑定。
【语法】
td_s32 ss_mpi_hnr_detach_out_vb_pool(ot_vi_pipe vi_pipe);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
vi_pipe |
VI模块的PIPE号。 取值范围:[0, OT_VI_MAX_PIPE_NUM)。详见《MPP媒体处理软件V5.0开发参考》“视频输入”章节。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,请参见错误码。 |
【需求】
头文件:ss_mpi_hnr.h
库文件:libss_hnr.a
【注意】
调用该接口前必须先调用ss_mpi_hnr_init初始化HNR模块。
调用该接口前HNR数据流需要保持关闭状态。
【举例】
无
【相关主题】
无
数据类型¶
HNR模块相关数据类型定义如下:
OT_HNR_MAX_CFG_NUM:定义HNR配置文件最大支持加载数。
ot_hnr_mem_info:定义HNR配置文件内存信息。
ot_hnr_cfg:定义HNR配置文件信息。
ot_hnr_param:定义HNR图像效果参数。
ot_hnr_manual_attr:定义HNR手动参数。
ot_hnr_attr:定义HNR属性。
ot_hnr_ref_mode:定义HNR参考帧模式。
ot_hnr_alg_cfg:定义HNR算法配置参数。
ot_hnr_thread_attr:定义HNR线程配置参数。
OT_HNR_MAX_CFG_NUM¶
【说明】
定义HNR配置文件最大支持加载数。
【定义】
#define OT_HNR_MAX_CFG_NUM 32
【注意事项】
无
【相关数据类型及接口】
无
ot_hnr_mem_info¶
【说明】
HNR配置文件内存信息。
【定义】
typedef struct {
td_phys_addr_t phys_addr;
td_void *virt_addr;
td_u32 size;
} ot_hnr_mem_info;
【成员】
成员名称 |
描述 |
|---|---|
phys_addr |
HNR配置文件的内存物理地址。 td_phys_addr_t详细请参考《MPP 媒体处理软件 V5.0 开发参考》“系统控制”章节。 |
virt_addr |
HNR配置文件的内存虚拟地址。 |
size |
HNR配置文件的内存大小。 |
【注意事项】
无
【相关数据类型及接口】
ot_hnr_cfg¶
【说明】
HNR配置文件信息。
【定义】
typedef struct {
ot_hnr_mem_info mem_info;
ot_size image_size;
td_bool is_wdr_mode;
} ot_hnr_cfg;
【成员】
成员名称 |
描述 |
|---|---|
mem_info |
HNR配置文件内存信息。 |
image_size |
配置文件所支持的图像分辨率。 |
is_wdr_mode |
配置文件是否支持WDR模式,否则支持线性模式。 |
【注意事项】
用户需要保证内存中所存储的配置文件信息的完整性和正确性,否则可能导致运行异常。
配置文件加载时需指定所支持的图像分辨率。
支持的图像分辨率宽高都必须是4的整数倍。
HNR参考帧模式支持的图像分辨率宽高与VI PIPE离线图像大小范围一致。详细请参考《MPP 媒体处理软件 V5.0 开发参考》“视频输入”章节。
【相关数据类型及接口】
无
ot_hnr_param¶
【说明】
定义HNR图像效果参数。
【定义】
typedef struct {
td_u32 sfs;
td_u32 tfs;
} ot_hnr_param;
【成员】
成员名称 |
描述 |
|---|---|
sfs |
整体画面的空域去噪强度。数值越大,去噪越强。 取值范围: [0, 31] |
tfs |
时域去噪强度。数值越大,时域去噪越强。此版本暂不支持此参数的效果调节。 取值范围: [0, 31] |
【注意事项】
当前版本,tfs参数暂未生效。参数调节请参考《HNR调优指南》。
【相关数据类型及接口】
ot_hnr_manual_attr¶
【说明】
定义HNR手动参数。
【定义】
typedef struct {
ot_hnr_param param;
} ot_hnr_manual_attr;
【成员】
成员名称 |
描述 |
|---|---|
param |
HNR图像效果参数。 |
【注意事项】
无
【相关数据类型及接口】
ot_hnr_attr¶
【说明】
定义HNR属性。
【定义】
typedef struct {
td_bool enable;
td_bool bnr_bypass;
td_bool normal_blend;
ot_op_mode op_type;
ot_hnr_manual_attr manual_attr;
ot_hnr_auto_attr auto_attr;
} ot_hnr_attr;
【成员】
成员名称 |
描述 |
|---|---|
enable |
图像效果使能开关。 |
bnr_bypass |
BNR Bypass开关。详细请参考《HNR 调试指南》HNR与BNR切换。 |
normal_blend |
normal模式blend开关。 |
op_type |
HNR选择模式。详细请参考《MPP 媒体处理软件 V5.0 开发参考》“系统控制”章节。 |
manual_attr |
HNR手动模式参数。 |
auto_attr |
HNR自动模式的标准参数。 ot_hnr_auto_attr参数暂不支持。 |
【注意事项】
本版本暂只支持手动模式参数,不支持自动模式参数配置。
【相关数据类型及接口】
无
ot_hnr_ref_mode¶
【说明】
定义HNR参考帧模式。
【定义】
typedef enum {
OT_HNR_REF_MODE_NORM = 0,
OT_HNR_REF_MODE_NONE,
OT_HNR_REF_MODE_NONE_ADVANCED,
OT_HNR_REF_MODE_NORM_FACE,
OT_HNR_REF_MODE_BUTT
} ot_hnr_ref_mode;
【成员】
成员名称 |
描述 |
|---|---|
OT_HNR_REF_MODE_NORM |
HNR参考帧普通模式,图像处理需要参考帧。默认为此模式。 |
OT_HNR_REF_MODE_NONE |
HNR无参考帧模式,图像处理无需参考帧。 |
OT_HNR_REF_MODE_NONE_ADVANCED |
HNR无参考帧的高级模式,提升图像暗处细节,图像处理无需参考帧。 |
OT_HNR_REF_MODE_NORM_FACE |
HNR参考帧人脸模式,提升运动人脸细节,图像处理需要参考帧。 |
【注意事项】
如果是拍照场景,需选用HNR无参考帧模式,或HNR无参考帧的高级模式。
【相关数据类型及接口】
ot_hnr_alg_cfg¶
【说明】
定义HNR算法配置参数。
【定义】
typedef struct {
ot_hnr_ref_mode ref_mode;
} ot_hnr_alg_cfg;
【成员】
成员名称 |
描述 |
|---|---|
ref_mode |
HNR参考帧模式。 |
【注意事项】
无
【相关数据类型及接口】
无
ot_hnr_thread_attr¶
【说明】
定义HNR线程属性。
【定义】
typedef struct {
td_u32 cpu_id;
} ot_hnr_thread_attr;
【成员】
成员名称 |
描述 |
|---|---|
cpu_id |
绑定的CPU ID,取值范围为[0, 3]。 |
【注意事项】
无
【相关数据类型及接口】
无
Proc调试信息¶
概述¶
调试信息采用了Linux下的proc文件系统,可实时反映当前系统的运行状态,所记录的信息可供问题定位及分析时使用。
【文件目录】
/proc/umap
【信息查看方法】
在控制台上可以使用cat命令查看信息,cat /proc/umap/isp或cat /proc/umap/pqp;也可以使用其他常用的文件操作命令,例如 cp /proc/umap/isp ./或cp /proc/umap/pqp ./,将文件拷贝到当前目录。
在应用程序中可以将上述文件当作普通只读文件进行读操作,例如fopen、fread等。
说明: 参数在描述时有以下两种情况需要注意:
取值为{0, 1}的参数,如未列出具体取值和含义的对应关系,则参数为1时表示肯定,为0时表示否定。
取值为{aaa, bbb, ccc}的参数,未列出具体取值和含义的对应关系,但可直接根据取值aaa、bbb或ccc判断参数含义。
Proc信息说明¶
HNR调试信息说明¶
【调试信息】
# cat /proc/umap/isp
[ISP] Version: [MPP_Vx.x.x.x B0xx Release], Build Time[mm dd yyyy, hh:mm:ss]
----------------------------------------hnr info------------------------------------------------------------------------
hnr_en attr_en sfs set_bnr_bypass bnr_bypass_status long_frame_mode normal_blend normal_blend_status
1 1 31 1 0 N 0 0
cfg_id width height is_wdr ref_mode version_id
0 3840 2160 N norm 2021082801
vi_pipe iso handle busy_node free_node ref_mode input_depth ref_cnt work_time slp_cnt slp_time
0 3521 1 2 1 norm 8 1 12226 26 12231
【注意事项】
当HNR数据流首次使能之后,才能查看到HNR相关的proc信息。
【调试信息分析】
记录当前HNR工作状态资源信息,主要包括HNR用户设置信息,加载的配置文件信息,任务状态信息。
【参数说明】
参数 |
描述 |
|
|---|---|---|
HNR用户设置信息 |
hnr_en |
HNR数据流开关。 |
attr_en |
HNR效果开关。 |
|
sfs |
画面的空域去噪强度。 |
|
set_bnr_bypass |
BNR Bypass设置开关。 |
|
bnr_bypass_status |
BNR Bypass生效状态。 |
|
long_frame_mode |
是否为长帧模式。 Y:是长帧模式; N:不是长帧模式。 |
|
normal_blend |
normal_blend设置开关。 |
|
normal_blend_status |
normal_blend生效状态。 |
|
HNR配置文件信息 |
cfg_id |
配置文件ID。 |
width |
配置文件对应图像的宽度信息。 |
|
height |
配置文件对应图像的高度信息。 |
|
is_wdr |
配置文件是否为WDR模式。 Y:WDR模式; N:线性模式。 |
|
ref_mode |
配置文件的参考帧模式。 norm:参考帧普通模式,图像处理需要参考帧; none:无参考帧模式,图像处理无需参考帧; advanced:无参考帧高级模式。 |
|
version_id |
配置文件版本ID。 |
|
HNR任务状态信息 |
vi_pipe |
HNR使能通路对应VI的PIPE号。 |
iso |
HNR计算输入的iso信息。 iso值来自帧信息supplement的isp_frame_info中的iso。 如果是WDR非长帧模式,此iso值等于isp的iso值除以isp增益。 |
|
handle |
HNR当前任务handle号。 |
|
busy_node |
HNR任务队列的工作节点数量。 |
|
free_node |
HNR任务队列的空闲节点数量。 |
|
ref_mode |
HNR参考帧模式。 norm:参考帧普通模式,图像处理需要参考帧; none:无参考帧模式,图像处理无需参考帧; advanced:无参考帧高级模式。 |
|
input_depth |
HNR输入队列的缓存深度。 |
|
ref_cnt |
当前已提交任务个数。 |
|
work_time |
10s内提交任务最大耗时,单位us。 |
|
slp_cnt |
submit线程10s内进入睡眠次数。 |
|
slp_time |
submit线程10s睡眠一次的平均耗时,单位us。 |
|
PQP调试信息说明¶
【调试信息】
# cat /proc/umap/pqp
[PQP] Version: [Vx.x.x.x B0xx Release], Build Time[mm dd yyyy, hh:mm:ss]
----------------------------------------pqp module param------------------------------
dev_id high_profile
0 N
-------------------------------- pqp task queue info----------------------------------
dev_id wait_queue_id work_queue_id wait_head_idx wait_tail_idx
0 0 -1 0 0
work_head_idx work_tail_idx
0 0
-------------------------------------- pqp task info -----------------------------------
dev_id handle task_send task_finish last_finish_id start_task_id handle_wrap
0 0 0 0 0 0 0
finish_wrap
0
-------------------------------------- pqp perf info------------------------------------
dev_id irq_num_per_sec last_irq_time max_irq_time last_task_time
0 0 0 0 0
--------------------------------------- pqp err info-------------------------------------
dev_id query_timeout_num hw_timeout_num hw_err_num
0 0 0 0
【调试信息分析】
记录当前PQP工作状态资源信息,主要包括PQP队列状态信息,任务状态信息,性能信息和错误信息。
【参数说明】
参数 |
描述 |
|
|---|---|---|
pqp module param PQP模块参数信息 |
dev_id |
Dev ID。 |
high_profile |
高性能的开关:仅SS928V100支持。 Y:使能; N:不使能。 |
|
pqp task queue info PQP 模块任务队列信息 |
dev_id |
Dev ID。 |
wait_queue_id |
等待队列ID(0或1)。 |
|
work_queue_id |
工作队列ID(0,1或-1),-1表示硬件空闲。 |
|
wait_head_idx |
等待队列的首个有效任务索引。 |
|
wait_tail_idx |
等待队列的末尾有效任务索引。 |
|
work_head_idx |
工作队列的首个有效任务索引。 |
|
work_tail_idx |
工作队列的末尾有效任务索引。 |
|
pqp task info PQP 任务相关信息 |
dev_id |
Dev ID。 |
handle |
当前分配的任务handle号。 |
|
task_send |
当前已下发任务的个数。 |
|
task_finish |
当前已完成任务的个数。 |
|
last_finish_id |
上一次完成任务的ID。 |
|
start_task_id |
最近一次启动硬件执行的任务ID。 |
|
handle_wrap |
handle号分配发生回写的次数。 |
|
finish_wrap |
完成任务数发生回写的次数。 |
|
pqp perf info PQP性能相关信息 |
dev_id |
Dev ID。 |
irq_num_per_sec |
最近一次的1秒内中断执行次数。 |
|
last_irq_time |
最近一次执行中断的执行耗时。 单位:us。 |
|
max_irq_time |
执行一次中断的最大耗时。 单位:us。 |
|
last_task_time |
最近一个任务执行耗时。 单位:us。 |
|
pqp err info PQP错误信息 |
dev_id |
Dev ID。 |
query_timeout_num |
任务查询超时次数。 |
|
hw_timeout_num |
硬件执行超时次数。 |
|
hw_err_num |
硬件执行报错次数。 |
|
错误码¶
HNR错误码如下所示。
表 1 HNR API错误码
错误代码 |
宏定义 |
描述 |
|---|---|---|
0xa0528002 |
OT_ERR_HNR_INVALID_PIPE_ID |
PIPE号无效 |
0xa0528007 |
OT_ERR_HNR_ILLEGAL_PARAM |
参数无效 |
0xa052800a |
OT_ERR_HNR_NULL_PTR |
输入参数空指针错误 |
0xa052800c |
OT_ERR_HNR_NOT_SUPPORT |
操作不支持 |
0xa052800d |
OT_ERR_HNR_NOT_PERM |
操作不允许 |
0xa0528014 |
OT_ERR_HNR_NO_MEM |
数据缓存溢出 |
0xa0528018 |
OT_ERR_HNR_NOT_READY |
未初始化 |
0xa0528050 |
OT_ERR_HNR_BIN_NOT_MATACH |
Bin配置文件不匹配 |