Files
firmware-lowlevel-development/skills/firmware-lowlevel-psp-development/references/cv181x-media-ai-configuration.md
T

8.6 KiB
Raw Blame History

CV181X Media / AIPlugin 配置取值指南

这份指南用于没有相近板卡 PSP 的新项目,也用于审计已有 PSP。它只提供代码和 Release 能证明的软件约束;Sensor 电气连接、镜头方向、屏幕、音频器件、内存余量、模型效果和 ISP/PQ 仍须由各自证据确认。

先找真正生效的文件

  1. 从项目需求、BSP handoff 和应用工程锁定芯片、架构、libc、系统形态、SDK 版本、屏幕/音频/AI 能力,再指定精确的 EmxMedia-<版本>/<profile> 与 EmxAiPlugin-<版本>/<profile>。不得按日期挑最新,也不得用源码 profile 冒充 Release。检查两个 configs.json / profile.json 中的 ChipSerial、ChipSdkVersion、EmxSdkVersion、Cross;AI 的 AiPlugin.json 还应与目录版本/profile 一致。源码工作区脏时,以所选 Release 的文件/hash 为默认值,源码仅用于解释逻辑;源码与 Release 漂移必须单列。
  2. PspProductionBase/scripts/product.py 的 build_media 从 Release configs.json 读取 SDK、运行库和驱动列表;psp/mediaConfigs.json 若存在会覆盖该入口。build_configs 先复制应用 orgConfigs,再复制 PSP configs,因此 PSP 同名文件最后生效。build_ai_plugin 先复制 PSP AiPlugin,再从 Release 取插件 so;PSP 中有 AiPlugin/profile.json 时会替代 Release profile 决定模型与运行库来源。审计必须记录每个最终文件的来源和 hash。
  3. Release configs/*.json 是默认配置样本,不是 product.py 自动复制到 configs/media/scene/default/ 的保证。若新项目没有这一套运行配置,按应用配置加载路径和选定 Release 建立;不能因为 Release 有文件就认为 PSP 已具备运行配置。AI 的 configs/*.json 也要核对最终 AiPlugin/configs 或 configs_ro 的实际生效路径。
  4. 用 scripts/psp/audit_cv181x_media_ai.py --media-release-profile <精确目录> --ai-release-profile <精确目录> --media-source <Media源码根> --ai-source <AI源码根> [--psp <目标PSP>] 输出全部 JSON 叶子字段、Release 默认值、hash、所选 profile 的编译源码读取位置线索、候选差异、启用算法的模型引用和部分静态通道检查。字段目录覆盖所有字段,但 source_hits_hint_only 只是定位线索,不是字段语义或安全取值的证明。变更字段必须再读调用链、枚举定义/SDK 限制及板级证据;无证据的字段维持默认并标记待确认,不把数字当通用模板。源码 Git commit/脏路径会一并记录;源码脏改动不能被冒充为 Release 二进制的实现。

字段如何定值

文件 / 字段 代码里做什么 新项目取值依据与风险
configs.json: EmxSdkVersion、ChipSdkVersion、Cross、runtime.lib/drivers 应用 build_media 用它们定位 3dr 运行库/驱动并校验 SDK 版本;空列表的复制函数直接返回 与 BSP/应用 SDK、ABI、驱动实际路径逐项核对。空列表不是“系统自带”的证明;需既有例外契约和打包验证。
system.json: buffMode、wrapBufferSize、ARExtraLine、disEnableSbm DefaultSystem::OnCreate 设置视频 buffer 模式/SBM;ARExtraLine 又写入驱动参数 保留精确 profile 默认值,只有确认编码链路与 BSP 内存条件后修改;不要把示例 10/256 当硬件定值。
system.json: vb[] 的 width/height/format/bitWidth/compress/align/cnt InitVb 计算每块字节数并初始化公共 VB pool 按所有 VI/VPSS/VENC/AI/VO 的实际尺寸、像素格式和并发需求算容量,核对 ION/CMA 和 BSP handoff;增大 cnt 会增内存压力,过小会丢帧/建池失败。format 等枚举整数必须查当前 SDK 头文件。
system.json: vi.ViVpssMode、sensorCfg、pipeAttr[]、defIsp[]、frameRate[]、rotate[]、bind[] InitVi 设置 VI 模式、读取 Sensor INI、创建 pipe、指定 ISP bin 与帧率;若 /root/configs/sensor_cfg.ini 存在,代码优先使用它 Sensor 枚举、总线/MIPI、最大分辨率和帧率依据原理图/规格/BSP;核对实际生效 Sensor 文件。defIsp.bin 只是引用,PQ 由用户提供并校验 hash。
system.json: vpss.ViVpssMode/enMode/aenInput/ViPipe/group[]/bindViVpss/bindVpssVpss InitVpss 建组、通道、绑定与缓冲池;VpssPramParse 使用 u32MaxW/H、通道宽高、格式、帧率、镜像、深度、normalize、aspect 先画出 VI→VPSS→编码/抓拍/AI/显示的组/通道图,再给每个消费者分配存在的组和通道;attachPool.pool 必须落在 vb[] 范围。s32DstFrameRate=-1 在代码中有特殊处理,不是普通负帧率。
vi.json: ViPipe/ViChn/flip/mirror DefaultVi::SetMirrorFlip 用运行参数与出厂 flip/mirror 做异或式比较后调用 VI 接口 出厂方向和镜头安装方向需实拍/硬件确认;直接复制他板布尔值可能得到相反画面。
isp.json: pipe/wdrMode/pq.day/night/nightWithLight/fps/dynamicSetIsp DefaultIsp 读取 pipe/WDR/PQ 并导入 bin;dynamicSetIsp 控制动态调参。代码中的 fps JSON 读取目前被注释,实际运行帧率另有路径 WDR 与 Sensor 模式、BSP 和 bin 一致;PQ 文件由用户交付。不要仅改 fps 字段就声称运行帧率已变化。
venc.json: attr.ViPipe/VpssGrp/VpssChn/VencChn/bind、u32BufSize、GOP/QP/RC 字段 DefaultVenc::VencStart/CreateChn 从 VPSS 通道取最大尺寸、按当前编码参数建 VENC;bind 决定 VPSS→VENC 连接 通道必须存在,编码宽高不超过输入;buffer/GOP/QP 等按编码规格、码率和 SDK 限制核算。modSizeKb/defFps 是否实际读取要逐字段查代码,不能只因配置里有就认定生效。
snap.json、osd.json、draw.json、vo.json 各模块取 VPSS 组/通道;显示还涉及屏幕大小、接口、panel GPIO 与通道图和真实屏幕/板级 Pinmux 核对。无屏板不得沿用 ScreenOutput/panel GPIO。
aenc.json、adec.json、aiVqe.json、aoVqe.json 音频设备、采样率、帧大小、增益和 VQE 参数 有无 codec、I2S/模拟路由、采样率及声道要对照原理图/BSP/产品音频需求;不用音频时应确认模块是否创建而非随意删键。
vencSmart.json、vdec*.json、*Server.json、qr*.json 智能编码、解码、服务缓存与扫码组件各自读取 未启用模块保持 Release 默认;要开启时查对应 Default*.cpp 和应用入口,不凭文件存在判断功能已开。
AI profile.json: ChipAiVersion/runtime.lib/file build_ai_plugin 从 3dr AI 目录复制库、模型并生成 AiPlugin.json 文件清单 按精确模型平台和算法需求验证每个文件存在/hash/架构;运行库顺序需遵守依赖。AiPlugin.json 的 files 不等于模型清单,可由打包过程生成。
AI configs/config.json、各算法 vpssGrp/vpssChn/modelPath/threshold 算法 Create 按名称从 AiPlugin/configs/<算法>.json 取通道和模型;config.json 是默认启用项,运行参数还可覆盖 仅对启用算法核对 VPSS 通道、模型路径/格式/能力和阈值。PersonDetection 当前代码把 modelId 固定为 MOBILEDETV2_PEDESTRIAN,配置里的 modelId 不应被当成可自由切换。

没有参考 PSP 的门槛

允许从预创建的空独立 PSP Git 仓库和空 staging 开始,按应用 product.py / release.py 的实际 schema、BSP handoff 的分区/镜像、硬件拓扑和本指南所述 Release 基线逐项建立。psp_project_guard.py prepare-empty 只建立受控暂存,不会生成 psp.json、Sensor、GPIO、分区或 ISP/PQ;这些值来源缺失时保持 partial/blocked,不能候选提交。四视图参考差异报告在此分支标为 N/A(无参考),改用“Release 默认→目标实际生效值”逐字段差异、hash、来源、确认人与交叉校验。即使脚本静态检查通过,也不等于设备成像、AI 模型效果或 Media/AI ABI 已验证。

本次阅读得到的边界示例

以 Media EmxMedia-20260917-1/cv181xArmMuslDefault 和 AI EmxAiPlugin-20260921-1/cv181xArmMusl 为例,Media 的 EmxSdkVersion 为 EmxSdk-20260917-1,AI profile 为 EmxSdk-20260110-1。这不是已验证的兼容组合。若换成 AI EmxAiPlugin-20260917-1/cv181xArmMusl,静态 SDK/通道核对通过,但当前 AI 源码的 profile.json 与该旧 Release 的同名文件已有差异;静态通过仍不等于 ABI、模型或设备验证通过。不得自动配对;只能按项目锁定的精确 Release 组合和证据继续。以上只是展示审计方法,不是新项目推荐版本。