【第200篇原创文章】解决低于1%概率出现的芯片VPSS模块跑飞的问题
在发布SDK内测的时候,我们发现在切换视频分辨率的时候有低概率出现VPSS模块跑飞的情况,概率低于1%,试个两三百次,能出1~2次。切换视频分辨率这个功能在安防产品上也确实存在需求,网络带宽不大好的地方分辨率可以适当下调一点降低负载,真正在产品端切换视频分辨率这个功能也不会切换那么频繁,但是从技术上有这个1%的风险,从长远考虑还是得花力气来解决一下。
VPSS模块的概念来源于海思平台,后面大家都这样学习,实际上就是一个视频中间处理的一个模块,比如分辨率的动态调整、多通道输出(比如一个sensor输出多个分辨率的视频,有点像是分频器一样)、还有一些图像格式转换(比如输出yuv,还是rgb都可以设置)、叠加OSD(显示时间、品牌logo等)。
产品背景是采用自研的安防类的芯片,采用linux操作系统,框架上采用自研的多媒体框架,概念学习海思平台,大致也就是那么就给打快,VI, VPSS, VENC, NPU,VDEC,AENC,ADEC等等。这种安防的产品,是无屏幕的,通过网络连到服务器,在手机上开发了一个APP来实现互联互通。
/*****************************************************************************************************/
声明:本博内容均由http://blog.csdn.net/edsam49原创,转载请注明出处,谢谢!
/*****************************************************************************************************/
切换视频分辨率的时候,叠加在视频上的OSD也会做相应调整,比如300w的视频用个的LOGO图片跟720P视频用的图片大小肯定是不一样的,显示的时间戳这些字号的大小要跟视频成一定比例,不然看起来就不协调了,因此就会有osd删除和再叠加的过程。先看看出问题的打印:

出现这种 fifo overflow 就没法恢复,串口也没法输入了,只能重新上电。没有图像帧数据往后传递,编码也不会有数据,这种情况跟死机一样,后果很严重。从品质控制的来说,虽然你的概率很低,但是你的后果已经是顶级的严重,两者关系相乘得出的品质控制参数RPN值也还是不容忽视的,那就彻查吧。
从出现的概率很低,复现一次不容易,因此得做足调试的功课,把能想到的可疑点都加上一些关键打印,不然也只是复现问题,对真正解决问题推动不大。从前面跑飞的前后打印来看,我们分析应该是出在osd部分。先从驱动入手,分析VPSS什么情况下可能会overflow,跟ic设计的人沟通,前面osd位置、大小超过图像的范围会导致overflow。但是从流程上我们切换之前已经把osd都拿下了,为啥还会有呢?我们再在VPSS的中间hal层增加和删除osd的必经之路上加满打印,同时对增加和删除不成功的时候增加了重试机制,多试几次。有了这些信息后,我们就继续跑呗。这种要操作手机APP很多次的,会累死个人,重复、枯燥,真是苦了测试的兄弟。为了减少这种疲劳,在应用上我开发了不通过手机APP也能在本地实现重复反复设置的切换视频分辨率的功能,循环执行,高频高压执行。方法如下,通过后门来控制:

通过反复调试,测试,抓到一次很有意义的突破口:

发现正常的时候,删除OSD都是清一色的del信息,出问题前,有遇到一次osd_update,跟SDK hal层同事分析,osd_update就是直接增加了一个osd进去。为啥在退出的时候还会有增加一个osd进来呢?
有了重要线索,就继续查吧!
往最上面就是应用的处理.先看应用的处理,我们时间刷新有一个线程定时刷.看代码流程上,有先停刷新操作,再删除osd. 从理论上看也是没问题的. 那就再看看SDK接口的实现吧! 果然找到了一点信息.

就是说删除OSD和update canvas的接口是共用的一把锁。出问题的时候大致是这种情况,先执行到了删除,就拿到这把锁了,还没删除完之前,update canvas就调用了,这时候handle这些是有效的,就跑到了等锁这里,等删除完成归还锁了后,update就呼噜呼噜的跑下去了。这是明显有漏洞的,调过了handle的有效性检查。如果把这把锁位置提前,就完全可以避免出问题。
同时,HAL层处理也是有问题的,在刚执行完删除后,没有做状态标记,又能update执行下去,而且是跟掉叠加osd的接口是一样的,这也是不合理的。你相当于有两条路走到驱动上去,没有管控状态,上面失控的时候,你没有防范啊。
所以说,从根本原因上分析,接口层和HAL层都有问题。为了快速解决问题,我们就把接口层的锁的位置提前一点,HAL层的问题等HAL层的同事后面来补强吧!至少现在跑起来是没有问题了的。
修改完后,跑了,差不多跑了切换视频分辨率接近4800次没有复现问题。再提交到测试同步手动操作APP又测试了上千次,没有再复现问题,算解决了吧!后面再遇到再分析。

总结起来,解决这种疑难杂症,需要耐心,需要多方位考虑,把不大可能发生的地方也当成可能发生的地方,不放过死角,问题最终解决之前,都有嫌疑,丰富一下调试手段,提高解决问题的效率。
相关文章:
【第200篇原创文章】解决低于1%概率出现的芯片VPSS模块跑飞的问题
在发布SDK内测的时候,我们发现在切换视频分辨率的时候有低概率出现VPSS模块跑飞的情况,概率低于1%,试个两三百次,能出1~2次。切换视频分辨率这个功能在安防产品上也确实存在需求,网络带宽不大好的地方分辨率可以适当下…...
微信小程序——生命周期详解(代码解读)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
多分类中混淆矩阵的TP,TN,FN,FP计算
关于混淆矩阵,各位可以在这里了解:混淆矩阵细致理解_夏天是冰红茶的博客-CSDN博客 上一篇中我们了解了混淆矩阵,并且进行了类定义,那么在这一节中我们将要对其进行扩展,在多分类中,如何去计算TP࿰…...
Linux系统:OpenSSH7.4p升级到9.0p(服务器漏洞)
清华大学开源软件镜像站下载地址: https://mirrors.tuna.tsinghua.edu.cn/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz 一、升级 0、安装Telnet (1)为防止安装失败,无法用ssh做远程连接,因此先安装telnet yum…...
【面试刷题】——C++的特点简单说明
C是一种通用的编程语言,具有许多强大的特点,以下是其中一些主要特点的简单说明: 面向对象编程(OOP): C支持面向对象编程,允许将数据和操作封装在类中,提高了代码的可维护性和重用性…...
C2基础设施威胁情报对抗策略
威胁情报是指在信息安全和安全防御领域,收集、分析和解释与潜在威胁相关的信息,以便预先发现并评估可能对组织资产造成损害的潜在威胁,是一种多维度、综合性的方法,其通过信息的收集、分析和研判,帮助组织了解可能对其…...
差异备份详细说明(InsCode AI 创作助手)
差异备份详细说明 差异备份(Differential Backup)是一种备份策略,它与增量备份类似,但有一些关键区别。差异备份备份的是自上一次完整备份以来的所有更改数据,而不是自上一次备份以来的所有更改。这意味着差异备份文件…...
flask要点与坑
简介 Flask是一个用Python编写的Web应用程序框架,该框架简单易用、模块化、灵活性高。 该笔记主要记录Flask的关键要点和容易踩坑的地方 Flask 日志配置 Flask 中的自带logger模块(也是python自带的模块),通过简单配置可以实现…...
EasyUI combobox 实现搜索(模糊匹配)功能
很简单的一个下拉框搜索模糊匹配功能,在此记录: 1:页面实现: <select class"easyui-combobox" name"combobox" id"combobox" style"width:135px;height:25px;" headerValue"请选…...
Postman的高级用法一:重新认识postman核心模块
本请求示例来自于免费天气API: 实况天气接口API开发指南 未来一天天气预报api - 天气API 关于Postman的核心模块 全局变量请求接口请求体预处理脚本 类似beforeTest,在发起请求前的预执行逻辑,通常是生成一些动态变量值 测试用例模块 测试者…...
git命令的操作
git命令操作及命令大全 1.创建一个新的本地仓库:2.添加文件到仓库:3.远程仓库操作:4.分支操作:5.git命令大全 1.创建一个新的本地仓库: 使用命令git init在本地目录中创建一个新的git仓库。 2.添加文件到仓库&#x…...
超级详细 SQL 优化大全
1、MySQL的基本架构 1)MySQL的基础架构图 左边的client可以看成是客户端,客户端有很多,像我们经常你使用的CMD黑窗口,像我们经常用于学习的WorkBench,像企业经常使用的Navicat工具,它们都是一个客户端。右…...
数据治理-数据存储和操作-数据库组织模型
数据库存储系统提供了一种将数据放入磁盘并管理和处理这些数据所需指令的封装方法,因此开发人员可以简单地使用指令来操作数据。数据库通常以3种形式进行组织:层次性、关系型和非关系型;这种归类并不是完全互斥的。一些数据库系统可以同时读写…...
IDEA最新激 20活23码
人狠话不多 大家好,最近Intelli Idea官方的校验规则进行了更新,之前已经成功激20活23的Idea可能突然无法使用了。 特地从网上整理了最新、最稳定的激20活23码分享给大家,希望可以帮助那些苦苦为寻找Idea激20活23码而劳累的朋友们。 本激23…...
flutter产物以aar形式嵌入android原生工程
以前做的项目中,flutter都是作为module嵌入原生工程中,新公司项目却是以aar形式嵌入android工程,这种优点是原生工程不必配置flutter环境也能跑了,这里记录一下简单步骤。 创建一个flutter module 通过android studio创建一个fl…...
C++语法
1、基本语法和特性 1、基本语法 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。类 - 类可以定义为描述对象行为/状态的模板/蓝图。方法 - 从基本上说,一个方法表示一种行为。一…...
antd react 文件上传只允许上传一个文件且上传后隐藏上传按钮
antd react 文件上传只允许上传一个文件且上传后隐藏上传按钮 效果图代码解析 效果图 代码解析 import { Form, Upload, message } from antd; import { PlusOutlined } from ant-design/icons; import { useState, useEffect } from react; import { BASE_URL } from /utils/…...
C语言指针进阶(2)
大家好,我们今天继续来分享指针进阶的内容。 目录 5.函数指针 6.函数指针数组 7. 指向函数指针数组的指针 8. 回调函数 5.函数指针 顾名思义函数指针里面存的就是函数的地址了。 那我们通过一段代码来理解函数指针: #include<stdio.h> int Add…...
51 单片机 led 灯光操作
led流水灯 #include <REGX52.H> #include "INTRINS.H"void Delay(unsigned int xms) {unsigned char i, j;while(xms--){_nop_();i 2;j 199;do{while (--j);} while (--i);}}void main(){while(1){P20xFE;Delay(500);P20xFD;Delay(500);P20xFB;Delay(500)…...
VSCODE 使用技巧
vscode批量去掉代码中空行的方法 1、在vscode中使用ctrl f组合快捷键打开替换窗口. 2、输入下面的正则表达式 ^\s*(?\r?$)\n https://mp.weixin.qq.com/s/ZKV2sZWszxBLNTNLEWhsng 你的代码够安全吗?推荐5个VS Code代码安全插件 VSCode:人生苦短&…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
网页端 js 读取发票里的二维码信息(图片和PDF格式)
起因 为了实现在报销流程中,发票不能重用的限制,发票上传后,希望能读出发票号,并记录发票号已用,下次不再可用于报销。 基于上面的需求,研究了OCR 的方式和读PDF的方式,实际是可行的ÿ…...
多模态学习路线(2)——DL基础系列
目录 前言 一、归一化 1. Layer Normalization (LN) 2. Batch Normalization (BN) 3. Instance Normalization (IN) 4. Group Normalization (GN) 5. Root Mean Square Normalization(RMSNorm) 二、激活函数 1. Sigmoid激活函数(二分类&…...
