Camsys子系统
系统概述
S100 camsys子系统包含Camera sensor (包括 SerDes)、VIN(包括 MIPI、CIM)、ISP、PYM、GDC、YNR、STITCH模块。
简称 | 全称 | 说明 |
---|---|---|
MIPI | Mobile Industry Processor Interface | 移动产业处理器接口,MIPI联盟制定的标准 |
CSI | Camera Serial Interface | Camera串行接口 |
IPI | Image Pixel Interface | MIPI与CIM之间的图像传输接口 |
FOV | Field of View | 视场角 |
SER | Serializer | 加串器 |
SerDes | Serializer and Deserializer | 加串与解串器 |
DES | Deserializer | 解串器 |
CIM | Camera Interface Manger | Camera接入管理模块,支持online或offline工作 |
VIN | Video In(CIM+MIPI+LPWM+VCON) | 视频输入模块 |
ISP | Image Signal Processor | 图像信号处理器 |
PYM | Pyramid | 金字塔处理模块: 图像缩小及ROI |
GDC | Geometric Distortion Correction | 几何畸变校正模块 |
VPF | Video Process Framework(VIN+ISP+PYM..) | 视频处理管理模块 |
VIO | Video In/Out (VIN+VPM) | 视频输入/输出模块 |
STITCH | Stitch hardware Module | 图像拼接处理模块 |
CAMSYS | Camera System (Camera+VPF) | 相机图像系统 |
camsys硬件框图
子模块
CIM
CIM(Camera Interface Manager)是一种专门用来接收MIPI-RX IPI图像数据的硬件。CIM负责同时接入多路图像数据,并改变MIPI IPI接口的时序以匹配后级硬件或DDR的输入时序要求,将图像通过硬件直连或DDR形式提供给ISP和PYM。
- S100上共有3个CIM模块,分别为CIM0 CIM1 CIM4;
- 单个CIM最大支持接入4V * 8M * 30fps,支持接入RAW8、RAW10、RAW12、RAW14、RAW16、RAW20、YUV422-8Bit图像;
- CIM0 CIM1可以硬件直连otf输出至ISP、PYM,同时支持离线输出至ddr,CIM4只支持离线输出;
- CIM0的IPI0最大接入宽为5696,CIM0其他的IPI和其他CIM中的IPI最大接入宽为4096;
ISP
ISP (Image Signal Processor)图像信号处理器,是一种专门用于图像信号处理的引擎。 ISP的功能包括对原始图像进行各类算法处理、图像特性统计、色彩空间转换、多路通道分时复用控 制等,最终输出更清晰、更准确、高质量的图像。
- S100上共有2个ISP模块,分别为ISP0 ISP1;
- 每个ISP硬件模块IP最大支持12路sensor的接入能力;
- ISP处理最大分辨率为4096 * 2160
- ISP处理pipeline如下图:
- MCFE: Multi-Context Front End,用于ISP多路调度控制与buffer管理,one by one进行Multi-camera图像处理。
- RAW Domain: RAW域图像处理,包含input port (含input crop功能)、channel switch、input formatter、sensor offset linear、digtal gain、gamma FE(即decompander)、gamma_sqrt、raw frontend、static defected、sinter、chromatic aberration、gamma_sq、gamma BE、static white blance、radial shading correction、mesh shading correction、digital gain iridix、iridix、demosaic等。
- RGB Domain: RGB域图像处理,包含purple fringe correction、color matrix、gamma RGB forward SQ、crop、CNR、gamma RGB reverse SQ、RGB gamma等。
- Output formatter: CS(color space) coversion,将RGB通道数据转换成YUV 等format,output control 进行输出控制。
YNR
YNR为yuv域的降噪模块Digital Noise Reduction,YNR支持2DNR与3DNR模式
- S100上共有一个YNR模块,YNR1,只支持ISP1-online-YNR1-online-PYM1场景;
- 在3DNR模式下,处理的最大宽高为2048x2048,在2DNR模式下支持3840x2160;
PYM
PYM(Pyramid)作为一个硬件加速模块,对输入的图像按照金字塔图 层的方式处理,并输出到DDR。
- S100上共有3个PYM模块,分别为PYM0 PYM1 PYM4;
- SRC层:代表源图像层;
- BL层:代表双线性下采样层,BL Base 0~4依次是源图层的1/2,1/4,1/8,1/16,1/32;
- DS层:输出层,每层能够任意选择输入图层(SRC或0~4BL),并进行下采样和ROI处理后输出到DDR;
- 最大输入宽度输入高度均为4096,最小输入宽度及高度为32;
- 缩小ratio(1/2,1],不支持放大;
- PYM0/1:4k@120fps,PYM4:4K@90fps,PYM4不支持online输入;
GDC
GDC作为一个硬件模块,可将输入的图像进行视角变换、畸变校正和指定角度(0,90,180,270)旋转。
模式支持的输入图像典型尺寸为3840x2160,2688x1944,1920x1080,1280x720,640x480,480x320。
硬件特性如下:
- 最大分辨率:3840x2160
- 最小分辨率:96x96(奇数行或者列不支持)
- 性能:3840x2160,60fps
- 工作模式:ddr-gdc-ddr
- 输入格式:YUV420 semi-planar
- 输出格式:YUV420 semi-planar
GDCTool简介
GDC Tool是一种可在PC上进行处理效果仿真的工具。用户可准备jpg模式的图像,load 到gdc-tool中进行离线校正,校正完成后可以直接保存config.bin文件用于硬件校正,也可用保存layout.json文件生成config.bin进行硬件校正
GDC Tool 启动
-
window环境启动
安装环境:依赖nodejs安装,参考:https://nodejs.cn/download/
安装执行依赖:在win命令行,进入GDC 发布的工具文件(如gdc-tool-gui-xxxx-windows)目录下,执行npm install express
启动应用:在win 命令行进入文件目录(如gdc-tool-gui-xxxx-windows),执行node.exe app.js,Chrome浏览器登陆http://localhost:3000/
-
unix 环境启动
安装环境:mac: brew install node
安装执行依赖:文件目录下执行npm install -production
启动应用:执行node app.js,登陆http://localhost:3000/
GDC Tool 中的变换模式
变换模式有Affine,Equisolid,Equisolid(cylinder),Equidistant, Custom, Keystone+dewarping六种变换供选择,这些模式与软件中的变换模式对应关系见GDC Bin API文档中的 transformation_t 描述,下表是各个变换的用途
变换模式 | 用途 |
---|---|
Affine | 一种线性变换,简单的图像旋转功能,没有畸变校正 |
Equisolid | 全景变换,变换网格最大 |
Equisolid(cylinder) | 圆柱形变换 |
Equidistant | 等距变换,变换后的距离等 距。 |
Custom | 用户定制变换 |
Keystone+dewarping | 相对于Equidistant,dewarp_keystone 多了两个参数trapezoid_left_angle 和 trapezoid_right_angle。默认情况下这两个参数90度,效果和Equidistant一样。 |
所有转换类型都有以下三个常用参数Pan、Tile、Zoom(举例:等距变换,输入/输出分辨率1280x720): 以下输出图像中的蓝色矩形表示仅将特殊参数设置为该值, 并且一个转换中的其他参数保持默认值。
-
Pan
水平方向 (-1280, +1280)通过给定的像素数,偏移变换网格。如下所示:
-
Tile
垂直方向 (-720, +720)通过给定的像素数,偏移变换网格。如下所示:
-
Zoom
按提供的因子 (0, +∞)缩放变换输出,(0, 1)表示值大于 0 且小于 1。如下所示:
-
Affine
-
功能描述
提供线性的变换
-
成员说明
成员 含义 int32_t pan default 0, 不修改 int32_t tilt default 0, 不修改 zoom 按提供的因子缩放转换输出, 当旋转角度为180或270时,该值需>=1.03 double angle(rotation) 图像旋转的角度 0/90/180/270 注意!输入输出尺寸的宽应保持16字节对齐。
zoom 参数在旋转角度为180或270时,需>=1.03
-
-
Equisolid
-
功能描述
此转换提供等实体(全景panoramic)校正,并将结果显示为平面上的投影。
-
成员说明
成员 含义 int32_t pan default 0, 不修改 int32_t tilt default 0, 不修改 zoom 按提供的因子缩放转换输出 double strengthX 沿X轴的变换强度(非负参数) double strengthY 沿Y轴的变换强度(非负参数) double angle(rotation) 图像旋转的角度 0/90/180/270 strength x调试效果,在X轴的转换强度,取值(0, +∞)。如下所示:
strength y调试效果,在Y轴的转换强度,取值(0, +∞)。如下所示:
Rotation调试效果,取值(-180, 180)。如下所示:
注意!输入输出尺寸的宽应保持16字节对齐。
-
-
Equisold(cylinder)
-
功能描述
此转换提供等实体(全景panoramic)校正,并将结果显示为平面上的投影。
-
成员说明
成员 含义 int32_t pan default 0, 不修改 int32_t tilt default 0, 不修改 zoom 按提供的因子缩放转换输出 strength 转换的强度 double angle(rotation) 图像旋转的角度 0/90/180/270 strength 调试效果,转换的强度(0,+∞)。如下所示:
rotation 调试效果,取值范围(-180,+180)。如下所示
注意!输入输出尺寸的宽应保持16字节对齐。
-
-
Equidistant
-
功能描述
等距变换包含许多参数,这些参数允许它为投影提供一系列不同的目标平面。这使用户可以更自由地选择要变换的鱼眼帧的所需区域。
-
成员说明
成员 含义 int32_t pan default 0, 不修改 int32_t tilt default 0, 不修改 zoom 按提供的因子缩放转换输出 double angle(rotation) 图像旋转的角度 0/90/180/270 double elevation 定义了投影轴的仰角,范围0到90 double azimuth 定义了投影轴的方位角度。如果仰角参数elevation为0,则方位角将没有可见效果 int32_t keep_ratio 转当“保持比率”参数打开时,FOV高度参数将被忽略,其值将自动计算,以在水平和垂直方向上保持相同的拉伸强度 double FOV_h 描述水平维度中输出视图字段的大小(以度为单位)。有效值的范围是从0到180 double FOV_w 描述垂直维度中输出视图字段的大小(以度为单位)。有效值的范围是从0到180 double cylindricity_y 描述目标投影沿Y轴的球面度。此值从0到1,其中1是球形的。如果此值设置为1,而“圆柱度X”值设置为0,则投影将沿Y轴形成圆柱体 double cylindricity_x 描述目标投影沿X轴的球面度。此值从0到1,其中1是球形的。如果此值设置为1,并且“圆柱度Y”值设置为0,则投影将沿X轴形成圆柱体 elevation 调试效果:
azimuth 调试效果:
rotation 调试效果:
cylindricity x调试效果:
描述目标投影沿X轴的球形程度。该值的范围为0到1,其中1为球形。如果该值设置为1,圆柱度Y值设置为0,则投影将沿X轴形成圆柱。如下所示:
cylindricity y调试效果:
描述目标投影沿Y轴的球形程度。该值的范围为0到1,其中1为球形。如果该值设置为1,圆柱度X值设置为0,则投影将沿Y轴形成一个圆柱体。如下所示:
注意!输入输出尺寸的宽应保持16字节对齐。 正常的视力值大约是90度。对于圆柱度(见下文)等于“0”的变换,视场宽度和高度180的值将导致图像无限拉伸。 如果cylindricity_x和cylindricity_y圆柱度值都设置为1,则投影将是球形的。如果两者都是0,则变换将是矩形的。
-
-
Custom
-
功能描述
采用custom变换后,输入图像中的每个多边形都会变换为正方形。换句话说,任何形状的任何四个邻近输入点在转换后都是正方形,如下图所示。但是,多边形的形状和位置在变换后会发生变化。
它们用于创建任何提供的转换都无法描述的转换。为了纠正任意失真,必须向GDC工具提供一个特殊的校准文件config0.txt。如下图
-
成员说明
成员 含义 int32_t pan default 0, 不修改 int32_t tilt default 0, 不修改 zoom 按提供的因子缩放转换输出 char custom_file[128] config.txt文件名称 custom_tranformation_t custom 解析的自定义转换结构 Config file的规则大致需要注意一下几点:
-
第一行是在像素计算中使能full tile, 1是enable, 0是disable。
-
第二行是如果使能了full file,则要跳过的像素数量;这些值需要大于 0,数字越小,libgdc 的性能越慢(性能越慢是指config.bin的大小更大, libgdc生成config.bin的时间更长)。
-
第三行是垂直方向和水平方向标定点的个数, 第一个值Y = 1081指的是垂直方向有1081个标定点,第二个值X = 1921指的水平是方向有1921个标定点。
-
第四行是选中区域的中心点,通常是(Y-1)/2、(X-1)/2。
-
标定点必须是大于等于0的int或float类型、相邻两行的标定点不能重复。 eg.下图是截取的其中的一部分数据图片,第五行到第九行就是标定点在源图的坐标值,格式是Y: X。以下图为例,一共有1081x1921个标定点。
-
由于标定点必须是等距离的,这意味着输出图片的分辨率取决于标定点的点数。
eg. 输出图片的Width = 100, Height计算为340,计算过程如下:100/height = (96-1)/(324-1)
下图是更简单的3x3坐标点转换的示例图
-
-
-
Keystone+dewarping
-
功能描述
-
成员说明
成员 含义 int32_t pan default 0, 不修改 int32_t tilt default 0, 不修改 zoom 按提供的因子缩放转换输出 double angle(rotation) 图像旋转的角度 0/90/180/270 double elevation 定义了投影轴的仰角,范围0到90 double azimuth 定义了投影轴的方位角度。如果仰角参数elevation为0,则方位角将没有可见效果 int32_t keep_ratio 当“保持比率”参数打开时,FOV高度参数将被忽略,其值将自动计算,以在水平和垂直方向上保持相同的拉伸强度 double FOV_h 描述水平维度中输出视图字段的大小(以度为单位)。有效值的范围是从0到180 double FOV_w 描述垂直维度中输出视图字段的大小(以度为单位)。有效值的范围是从0到180 double cylindricity_y 描述目标投影沿Y轴的球面度。此值从0到1,其中1是球形的。如果此值设置为1,而“圆柱度X”值设置为0,则投影将沿Y轴形成圆柱体 double cylindricity_x 描述目标投影沿X轴的球面度。此值从0到1,其中1是球形的。如果此值设置为1,并且“圆柱度Y”值设置为0,则投影将沿X轴形成圆柱体 double trapezoid_left_angle 默认90;0.1到90 ;变换网格中,左边边界相对于底边边界的角度,见实际效果 double trapezoid_right_angle 默认90;0.1到90 ;变换网格中,右边边边界相对于底边边界的角度,见实际效果 注意!输入输出尺寸的宽应保持16字节对齐。
-
GDC Tool变换模式参数说明
配置文件可由GDC tool 生成,以layout.json存在。不同的变换模式有不同的参数,以custom模式和keystone+dewarping模式为例,说明配置参数。
-
keystone+dewarping模式
{
"inputRes": [
1920, // 输入图像尺寸的宽
1080 // 输入图像尺寸的高
],
"param": {
"fov": 180, // 输入图像的视场角
"diameter": 1080, // 输入图像的直径,可控制变换网格的整体大小
"offsetX": 0, // 变换网格在水平方向的偏移
"offsetY": 0 // 变换网格在垂直方向的偏移
},
"outputRes": [
1920, // 输出图像尺寸的宽
1080 // 输出图像尺寸的高
],
"transformations": [
{
"transformation": "Dewarp_keystone", // 变换模式
"position": [ // 输出图像的ROI区域设定
0, // 输出图像的ROI水平方向的偏移
0, // 输出 图像的ROI垂直方向的偏移
1920, // 输出图像的ROI的宽
1080 // 输出图像的ROI的高
],
"param": {
"left_base_angle": 90, // 默认90;0.1到90;变换网格中,左边边界相对于底边边界的角度
"right_base_angle": 90, // 默认90;0.1到90;变换网格中,右边边界相对于底边边界的角度
"azimuth": 90, // 定义了投影轴的方位角度。如果仰角参数elevation为0,则方位角将没有可见效果
"elevation": 0, // 定义了投影轴的仰角,范围0到90
"rotation": 0, // 输出图像要旋转的角度
"fovWidth": 90, // 描述水平维度中输出视图字段的大小(以度为单位)。 数值越大,变换网格水平方向越宽,有效值的范围是从0到180
"fovHeight": 90, // 描述垂直维度中输出视图字段的大小(以度为单位)。数值越大,变换网格垂直方向越宽,有效值的范围是从0到180
"keepRatio": 0, // 当“保持比率”参数为1时候,fovHeight参数将被忽略,其值将自动计算,以在水平和垂直方向上保持相同的拉伸强度
"cylindricityX": 1, // 描述目标投影沿X轴的球面度。此值从0到1,其中1是球形的。如果此值设置为1,并且“圆柱度Y”值设置为0,则投影将沿X轴形成圆柱体。
"cylindricityY": 1 // 描述目标投影沿X轴的球面度。此值从0到1,其中1是球形的。如果此值设置为1,并且“圆柱度Y”值设置为0,则投影将沿X轴形成圆柱体。
},
"ptz": [
0, // pan参数
0, // tile参数
1 // zoom参数
],
"roi": { // 输入图像ROI区域设定
"x": 0, // 输入图像ROI区域的水平方向偏移
"y": 0, // 输入图像ROI区域的垂直方向偏移
"w": 1920, // 输入图像ROI区域的宽
"h": 1080 // 输入图像ROI区域的高
}
}
],
"mode": "planar420", // 处理的格式设定
"eccMode": "eccDisabled", // 处理的ecc模式
"colourspace": "yuv" // 处理的数据格式
} -
custom模式
{
"inputRes": [
1280, // 输入图像尺寸的 宽
720 // 输入图像尺寸的高
],
"param": {
"fov": 192, // 输入图像的视场角
"diameter": 720, // 输入图像的直径,可控制变换网格的整体大小
"offsetX": 0, // 变换网格在水平方向的偏移
"offsetY": 0 // 变换网格在垂直方向的偏移
},
"outputRes": [
560, // 输出图像尺寸的宽
258 // 输出图像尺寸的高
],
"transformations": [
{
"transformation": "Custom", // 变换模式
"position": [ // 输出图像的ROI区域设定
0, // 输出图像的ROI水平方向的偏移
0, // 输出图像的ROI垂直方向的偏移
560, // 输出图像的ROI的宽,小于等于outputRes的宽
258 // 输出图像的ROI的高,小于等于outputRes的高
],
"ptz": [
0, // pan参数
0, // tile参数
1 // zoom参数
],
"roi": { // custom模式下无效
"x": 0, // custom模式下无效
"y": 0, // custom模式下无效
"w": 0, // custom模式下无效
"h": 0 // custom模式下无效
},
"param": {
"customTransformation": "/path_to/camera_0_gdc.txt" // 坐标点文件的在板子中的路径
}
}
],
"mode": "planar420", // 处理的格式设定
"eccMode": "eccDisabled", // 处理的ecc模式
"colourspace": "yuv" // 处理的数据格式
}注意!- ecc mode统一填写ecc is disable。可选ecc mode使能,但没有实际效果。
- 当参数为小数时,保证精度为浮点运算以后8位小数及以上,否则可能生成的bin不一致。
- 用户填充数据结构或者json时填充的信息应该包含各种模式示例所有项。
- 非custom模式,配置文件中的roi参数代表输入图片的roi。
- 配置文件中的position参数代表输出图片的roi。
-
Affine 配置文件内容如下:
{
"inputRes": [
1920,
1080
],
"param": {
"fov": 160,
"diameter": 1080,
"offsetX": 0,
"offsetY": 0
},
"outputRes": [
1920,
1080
],
"transformations": [
{
"transformation": "Affine",
"position": [
0,
0,
1920,
1080
],
"param": {
"rotation": 0
},
"ptz": [
0,
0,
1
],
"roi": {
"x": 0,
"y": 0,
"w": 1920,
"h": 1080
}
}
],
"mode": "planar420",
"eccMode": "eccDisabled",
"colourspace": "yuv"
}输入图片加变换网格如下
输出图片如下
-
Equisolid 配置文件内容如下:
{
"inputRes": [
1920,
1080
],
"param": {
"fov": 160,
"diameter": 1080,
"offsetX": 0,
"offsetY": 0
},
"outputRes": [
1920,
1080
],
"transformations": [
{
"transformation": "Panoramic",
"position": [
0,
0,
1920,
1080
],
"param": {
"strength": 1,
"strengthY": 1,
"rotation": 0
},
"ptz": [
0,
0,
1
],
"roi": {
"x": 0,
"y": 0,
"w": 1920,
"h": 1080
}
}
],
"mode": "planar420",
"eccMode": "eccDisabled",
"colourspace": "yuv"
}输入图片加变换网格如下
输出图片如下
-
Equisolid(cylinder) 配置文件内容如下:
{
"inputRes": [
1920,
1080
],
"param": {
"fov": 160,
"diameter": 1080,
"offsetX": 0,
"offsetY": 0
},
"outputRes": [
1920,
1080
],
"transformations": [
{
"transformation": "Stereographic",
"position": [
0,
0,
1920,
1080
],
"param": {
"strength": 1,
"rotation": 0
},
"ptz": [
0,
0,
1
],
"roi": {
"x": 0,
"y": 0,
"w": 1920,
"h": 1080
}
}
],
"mode": "planar420",
"eccMode": "eccDisabled",
"colourspace": "yuv"
}输入图片加变换网格如下
输出图片如下
-
Equidistant 配置文件内容如下:
{
"inputRes": [
1920,
1080
],
"param": {
"fov": 160,
"diameter": 1080,
"offsetX": 0,
"offsetY": 0
},
"outputRes": [
1920,
1080
],
"transformations": [
{
"transformation": "Universal",
"position": [
0,
0,
1920,
1080
],
"param": {
"azimuth": 0,
"elevation": 0,
"rotation": 0,
"fovWidth": 90,
"fovHeight": 90,
"keepRatio": 0,
"cylindricityX": 1,
"cylindricityY": 1
},
"ptz": [
0,
0,
1
],
"roi": {
"x": 0,
"y": 0,
"w": 1920,
"h": 1080
}
}
],
"mode": "planar420",
"eccMode": "eccDisabled",
"colourspace": "yuv"
}输入图片加变换网格如下
输出图片如下
-
Custom 输入1280x720,输出560x258。配置文件内容如下:
{
"inputRes": [
1280,
720
],
"param": {
"fov": 192,
"diameter": 720,
"offsetX": 0,
"offsetY": 0
},
"outputRes": [
560,
258
],
"transformations": [
{
"transformation": "Custom",
"position": [
0,
0,
560,
258
],
"ptz": [
0,
0,
1
],
"roi": {
"x": 0,
"y": 0,
"w": 0,
"h": 0
},
"param": {
"customTransformation": "/path_to/camera_0_gdc_config_3.1.txt"
}
}
],
"mode": "semiplanar420",
"eccMode": "eccDisabled",
"colourspace": "yuv"
}输入图片加变换网格如下
输出图片如下
-
Keystone+dewarping 配置文件内容如下:
{
"inputRes": [
1920,
1080
],
"param": {
"fov": 180,
"diameter": 1080,
"offsetX": 0,
"offsetY": 0
},
"outputRes": [
1920,
1080
],
"transformations": [
{
"transformation": "Dewarp_keystone",
"position": [
0,
0,
1920,
1080
],
"param": {
"left_base_angle": 90,
"right_base_angle": 90,
"azimuth": 0,
"elevation": 0,
"rotation": 0,
"fovWidth": 90,
"fovHeight": 90,
"keepRatio": 0,
"cylindricityX": 1,
"cylindricityY": 1
},
"ptz": [
0,
0,
1
],
"roi": {
"x": 0,
"y": 0,
"w": 1920,
"h": 1080
}
}
],
"mode": "planar420",
"eccMode": "eccDisabled",
"colourspace": "yuv"
}输入图片加变换网格如下
输出图片如下
GDC bin 相关API参考
以下API用于GDC BIN生成,GDC模块控制API见HBN API。
-
hb_vio_gen_gdc_cfg
【函数声明】
int32_t hb_vio_gen_gdc_cfg(param_t *gdc_parm, window_t *wnds, uint32_t wnd_num, void **cfg_buf, uint64_t *cfg_size)
【参数描述】
- [IN] param_t *gdc_parm:gdc对应参数,包括分辨率,格式等。
- [IN] window_t *wnds:gdc内部区域参数。
- [IN] uint32_t wnd_num: window 数目。
- [OUT] uint32_t **cfg_buf:生成的gdc cfg bin,内部分配。
- [OUT] uint64_t *cfg_size:gdc cfg bin文件的大小。
【返回值】
- 成功:E_OK: Success
- 失败:E_NOT_OK: Fail,return error code;失败,返回错误码;range:[-10000,-1]
【功能描述】
生成gdc模块工作所需的bin文件。
-
hb_vio_set_gdc_cfg
【函数声明】
int32_t hb_vio_set_gdc_cfg(uint32_t pipeline_id, uint32_t *cfg_buf, uint64_t cfg_size)
【参数描述】
- [IN] uint32_t pipeline_id:pipeline id ; 软件通道id;range:[0, 23],default:0;
- [IN] cfg_buf:config buffer of gdc cfg bin; gdc cfg bin 的buffer
- [IN] cfg_size:size of gdc cfg bin ; gdc cfg bin文件的大小
【返回值】
- 成功:E_OK: Success;成功
- 失败:E_NOT_OK: Fail,return error code;失败,返回错误码;range:[-10000,-1]
【功能描述】
设置gdc模块的cfg bin。
-
hbn_free_gdc_bin
【函数声明】
void hb_vio_free_gdc_cfg(uint32_t *cfg_buf)
【参数描述】
- [IN] uint32_t* cfg_buf:Buffer of gdc cfg bin; gdc cfg bin的buffer.
【返回值】
- NONE
【功能描述】
释放生产gdc模块cfg bin的buffer
GDC bin 相关参数说明
-
typedef struct param_t
名称 类型 最小值 最大值 默认值 含义 必选 format frame_format_t 处理图像格式 是 in reso lution_t 实际输入图像尺寸 是 out reso lution_t 实际输出图像尺寸 是 x_offset int32_t 0 0 输入区域沿 x轴的偏移像素数 是 y_offset int32_t 0 0 输入区域沿 y轴的偏移像素数 是 diameter int32_t 定义矩形输入图 像上包含实际鱼眼 照片的输入圆形区 域的像素直径。对 于某些相机,此圆 形图像区域的直径 可以大于或小于矩 形画布的尺寸(有 时可能会被裁剪)一般情况下 diameter 应保持与 input.height 一致。 是 fov double 0 视场定 义输入图像的可视 角度,影响源网格 的曲率。视场越大 ,透视变形越大。 是 -
typedef enum frame_format frame_format_t
名称 类型 最小值 最大值 默认值 含义 必选 FM T_UNKNOWN enum 未知格式 FMT_LUMINANCE enum 暂不支持 FMT_P LANAR_444 enum 暂不支持 FMT_P LANAR_420 enum 暂不支持 FMT_SEMIP LANAR_420 enum NV12 FM T_GDC_MAX enum -
typedef struct resolution_s resolution_t
名称 类型 最小值 最大值 默认值 含义 必选 w uint32_t 宽度(像素) h uint32_t 高度(像素) -
typedef struct window_t
名称 类型 最小值 最大值 默认值 含义 必选 out_r rect_t 输出数据大小信息 transform transformation_t 0 6 0 使用的转换模式 input_roi_r rect_t roi区域 pan int32_t 以输出图像为中心的水平方向目标位移(像素单位) tilt int32_t 以输出图像为中心的垂直方向目标位移(像素单位) zoom double 目标缩放系数 strengthX double x方向变换的非负变换强度参数 strengthY double y方向变换的非负变换强度参数 angle double 主投影轴绕自身旋转的角度 elevation double 指定主投影轴的角度 azimuth double 指定主投影轴的角度,从北方向顺时针计数 keep_ratio int32_t 在水平方向和垂直方向保持相同的拉伸强度 FOV_h double 输出视场的垂直尺寸以度数表示 FOV_w double 输出视场的水平尺寸以度数表示 cylindricity_y double 目标在垂直方向上的投影形状的圆柱度水平 cylindricity_x double 目标在水平方向上的投影形状的圆柱度水平 custom_file[128] char custom模式下的自定义转换描述文件 custom custom_tranformation_t 自定义模式下的转换信息 trapezoid_left_angle double 梯形底与斜边之间的左锐角 trapezoid_right_angle double 梯形底与斜边之间的右锐角 check_compute uint8_t 暂时无用 -
typedef struct rect_s rect_t
名称 类型 最小值 最大值 默认值 含义 必选 x int32_t 起始点x坐标 y int32_t 起始点y坐标 w int32_t 宽度 h int32_t 高度 -
typedef enum gdc_transformation transformation_t
名称 类型 最小值 最大值 默认值 含 义 必选 PANORAMIC enum 全景变 换 CYLINDRICAL enum NA STEREOGRAPHIC enum 畸变校正与全景变换相同,但输出图像是圆柱全景图,而不是平 面图 UNIVERSAL enum Equidistant 等距变 换 CUSTOM enum 用户定制的变换,可定制用于变换的网 格 AFFINE enum 线性变 换 DEWARP_KEYSTONE enum 相对于等距变换,可选择非等距。等距变换 Equidistant 是其 一种特殊情况 -
typedef struct point_s point_t
名称 类型 最小值 最大值 默认值 含义 必选 x double x 坐标 y double y 坐标 -
typedef struct custom_tranformation_s custom_tranformation_t
名称 类型 最小值 最大值 默认值 含义 必选 full_tile_calc uint8_t 是否开启分块计算;如果使能 fulltile,libgdcbin 会额外分块做 min/max 计算,tile 越多,精度越高,效果越好,但生成 bin 的时间也越长 tile_incr_x uint16_t tile increase in x tile_incr_y uint16_t tile increase in y w int32_t 自定义转换网格中水平方向上的数字或点 h int32_t 自定义转换网格中垂直方向上的数字或点 centerx double 沿 x 轴的中心,通常是水平方向坐标点数的一半 centery double 沿 y 轴的中心,通常是垂直方向坐标点数的一半 *points point_t config.txt
中定义的转换点序列,数量 =w * h
STITCH
简介
stitch是一个可配置的图像拼接计算单元,可以完成多幅图像之间的融合拼接,主要应用于自动泊车场景下的360度环视图像拼接。stitch基于ROI进行计算,每个ROI可以完成两幅源图像的alpha-beta blending融合, 并将其写入目标图像指定的ROI中,这种融合拼接方式可以使得拼接过渡更加自然,同时stitch还支持Y、U、V各通道的增益调节,可以实现源图像间的亮度、色度均衡,进一步提升拼接效果。此外stitch支持用户输入自定义像素级alpha-beta权重值,基此 可实现多种融合效果,如背景虚化、图像水印等。
硬件工作模式
- Online blnding: 无需输入LUT表,硬件自动进行融合拼接,要求ROI w=h;该模式下硬件依据配置参数中的过渡带宽度、方向等,自动计算出每个像素点的alpha、beta权重值。
- Alpha blending: 需要输入alpha LUT表,硬件读取DDR中的alpha权重值进行加权融合; 其中alpha LUT表中存储着该ROI中每个像素点的alpha权重值。对于每个像素点硬件会分别读取y、uv、alpha的值进行加权融合。
- Alpha-beta blending: 需要输入alpha、beta LUT表,硬件读取DDR中的alpha、beta权重值进行加权融合。
- Src copy: 不需要输入LUT表,硬件直接拷贝src0。
- Src alpha copy: 需要alpha LUT表,硬件读取DDR中的alpha权重值并进行融合src0。 其中,LUT表指的是融合拼接权重参数buf
硬件拼接示意图
通过使用图片上的两个源ROI进行不同blend mode的拼接,最终输出对应的ROI结果
拼接方案介绍
硬件拼接功能可以完成将多张图片拼接融合生成一张图片。硬件上设计灵活,以ROI为基本处理单位,基于alpha blend算法,使用不同的配置字参数划分出不同的ROI划分区域灵活的配置生成多种不同的拼接方案,并且运用LUT表处理拼接的过渡区域优化效果,在自动驾驶以及ADAS的APA场景下,可以将四路摄像头已经被畸变矫正过后的IPM图像数据拼接成一路360环视图 ,用于停车位的检测,方便用户查看车位线周边情况进行停车。
典型场景
在APA场景,四路环视泊车,GDC从DDR中获取4张回灌图片和参考点(CFG
BIN)通过畸变矫正输出4张IPM图,然后通过STITCH硬件拼接模块使用预先定义好的配置字拼接方案参数(CPG
PARAM)进行硬件拼接输出鸟瞰图。
摆放位置
- 四张IPM图通过copy模式放到指定输出地址的指定位置
- 没有重合的区域可以使用直接拷贝模式
- ROI重合区域使用Alpha Blend模式进行融合拼接
LUT表
LUT表存放的是alpha/beta融合参数系数,类似权重值,每个ROI都要生成对应像素点的融合参数系数,范围0-255,依次存放进LUT表的内存中, 当ROI的拼接模式使用alpha和beta融合时候,会使用该参数进行融合。
比如 坐标点参数举例章节中的LUT生成: ROI-0/1: 256512 ROI-2/3: 560256 ROI-4/5:256218 ROI-6/7:256186 LUT:ROI-0 + ROI-1 + ROI-2 + ROI-3 + ROI-4 + ROI-5 + ROI-6 + ROI-7 目前LUT表可以通过convert_tool工具生成。
坐标点参数举例
硬件拼接的ROI的划分与相机的安装位置有直接关系,目前可以通过convert-tool工具生成,下图为各ROI划分区域坐标点显示示例。
ROI | 范围 | SRC0 | 起点 | 大小 | SRC1 | 起点 | 大小 | 目标起点 | 模式 |
---|---|---|---|---|---|---|---|---|---|
0 | 左视全图 | 左视(frame0) | (0,0) | -256,512 | / | / | / | (0,40) | 直接拷贝 |
1 | 右视全图 | 右视(frame2) | (0,0) | -256,512 | / | / | / | (304,40) | 直接拷贝 |
2 | 后视全图 | 后视(frame3) | (0,0) | -560,256 | / | / | / | (0,366) | 直接拷贝 |
3 | 前视全图 | 前视(frame1) | (0,0) | -560,256 | / | / | / | (0,0) | 直接拷贝 |
4 | 左视与前视重合 | 左视(frame0) | (0,0) | -256,218 | 前视(frame1) | (0,40) | -256,218 | (0,40) | AlphaBlend |
5 | 右视与前视重合 | 右视(frame2) | (0,0) | -256,218 | 前视(frame1) | (304,40) | -256,218 | (304,40) | AlphaBlend |
6 | 左视与后视重合 | 左视(frame0) | (0,366) | -256,186 | 后视(frame3) | (0,0) | -256,186 | (0,366) | AlphaBlend |
7 | 右视与后视重合 | 右视(frame2) | (0,366) | -256,186 | 后视(frame3) | (304,0) | -256,218 | -304,366 | AlphaBlend |
数据流和性能指标
RDK-S100 接入camera 后,进入后级模块处理,其数据流通路如下图所示:
- MIPI RX: 3路 CDPHY,每路为 DPHY 最大 4.5Gbps/lane x 4lane 或 CPHY 最大 3.5Gbps/trio x 3trio,每路支持4VC,理论最多支持 12 路接入 。
RDK-S100 软件预计最大支持 6路 camera,RX4 通过 serdes 最多可接入 4 路 camera,RX0 和 RX1 各接入 1路 camera,如果不是这种常规接法,请联系 FAE 进行确认。 |
---|
-
CIM: RX 接入,可 online 输出到 ISP0/ISP1(RAW) 与 PYM0/PYM1(YUV),也可 offline 下 DDR,之后各模块通过 DDR 读取使用数据流。
-
ISP: 2 个 ISP 设备,各支持 4 路 online + 8 路 offline 输入,每个 ISP 最大支持 2x4K@60fps 处理。
-
PYM: 3 个 PYM 设备,其中 PYM0/PYM1 为全功能模块支持 online/offline,PYM4 只支持 offline,4K@60fps处理。
-
GDC: 1 个 GDC 设备,只支持 offline 方式,4K@60fps 处理。
CIM | ISP0 / ISP1 | PYM0 / PYM1 | PYM4 | GDC | YNR | STITCH | |
---|---|---|---|---|---|---|---|
1080P处理每帧耗时 | 3.7151 ms | 1.8616 ms | 2.2373 ms | 2.7616 ms | 3.7447 ms | 1.7774 ms | 1.5739 ms |
4k处理每帧耗时 | 14.8606 ms | 7.4467 ms | 7.1356 ms | 10.7018 ms | 15.0624 ms | 7.1096 ms | 5.7349 ms |
已点亮sensor
类型 | sensor name | 备注 |
---|---|---|
MIPI sensor | IMX219 | raw10 1080p |
GMSL sensor | 0820c | yuv 4k & 1080p |
OVX3C | raw12 1280P | |
OVX8B | raw12 4K |
Camera API
注意,本章节是基于 HBN 架构进行描述和列举内容,非 V4L2 架构。 |
---|
模块描述
RDK-S100 HBN Camera 包含三个组件:Camera sensor、解串器(Deserial)、串行器(Serializer)。串行器是对 mipi tx 的封装。 每个组件都有 attach、detach 接口和 vin 绑定或解绑。如 camera 和 vin 绑定,就是确定 camera 使用 SoC 上的哪个 mipi rx、i2c controller 然后初始化 sensor 的过程。
API参考
- hbn_camera_create
【函数声明】
int32_t hbn_camera_create(camera_config_t *cam_config, camera_handle_t *cam_fd)
【参数描述】
[IN] camera_config_t *cam_config:要配置的camera对应的参数结构体指针;
[OUT] camera_handle_t *cam_fd:根据配置参数返回的fd,作为camera的操作handle;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
根据camera_config_t传入的配置创建camera handle。
【注意事项】
API里面会对sensor lib 进行检查,如果sensor 驱动代码不符合 HBN 框架规范,则会检查报错。
API里面会对cam_config 进行检查,如果配置不符合IP 硬件能力,则会检查报 错。
- hbn_camera_destroy
【函数声明】
int32_t hbn_camera_destroy(camera_handle_t cam_fd)
【参数描述】
[IN] camera_handle_t cam_fd:camera的操作handle,由hbn_camera_create所创建;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
根据camera handle销毁对应的软件资源。
【注意事项】
hbn_camera_destroy 需要和hbn_camera_create 成对使用。
hbn_camera_destroy 会释放sensor lib, 执行完成后,sensor 将无法正常访问。
hbn_camera_destroy 内部会调用hbn_camera_detach_from_vin,会触发sensor停流操作,所以hbn_camera_destroy需要在hbn_vflow_destroy之前调用。
- hbn_camera_attach_to_vin
【函数声明】
int32_t hbn_camera_attach_to_vin(camera_handle_t cam_fd, vpf_handle_t vin_fd)
【参数描述】
[IN] camera_handle_t cam_fd:camera handle,由hbn_camera_create创建;
[IN] vpf_handle_t vin_fd:由hbn_vnode_open接口创建的vin node handle。
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
通过camera和vin node的handle,将两者在vpf框架中绑定,并对camera的硬件初始化。
【注意事项】
同一个camera,不能重复执行hbn_camera_attach_to_vin,否则会报attach error错误。
- hbn_camera_detach_from_vin
【函数声明】
int32_t hbn_camera_detach_from_vin(camera_handle_t cam_fd)
【参数描述】
[IN] camera_handle_t cam_fd:camera handle,由hbn_camera_create创建;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
将camera与vin node解绑,并做去初始化操作。
【注意事项】
hbn_camera_detach_from_vin需要和hbn_camera_attach_to_vin成对使用。
hbn_camera_destroy内部调用了hbn_camera_detach_from_vin,所以调用了hbn_camera_destroy接口,hbn_camera_detach_from_vin可以不再调用。
- hbn_camera_attach_to_deserial
【函数声明】
int32_t hbn_camera_attach_to_deserial(camera_handle_t cam_fd, deserial_handle_t des_fd, camera_des_link_t link)
【参数描述】
[IN] camera_handle_t cam_fd:camera handle,由hbn_camera_create创建;
[IN] deserial_handle_t des_fd:deserial handle,由hbn_deserial_create创建;
[IN] camera_des_link_t link:camera与deserial的link方式,根据camera接到哪个link决定。
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
通过camera和deserial的handle,将两者绑定,并对deserial和camera硬件初始化。
【注意事项】
硬件上有解串器时才需要调用该接口。
执行hbn_camera_attach_to_deserial后,就不需要再执行hbn_camera_attach_to_vin,而是由deserial绑定到vin node。
- hbn_camera_detach_from_deserial
【函数声明】
int32_t hbn_camera_detach_from_deserial(camera_handle_t cam_fd)
【参数描述】
[IN] camera_handle_t cam_fd:camera handle,由hbn_camera_create创建;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
将camera与deserial解绑,并做去初始化操作。
【注意事项】
hbn_camera_detach_from_deserial需要和hbn_camera_attach_to_deserial成对使用。
调用该api前需要先调用 hbn_deserial_detach_from_vin
- hbn_camera_start
【函数声明】
int32_t hbn_camera_start(camera_handle_t cam_fd)
【参数描述】
[IN] camera_handle_t cam_fd:camera handle, 由hbn_camera_create创建;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
配置camera寄存器,开始出流。
【注意事项】
camera handle attach 到 vflow 后,该接口可以不调用。如果要调用必须先调用hbn_vflow_start,再调用hbn_camera_start。
- hbn_camera_stop
【函数声明】
int32_t hbn_camera_stop(camera_handle_t cam_fd)
【参数描述】
[IN] camera_handle_t cam_fd:camera handle,由hbn_camera_create创建;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
camera关流。
【注意事项】
需要和hbn_camera_start成对使用。
- hbn_camera_reset
【函数声明】
int32_t hbn_camera_reset(camera_handle_t cam_fd)
【参数描述】
[IN] camera_handle_t cam_fd:camera handle,由hbn_camera_create创建;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
通过重新初始化sensor来做reset。
【注意事项】
如果在camera attach vin之前调用该接口,则会通过camera_attach_to_vin接口来给sensor初始化,达到reset效果。如果是在camera attach vin之后调用该接口,则会调用sensor stop,sensor deinit,然后初始化再重新init sensor,start sensor。
- hbn_camera_change_fps
【函数声明】
int32_t hbn_camera_change_fps(camera_handle_t cam_fd, int32_t fps)
【参数描述】
[IN] camera_handle_t cam_fd:camera handle,由hbn_camera_create创建;
[IN] int32_t fps:sensor出图帧率;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
动态切换sensor帧率。
【 注意事项】
该功能需要在sensor lib库中实现相应的回调函数 dynamic_switch_fps。
- hbn_camera_read_register
【函数声明】
int32_t hbn_camera_read_register(camera_handle_t cam_fd, camera_reg_type_t type, uint32_t reg_addr)
【参数描述】
[IN] camera_handle_t cam_fd:camera handle,由hbn_camera_create创建;
[IN] camera_reg_type_t type:读取sensor寄存器的类型;
[IN] uint32_t reg_addr:寄存器地址;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
读取camera寄存器的值。
【注意事项】
无
- hbn_camera_get_handle
【函数声明】
camera_handle_t hbn_camera_get_handle(vpf_handle_t vin_fd, int32_t camera_index)
【参数描述】
[IN] vpf_handle_t vin_fd:vin node的fd;
[IN] int32_t camera_index:camera的port index;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
通过vin node handle或者camera port index,获取对应的camera handle。
【注意事项】
无
- hbn_camera_init_cfg
【函数声明】
int32_t hbn_camera_init_cfg(const char *cfg_file)
【参数描述】
[IN] const char *cfg_file:camera配置文件路径(json);
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
通过传入的配置,创建camera handle和deserial handle并绑定。
【注意事项】
该API是通过解析json方式来创建camera,与sample中非json方式接口不同,详情请咨询FAE。
- hbn_deserial_create
【函数声明】
int32_t hbn_deserial_create(deserial_config_t *des_config, deserial_handle_t *des_fd)
【参数描述】
[IN] deserial_config_t *des_config:deserial配置参数结构体指针;
[OUT] deserial_handle_t *des_fd:根据配置创建的deserial handle;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
根据传入的配置,创建deserial handle。
【注意事项】
硬件上有解串器时才需要调用该接口。
该接口会对deserial的配置进行检查,如果配置超出一定范围,则会报错。
该接口会对deserial lib进行检查,如果不符合HBN架构规范,则会报错。
- hbn_deserial_destroy
【函数声明】
int32_t hbn_deserial_destroy(deserial_handle_t des_fd)
【参数描述】
[IN] deserial_handle_t des_fd:deserial handle,由hbn_deserial_create创建;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
根据deserial handle销毁对应的软件资源。
【注意事项】
hbn_deserial_destroy需要和hbn_deserial_create成对使用。
- hbn_deserial_attach_to_vin
【函数声明】
int32_t hbn_deserial_attach_to_vin(deserial_handle_t des_fd, camera_des_link_t link, vpf_handle_t vin_fd)
【参数描述】
[IN] deserial_handle_t des_fd:deserial handle,由hbn_deserial_create创建;
[IN] camera_des_link_t link:deserial的link编号;
[IN] vpf_handle_t vin_fd:要绑定到的vin node handle;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
将deserial与vin node绑定。
【注意事项】
硬件上带有解串器,则 camera与deserial进行绑定,deserial与vin node 绑定。
- hbn_deserial_detach_from_vin
【函数声明】
int32_t hbn_deserial_detach_from_vin(deserial_handle_t des_fd, camera_des_link_t link)
【参数描述】
[IN] deserial_handle_t des_fd:deserial handle,由hbn_deserial_create创建;
[IN] camera_des_link_t link:deserial的link编号;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
将deserial与vin node解绑。
【注意事项】
hbn_deserial_detach_from_vin与hbn_deserial_attach_to_vin需要成对使用。
- hbn_txser_create
【函数声明】
int32_t hbn_txser_create(txser_config_t *txs_config, txser_handle_t *txs_fd)
【参数描述】
[IN] txser_config_t *txs_config:tx serial配置参数结构体指针;
[OUT] txser_handle_t *txs_fd:根据配置创建的tx serial handle;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
根据传入的配置,创建串行器句柄 tx serial handle。
【注意事项】
硬件上有串行器时才需要调用该接口。
该接口会对txser的配置进行检查,如果配置超出一定范围,则会报错。
该接口会对txser lib进行检查,如果不符合HBN架构规范,则会报错。
- hbn_txser_destroy
【函数声明】
int32_t hbn_txser_destroy(txser_handle_t txs_fd)
【参数描述】
[IN] txser_handle_t txs_fd:tx serial handle,由hbn_txser_create创建;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
根据tx serial handle销毁对应的软件资源。
【注意事项】
硬件上有串行器时才需要调用该接口。
hbn_txser_destroy与hbn_txser_create需要成对使用。
- hbn_txser_attach_to_vin
【函数声明】
int32_t hbn_txser_attach_to_vin(txser_handle_t txs_fd, camera_txs_csi_t csi, vpf_handle_t vin_fd)
【参数描述】
[IN] txser_handle_t txs_fd:tx serialhandle,由hbn_txser_create创建;
[IN] camera_txs_csi_t csi:tx csi index;
[IN] vpf_handle_t vin_fd:要绑定到的vin node handle;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
将tx serial与vin node绑定。
【注意事项】
硬件上有串行器时才需要调用该接口。
该接口会对txser硬件进行初始化。
硬件上带有串行器,则camera与txser进行绑定,txser与vin node 绑定。
- hbn_txser_detach_from_vin
【函数声明】
int32_t hbn_txser_detach_from_vin(txser_handle_t txs_fd, camera_txs_csi_t csi)
【参数描述】
[IN] txser_handle_t txs_fd:tx serial handle,由hbn_txser_create创建;
[IN] camera_txs_csi_t csi:tx csi index;
【返回值】
成功:RET_OK 0
失败:异常为负值错误码
【功能描述】
将tx serial与vin node解绑。
【注意事项】
hbn_txser_detach_from_vin需要与hbn_txser_attach_to_vin成对使用。
参数说明
typedef struct camera_config_s
名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
---|---|---|---|---|---|---|
name[CAMERA_MODULE_NAME_LEN] | char | - | CAMERA_MODULE_NAME_LEN(108) | - | camera 模组名称,需要和 sensor lib 名称对应,如:sensor 驱动名称为:libimx219.so,那么 name 为 imx219 | 是 |
addr | uint32_t | 0x00 | 0x7f | 0x00 | sensor 设备地址,一般是 i2c 7位地址 | 是 |
isp_addr | uint32_t | 0x00 | 0x7f | 0x00 | isp 设备地址(如有),默认无 | 否 |
eeprom_addr | uint32_t | 0x00 | 0x7f | 0x00 | eeprom 设备地址(如有),默认无 | 否 |
serial_addr | uint32_t | 0x00 | 0x7f | 0x00 | serdes 设备地址(如有),默认无 | 否 |
sensor_mode | uint32_t | 1 | 5 | 1 | sensor 工作模式,可以使用 enum sensor_mode_e 枚举,定义如下: | 是 |
1:NORMAL_M,linear 模式; | ||||||
2:DOL2_M,hdr2帧合成1帧; | ||||||
3:DOL3_M,hdr3帧合成1帧; | ||||||
4:DOL4_M,hdr4帧合成1帧; | ||||||
5:PWL_M,hdr 模式 sensor 内部合成 | ||||||
sensor_clk | uint32_t | - | - | 0x00 | sensor 一些 clk 时钟配置,目前未生效,备用 | 否 |
gpio_enable | uint32_t | 0 | 0xFFFFFFFF | 0 | 是否使用 X5 gpio 控制 camera sensor 的引脚,以满足 sensor 上下电的时序要求。 | 是 |
如:使用 gpio 来控制 sensor XSHUTDN 引脚。 | ||||||
注意:需要在 dts 中配置对应的 gpio number。 | ||||||
0:不使用 gpio 来控制; | ||||||
非0:使用 gpio 来控制 sensor,按照 bit 来使能 gpio。比如: 0x07 则代表使能 [gpio_a, gpio_b, gpio_c] 3 个 gpio。 | ||||||
gpio_level | uint32_t | 0 | 1 | 0 | 如果选择 gpio_enablet,则可以配置 gpio_level bit 来控制 sensor 引脚高低电平。某个 gpio bit 与 sensor 管脚高低电平关系如下: | 是 |
0: 先输出低电平, sleep 1s,再输出高电平; | ||||||
1: 先输出高电平,sleep 1s,再输出低电平。 | ||||||
比如:0x05 = 101,从 bit0 到 bit2 分别代表 gpio_a 先输出高电平,再输出低电平,gpio_b 先输出低电平,再输出高电平,gpio_c 先输出高电平,再输出低电平。 | ||||||
需要根据 sensor spec 上电时序来自定义。 | ||||||
bus_select | uint32_t | 0 | 6 | 0 | sensor i2c number 选择,一般硬件固定后,对应的 i2c 也是固定的,所以建议在 dts 中配置,这里可以省去。 | 否 |
dts 中绑定 sensor i2c,详情见:camera 点亮说明文档。 | ||||||
bus_timeout | uint32_t | 0 | - | 0 | I2C 的 timeout 时间配置。配置了 bus_select,才需要配置。 | 否 |
fps | uint32_t | 0 | 120 | 0 | sensor 帧率配置。 | 是 |
width | uint32_t | 0 | 8192 | 0 | sensor 出图宽度(pixel) | 是 |
height | uint32_t | 0 | 4096 | 0 | sensor 出图高度(pixel) | 是 |
format | uint32_t | - | - | - | sensor 数据类型,常见的如下: | 是 |
RAW8: 0x2A; | ||||||
RAW10: 0x2B; | ||||||
RAW12: 0x2C; | ||||||
YUV422 8-bit: 0x1E | ||||||
flags | uint32_t | 0 | - | 0 | 可选功能:诊断,恢复,debug 等 | 否 |
extra_mode | uint32_t | 0 | - | 0 | 各 sensor 库内部定制配置: 多用于区分模组与功能开关 | 是 |
config_index | uint32_t | 0 | - | 0 | 各 sensor 库内部定制配置: 多用于区分模组与功能开关 | 是 |
ts_compensate | uint32_t | 0 | - | 0 | 预留参数,备用 | 否 |
mipi_cfg | mipi_config_t | - | - | - | MIPI 配置, 置为 NULL 自动从 sensor 驱动中获取配置(get_csi_attr)。 | 是 |
calib_lname | char | - | - | - | sensor 效果库路径,默认路径为 /usr/hobot/lib/sensor | 是 |
sensor_param | char | - | - | - | sensor 自定义数据 | 否 |
iparam_mode | uint32_t | - | - | - | 预留参数,备用 | 否 |
end_flag | uint32_t | - | - | - | 结构体配置的结束标志,默认为 CAMERA_CONFIG_END_FLAG | 是 |
typedef struct deserial_config_s
名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
---|---|---|---|---|---|---|
name | char[CAMERA_MODULE_NAME_LEN] | - | - | - | Deserial 的名称,例如 max9296。 | 是 |
addr | uint32_t | 0 | - | - | Deserial 设备的地址。 | 是 |
gpio_enable | uint32_t | 0 | - | - | GPIO 操作使能位,索引自 VCON。 | 是 |
gpio_level | uint32_t | 0 | - | - | GPIO 工作状态位,表示当前 GPIO 状态。 | 是 |
gpio_mfp | uint8_t[CAMERA_DES_GPIO_MAX] | 0 | CAMERA_DES_GPIO_MAX | 0x0 | MFP 的 GPIO 功能选择,用于指定 GPIO 的多功能配置。 | 是 |
bus_select | uint32_t | 0 | - | - | I2C 总线选择,索引自 VCON。 | 是 |
bus_timeout | uint32_t | 0 | - | - | I2C 超时时间设置,单位为毫秒。 | 是 |
lane_mode | uint32_t | 0 | - | - | PHY 配置的 lane 模式选择。 | 是 |
lane_speed | uint32_t | 0 | - | - | PHY 配置的 lane 速率。 | 是 |
link_map | uint32_t | 0 | - | - | Link 和 CSI/VC 的映射关系配置。 | 是 |
link_desp | char[CAMERA_DES_LINKMAX][CAMERA_DES_PORTDESP_LEN] | - | - | - | 各 Link 连接模组的配置描述,用于多进程使用。 | 是 |
reset_delay | uint32_t | 0 | - | - | Reset 操作的延迟时间,单位为毫秒。 | 是 |
flags | uint32_t | 0 | - | - | 可选功能标志,例如诊断、调试等。 | 否 |
poc_cfg | poc_config_t* | - | - | NULL | POC 配置指针,若为 NULL 则无 POC 功能。 | 否 |
mipi_cfg | mipi_config_t* | - | - | NULL | MIPI 配置指针,若为 NULL 则自动获取配置。 | 否 |
deserial_param | char* | - | - | NULL | Deserial 自定义数据指针。 | 否 |
end_flag | uint32_t | 0 | 0xFFFFFFFF | - | 结构体配置的结束标志,默认为 DESERIAL_CONFIG_END_FLAG | 是 |
typedef struct poc_config_s
名称 | 类型 | 最小值 | 最大值 | 默认值 | 含义 | 必选 |
---|---|---|---|---|---|---|
name | char[CAMERA_MODULE_NAME_LEN] | - | - | - | POC 的名称,例如 max20087。 | 是 |
addr | uint32_t | 0 | - | - | POC 设备的地址。 | 是 |
gpio_enable | uint32_t | 0 | - | - | GPIO 操作使能位,索引自 VCON。 | 是 |
gpio_level | uint32_t | 0 | - | - | GPIO 工作状态位,表示当前 GPIO 状态。 | 是 |
poc_map | uint32_t | 0 | - | - | POC 与 Link 的映射关系。 | 是 |
power_delay | uint32_t | 0 | - | - | POC 开关操作的延迟时间,单位为毫秒。 | 是 |
end_flag | uint32_t | 0 | 0xFFFFFFFF | - | 结构体配置的结束标志,用于校验完整性,默认为 POC_CONFIG_END_FLAG | 是 |
返回值说明
错误码 | 宏定义 | 描述 | 常见原因及解决方法 |
---|---|---|---|
0 | HBN_STATUS_SUCESS | 成功 | |
1 | HBN_STATUS_INVALID_NODE | vnode 无效,找不到对应的 vnode | |
2 | HBN_STATUS_INVALID_NODETYPE | vnode 类型无效,找不到对应的 vnode | 对于 VIN,vnode 类型为 HB_VIN |
3 | HBN_STATUS_INVALID_HWID | 无效的硬件模块 id | 对于 VIN,hw_id 取值为 0 |
4 | HBN_STATUS_INVALID_CTXID | 无效的 context id | 可设置为 AUTO_ALLOC_ID,由 HBN 框架自动分配 |
8 | HBN_STATUS_INVALID_NULL_PTR | 空指针 | |
9 | HBN_STATUS_INVALID_PARAMETER | 无效的参数,版本检查失败 | |
10 | HBN_STATUS_ILLEGAL_ATTR | 无效的参数 | |
11 | HBN_STATUS_INVALID_FLOW | 无效的 flow,找不到对应的 flow | |
12 | HBN_STATUS_FLOW_EXIST | flow 已经存在 | |
13 | HBN_STATUS_FLOW_UNEXIST | flow 不存在 | |
14 | HBN_STATUS_NODE_EXIST | node 已经存在 | |
15 | HBN_STATUS_NODE_UNEXIST | node 不存在 | |
16 | HBN_STATUS_NOT_CONFIG | 预留 | |
19 | HBN_STATUS_ALREADY_BINDED | node 已经绑定 | |
20 | HBN_STATUS_NOT_BINDED | node 未绑定 | |
21 | HBN_STATUS_TIMEOUT | 超时 | |
22 | HBN_STATUS_NOT_INITIALIZED | 未初始化 | |
23 | HBN_STATUS_NOT_SUPPORT | 通道不支持或未激活 | |
24 | HBN_STATUS_NOT_PERM | 操作不允许 | |
25 | HBN_STATUS_NOMEM | 内存不足 | |
31 | HBN_STATUS_JSON_PARSE_FAIL | json 解析失败 | |
34 | HBN_STATUS_SET_CONTROL_FAIL | 模块控制、调节参数(如 ISP 效果参数)设置失败 | |
35 | HBN_STATUS_GET_CONTROL_FAIL | 模块控制、调节参数(如 ISP 效果参数)获取失败 | |
36 | HBN_STATUS_NODE_START_FAIL | node 开启失败 | |
37 | HBN_STATUS_NODE_STOP_FAIL | node 停止失败 | |
42 | HBN_STATUS_NODE_ILLEGAL_EVENT | node 通道 poll 时事件非法 | |
43 | HBN_STATUS_NODE_DEQUE_ERROR | node 通道 dequeue buffer 错误 | |
51 | HBN_STATUS_INVALID_VERSION | 底层驱动模块和上层库版本号不匹配错误 | |
52 | HBN_STATUS_GET_VERSION_ERROR | 获取底层驱动模块版本号错误 | |
128 | HBN_STATUS_ERR_UNKNOW | 未知错误 |
Camera 点亮
HBN API
描述
在软件上,Camera是单独一套API,Camera之后的模块用vnode来抽象,vnode抽象的模块包括VIN、ISP、PYM、GDC。 多个vnode组成一条vflow(类似于一条pipeline)。Camera和VIN通过attach接口绑定起来。 用户只需要调用HBN接口完成模块的初始化和绑定,vflow建立并启动后,用户无须关心数据帧的传递,SDK内部会将数据帧由上游传递到下游。
一个vflow由一个或多个vnode组成,一个vnode有一个输入通道,一个或多个输出通道。
接口调用示例:
API参考
- hbn_vnode_open
【函数声明】
hobot_status hbn_vnode_open(hb_vnode_type vnode_type, uint32_t hw_id, int32_t ctx_id, hbn_vnode_handle_t *vnode_fd)
【参数描述】
[IN] hb_vnode_type vnode_type:vnode类型,每个硬件模块对应一个vnode类型。取值为HB_VIN、HB_ISP、HB_PYM等;
[IN] uint32_t hw_id:模块的硬件id。
[IN] uint32_t ctx_id:模块的context id,软件上的概念,可指定context id值,也可设置为AUTO_ALLOC_ID,由SDK自动分配context id;
[OUT] hbn_vnode_handle_t *vnode_fd:返回模块的vnode handle;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明。
【功能描述】
初始化某个模块,打开该模块设备节点,返回该模块的vnode handle。
【注意事项】
无
- hbn_vnode_close
【函数声明】
void hbn_vnode_close(hbn_vnode_handle_t vnode_fd)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
【返回值】
无
【功能描述】
关闭模块的设备节点。
【注意事项】
调用了hbn_vflow_destroy就无须再调用hbn_vnode_close。
模块单独使用时(例如只是GDC回灌)可调用hbn_vnode_close,模块串在vflow中,调用hbn_vflow_destroy即可,无须调用hbn_vnode_close。
- hbn_vnode_set_attr
【函数声明】
hobot_status hbn_vnode_set_attr(hbn_vnode_handle_t vnode_fd, void *attr)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
[IN] void *attr:模块的基本属性结构体指针。基本属性结构体可以是vin_attr_t、isp_attr_t、pym_attr_t等,以模块名+_attr_t结尾的属性;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明
【功能描述】
设置模块的基本属性。
【注意事项】
无
- hbn_vnode_get_attr
【函数声明】
hobot_status hbn_vnode_get_attr(hbn_vnode_handle_t vnode_fd, void *attr)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
[OUT] void *attr:模块的基本属性结构体指针。基本属性结构体可以是vin_attr_t、isp_attr_t、pym_attr_t等,以模块名+_attr_t结尾的属性;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明
【功能描述】
获取模块的基本属性。
【注意事项】
无
- hbn_vnode_set_attr_ex
【函数声明】
hobot_status hbn_vnode_set_attr_ex(hbn_vnode_handle_t vnode_fd, void *attr)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
[IN] void *attr:模块的扩展属性结构体指针。扩展属性结构体可以是vin_attr_ex_t等,以模块名+_attr_ex_t结尾的属性;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考 返回值说明
【功能描述】
设置模块的扩展属性,可在应用运行中动态设置。
【注意事项】
无
- hbn_vnode_get_attr_ex
【函数声明】
hobot_status hbn_vnode_get_attr_ex(hbn_vnode_handle_t vnode_fd, void *attr)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
[OUT] void *attr:模块的扩展属性结构体指针。扩展属性结构体可以是vin_attr_ex_t等,以模块名+_attr_ex_t结尾的属性;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明
【功能描述】
获取模块的扩展属性。
【注意事项】
无
- hbn_vnode_set_ochn_attr
【函数声明】
hobot_status hbn_vnode_set_ochn_attr(hbn_vnode_handle_t vnode_fd, uint32_t ochn_id, void *attr)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
[IN] uint32_t ochn_id:模块的输出通道id,通道id见模块通道说明;;
[IN] void *attr:模块的输出通道属性结构体指针。输出通道属性可以是vin_ochn_attr_t、isp_ochn_attr_t等,以模块名+_ochn_attr_t结尾的属性;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明
【功能描述】
设置模块的输出通道属性。
【注意事项】
无
- hbn_vnode_get_ochn_attr
【函数声明】
hobot_status hbn_vnode_get_ochn_attr(hbn_vnode_handle_t vnode_fd, uint32_t ochn_id, void *attr)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
[IN] uint32_t ochn_id:模块的输出通道id,通道id见模块通道说明;
[OUT] void *attr:模块输出通道属性结构体指 针。输出通道属性可以是vin_ochn_attr_t、isp_ochn_attr_t等,以模块名+_ochn_attr_t结尾的属性;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明
【功能描述】
获取模块的输出通道属性。
【注意事项】
无
- hbn_vnode_set_ochn_attr_ex
【函数声明】
hobot_status hbn_vnode_set_ochn_attr_ex(hbn_vnode_handle_t vnode_fd, uint32_t ochn_id, void *attr)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
[IN] uint32_t ochn_id:模块的输出通道id,通道id见模块通道说明;
[IN] void *attr:模块的输出通道扩展属性结构体指针。输出通道扩展属性可以是pym_ochn_attr_ex_t等,以模块名+_ochn_attr_ex_t结尾的属性;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明
【功能描述】
设置模块的输出通道扩展属性,可在应用运行中动态设置。
【注意事项】
无
- hbn_vnode_set_ichn_attr
【函数声明】
hobot_status hbn_vnode_set_ichn_attr(hbn_vnode_handle_t vnode_fd, uint32_t ichn_id, void *attr)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
[IN] uint32_t ichn_id:模块的输入通道id,通道id见模块通道说明;
[IN] void *attr:模块的输入通道属性结构体指针。输入通道属性可以是vin_ichn_attr_t、isp_ichn_attr_t等,以模块名+_ichn_attr_t结尾的属性;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明
【功能描述】
设置模块的输入通道属性。
【注意事项】
无
- hbn_vnode_get_ichn_attr
【函数声明】
hobot_status hbn_vnode_get_ichn_attr(hbn_vnode_handle_t vnode_fd, uint32_t ichn_id, void *attr)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
[IN] uint32_t ichn_id:模块的输入通道id,通道id见模块通道说明;
[OUT] void *attr:模块的输入通道属性结构体指针。输入通道属性可以是vin_ichn_attr_t、isp_ichn_attr_t等,以模块名+_ichn_attr_t结尾的属性;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明
【功能描述】
获取模块的输入通道属性。
【注意事项】
无
- hbn_vnode_set_ochn_buf_attr
【函数声明】
hobot_status hbn_vnode_set_ochn_buf_attr(hbn_vnode_handle_t vnode_fd, uint32_t ochn_id, hbn_buf_alloc_attr_t *alloc_attr)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
[IN] uint32_t ochn_id:模块的输出通道id,通道id见模块通道说明;
[IN] hbn_buf_alloc_attr_t *alloc_attr:buffer分配属性;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明
【功能描述】
设置输出通道buffer属性。
【注意事项】
无
- hbn_vnode_start
【函数声明】
hobot_status hbn_vnode_start(hbn_vnode_handle_t vnode_fd)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明
【功能描述】
模块启动。
【注意事项】
启动前需要先打开模块。
- hbn_vnode_stop
【函数声明】
hobot_status hbn_vnode_stop(hbn_vnode_handle_t vnode_fd)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明
【功能描述】
模块停止。
【注意事项】
无
- hbn_vnode_getframe
【函数声明】
hobot_status hbn_vnode_getframe(hbn_vnode_handle_t vnode_fd, uint32_t ochn_id, uint32_t millisecondTimeout, hbn_vnode_image_t *out_img)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
[IN] uint32_t ochn_id:模块的输出通道id,通道id见模块通道说明;
[IN] uint32_t millisecondTimeout:超时等待时间;
[OUT] hbn_vnode_image_t *out_img:输出图像buffer结构体地址;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明
【功能描述】
获取模块输出通道的图像,阻塞型接口。
【注意事项】
无
- hbn_vnode_releaseframe
【函数声明】
hobot_status hbn_vnode_releaseframe(hbn_vnode_handle_t vnode_fd, uint32_t ochn_id, hbn_vnode_image_t *img)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
[IN] uint32_t ochn_id:模块的输出通道id,通道id见模块通道说明;
[IN] hbn_vnode_image_t *img:图像buffer结构体地址;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明
【功能描述】
释放图像buffer,buffer会归还到指定的输出通道。
【注意事项】
无
- hbn_vnode_getframe_group
【函数声明】
hobot_status hbn_vnode_getframe_group(hbn_vnode_handle_t vnode_fd, uint32_t ochn_id, uint32_t millisecondTimeout,hbn_vnode_image_group_t *out_img);
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
[IN] uint32_t ochn_id:模块的输出通道id,通道id见模块通道说明;
[IN] uint32_t millisecondTimeout:超时等待时间;
[OUT] hbn_vnode_image_group_t *out_img:输出图像buffer结构体地址;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明
【功能描述】
获取模块输出通道的多层聚合图像,阻塞型接口。
【注意事项】
ISP和PYM输出图像需要调用该接口获取
- hbn_vnode_releaseframe_group
【函数声明】
hobot_status hbn_vnode_releaseframe_group(hbn_vnode_handle_t vnode_fd, uint32_t ochn_id, hbn_vnode_image_group_t*img)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
[IN] uint32_t ochn_id:模块的输出通道id,通道id见模块通道说明;
[IN] hbn_vnode_image_t *img:图像buffer结构体地址;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明
【功能描述】
释放多层聚合图像buffer,buffer会归还到指定的输出通道。
【注意事项】
无
- hbn_vnode_sendframe
【函数声明】
hobot_status hbn_vnode_sendframe(hbn_vnode_handle_t vnode_fd, uint32_t ichn_id, hbn_vnode_image_t *img)
【参数描述】
[IN] hbn_vnode_handle_t vnode_fd:模块的vnode handle;
[IN] uint32_t ichn_id:模块的输入通道id,通道id见模块通道说明;
[IN] hbn_vnode_image_t *img:输入图像buffer地址;
【返回值】
成功:HBN_STATUS_SUCESS 0
失败:异常为负值错误码,参考返回值说明