当前位置: 首页 > news >正文

【第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&#xff0…...

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 实现搜索(模糊匹配)功能

很简单的一个下拉框搜索模糊匹配功能&#xff0c;在此记录&#xff1a; 1&#xff1a;页面实现&#xff1a; <select class"easyui-combobox" name"combobox" id"combobox" style"width:135px;height:25px;" headerValue"请选…...

Postman的高级用法一:重新认识postman核心模块

本请求示例来自于免费天气API&#xff1a; 实况天气接口API开发指南 未来一天天气预报api - 天气API 关于Postman的核心模块 全局变量请求接口请求体预处理脚本 类似beforeTest&#xff0c;在发起请求前的预执行逻辑&#xff0c;通常是生成一些动态变量值 测试用例模块 测试者…...

git命令的操作

git命令操作及命令大全 1.创建一个新的本地仓库&#xff1a;2.添加文件到仓库&#xff1a;3.远程仓库操作&#xff1a;4.分支操作&#xff1a;5.git命令大全 1.创建一个新的本地仓库&#xff1a; 使用命令git init在本地目录中创建一个新的git仓库。 2.添加文件到仓库&#x…...

超级详细 SQL 优化大全

1、MySQL的基本架构 1&#xff09;MySQL的基础架构图 左边的client可以看成是客户端&#xff0c;客户端有很多&#xff0c;像我们经常你使用的CMD黑窗口&#xff0c;像我们经常用于学习的WorkBench&#xff0c;像企业经常使用的Navicat工具&#xff0c;它们都是一个客户端。右…...

数据治理-数据存储和操作-数据库组织模型

数据库存储系统提供了一种将数据放入磁盘并管理和处理这些数据所需指令的封装方法&#xff0c;因此开发人员可以简单地使用指令来操作数据。数据库通常以3种形式进行组织&#xff1a;层次性、关系型和非关系型&#xff1b;这种归类并不是完全互斥的。一些数据库系统可以同时读写…...

IDEA最新激 20活23码

人狠话不多 大家好&#xff0c;最近Intelli Idea官方的校验规则进行了更新&#xff0c;之前已经成功激20活23的Idea可能突然无法使用了。 特地从网上整理了最新、最稳定的激20活23码分享给大家&#xff0c;希望可以帮助那些苦苦为寻找Idea激20活23码而劳累的朋友们。 本激23…...

flutter产物以aar形式嵌入android原生工程

以前做的项目中&#xff0c;flutter都是作为module嵌入原生工程中&#xff0c;新公司项目却是以aar形式嵌入android工程&#xff0c;这种优点是原生工程不必配置flutter环境也能跑了&#xff0c;这里记录一下简单步骤。 创建一个flutter module 通过android studio创建一个fl…...

C++语法

1、基本语法和特性 1、基本语法 对象 - 对象具有状态和行为。例如&#xff1a;一只狗的状态 - 颜色、名称、品种&#xff0c;行为 - 摇动、叫唤、吃。对象是类的实例。类 - 类可以定义为描述对象行为/状态的模板/蓝图。方法 - 从基本上说&#xff0c;一个方法表示一种行为。一…...

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)

大家好&#xff0c;我们今天继续来分享指针进阶的内容。 目录 5.函数指针 6.函数指针数组 7. 指向函数指针数组的指针 8. 回调函数 5.函数指针 顾名思义函数指针里面存的就是函数的地址了。 那我们通过一段代码来理解函数指针&#xff1a; #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 你的代码够安全吗&#xff1f;推荐5个VS Code代码安全插件 VSCode&#xff1a;人生苦短&…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...