基于 Hi3516CV610 的立定跳远视频测量系统调研与实施方案

基于 Hi3516CV610 的立定跳远视频测量系统调研与实施方案

一 项目整体方案与目标

本项目基于 Hi3516CV610 芯片,采用 MIPI 接口连接 SC4336P 图像传感器,通过海思 MPP 框架完成视频采集、ISP 图像处理、VPSS 图像缩放和 VENC 视频编码。项目完成了 U-Boot 移植裁剪和 Wi-Fi 视频传输,开发板通过 RTSP 协议向电脑端发送实时画面。电脑端使用 YOLO11 Pose 提取人体关键点,结合起跳落地状态机、地面单应性标定和起跳线标定,实现立定跳远距离测量、压线判断、最近接触点识别、成绩保存和录像留存。

  1. 完成 U-Boot 移植与裁剪,根据项目需求裁剪 Linux 内核,保留摄像头、MIPI、I2C、网络、Wi-Fi及 UBIFS 文件系统等必要功能,关闭无关外设驱动、文件系统、网络协议和高级调试选项,重新编译生成 uImage、设备树和内核模块,并完成板端启动及功能验证。
  2. 完成 SC4336P Sensor 适配,配置 I2C 初始化寄存器、MIPI 接收参数、Sensor 时钟及复位控制,对接海思 ISP 和 VI 模块,并根据跳远场地光照调整曝光、白平衡和降噪参数,实现摄像头稳定出图。
  3. 根据 SC4336P 硬件,修改 MIPI Lane 映射、RAW 格式、ISP、VPSS、VENC 的参数,搭建 VI-ISP-VPSS-VENC 链路,配置模块绑定;同时完善码流回调,把 H.265 码流做 RTSP 推流,并且做调试、稳定性处理,最终输出可以给电脑端实时解码的码流。
  4. 完成开发板 RTL8189FS SDIO Wi‑Fi 驱动适配与无线网络配置,搭建 RTSP 服务,实现视频码流无线传输;上位机接入同一局域网后,可通过 VLC读取实时 H.265 视频流。
  5. 电脑端使用 YOLO11 Pose 检测人体框和脚踝等关键点,通过 PersonTracker 在多人画面中持续锁定当前考生,并使用"等待起跳、腾空、疑似触地、已落地"状态机判断起跳和首次落地过程。

采用地面四点单应性标定,将图像中的像素坐标转换为真实地面坐标;单独标定起跳线,并通过卷尺已知长度完成尺度自检。系统根据首次落地点或落地后的最近身体接触点计算其到起跳线的最短距离。

支持压线犯规判断,以及手撑地、后坐和跪地等接触情况。系统在落地后的结算窗口内比较脚、手、髋和膝等有效接触点,选择距离起跳线最近的接触点作为最终测量依据。

通过 Streamlit 页面完成摄像头连接、场地标定、考生信息录入、测试控制和成绩显示。检测结果保存至 SQLite 数据库,并支持 CSV 导出和标注录像下载,保留起跳帧、落地帧、接触部位和异常原因等信息。

硬件选型

Hi3516CV610主控芯片

CPU:ARM Cortex-A7

操作系统:嵌入式Linux

视频处理:集成VI、ISP、VPSS和VENC模块

视频编码:支持H.264和H.265

主要接口:MIPI、I2C、SDIO、以太网及GPIO

主要用途:网络摄像头、视频监控和智能视觉设备

Hi3516CV610集成了完整的视频采集、图像处理和硬件编码模块,可以直接连接SC4336P Sensor,并通过硬件VENC输出H.264或H.265码流。与使用CPU进行软件编码相比,硬件编码占用资源更少、运行更稳定,适合长时间采集和传输立定跳远视频。项目将AI推理放在电脑端,开发板只负责视频前端,因此Hi3516CV610的性能能够满足需求。

SC4336P图像传感器

有效分辨率:2560×1440

输出帧率:30 fps

输出格式:RAW12

数据接口:MIPI CSI

控制接口:I2C

MIPI配置:2 Lane

Bayer格式:BGGR

工作模式:线性模式

SC4336P能够输出2560×1440@30fps画面,分辨率高于普通1080p,可以保留脚部、起跳线和落地点等细节。30fps能够记录完整的起跳、腾空和落地过程,满足电脑端人体姿态识别和关键帧判断需求。Sensor通过MIPI向Hi3516CV610传输RAW图像,并由板端ISP完成曝光、白平衡和降噪处理,适合固定侧面机位的立定跳远拍摄。

RTL8189FS Wi-Fi模块

核心芯片:Realtek RTL8189FS

接口:SDIO

无线标准:IEEE 802.11b/g/n

工作频段:2.4 GHz

最大理论速率:150 Mbps

天线配置:1T1R单天线

主要用途:嵌入式摄像头和无线视频传输

RTL8189FS采用SDIO接口与Hi3516CV610连接,相比通过UART通信的无线模块,接口带宽更高,适合持续传输视频码流。模块可以作为Linux系统中的wlan0网络接口使用,方便RTSP服务直接通过标准网络协议发送视频。项目H.265码流约为6 Mbps,即使考虑无线协议开销,仍有一定带宽余量,可以满足一路立定跳远实时视频传输需求。

Flash存储器

管理方式:MTD和UBI

根文件系统:UBIFS

主要存储内容:启动镜像、U-Boot环境、Linux内核、根文件系统、驱动和应用程序

主要用途:保存系统固件和板端运行程序

开发板使用Flash存储boot_image.bin、Linux uImage、UBIFS根文件系统、摄像头模块、Wi-Fi驱动和RTSP程序。UBIFS支持坏块管理和擦写均衡,适合嵌入式NAND Flash。根文件系统可以写入,因此能够保存网络配置、启动脚本和应用程序,实现Wi-Fi及RTSP服务开机自动运行。

电脑端处理平台

运行环境:Windows或Ubuntu

主要软件:Python、OpenCV、YOLO11 Pose和Streamlit

网络输入:Wi-Fi RTSP视频流

主要用途:人体姿态识别、动作判断、距离计算和成绩管理

电脑端承担计算量较大的AI推理任务,接收开发板发送的RTSP视频后,使用YOLO11 Pose提取人体关键点,并完成目标锁定、起跳和落地判断、地面标定及距离计算。采用开发板与电脑分工的方式,可以减少板端计算压力,也方便调试算法、保存录像和管理测试成绩。

整体硬件连接

text 复制代码
SC4336P图像传感器
        │ MIPI RAW12
        ▼
Hi3516CV610主控
        │
        ├─ ISP图像处理
        ├─ VPSS缩放和格式转换
        ├─ VENC H.264或H.265编码
        └─ Flash系统存储
                │
                ▼
RTL8189FS Wi-Fi模块
                │ RTSP视频流
                ▼
电脑端AI测量系统

对标图像传感器 GR7880750

项目将海康威视GR7880750作为图像传感器对标方案。该Sensor为400万像素CMOS图像传感器,支持2560×1440@30fps、RAW12 BGGR输出,并通过双Lane MIPI CSI接口传输图像,主要面向低照度安防监控场景,适合与海思视频SoC配合使用。

参数 GR7880750 SC4336P
分辨率 2560×1440 2560×1440
帧率 30fps 30fps
输出格式 RAW12 BGGR RAW12 BGGR
数据接口 MIPI CSI MIPI CSI
MIPI Lane 双Lane 双Lane
主要特点 低照度星光成像、驱动调校灵活 配置成熟、现有开发板已完成适配
驱动形式 通常提供Sensor_ctl等适配源码 当前SDK通过libsns_sc4336p.so提供
寄存器修改 可修改初始化、曝光和增益寄存器 当前资料中不能直接修改内部寄存器表

GR7880750与SC4336P的基本分辨率、帧率和MIPI输出规格接近,可作为SC4336P适配和图像效果调校的参考。GR7880750驱动通常提供Sensor控制源码,可以修改初始化寄存器、曝光时间、模拟增益和数字增益等参数,便于针对运动模糊和低照度场景进行调校。

本项目最终选择SC4336P,是因为现有Hi3516CV610开发板已提供对应的Sensor库和4M30配置,可以直接建立VI、ISP、VPSS和VENC视频链路,降低前期适配难度。后续若取得SC4336P完整驱动源码,也可以参考GR7880750的驱动结构,进一步调整Sensor寄存器和ISP参数。

系统框图

#mermaid-svg-5kL9fkvoPbmpamZf{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5kL9fkvoPbmpamZf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5kL9fkvoPbmpamZf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5kL9fkvoPbmpamZf .error-icon{fill:#552222;}#mermaid-svg-5kL9fkvoPbmpamZf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5kL9fkvoPbmpamZf .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5kL9fkvoPbmpamZf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5kL9fkvoPbmpamZf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5kL9fkvoPbmpamZf .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5kL9fkvoPbmpamZf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5kL9fkvoPbmpamZf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5kL9fkvoPbmpamZf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5kL9fkvoPbmpamZf .marker.cross{stroke:#333333;}#mermaid-svg-5kL9fkvoPbmpamZf svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5kL9fkvoPbmpamZf p{margin:0;}#mermaid-svg-5kL9fkvoPbmpamZf .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-5kL9fkvoPbmpamZf .cluster-label text{fill:#333;}#mermaid-svg-5kL9fkvoPbmpamZf .cluster-label span{color:#333;}#mermaid-svg-5kL9fkvoPbmpamZf .cluster-label span p{background-color:transparent;}#mermaid-svg-5kL9fkvoPbmpamZf .label text,#mermaid-svg-5kL9fkvoPbmpamZf span{fill:#333;color:#333;}#mermaid-svg-5kL9fkvoPbmpamZf .node rect,#mermaid-svg-5kL9fkvoPbmpamZf .node circle,#mermaid-svg-5kL9fkvoPbmpamZf .node ellipse,#mermaid-svg-5kL9fkvoPbmpamZf .node polygon,#mermaid-svg-5kL9fkvoPbmpamZf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5kL9fkvoPbmpamZf .rough-node .label text,#mermaid-svg-5kL9fkvoPbmpamZf .node .label text,#mermaid-svg-5kL9fkvoPbmpamZf .image-shape .label,#mermaid-svg-5kL9fkvoPbmpamZf .icon-shape .label{text-anchor:middle;}#mermaid-svg-5kL9fkvoPbmpamZf .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5kL9fkvoPbmpamZf .rough-node .label,#mermaid-svg-5kL9fkvoPbmpamZf .node .label,#mermaid-svg-5kL9fkvoPbmpamZf .image-shape .label,#mermaid-svg-5kL9fkvoPbmpamZf .icon-shape .label{text-align:center;}#mermaid-svg-5kL9fkvoPbmpamZf .node.clickable{cursor:pointer;}#mermaid-svg-5kL9fkvoPbmpamZf .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5kL9fkvoPbmpamZf .arrowheadPath{fill:#333333;}#mermaid-svg-5kL9fkvoPbmpamZf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5kL9fkvoPbmpamZf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5kL9fkvoPbmpamZf .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5kL9fkvoPbmpamZf .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5kL9fkvoPbmpamZf .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5kL9fkvoPbmpamZf .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5kL9fkvoPbmpamZf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5kL9fkvoPbmpamZf .cluster text{fill:#333;}#mermaid-svg-5kL9fkvoPbmpamZf .cluster span{color:#333;}#mermaid-svg-5kL9fkvoPbmpamZf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5kL9fkvoPbmpamZf .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5kL9fkvoPbmpamZf rect.text{fill:none;stroke-width:0;}#mermaid-svg-5kL9fkvoPbmpamZf .icon-shape,#mermaid-svg-5kL9fkvoPbmpamZf .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5kL9fkvoPbmpamZf .icon-shape p,#mermaid-svg-5kL9fkvoPbmpamZf .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5kL9fkvoPbmpamZf .icon-shape .label rect,#mermaid-svg-5kL9fkvoPbmpamZf .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5kL9fkvoPbmpamZf .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5kL9fkvoPbmpamZf .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5kL9fkvoPbmpamZf :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} MIPI CSI
无线网络
Wi-Fi RTSP
系统和程序
规格与驱动结构对标
SC4336P 图像传感器

2560×1440 30fps

MIPI RAW12 双 Lane
Hi3516CV610 主控芯片
VI 视频采集
ISP 图像处理

曝光 白平衡 降噪
VPSS 图像缩放

格式转换
VENC 视频编码

H.264 或 H.265
RTL8189FS Wi-Fi 模块

SDIO 2.4GHz
RTSP 无线视频传输
电脑端 AI 测量系统
YOLO11 Pose

人体关键点检测
起跳落地判断

标定与距离计算
Streamlit 页面

成绩 录像 SQLite CSV
Flash 存储器

U-Boot uImage UBIFS
GR7880750

对标图像传感器

软件流程图

#mermaid-svg-1LfkWhpAYufAE29P{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-1LfkWhpAYufAE29P .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-1LfkWhpAYufAE29P .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-1LfkWhpAYufAE29P .error-icon{fill:#552222;}#mermaid-svg-1LfkWhpAYufAE29P .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1LfkWhpAYufAE29P .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-1LfkWhpAYufAE29P .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1LfkWhpAYufAE29P .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1LfkWhpAYufAE29P .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-1LfkWhpAYufAE29P .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1LfkWhpAYufAE29P .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1LfkWhpAYufAE29P .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1LfkWhpAYufAE29P .marker.cross{stroke:#333333;}#mermaid-svg-1LfkWhpAYufAE29P svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1LfkWhpAYufAE29P p{margin:0;}#mermaid-svg-1LfkWhpAYufAE29P .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1LfkWhpAYufAE29P .cluster-label text{fill:#333;}#mermaid-svg-1LfkWhpAYufAE29P .cluster-label span{color:#333;}#mermaid-svg-1LfkWhpAYufAE29P .cluster-label span p{background-color:transparent;}#mermaid-svg-1LfkWhpAYufAE29P .label text,#mermaid-svg-1LfkWhpAYufAE29P span{fill:#333;color:#333;}#mermaid-svg-1LfkWhpAYufAE29P .node rect,#mermaid-svg-1LfkWhpAYufAE29P .node circle,#mermaid-svg-1LfkWhpAYufAE29P .node ellipse,#mermaid-svg-1LfkWhpAYufAE29P .node polygon,#mermaid-svg-1LfkWhpAYufAE29P .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1LfkWhpAYufAE29P .rough-node .label text,#mermaid-svg-1LfkWhpAYufAE29P .node .label text,#mermaid-svg-1LfkWhpAYufAE29P .image-shape .label,#mermaid-svg-1LfkWhpAYufAE29P .icon-shape .label{text-anchor:middle;}#mermaid-svg-1LfkWhpAYufAE29P .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-1LfkWhpAYufAE29P .rough-node .label,#mermaid-svg-1LfkWhpAYufAE29P .node .label,#mermaid-svg-1LfkWhpAYufAE29P .image-shape .label,#mermaid-svg-1LfkWhpAYufAE29P .icon-shape .label{text-align:center;}#mermaid-svg-1LfkWhpAYufAE29P .node.clickable{cursor:pointer;}#mermaid-svg-1LfkWhpAYufAE29P .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-1LfkWhpAYufAE29P .arrowheadPath{fill:#333333;}#mermaid-svg-1LfkWhpAYufAE29P .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1LfkWhpAYufAE29P .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1LfkWhpAYufAE29P .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1LfkWhpAYufAE29P .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-1LfkWhpAYufAE29P .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1LfkWhpAYufAE29P .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-1LfkWhpAYufAE29P .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1LfkWhpAYufAE29P .cluster text{fill:#333;}#mermaid-svg-1LfkWhpAYufAE29P .cluster span{color:#333;}#mermaid-svg-1LfkWhpAYufAE29P div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1LfkWhpAYufAE29P .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-1LfkWhpAYufAE29P rect.text{fill:none;stroke-width:0;}#mermaid-svg-1LfkWhpAYufAE29P .icon-shape,#mermaid-svg-1LfkWhpAYufAE29P .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1LfkWhpAYufAE29P .icon-shape p,#mermaid-svg-1LfkWhpAYufAE29P .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-1LfkWhpAYufAE29P .icon-shape .label rect,#mermaid-svg-1LfkWhpAYufAE29P .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1LfkWhpAYufAE29P .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-1LfkWhpAYufAE29P .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-1LfkWhpAYufAE29P :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
系统上电
U-Boot 启动
加载 Linux uImage
挂载 UBIFS 根文件系统
执行 rcS 和启动脚本
加载 MPP 和 SC4336P 相关模块
配置 Sensor 时钟 复位和 I2C
配置 MIPI RAW12 双 Lane
初始化 SYS 和 VB 缓冲池
启动 VI 和 ISP
获取 2560×1440 30fps 图像
VPSS 缩放和格式转换
VENC 进行 H.264 或 H.265 编码
启动 RTL8189FS Wi-Fi
启动 RTSP 视频服务
电脑端连接 RTSP
OpenCV 解码和原始帧缓存
YOLO11 Pose 人体关键点检测
PersonTracker 锁定当前考生
起跳落地状态机
是否确认有效落地
回看触地附近原始帧
确定首次落地帧和最近接触点
单应性投影到地面坐标
计算接触点到起跳线距离
判断压线犯规和成绩
页面显示结果
保存 SQLite CSV 和标注录像
继续处理下一帧

系统移植

  • 保留项目必需功能 保留 Hi3516CV610 平台、串口、GPIO、I2C、MIPI、摄像头、以太网、Wi-Fi,以及 MTD、UBI、UBIFS 根文件系统支持。

  • 删除无关驱动 关闭项目未使用的蓝牙、CAN、触摸屏、显示屏及其他芯片平台和外设驱动。

  • 删除无关文件系统和网络协议 保留 UBIFS、FAT、EXT4 和基本 TCP/IP,关闭 BTRFS、XFS、NTFS、IPv6 等未使用功能。

  • 关闭高级调试功能 关闭 KGDB、KASAN、Ftrace、内核调试信息等功能,保留串口日志和 dmesg,便于排查启动问题。

驱动适配

这一步主要包括以下工作:

  1. 确认硬件连接

    核对 SC4336P 的 MIPI Lane 数、时钟、复位 GPIO、电源和 I2C 地址。

  2. 配置 Sensor 寄存器

    在 sensor_ctl.c 等文件中写入厂家提供的初始化寄存器,包括分辨率、帧率、曝光、增益和工作模式。

  3. 配置 MIPI 接收参数

    设置 MIPI 通道、Lane 顺序、数据类型、输入分辨率和时钟,使开发板能够正确接收图像数据。

  4. 对接海思 ISP

    注册 SC4336P Sensor,配置曝光、自动白平衡、增益、降噪等 ISP 回调和初始参数。

  5. 建立 VI 图像采集通道

    配置 VI 设备和通道的分辨率、像素格式、帧率,将 Sensor 图像送入 ISP 和后续 VPSS。

  6. 编译并加载驱动

    重新编译 Sensor 驱动或适配库,将文件传到开发板,加载相关内核模块和 Sensor 程序。

  7. 调整图像效果

    根据室内跳远场地的光照,调整曝光时间、增益、白平衡、锐度和降噪,避免人物运动模糊、画面过暗或噪点过多。

【补充】

  • 分辨率帧率:默认 2560×1440@30fps
  • 控制:I2C0 来读写 sensor 寄存器;MIPI 用双 Lane0+2 传输图像
  • 图像格式:RAW12,BGGR 拜耳排列
  • VI 开启 3D 降噪;VPSS 输出原图尺寸 2560×1440,不缩放
  • 编码:H.265,CBR 码率 6M,GOP=50
  • 自动曝光 AE、自动白平衡 AWB 打开
  • sensor 驱动是预编译库 libsns_sc4336p.so,没有开放 sensor_ctl 源码,没法直接改寄存器。

码流链路

底层 MPP 驱动、ISP 硬件算法、Sensor 驱动 so 库不是你写的;通道创建、参数配置、模块绑定、业务逻辑、码流回调、网络推流、调试排错是你做的;开发方式就是:基于 SDK 自带 sample 示例,读懂、裁剪、改写、适配到当前 SC4336P 硬件。

拆分清楚哪些【不是你写的】(面试一定要拎清楚,显得诚实专业)

  1. MPP 框架本身、VI/ISP/VPSS/VENC 的硬件驱动:海思原厂提供二进制库 + 头文件,你调用 HI_MPI_XXX API,不是你开发硬件驱动
  2. ISP 内部算法:Demosaic、3DNR、AE/AWB、Gamma 这些硬件 ISP 固件算法,海思固化,你只是打开开关、配置参数,不是你写降噪、白平衡算法
  3. SC4336P sensor 驱动:libsns_sc4336p.so 是原厂 / 方案商预编译库,没有源码,你只能调用 sns 接口加载,不能修改寄存器驱动逻辑

哪些【是你配置 + 改写 + 开发】(这才是你的工作重点,面试重点讲这块)

基于 SDK 的 mpp sample(一般是 vi_vpss_venc 示例)二次开发:

  1. 适配硬件:修改 MIPI 配置,改成双 Lane 0/2、RAW12 BGGR,匹配 SC4336P
  2. 通道参数配置:VI 缓冲区、ISP 参数(开启 3DNR)、VPSS 分辨率配置、VENC 的 H.265、CBR、6M 码率、GOP50
  3. MPP 模块绑定:VI→ISP→VPSS→VENC 的绑定关系搭建
  4. 码流回调函数:拿到 VENC 输出的 ES 码流,增加业务代码(RTSP 推流、缓存、发送给上位机)
  5. 资源管理:顺序启停、异常处理、通道销毁、MPP 去初始化,修复示例里缺少的健壮性逻辑
  6. 调试工作:解决花屏、丢帧、噪点大、码流卡顿、MIPI 时序不匹配等问题

wifi

SDIO WiFi 驱动是芯片厂商提供

具体做了哪些工作?(分点口述)

  1. 内核层面:打开 SDIO、Wi‑Fi 相关内核配置,把 RTL8189FS 驱动编译进内核或者编译成 ko 模块,加载驱动,确认 wlan 网卡正常识别;
  2. 无线网络配置:移植配置 wpa_supplicant,配置 WiFi 账号密码、自动连接脚本,设置静态 IP/DHCP,保证开发板和电脑在同一网段;
  3. 码流对接:把 VENC 回调出来的 H.265 ES 码流,送入 RTSP 服务
  4. 上位机验证:调试拉流,分别用 VLC、FFplay 测试播放,同时基于 OpenCV 的 VideoCapture 接口拉取 RTSP 流,做 PC 端姿态识别预览;
  5. 稳定性调试:排查无线丢包、码流卡顿、弱网下花屏问题。

附件

系统移植

  • 保留项目必需功能 保留 Hi3516CV610 平台、串口、GPIO、I2C、MIPI、摄像头、以太网、Wi-Fi,以及

    MTD、UBI、UBIFS 根文件系统支持。

  • 删除无关驱动 关闭项目未使用的蓝牙、CAN、触摸屏、显示屏及其他芯片平台和外设驱动。

  • 删除无关文件系统和网络协议 保留 UBIFS、FAT、EXT4 和基本 TCP/IP,关闭 BTRFS、XFS、NTFS、IPv6

    等未使用功能。

  • 关闭高级调试功能 关闭 KGDB、KASAN、Ftrace、内核调试信息等功能,保留串口日志和 dmesg,便于排查启动问题。

系统链路大致是:

芯片固化 BootROM → 加载海思 boot_image.bin → 启动 U-Boot、读取启动参数 → 加载 Linux 内核 + 设备树 → 挂载 NAND 上 UBIFS 根文件系统 → busybox init 按 inittab 执行 rcS → 依次跑初始化脚本(创建设备、mdev、网络)→ 最后启动 RTSP 和业务程序。

目前能确认的运行环境:

项目 当前信息
SoC Hi3516CV610
CPU 架构 ARMv7 Cortex-A7
Linux 5.10.221
C 库 musl 1.2.3
基础工具 BusyBox 1.34.1
根文件系统 可写 UBIFS
内核镜像 SDK 编译流程输出压缩后的 uImage
启动介质 从 UBIFS 判断大概率为 SPI NAND,仍需结合 /proc/mtd 和 U-Boot 输出确认
SDK Hi3516CV610 SDK V1.0.2.0
编译模式 厂家脚本使用 LIB_TYPE=musl CHIP=hi3516cv610 DEBUG=1

SDK 的完整编译会生成:

  • boot_image.bin:海思启动镜像;
  • uImage:Linux 内核镜像;
  • rootfs_*.ubifs 或 rootfs_*.ubiimg:NAND 根文件系统镜像;
  • nand_env.bin:U-Boot 环境变量镜像;
  • nand_burn_table.xml:烧录分区表。

一 进入内核配置界面

在 Ubuntu 虚拟机的内核源码目录执行:

bash 复制代码
cd Hi3516CV610_SDK_V1.0.2.0/open_source/linux/linux-5.10.y

make ARCH=arm \
CROSS_COMPILE=arm-v01c02-linux-musleabi- \
hi3516cv610_defconfig

make ARCH=arm \
CROSS_COMPILE=arm-v01c02-linux-musleabi- \
menuconfig

配置界面中:

text 复制代码
[*]  编译进内核
<M>  编译为内核模块 .ko
[ ]  不编译

对于启动必需的功能,一般选择 [*]。对于不是启动必需、但运行时需要加载的驱动,可以选择 <M>。


二 必须保留的基础功能

1 ARM 和芯片平台支持

需要保留:

text 复制代码
System Type
  -> ARM system type
  -> HiSilicon platform support

主要包括:

  • ARMv7 Cortex-A7 支持;
  • Hi3516CV610 平台支持;
  • 中断控制器;
  • 系统时钟;
  • 定时器;
  • GPIO;
  • PinCtrl;
  • 电源和复位控制。

这些是系统启动的基础,一般不能随意关闭。

2 串口控制台

需要保留:

text 复制代码
Device Drivers
  -> Character devices
  -> Serial drivers

以及:

text 复制代码
Kernel hacking
  -> Generic kernel debugging instruments
  -> Early printk

串口相关功能主要用于:

  • 输出内核启动日志;
  • 进入板端命令行;
  • 排查内核启动卡死;
  • 查看驱动加载错误。

三 存储和根文件系统

你的板子使用可写 UBIFS 根文件系统,因此以下功能必须保留。

1 MTD 子系统
text 复制代码
Device Drivers
  -> Memory Technology Device MTD support

主要保留:

  • MTD 核心支持;
  • MTD 分区支持;
  • SPI NAND 或 NAND Flash 支持;
  • HiSilicon Flash 控制器驱动。
2 UBI
text 复制代码
Device Drivers
  -> Memory Technology Device MTD support
  -> Enable UBI

UBI 位于 MTD 与 UBIFS 之间,负责坏块管理、擦写均衡和逻辑卷管理。

3 UBIFS
text 复制代码
File systems
  -> Miscellaneous filesystems
  -> UBIFS file system support

因为根文件系统本身就是 UBIFS,所以应将其编进内核,不能只编译成模块。否则系统挂载根文件系统前没有条件加载这个模块。

4 伪文件系统

需要保留:

text 复制代码
File systems
  -> Pseudo filesystems

分别用于:

  • /proc:查看进程和内核信息;
  • /sys:查看设备和驱动信息;
  • /tmp、/run:临时文件;
  • /dev:自动生成设备节点。

四 摄像头和视频相关功能

Hi3516CV610 的 VI、VPSS、VENC 等功能主要由海思 MPP、内核模块和用户态程序共同提供。

1 I2C

需要保留:

text 复制代码
Device Drivers
  -> I2C support

用于:

  • 读取和配置 SC4336P 寄存器;
  • 设置曝光、增益和帧率;
  • 检查 Sensor 芯片是否响应。

一般保留:

text 复制代码
CONFIG_I2C=y
CONFIG_I2C_CHARDEV=y

其中 I2C_CHARDEV 可以提供 /dev/i2c-*,便于使用 I2C 工具调试。

2 GPIO 和 PinCtrl

需要保留:

text 复制代码
Device Drivers
  -> GPIO Support

Device Drivers
  -> Pin controllers

用于:

  • Sensor 复位;
  • Sensor 上电控制;
  • MIPI 引脚复用;
  • Wi-Fi 模块使能;
  • 状态灯等外设控制。

3 MIPI 和 Sensor 相关驱动

海思 SDK 中可能以内核模块或厂商驱动形式提供:

  • MIPI RX;
  • Sensor 时钟;
  • ISP;
  • VI;
  • VENC;
  • SYS;
  • VB;
  • RGN。

这些功能不能只看标准 Linux menuconfig。还要检查:

  • 海思 SDK 的驱动编译配置;
  • komod 目录中的 .ko;
  • 板端驱动加载脚本;
  • Sensor 初始化程序;
  • MPP Sample 的依赖模块。

五 网络和 RTSP 所需功能

1 TCP IP 网络协议栈

需要保留:

text 复制代码
Networking support
  -> Networking options
  -> TCP IP networking

它们分别支持:

  • 基础网络子系统;
  • IPv4 和 TCP/UDP;
  • 原始数据包;
  • 本地进程间 Unix Socket。

RTSP、RTP、UDP、TCP 都依赖这些功能。

2 以太网

需要保留:

text 复制代码
Device Drivers
  -> Network device support
  -> Ethernet driver support

包括:

  • HiSilicon MAC 驱动;
  • PHY 驱动;
  • MDIO 总线;
  • 网口链路检测。

如果板端还需要有线网络作为调试或备用链路,就不能关闭以太网驱动。

3 Wi-Fi

如果 Wi-Fi 驱动编进内核,需保留:

text 复制代码
Device Drivers
  -> Network device support
  -> Wireless LAN

如果 Wi-Fi 使用 USB 接口,还要保留:

text 复制代码
Device Drivers
  -> USB support
  -> USB Host Controller Drivers

六 建议保留的文件系统

根据项目功能决定:

文件系统 是否建议保留 用途
UBIFS 必须 板端根文件系统
proc 必须 /proc
sysfs 必须 /sys
tmpfs 必须 /tmp、/run
devtmpfs 必须 /dev 设备节点
FAT VFAT 建议 TF 卡、SD 卡和U盘
EXT4 可选 Linux 格式的 SD 卡或U盘
NFS Client 开发期建议 从 Ubuntu 挂载目录调试
CIFS 通常不需要 Windows 网络共享
SquashFS 视方案决定 只读压缩根文件系统
JFFS2 SPI NOR 使用时保留 当前使用 UBIFS 时通常不需要
NTFS 通常可裁剪 除非需要读取 NTFS U盘
ISO9660 可裁剪 光盘文件系统
BTRFS 可裁剪 嵌入式小系统通常不用
XFS 可裁剪 本项目通常不用
F2FS 可裁剪 未使用对应存储方案时关闭

七 可以考虑裁掉的无关驱动

确认开发板没有这些硬件后,可以关闭:

  • 蓝牙;
  • NFC;
  • CAN;
  • FireWire;
  • 雷电接口;
  • PCMCIA;
  • SATA;
  • SCSI 磁盘;
  • 光驱;
  • 软盘;
  • 游戏手柄;
  • HID 触摸屏;
  • 打印机;
  • 红外遥控;
  • DVB 数字电视;
  • 无关音频芯片;
  • 无关触摸屏;
  • 无关 LCD 面板;
  • 无关摄像头 Sensor;
  • 不使用的 USB Gadget 功能;
  • 不使用的网卡和 Wi-Fi 芯片驱动;
  • 其他 ARM 开发板平台驱动。

十一 实际裁剪流程

不要一次性关闭大量选项。建议按下面流程操作。

第一步 保存厂家默认配置

bash 复制代码
cp .config .config.vendor

第二步 修改少量选项

bash 复制代码
make ARCH=arm \
CROSS_COMPILE=arm-v01c02-linux-musleabi- \
menuconfig

每次只修改一个类别,例如:

  • 第一次裁文件系统;
  • 第二次裁网络协议;
  • 第三次裁无关外设;
  • 最后关闭调试功能。

第三步保存配置

bash 复制代码
make ARCH=arm \
CROSS_COMPILE=arm-v01c02-linux-musleabi- \
savedefconfig

cp defconfig arch/arm/configs/hi3516cv610_jump_defconfig

第四步查看修改内容

bash 复制代码
diff -u .config.vendor .config

这样才能准确回答"内核裁剪改了哪些配置"。

第五步重新编译

在 BSP 目录执行:

bash 复制代码
make KERNEL_CFG=hi3516cv610_jump_defconfig \
LIB_TYPE=musl \
CHIP=hi3516cv610 \
DEBUG=1 \
kernel

第六步检查镜像大小

bash 复制代码
ls -lh pub/hi3516cv610_image_debug_musl/uImage

记录裁剪前后:

版本 uImage 大小 启动结果
厂家默认配置 待记录 正常
第一次裁剪 待记录 正常
最终配置 待记录 正常

第七步烧写验证

至少验证:

sh 复制代码
uname -a
cat /proc/cmdline
cat /proc/filesystems
cat /proc/mtd
mount
lsmod
ifconfig -a
dmesg | grep -Ei "ubi|ubifs|mtd|nand"

还要验证:

  • 串口正常;
  • UBIFS 根文件系统正常挂载;
  • 有线网卡正常;
  • Wi-Fi 正常;
  • SC4336P 正常出图;
  • MPP 模块加载成功;
  • RTSP 可以通过 Wi-Fi 连续播放;
  • 重启后各项功能仍然正常。

可以写进文档的简洁表述

根据立定跳远视频采集与无线传输需求,对 Linux 内核进行功能裁剪:保留 Hi3516CV610 平台、串口、GPIO、I2C、MIPI、MTD、UBI、UBIFS、以太网、Wi-Fi 及 USB 等必要支持;将摄像头、MPP 和无线网卡等非启动必需驱动编译为内核模块;关闭未使用的文件系统、网络协议、外设驱动和高级调试功能,重新生成 uImage、设备树和内核模块,并完成根文件系统挂载、摄像头出图及 Wi-Fi RTSP 传输验证。

SC4336P 源码配置统计与修改位置

1 结论

当前 SDK 已经包含 SC4336P 的运行配置和二进制 Sensor 库。默认 PQ 模式是 4M30,即 2560 × 1440 @ 30 fps。可直接修改的参数位于 INI、JSON 和启动脚本中;Sensor 初始化寄存器、I2C 从地址以及 AE/AWB 内部参数未以 C 源码形式提供,而是封装在 libsns_sc4336p.so 等二进制库中。

因此,基于现有资料可以准确描述为"SC4336P 配置适配和图像链路配置"。如果没有取得 sensor_ctl.c、sc4336p_cmos.c 等源文件,不宜写成"修改了 SC4336P 初始化寄存器源码"。

2 实际使用入口

2.1 开机加载 SC4336P

文件:

text 复制代码
Hi3516CV610_SDK_V1.0.2.0/overlay/youyan/insmod.sh

第 5 行:

sh 复制代码
./load3516cv610_20s_debug -i -sensor0 sc4336p

作用:加载 Hi3516CV610 媒体相关模块,并把 sensor0 指定为 sc4336p。

修改位置:更换 Sensor 型号、选择另一个 Sensor 入口时修改这里。SC4336P 不变时不需要改。

开机调用链:

text 复制代码
/etc/init.d/S90autorun 第 22~23 行
    -> /youyan/insmod.sh
    -> load3516cv610_20s_debug -i -sensor0 sc4336p

2.2 默认模式选择

文件:

text 复制代码
overlay/system/Hi3516CV610_PQ_V1.0.2.0/configs/sc4336p/config_entry.ini

真实配置:

行号 参数 当前值 含义
2 mode_num 6 提供 6 种视频模式
3 use_mode 0 默认使用 mode 0
6~7 mode 0 4M30 / sc4336p_4M30.ini 默认 4M 30 fps
9~10 mode 1 4M15_2ch 双通道 4M 15 fps
12~13 mode 2 4M30_10b 4M 30 fps 10 bit 模式
15~16 mode 3 4M30_svc 4M 30 fps SVC 模式
18~19 mode 4 3M30_608 Hi3516CV608 对应模式
21~22 mode 5 2M30 1920 × 1080 30 fps

修改位置:切换默认分辨率或模式时修改第 3 行 use_mode,不要只改单个宽高参数。

3 默认 SC4336P 4M30 参数

主配置文件:

text 复制代码
overlay/system/Hi3516CV610_PQ_V1.0.2.0/configs/sc4336p/sc4336p_4M30.ini

3.1 Sensor 和 ISP 基本配置

行号 参数 当前真实值 修改用途
5 dev_id 0 ISP 设备号
6 sensor_type g_sns_sc4336p_obj SC4336P Sensor 对象
8 sensor_lib_file ./libs/libsns_sc4336p.so Sensor 二进制库
10 mirror_flip_type 0 正常方向
15 blc_clamp_en TRUE 开启黑电平钳位
17 use_wdr_mode 0 默认线性模式
34~39 ISP 窗口和 Sensor 尺寸 2560 × 1440 输入画面尺寸
40 frame_rate 30 30 fps
41 bayer_format 3 BGGR
46 sns_mode 0 Sensor 默认模式
47 sns_flip_en FALSE 不翻转
48 sns_mirror_en FALSE 不镜像
49 mipi_crop_en FALSE 不在 MIPI 层裁剪
55 sns_type 0 I2C 控制类型
59 i2c_dev 0 使用 I2C 总线 0

常用修改位置:

  • 画面上下颠倒:第 47 行 sns_flip_en。
  • 画面左右相反:第 48 行 sns_mirror_en。
  • 更换分辨率:不要只改第 34~40 行,应切换 config_entry.ini 中已有模式,或者同步修改 ISP、MIPI、VI、VPSS 和 VENC 全链路尺寸。
  • i2c_dev = 0 是 I2C 控制器编号,不是 SC4336P 的从设备地址。

3.2 MIPI 参数

行号 参数 当前真实值 含义
89 lane_divide_mode 1 MIPI Lane 划分模式 1,即 2 Lane + 2 Lane
92 mipi_mode_num 2 配置两个 MIPI 模式
94 sns_clk_src 0 Sensor 时钟源 0
95 sns_rst_src 0 Sensor 复位源 0
102 input_mode 0 MIPI 输入
107~113 img_rect 0,0,2560,1440 Sensor 输入区域
115 data_rate 0 X1 数据速率模式
119 mipi_attr.input_data_type 2 RAW12
129 mipi_attr.wdr_mode 0 非 WDR MIPI 模式
134 mipi_attr.lane_id `2 0
191~231 MIPI mode 1 时钟源 0,RAW12,Lane 1、3 WDR 模式对应的第二组 Lane

修改位置:

  • 修改 Lane 接线顺序:第 134 行;必须与原理图实际连接一致。
  • 修改 Sensor 时钟或复位来源:第 94~95 行。
  • 修改 RAW 位宽:第 119 行,同时核对 VI pixel_format 和 Sensor 输出模式。
  • 修改 WDR:第 17、27~31、129 行及对应 mode 1 参数必须一致,不能只改一个开关。

3.3 VI 参数

行号 参数 当前真实值 含义
288 dev_num 1 1 个 VI 设备
290 pipe_num 1 1 条 VI Pipe
292 dev_id 0 VI 设备 0
294 vi_mipi_devno 0 绑定 MIPI 设备 0
296~297 Pipe 绑定 1 条,Pipe 0 VI Dev 绑定 Pipe 0
299 intf_mode 4 MIPI RAW 接口
309 work_mode 0 单路复用模式
314 scan_mode 0 逐行扫描
373~374 VI 设备尺寸 2560 × 1440 VI 输入尺寸
420~421 VI Pipe 尺寸 2560 × 1440 Pipe 工作尺寸
422 pixel_format 25 RGB Bayer 12 bit
429 compress_mode 0 不压缩
440 nr_enable TRUE 开启 VI 3DNR
441 nr_type 0 普通视频降噪类型
454 nr_motion_mode 0 普通运动模式
459 nr_effect_mode 1 高级降噪效果模式
463 bnr_buf_num 2 BNR 缓冲数 2
465 online_clock_en FALSE 不使用在线时钟配置
466~468 在线时钟参考 630 Mbps、2 Lane、10 bit 当前在线时钟关闭,属于参考值
472~474 VI 通道输出 2560 × 1440,YVU420 VI 输出给后级的格式

修改位置:

  • 运动场景降噪的直接开关:第 440~463 行。
  • 跳远项目不应盲目加大降噪;过强时会把脚部边缘和快速运动细节抹掉。
  • 修改输入分辨率时,第 373~374、420~421、472~473 行必须与 MIPI 输入一致。

3.4 VPSS 和编码参数

行号 参数 当前真实值 含义
514 vpss_grp_num 1 1 个 VPSS Group
517 vpss_chn_num 1 1 个 VPSS 通道
519~520 VPSS 最大尺寸 2560 × 1440 Group 最大处理尺寸
550 vpss_chn 0 VPSS 通道 0
554~555 VPSS 输出 2560 × 1440 当前不缩放
601 payload_type 265 H.265
609~610 编码尺寸 2560 × 1440 VENC 输出尺寸
630 rc_mode 14 H.265 CBR
690 gop 50 每 50 帧一个 GOP
692~693 编码帧率 30/30 输入输出均 30 fps
694 bit_rate 6144 6144 kbps

跳远 RTSP 常用修改位置:

  • 改成 H.264:第 601 行改为 96,同时第 630 行必须改为相应 H.264 码控模式,不能只改编码类型。
  • 调整无线传输码率:第 694 行。
  • 调整关键帧间隔:第 690 行。30 fps 下 GOP 50 约为 1.67 秒。
  • 输出 1080p 子码流:优先新增或选择独立 VPSS/VENC 通道,不建议直接破坏 4M 主码流配置。

4 简化运行配置 vi.json

文件:

text 复制代码
overlay/opt/ceanic/etc/vi.json

真实内容:

行号 参数 当前值
3 lane_mode 0
4 max_h 1440
5 max_w 2560
6 name SC4336P
7 vi_fr 30
8 wdr_mode 0

这个文件是 /opt/ceanic 应用侧的简化 VI 配置。若实际 RTSP 服务运行的是 ceanic 应用,修改分辨率、帧率或 WDR 时也要同步检查这里。

板端应先用下面的命令确定实际运行路径:

sh 复制代码
ps | grep -E "ceanic|ittb_stream|PQTools"
cat /opt/ceanic/etc/vi.json

不要同时运行 ceanic 视频业务和 ittb_stream,否则可能竞争 VI、ISP 和 VENC 资源。

5 曝光 白平衡和 ISP 调参的真实边界

文件:

text 复制代码
overlay/system/Hi3516CV610_PQ_V1.0.2.0/config.cfg

真实配置:

行号 参数 当前值 含义
29~30 Use3A 3a=1 启用 3A
33 AE_En 1 启用自动曝光
34 AE_Lib ./libs/libss_mpi_ae.so AE 二进制库
35 AWB_En 1 启用自动白平衡
36 AWB_Lib ./libs/libss_mpi_awb.so AWB 二进制库
84~88 RAW 配置 RAW12,线性模式 抓 RAW 时的模式

当前资料没有提供可直接编辑的曝光目标、最大曝光时间、最大增益、白平衡增益曲线等 C 源码参数。这些参数由以下内容提供:

text 复制代码
libs/libsns_sc4336p.so
libs/libss_mpi_ae.so
libs/libss_mpi_awb.so
PQTools 运行时配置

因此目前可以确认"启用了自动曝光和自动白平衡",不能仅凭这套源码声称已经修改了具体 AE/AWB 算法参数。

如果使用海思 PQ 工具调整图像,应执行:

sh 复制代码
/system/Hi3516CV610_PQ_V1.0.2.0/PQTools.sh -s sc4336p

调参后需要导出新的 SC4336P 配置或 ISP 参数,并把导出的文件纳入工程,才能形成可复现的曝光、白平衡和降噪修改记录。

6 当前没有源码的位置

在已解压 SDK 中没有发现以下 SC4336P C 源文件:

text 复制代码
sensor_ctl.c
sc4336p_sensor_ctl.c
sc4336p_cmos.c
sc4336p_cmos_ex.h

SC4336P 目前通过下面的二进制库提供:

text 复制代码
overlay/system/Hi3516CV610_PQ_V1.0.2.0/libs/libsns_sc4336p.so

因此下面两类数据无法从当前源码中可靠统计:

  1. SC4336P 的 I2C 从设备地址;
  2. 上电初始化寄存器表、曝光寄存器、模拟增益和数字增益寄存器地址。

要补齐这些内容,需要厂家提供 SC4336P Sensor 驱动源码,或者提供对应版本的数据手册和寄存器初始化表。不能用网上其他板卡的 SC4336P 数值替代,因为 MIPI Lane、时钟和工作模式可能不同。

7 推荐写入项目文档的准确表述

基于厂家提供的 SC4336P Sensor 库完成摄像头配置适配,选择 2560 × 1440@30fps 线性模式,配置 I2C0、MIPI 双 Lane、RAW12 输入、VI Bayer12 采集及 VI 三维降噪,并建立 VI、VPSS、VENC 链路;结合 Wi-Fi RTSP 传输需求调整编码分辨率、帧率、GOP 和码率。通过海思 PQ 工具启用并调试 AE、AWB 和降噪效果。

如果尚未实际使用 PQ 工具导出参数,应把最后一句改成:

系统已启用海思 AE、AWB 和 VI 降噪功能,后续根据跳远场地光照和运动模糊情况继续标定 ISP 参数。

这一步主要完成"摄像头原始数据 → 编码码流"的整条视频链路。

具体操作

  1. 初始化 SYS 和 VB

根据 2560×1440 分辨率计算视频缓冲区大小,创建 VB Pool,然后初始化海思媒体系统。

c 复制代码
ss_mpi_vb_set_cfg();
ss_mpi_vb_init();
ss_mpi_sys_init();

主要配置:

  • 分辨率:2560×1440
  • VB 对齐:64 字节
  • 缓冲块数量
  • RAW、YUV帧需要的内存大小
  1. 启动 VI 和 ISP

VI 接收 SC4336P 通过 MIPI 输出的 RAW12 图像,ISP完成黑电平、曝光、白平衡、去噪和 Bayer 转换。

当前实际配置:

text 复制代码
SC4336P
MIPI 双 Lane
RAW12 BGGR
2560×1440
30fps

主要工作:

  • 注册 SC4336P Sensor;
  • 注册 AE、AWB 算法库;
  • 初始化 ISP;
  • 创建 VI Device、VI Pipe 和 VI Channel;
  • 将 MIPI 设备绑定到 VI Pipe;
  • 启动 ISP 运行线程。
  1. 配置 VPSS

VPSS 接收 VI 输出的 YUV 图像,完成缩放、裁剪、帧率转换和格式转换。

当前配置为:

text 复制代码
输入:2560×1440 YUV420
输出:2560×1440 YUV420
VPSS Group:0
VPSS Channel:0

如果电脑端不需要 4M 画面,可以在这里缩放成:

text 复制代码
1920×1080
1280×720

这样可以降低编码压力、Wi-Fi 带宽和电脑端解码负担。

  1. 绑定 VI 和 VPSS

将 VI 通道输出直接送入 VPSS:

c 复制代码
ss_mpi_sys_bind(&vi_chn, &vpss_grp);

当前配置链路为:

text 复制代码
VI Device 0
  -> VI Pipe 0
  -> VI Channel 0
  -> VPSS Group 0
  1. 创建 VENC 编码通道

配置视频编码格式、分辨率、码率、帧率和 GOP。

当前源码默认参数:

text 复制代码
编码格式:H.265
编码模式:CBR
分辨率:2560×1440
帧率:30fps
码率:6144kbps
GOP:50
VENC Channel:0

如果电脑端更适合 H.264,需要同时修改:

  • payload_type:H.265 攃成 H.264;
  • rc_mode:H.265 CBR 改为 H.264 CBR;
  • RTSP 服务中的编码类型;
  • SPS、PPS解析和发送逻辑。
  1. 绑定 VPSS 和 VENC

将 VPSS 输出送给编码器:

c 复制代码
ss_mpi_sys_bind(&vpss_chn, &venc_chn);

完整链路变为:

text 复制代码
SC4336P
  -> MIPI
  -> VI
  -> ISP
  -> VPSS
  -> VENC
  1. 获取编码码流

启动取流线程,持续从 VENC 获取 H.264 或 H.265 数据包:

c 复制代码
ss_mpi_venc_query_status();
ss_mpi_venc_get_stream();

处理完成后释放码流:

c 复制代码
ss_mpi_venc_release_stream();

码流可以:

  • 保存成 .h264 或 .h265 文件;
  • 发送给 RTSP 服务;
  • 用 VLC、FFplay 或电脑端 OpenCV 解码。
  1. 停止和释放资源

程序退出时按照相反顺序停止:

text 复制代码
停止取流线程
解除 VPSS 与 VENC 绑定
停止 VENC
解除 VI 与 VPSS 绑定
停止 VPSS
停止 VI 和 ISP
退出 SYS
释放 VB

否则程序再次启动时,可能出现设备忙、通道已创建或 VB 重复初始化等问题。

简化表述

基于海思 MPP 框架初始化 SYS 和 VB 视频缓冲池,配置 SC4336P 的 VI、ISP采集链路,将 RAW12 图像转换为 YUV数据;通过 VPSS 完成缩放和格式转换,并绑定 VENC 实现 H.264/H.265 编码。创建独立取流线程获取编码数据,并将码流发送给 RTSP 服务供电脑端实时解码。

相关推荐
2601_966827451 小时前
视频里的特效字幕怎么翻译?外挂字幕与AI字幕一键处理教程
音视频
八月的雨季 最後的冰吻2 小时前
音视频面试--延迟优化
面试·职场和发展·音视频
智能直播3 小时前
MEDAI-W2_Tinyalsa音频_HDMI输出_CSDN文章
音视频·实时音视频·视频编解码
szxinmai主板定制专家3 小时前
AMR 项目落地:机器人控制器硬件定制化需求复盘
arm开发·单片机·fpga开发·系统架构·机器人·am62x
狗凯之家源码网15 小时前
吃瓜主题 3.0 视频源码深度评测与实战指南
音视频
美狐美颜sdk19 小时前
视频美颜SDK中的YUV与RGBA格式有什么区别?直播APP开发解析
人工智能·计算机视觉·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
音视频牛哥20 小时前
不止于超低延迟:SmartMediaKit iOS Unity3D RTSP/RTMP 播放器的核心竞争力
音视频·unity3d rtsp播放器·unity3d rtmp播放器·smartmediakit·ios unity rtsp·ios unity rtmp·unity3d ios播放器
辰辰观影1 天前
网盘视频播放器怎么选?2026全平台推荐
经验分享·音视频
secondyoung1 天前
Cortex-R52与TriCore详细对比
arm开发·单片机·嵌入式硬件·mcu