常见问题 - SDK相关
常用代码位置
IPC 源码
| 位置 | 作用 |
|---|---|
app/rkipc/src/rv1126b_ipc/ | RV1126B IPC 主程序(main.c、video/、分辨率 ini) |
app/rkipc/common/ | 公共模块(编码、网络、OSD、存储、ISP 等) |
external/ | 底层依赖(camera_engine_rkaiq、mpp 等) |
buildroot/configs/rockchip_rv1126b_ipc_defconfig | IPC 产品 defconfig |
buildroot/board/rockchip/rv1126b/fs-overlay-ipc/ | 启动脚本等 overlay |
怎么改:
- 业务逻辑 →
rv1126b_ipc/+common/ - 分辨率/码流参数 →
rkipc-*.ini - 开机启动 →
fs-overlay-ipc/etc/init.d/S99rkipc→RkLunch-buildroot.sh - 改完在 SDK 根目录:
./build.sh(或单独重编rkipc包)
WEB 前端
| 位置 | 作用 |
|---|---|
app/ipcweb-backend/www-rkipc/ | 前端静态页(Angular 打包产物,.js.gz / .css.gz) |
app/ipcweb-backend/src/ | Web 后端 API(*_api.cpp、rest_api.cpp) |
app/ipcweb-backend/ipcweb-env-*/etc4oem/nginx/ | Nginx 配置 |
设备上部署路径:/usr/www(由 buildroot 的 ipcweb-backend.mk 安装)。
怎么改:
- 改页面/UI:SDK 里只有编译后的
www-rkipc,没有 Angular 源码;需向 Rockchip 要前端工程,或只能直接改静态资源(难维护) - 改接口/功能:改
ipcweb-backend/src/*_api.cpp,后端通过 socket 与rkipc通信 - 改完重编
ipcweb-backend包并刷机
关系: 浏览器 → Nginx → entry.cgi(ipcweb-backend)→ socket → rkipc
IVA 人形/人脸
- 算法库(闭源,只能调 API)
| 路径 | 内容 |
|---|---|
external/iva/librockiva/rockiva-rv1126b-Linux/include/ | API 头文件 |
rockiva_common.h | 类型定义:ROCKIVA_OBJECT_TYPE_PERSON / FACE |
rockiva_det_api.h | 目标检测 |
rockiva_ba_api.h | 行为分析(区域入侵等) |
rockiva_face_api.h | 人脸识别/比对(rkipc 当前未用) |
external/iva/librockiva/.../lib*.so | 预编译库 |
external/iva/models/rockiva_data_rv1126b/ | 模型(iva_object_detection_*.data) |
- 应用层(可改源码,RV1126B IPC 主要在这)
| 路径 | 作用 |
|---|---|
app/rkipc/common/rockiva/rockiva.c | 初始化、选模型、配置检测类型(人形+人脸) |
app/rkipc/src/rv1126b_ipc/video/video.c | 送帧给 IVA、画人形/人脸框 |
app/rkipc/src/rv1126b_ipc/rkipc-*.ini | [event.regional_invasion] 参数 |
external/samples/example/common/sample_comm_iva.c | 官方示例 |
Web 侧区域入侵配置:app/ipcweb-backend/src/event_api.cpp
- 当前 IPC 怎么用人形/人脸
rkipc 走的是 BA(行为分析)+ 检测,不是单独的人脸识别模块:
rockiva_model_type = big→ROCKIVA_DET_MODEL_CLS8(含人形、人脸、车等)small/medium→ROCKIVA_DET_MODEL_PFP(人形、人脸、宠物)- 规则里同时开启:
initParams.baRules.areaInBreakRule[0].objType =
ROCKIVA_OBJECT_TYPE_BITMASK(ROCKIVA_OBJECT_TYPE_PERSON);
initParams.baRules.areaInBreakRule[0].objType |=
ROCKIVA_OBJECT_TYPE_BITMASK(ROCKIVA_OBJECT_TYPE_FACE);
画框在 video.c:人形一种颜色,人脸另一种颜色。
- 应该怎么改
| 需求 | 改哪里 |
|---|---|
| 开关/灵敏度/检测区域 | rkipc-*.ini 的 [event.regional_invasion] |
| 模型大小(精度/性能) | ini 里 rockiva_model_type(big/small/medium) |
| 只检人形、不检人脸 | rockiva.c 里去掉 ROCKIVA_OBJECT_TYPE_FACE 的 bitmask |
| 改框颜色/样式 | rv1126b_ipc/video/video.c 中 ROCKIVA_OBJECT_TYPE_PERSON/FACE 分支 |
| 改算法阈值/规则逻辑 | rockiva.c 的 sense、minObjSize、alertTime 等 |
| 人脸识别/比对(1:N) | 需自行接 rockiva_face_api.h(ROCKIVA_FACE_Init 等),现有 rkipc 未集成 |
| 改检测模型本身 | 只能换 models/ 下 .data 或向 Rockchip 要新库,无源码 |
改完重编 rkipc、iva 包并刷机。模型安装到设备的 /usr/lib/(与 ini 中 rockiva_model_path 一致)。
两种抗畸变方式
有镜头抗畸变相关代码。
RV1126B-P 走与 RV1126B 同一套软件(rv1126bp_ipc defconfig 的 RK_BUILDROOT_BASE_CFG="rv1126b_ipc"),畸变校正逻辑共用。
| 模式 | 说明 | 硬件/模块 |
|---|---|---|
| LDCH | 横向镜头畸变校正(轻量) | ISP / RKAIQ |
| FEC | 基于标定文件的畸变校正(鱼眼/大畸变镜头) | GDC + 标定 ini |
默认均为 close。
代码位置
应用层(主要改这里)
| 文件 | 作用 |
|---|---|
app/rkipc/common/isp/rv1126b/isp.c | rk_isp_set_distortion_correction()、rk_isp_set_ldch_level()、rk_isp_set_fec_level() |
app/rkipc/src/rv1126b_ipc/video/video.c | FEC 时创建 GDC 通道、加载 fec_ini_file |
app/rkipc/src/rv1126b_ipc/rkipc-*.ini | 配置项 |
app/ipcweb-backend/src/image_api.cpp | Web 设置畸变参数 |
底层算法/驱动
| 路径 | 作用 |
|---|---|
external/camera_engine_rkaiq/rkaiq/include/uAPI2/rk_aiq_uapi1_rv1126b.h | rk_aiq_uapi_setLdchEn、setLdchCorrectLevel、setFecEn 等 |
external/camera_engine_rkaiq/IspFec/fec_calib/*.ini | 镜头标定文件(安装到 /usr/share/fec_calib/) |
external/camera_engine_rkaiq/rkaiq/algos/afec/ | FEC 算法 |
kernel-6.1/drivers/media/platform/rockchip/fec/ | FEC 内核驱动 |
文档
app/rkipc/docs/Rockchip_Developer_Guide_Linux_RKIPC_CN.md(RV1126B IPC 数据流、FEC/LDCH 说明)
用法
1. 改 ini(最直接)
在 app/rkipc/src/rv1126b_ipc/rkipc-xxx-buildroot.ini 的 [isp.0.enhancement]:
distortion_correction = LDCH ; 或 FEC / close
ldch_level = 50 ; 0~100,仅 LDCH 有效
fec_level = 50 ; 0~100,仅 FEC 有效
fec_ini_file = /usr/share/fec_calib/sc450ai_CRK4F4209_ldc.ini ; FEC 必填
已有标定文件示例:
sc450ai_CRK4F4209_ldc.inisc850sl_CMK-OT2115-PC1_ldc.iniimx415_CMK-OT1948-PV1_ldc.inisc200ai_CRK2F3537-V2_ldc.ini
2. Web 页面
图像增强 → sDistortionCorrection(FEC / LDCH / close)+ iLdchLevel / iFecLevel
3. 运行时 API
rk_isp_set_distortion_correction(0, "LDCH"); // 或 "FEC"
rk_isp_set_ldch_level(0, 50);
rk_isp_set_fec_level(0, 50);
注意: 切换 distortion_correction 会触发 rk_video_restart() 重建视频链路。
4. FEC 与 LDCH 数据流差异
- LDCH:VI → VPSS online(开销小)
- FEC:VI → GDC → VPSS offline(需
fec_ini_file,开销更大)
FEC 开启时 video.c 会走 rkipc_vi_gdc_vpss_init()。
换镜头 / RV1126B-P 新板子怎么做
- 小畸变普通镜头 → 用 LDCH,调
ldch_level即可。 - 大畸变/鱼眼 → 用 FEC,需为新镜头生成标定 ini(
external/camera_engine_rkaiq/IspFec/工具链),放到/usr/share/fec_calib/并在 ini 里指定路径。 - 精细系数也可在 RKAIQ IQ JSON 的
ldc段配置(sw_ldcC_lensDistor_coeff等)。
RV1126B-P 板级差异主要在 kernel-6.1/arch/arm64/boot/dts/rockchip/rv1126bp-evb*.dts,与畸变算法本身无关。