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

【海思SS626 | VB】关于 视频缓存池 的理解

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

本文未经允许,不得转发!!!

目录

  • 🎄一、概述
  • 🎄二、公共视频缓存池
  • 🎄三、模块视频缓存池
  • 🎄四、私有视频缓存池
  • 🎄五、用户视频缓存池
  • 🎄六、


在这里插入图片描述
在这里插入图片描述

🎄一、概述

海思芯片的一个主要功能就是处理音视频,而处理音视频(特别是视频)时需要大量的内存暂存或运算视频帧。海思芯片又将物理内存分成两部分:OS内存、MMZ内存。这些专门用来处理视频的内存,在海思MPP中被称为 视频缓存池 。本文就根据自己的理解介绍海思MPP的视频缓存池。

关于OS内存、MMZ内存不了解的,可以参考这篇文章:【海思SS626 | 内存管理】海思芯片的OS内存、MMZ内存设置

视频缓冲池(VB,Video Buffer):就是一段很大、又被合理划分和管理的内存,这段内存是从 MMZ内存 中分配的,专门用来做视频数据的暂存和运算场地。 视频缓存池由海思MPP系统管理,用户可以通过调用海思MPP的相关 API 函数来管理视频缓存池。视频缓存池主要有以下四类:

  • 公共视频缓存池(Common VB);
  • 模块视频缓存池(Module VB);
  • 私有视频缓存池(Private VB);
  • 用户视频缓存池(User VB);

操作VB的相关API函数如下:
在这里插入图片描述


在这里插入图片描述

🎄二、公共视频缓存池

公共视频缓存池,是各个模块都能访问的一段内存。

下面内容引用自 SS626ReleaseDoc\zh\01.software\board\MPP\MPP 媒体处理软件 V5.0 开发参考.pdf 2.3.1 小节

  • 视频缓存池主要向媒体业务提供大块物理内存管理功能,负责内存的分配和回收,充分发挥内存缓存池的作用,让物理内存资源在各个媒体处理模块中合理使用。
  • 一组大小相同、物理地址连续的缓存块组成一个视频缓存池。必须在系统初始化之前配置公共视频缓存池。根据业务的不同,公共缓存池的数量、缓存块的大小和数量不同。
  • 所有的视频输入通道都可以从公共视频缓存池中获取视频缓存块用于保存采集的图像。

下图典型的公共视频缓存池数据流图:

  • VI 从公共视频缓存池 B 中获取视频缓存块 Bm,缓存块 Bm 经 VI 发送给 VPSS,输入缓存块 Bm 经过 VPSS 处理之后被释放回公共视频缓存池。
  • 假设 VPSS 通道的工作模式是 USER,则 VPSS 通道 0 从公共视频缓存池 B 中获取缓存块 Bi 作为输出图像缓存 buffer 发送给 VENC,Bi 经 VENC 编码完之后释放回公共视频缓存池;VPSS 通道 1 从公共视频缓存池 B 中获取缓存块 Bk 作为输出图像缓存 buffer 发送给 VO,,Bk 经 VO 显示完之后释放回公共视频缓存池。
  • 看起来是缓存块在各个模块中流转,实际上只是传递视频缓存块的指针,这样可以避免大量的内存复制。

在这里插入图片描述

设置的公共缓存池,MPP系统也会去获取,并不是只有调用 get_blk 才会获取。

模块视频缓存池是特定的模块才会使用。

私有视频缓存池也是MPP系统去创建使用的。

在这里插入图片描述

🎄三、模块视频缓存池

SS626的模块视频缓冲池仅适用于VDEC模块,

  • 必须先调用 ss_mpi_vb_init 进行公共视频缓冲池初始化。
  • 必须先调用 ss_mpi_vb_set_mod_pool_cfg 配置缓存池属性,再初始化缓存池,否则会失败。
  • VDEC模块公共池仅在解码帧存分配方式使用模块公共VB池时才需要创建。
td_s32 ss_mpi_vb_init_mod_common_pool(ot_vb_uid vb_uid);
td_s32 ss_mpi_vb_exit_mod_common_pool(ot_vb_uid vb_uid);
td_s32 ss_mpi_vb_set_mod_pool_cfg(ot_vb_uid vb_uid, const ot_vb_cfg *vb_cfg);
td_s32 ss_mpi_vb_get_mod_pool_cfg(ot_vb_uid vb_uid, ot_vb_cfg *vb_cfg);

使用解码ModuleVB池方式时要在创建解码通道之前要先创建专属于VDEC的模块
VB池,使用解码UserVB方式时也要先创建用于解码的视频缓存VB池,且要保证VB
块的大小和个数满足当前解码通道所需图像Buffer的大小和个数。 H264、 H265、
MPEG4解码每个解码通道所需VB个数至少为参考帧+显示帧+1, JPEG/MJPEG解
码每个解码通道所需VB个数至少为显示帧+1。不同协议解码所需的图像VB块大小
不同,具体计算方法可参见ot_buffer.h里面的函数ot_vdec_get_pic_buf_size


在这里插入图片描述

🎄四、私有视频缓存池

使用PrivateVB方式时每个编码通道之间没有关联,单独销毁某个通道对其它通道无影响,使用灵活

在这里插入图片描述

🎄五、用户视频缓存池

如果使用UserVB方式,需要先创建VB池,再把n个通道绑定到对应的VB池中。通道个
数大于2的情况,使用UserVB可以减少内存消耗,需要的帧存个数请参考多通道使用
的情况;通道数为1或2的情况,也不会增加内存消耗,此时需要的帧存个数可以参考
单通道使用的情况。

在这里插入图片描述

🎄六、

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

参考:
《MPP 媒体处理软件 V5.0 开发参考.pdf》
什么是视频缓存池
https://blog.csdn.net/weixin_42031299/article/details/129477605

http://www.lryc.cn/news/421595.html

相关文章:

  • RCE漏洞及绕过
  • 非对称加密算法-ECDHE
  • 10分钟学会Docker的安装和使用
  • 江科大/江协科技 STM32学习笔记P20
  • CSS 实现两边固定宽,中间自适应
  • C#图片批量下载Demo
  • 部署Springboot + Vue 项目到远程服务器Windows10系统的详细配置
  • 智驭灌区,科技领航—— 高效灌区信息化系统管理平台
  • 下载免费设计素材,有这7个网站就够了
  • 【漏洞复现】某赛通数据泄露防护(DLP)系统 NetSecConfigAjax SQL注入漏洞
  • c++中的仿函数
  • springboot整合mybatis-plus和pagehelper插件报错,
  • 趋动科技荣登「AIGC赋能金融创新引领者TOP20」
  • SOPHGO算能科技BM1684盒子占用空间满的问题解决
  • Spring Boot实用小技巧 - - 第523篇
  • 安卓App开发 篇二:Android UI和布局
  • k8s基本介绍
  • go http启动应用程序
  • Redis:概念、部署、配置、优化
  • 华为OD-D卷找座位
  • Go sdk下载和配置环境变量
  • qt的项目结构
  • 【NLP】文本特征处理:n-gram特征和文本长度规范
  • ESP32人脸识别开发 ---partitions.csv配置的一些说明(五)
  • 【学习笔记】Matlab和python双语言的学习(图论最短路径)
  • vue.config.js 配置 devserve 配置
  • 不入耳耳机什么牌子性价比高?五大年度必选款揭秘
  • SQL Zoo 6.The JOIN operation
  • 视频教程:Vue3移动端抽屉弹层组件实战
  • CSS 的 BFC(块级格式化上下文)