【海思SS528 | VDEC】MPP媒体处理软件V5.0 | 视频解码模块——学习笔记

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭

目录

  • 🎄一、概述
    • ✨1.1 VDEC模块
    • ✨1.2 什么是视频解码
  • 🎄二、码流发送方式
    • ✨ 2.1 流式发送(OT_VDEC_SEND_MODE_STREAM)
    • ✨ 2.2 按帧发送(OT_VDEC_SEND_MODE_FRAME)
    • ✨ 2.3 按兼容模式发送(OT_VDEC_SEND_MODE_COMPAT)
  • 🎄三、时间戳(PTS)处理
  • 🎄四、用户图片
  • 🎄五、解码帧存分配方式
  • 🎄六、总结


在这里插入图片描述

🎄一、概述

✨1.1 VDEC模块

海思平台的视频解码是硬件解码。VDEC模块提供驱动视频解码硬件工作的MPI接口,实现视频解码功能。
硬件解码模块有VDH、JPEGD,可支持解码协议有:H.264/H.265JPEG/MJPEG
VDEC模块支持解码最大通道数为128个,支持的最大最小分辨率分别为:

  • H.264/H.265:max 8192x8192, min 96x96;
  • JPEG/MJPEG:max 16384x16384,min 8x8。

本文涉及到的SDK文档:《MPP媒体处理软件V5.0》

✨1.2 什么是视频解码

一段连续的视频是由一张张画面组成的,每一张的画面称为一帧。一秒钟的画面总数称为帧率。
由于完整地保存视频的每一帧画面会使得数据量很大,不利于传输和保存。所以人们就把视频进行压缩编码。
常见的编码有:H.264/H.265JPEG/MJPEG
将视频编码数据(H.264/H.265JPEG/MJPEG)解析成YUV格式或RGB格式的数据的整个过程就是视频解码。


在这里插入图片描述

🎄二、码流发送方式

码流发送方式决定了我们怎样将编码帧发送给VDEC模块,VDEC模块一共提供了三种方式:

✨ 2.1 流式发送(OT_VDEC_SEND_MODE_STREAM)

用户每次可发送任意长度码流到解码器,由解码器内部完成一帧码流的识别过程

  • 优点:不需自己检查帧的开始、结束;
  • 缺点:不能希望马上开始解码图像,也就是解码可能会稍微延时。

✨ 2.2 按帧发送(OT_VDEC_SEND_MODE_FRAME)

用户每次发送完整一帧码流到解码器,每调用一次发送接口,解码器就认为该帧码流已经结束,开始解码图像,因此需保证每次调用发送接口发送的码流必须为一帧,否则会出现解码错误。

  • 优点:可以达到快速解码的目的;
  • 缺点:需要自己判断是否为完整的编码帧,要等一帧完整数据才可发送。

✨ 2.3 按兼容模式发送(OT_VDEC_SEND_MODE_COMPAT)

支持一帧码流分多次发送给解码器,但是每帧码流结束时必须配置帧结束标志end_of_frame为TD_TRUE,否则认为当前帧码流还未结束。

  • 优点:不需要等到一帧数据都到了才发送。
  • 缺点:需要自己判断是否编码帧结束。

在这里插入图片描述

🎄三、时间戳(PTS)处理

在模式OT_VDEC_SEND_MODE_FRAME下发送码流时,解码输出的图像时间戳PTS为发送码流接口(ss_mpi_vdec_send_stream)中用户送入的PTS,解码器不会更改此值;

如果用户配置的PTS值为0,则表示用户不进行帧率控制,而是由视频输出模块( VO)进行帧率控制;

当VDEC为回放模式且VPSS为AUTO模式时,如果用户送入的PTS值为-1,则表示此图像不会被视频输出模块( VO)显示;

如果是其他值,则表示视频输出模块( VO)根据用户设置的PTS值进行帧率控制。

注意:不能出现PTS值为0和非0混合的情况。


在这里插入图片描述

🎄四、用户图片

如果出现没有视频流发送给解码器了,这时解码器允许用户设置一帧图像,来表示当前没有新的视频帧。

当网络异常断开,前端没有码流送来时,用户可通过设置插入用户图片显示在VO上,以提示当前网络异常或没有码流可解码。 VDEC提供两种插入用户图片方式:

  • 立刻插入用户图片: VDEC会先清空解码器内部的码流和图像,然后插入用户
    图片。
  • 延迟插入用户图片: VDEC会先把解码器内部的码流全部解完,待解码图像全
    部输出之后再插入用户图片。

在这里插入图片描述

🎄五、解码帧存分配方式

  • 解码ModuleVB池:OT_VB_SRC_MOD
    创建解码通道时不分配图像Buffer,而是由用户调用相应的MPI接口创建专属于解码模块的ModuleVB池,该VB池只允许VDEC获取VB块,其它模块只能使用不能获取。
  • 解码PrivateVB池:OT_VB_SRC_PRIVATE
    创建解码通道时由VDEC创建私有VB池作为该通道的图像Buffer,用户可以在创建通道接口ss_mpi_vdec_create_chn中设置私有VB池的个数frame_buf_cnt和VB块的大小frame_buf_size
  • 解码UserVB池:OT_VB_SRC_USER
    创建解码通道时不分配图像Buffer,而是由用户调用接口ss_mpi_vb_create_pool创建一个视频缓存VB池,再通过调用接口ss_mpi_vdec_attach_vb_pool把某个解码通道绑定到固定的视频缓存VB池中。

三种解码帧存分配方式可通过接口ss_mpi_vdec_set_mod_param的参数vb_src来设置。当解码帧存使用ModuleVB池或者UserVB池方式时,可以不用销毁解码通道直接销毁VB池,但是销毁解码VB池前用户必须保证没有任何模块正在使用这个VB池里的任何一块VB(可通过复位解码通道,以及复位解码直接绑定的后级模块实现,如VDEC绑定VPSS,则就要同时复位VDEC和VPSS;如果用户是从VDEC里获取图像上去,也必须保证全部图像释放回VDEC。),否则会出现程序异常的情况。

在这里插入图片描述

🎄六、总结

本文记录海思SS528 的 VDEC 模块的一些基础知识,用于日后复习。
在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/183721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Retrofit+OkHttp打印Request 请求地址参数

在移动端开发时,我们常常需要像web端一样可以方便地查看我们向服务器发送请求的报文详细日志(如请求地址,请求参数,请求类型,服务器响应的耗时时间,请求返回的结果等等)。 使用Retrofit时&…

CSS3样式详解之圆角、阴影及变形

目录 前言一、圆角样式(border-radius)二、元素阴影(box-shadow)三、过渡动画样式(transition)1. transition-property(用于设置属性名称)2. transition-duration(设置时间)3. trans…

【web安全】CSRF漏洞攻击与防御

前言 总结,仅供学习。 csrf的理解 我们了解一个网站有修改信息,密码,添加删除管理,支付转账的功能之后。 通过抓包抓取对方修改操作的数据包样式, 然后在自己网站搭建一个指令。 当别人来访时, 如果…

linux用户管理_用户和组

2 用户管理 2.1 用户和组的基本概念和作用 2.1.1 账户实质 账户实质就是一个用户在系统上的标识,系统依据账户ID来区分每个用户的文件、进程、任务,给每个用户提供特定的工作关键(如用户的工作目录、SHELL版本以及环境配置等)&…

字符串函数精讲1

又是好几天没有更新了,最近有些忙,但这并不是理由,还是怪我自己玩的时间多了!但还是有在每天敲代码的!话不多说,开始这一期的学习: strlen的使用和模拟实现 • 字符串以 \0 作为结束标志&#…

前端:实现二级菜单(二级菜单悬浮在一级菜单左侧)

效果 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, i…

每日一题:LeetCode-283. 移动零

每日一题系列&#xff08;day 08&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

聚观早报 |亚马逊AWS发布新AI芯片;拼多多Q3营收增长94%

【聚观365】11月30日消息 亚马逊AWS发布新AI芯片 拼多多Q3营收增长94% Redmi K70全新国风配色揭晓 英伟达扩大自动驾驶中国团队 华为nova 12参数细节曝光 亚马逊AWS发布新AI芯片 在美国时间周二举办的Reinvent大会上&#xff0c;亚马逊旗下的云计算部门AWS发布了新的人工…

Docker—更新应用程序

在本部分中&#xff0c;你将更新应用程序和映像。您还将了解如何停止和移除容器。 一、更新源代码 在以下步骤中&#xff0c;当您没有任何待办事项列表项时&#xff0c;您将把“空文本”更改为“您还没有待办事项&#xff01;在上面添加一个&#xff01;” 1、在src/static/…

C#,数值计算——插值和外推,径向基函数插值(RBF_multiquadric)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class RBF_multiquadric : RBF_fn { private double r02 { get; set; } public RBF_multiquadric(double scale 1.0) { this.r02 Globals.SQR(scale); } publi…

智能客服核心技术——预测会话与答案生成

1.信息检索 2. 句型模板匹配标准问题生成答案 3.根据知识图谱推理得到答案

vue发送请求携带token,拼接url地址下载文件

封装请求 &#xff0c;该请求为普通的get请求 该请求返回值为&#xff1a; 请求成功之后拼接URL地址下载文件 代码块 downTemplateRequest(activeKeys.value).then((res) > {let url http://47.169.168.99:18888/media/${res.data.name};var elink document.createElemen…

ApiSix的docker 容器化部署及使用

⼀&#xff0e;etcd安装 Docekr安装Etcd 环境准备 此处安装&#xff0c;是利⽤下载的 etcd 源⽂件&#xff0c;利⽤ docker build 构建完整镜像&#xff0c;具体操作如下&#xff1a; 1.环境准备 1.1. 新建⽂件夹 在磁盘某个路径下新建⼀个⽂件夹&#xff0c;⽤处操作 Dockerfi…

Linux系统平均负载

我们经常会使用 top 命令来查看系统的性能情况&#xff0c;在 top 命令的第一行可以看到 load average 这个数据&#xff0c;如下图所示&#xff1a; load average 包含 3 列&#xff0c;分别表示 1 分钟、5 分钟和 15 分钟的 系统平均负载 系统平均负载&#xff1a; 如果将 …

golang—kafka架构原理快速入门以及自测环境搭建(docker单节点部署)

kafka Apache Kafka 是一个分布式的流处理平台。它具有以下特点&#xff1a; 支持消息的发布和订阅&#xff0c;类似于 RabbtMQ、ActiveMQ 等消息队列支持数据实时处理能保证消息的可靠性投递支持消息的持久化存储&#xff0c;并通过多副本分布式的存储方案来保证消息的容错高…

Java中xml映射文件是干什么的

Java中的XML映射文件主要用于将Java对象与XML文档之间进行转换。它通常用于处理数据交换和存储&#xff0c;例如将Java对象转换为XML格式以便在网络上传输或保存到文件中&#xff0c;或者将XML文档解析为Java对象以进行处理。这种转换可以通过Java的JAXB&#xff08;Java Archi…

springMVC实验(二)—调式工具APIFOX的使用

【知识要点】 后端开发调试工具 前后端分离已经成为互联网类软件开发主流模式&#xff0c;没有前端操作的支持&#xff0c;如何调试后端程序的就是开发人员必须解决的问题。如&#xff1a;get类请求可以直接使用浏览器就能模拟测试&#xff0c;但是post、put等类型的请求&…

Ubuntu 环境下 NFS 服务安装及配置使用

需求&#xff1a;公司内部有多台物理服务器&#xff0c;需要A服务器上的文件让B服务器访问&#xff0c;也就是两台服务器共享文件&#xff0c;当然也可以对A服务器上的文件做权限管理&#xff0c;让B服务器只读或者可读可写 1、NFS 介绍 NFS 是 Network FileSystem 的缩写&…

可以在电脑桌面展示工作计划表的软件

很多上班族都表示自己在工作时&#xff0c;会面临大量且复杂的工作任务&#xff0c;这时候就会拖延工作&#xff0c;或者感觉时间不够用&#xff0c;所以需要有明确的工作计划来指导自己如何分类时间和精力&#xff0c;确保每项工作任务都能够按时完成。如果需要制定每天的工作…

C++学习之路(十二)C++ 用Qt5实现一个工具箱(增加一个XML文本格式化功能)- 示例代码拆分讲解

上篇文章&#xff0c;我们用 Qt5 实现了在小工具箱中添加了《进制转换器功能》功能。为了继续丰富我们的工具箱&#xff0c;今天我们就再增加一个平时经常用到的功能吧&#xff0c;就是「 XML文本格式化 」功能。下面我们就来看看如何来规划开发一个这样的小功能并且添加到我们…