Files

37 lines
8.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 组合和证据继续。以上只是展示审计方法,不是新项目推荐版本。