【海思SS528 | VDEC】MPP媒体处理软件V5.0 | VDEC的使用总结

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

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

目录

  • 🎄一、概述
  • 🎄二、Vdec模块参数
  • 🎄三、创建Vdec解码通道
    • ✨3.1 配置解码通道属性
    • ✨3.2 创建解码通道 hi_mpi_vdec_create_chn
    • ✨3.3 设置解码通道参数 hi_mpi_vdec_set_chn_param
    • ✨3.4 开始接收用户发送的码流 hi_mpi_vdec_start_recv_stream
  • 🎄四
  • 🎄五
  • 🎄六、


在这里插入图片描述

🎄一、概述

上篇文章,我们学习了海思SS528的解码模块的一些基础知识,本文总结一下海思解码模块(VDEC)的使用。

使用海思的解码模块时,我们需要做下面几个步骤:

  • 1.设置Vdec模块参数;
  • 2.创建Vdec解码通道;
  • 3.通道创建成功后,可以向通道发送编码帧;
  • 4.如果解码模块没有绑定到其他模块,可以获取解码帧,手动发送到目标模块(Vpss或Vo或其他);
  • 5.使用后,可以销毁解码通道。

在这里插入图片描述

🎄二、Vdec模块参数

Vdec模块参数的内容很少,主要有两个字段需要留意的。

  • vb_src:解码帧存VB来源
    取值范围:仅支持OT_VB_SRC_MOD、OT_VB_SRC_PRIVATE、 OT_VB_SRC_USER,默认是OT_VB_SRC_MOD
  • mini_buf_mode:码流buffer配置模式
    0:一般模式;
    1:省内存模式。

Mpp的sample:

hi_vdec_mod_param mod_param;
check_return(hi_mpi_vdec_get_mod_param(&mod_param), "vdec get mod param");
mod_param.vb_src = g_vdec_vb_src;
check_return(hi_mpi_vdec_set_mod_param(&mod_param), "vdec set mod param");

在这里插入图片描述

🎄三、创建Vdec解码通道

本小节介绍创建Vdec通道的准备工作,以及创建过程:

  • 1.配置解码通道属性;
  • 2.创建解码通道;
  • 3.设置解码通道参数;
  • 4.开始接收用户发送的码流。

✨3.1 配置解码通道属性

typedef struct {ot_payload_type type;ot_vdec_send_mode mode;td_u32 pic_width;td_u32 pic_height;td_u32 stream_buf_size;td_u32 frame_buf_size;td_u32 frame_buf_cnt;union {ot_vdec_video_attr video_attr;};
} ot_vdec_chn_attr;

上面是解码通道的属性结构体,我们重点关注以下几个字段:

  • type:解码协议类型,主要有HI_PT_H264、HI_PT_H265、HI_PT_JPEG、HI_PT_MJPEG几个取值;
  • mode:码流发送方式,主要有
    流式发送(HI_VDEC_SEND_MODE_STREAM
    按帧发送(HI_VDEC_SEND_MODE_FRAME
    按兼容模式发送(HI_VDEC_SEND_MODE_COMPAT
  • pic_width/pic_height:通道支持的解码图像最大宽、高(以像素为单位)
  • stream_buf_size:码流缓存的大小。推荐值:一幅YUV420解码图像大小。即:宽x高x1.5

设置解码通道属性的例子:

{hi_pic_buf_attr buf_attr = { 0 };chn_attr->type = type;chn_attr->mode = OT_VDEC_SEND_MODE_FRAME; 	// 按帧发送chn_attr->pic_width = width;				// 解码图像宽高chn_attr->pic_height = height;chn_attr->stream_buf_size=width*height*1.5;	// 码流缓存的大小,推荐一幅YUV420解码图像大小。即:宽x高x1.5chn_attr->frame_buf_cnt = 10;				// 解码图像帧存个数,仅PrivateVB模式有效buf_attr.align = 0;buf_attr.height = chn_attr->pic_width;buf_attr.width = chn_attr->width;if (type == HI_PT_H264 || type == HI_PT_H265) {buf_attr.bit_width = HI_DATA_BIT_WIDTH_8;buf_attr.pixel_format = HI_PIXEL_FORMAT_YVU_SEMIPLANAR_420;chn_attr->video_attr.ref_frame_num = 5;chn_attr->video_attr.temporal_mvp_en = 0;chn_attr->frame_buf_size = hi_vdec_get_pic_buf_size(chn_attr->type, &buf_attr);// 解码图像帧存buffer大小,仅PrivateVB模式有效} else if (type == HI_PT_JPEG || type == HI_PT_MJPEG) {chn_attr->mode = HI_VDEC_SEND_MODE_FRAME;buf_attr.bit_width = HI_DATA_BIT_WIDTH_8;buf_attr.pixel_format = sample_vdec->sample_vdec_picture.pixel_format;chn_attr->frame_buf_size = hi_vdec_get_pic_buf_size(chn_attr->type, &buf_attr);// 解码图像帧存buffer大小,仅PrivateVB模式有效}return 0;
}

✨3.2 创建解码通道 hi_mpi_vdec_create_chn

创建解码通道比较简单,只需要调用hi_mpi_vdec_create_chn函数,并指定要创建的通道号和解码通道参数即可。

hi_mpi_vdec_create_chn(chn, &chn_attr)

注意:
1.通道号不能超出最大的通道号范围;
2.属性attr不能为空,否则返回错误码OT_ERR_VDEC_NULL_PTR
3.属性attr的值不能超过解码能力集;
4.使用解码ModuleVB池方式时要在创建解码通道之前要先创建专属于VDEC的模块VB池;
5.使用解码UserVB方式时也要先创建用于解码的视频缓存VB池,且要保证VB块的大小和个数满足当前解码通道所需图像Buffer的大小和个数。
其他注意事项看文档《MPP媒体处理软件V5.0》。


✨3.3 设置解码通道参数 hi_mpi_vdec_set_chn_param

typedef struct {ot_payload_type type;td_u32 display_frame_num;union {ot_vdec_video_param video_param;ot_vdec_pic_param pic_param;};
} ot_vdec_chn_param;

首先注意区别通道属性(ot_vdec_chn_attr)和通道参数(ot_vdec_chn_param),通道参数几个需要留意的字段:

  • type:解码协议类型,主要有HI_PT_H264、HI_PT_H265、HI_PT_JPEG、HI_PT_MJPEG几个取值;
  • display_frame_num:解码缓存图像的最小帧数。取值范围: [0, 16]。默认值: 2。
  • video_param.dec_mode:解码模式。默认值:HI_VIDEO_DEC_MODE_IP;
  • video_param.compress_mode:解码图像压缩模式。
  • video_param.video_format:解码图像数据格式,SS528仅支持OT_VIDEO_FORMAT_TILE_64x16

设置通道参数例子:

{hi_vdec_chn_param chn_param;check_chn_return(hi_mpi_vdec_get_chn_param(chn, &chn_param), chn, "vdec get chn param");if (type == HI_PT_H264 || type == HI_PT_H265) {chn_param.video_param.dec_mode = HI_VIDEO_DEC_MODE_IP;		//解码模式chn_param.video_param.compress_mode = HI_COMPRESS_MODE_NONE;chn_param.video_param.video_format = HI_VIDEO_FORMAT_TILE_64x16; // SS528 只支持这个格式} else {chn_param.pic_param.pixel_format = HI_PIXEL_FORMAT_YVU_SEMIPLANAR_420;chn_param.pic_param.alpha = 255;}chn_param.display_frame_num = 4; // 解码缓存图像的最小帧数check_chn_return(hi_mpi_vdec_set_chn_param(chn, &chn_param), chn, "vdec set chn param");
}

✨3.4 开始接收用户发送的码流 hi_mpi_vdec_start_recv_stream

创建完解码通道的最后一个步骤就是开始接收用户发送的码流,只需要在调用hi_mpi_vdec_start_recv_stream时指定解码通道就可以使该通道处于开始接收码流的状态。
看例子:

check_chn_return(hi_mpi_vdec_start_recv_stream(chn), chn, "vdec start recv stream");

注意:
1.启动接收码流之后,才能调用ss_mpi_vdec_send_stream发送码流成功;
2.启动接收码流前必须保证通道已创建,否则会返回通道未创建的错误码OT_ERR_VDEC_UNEXIST;
3.启动接收码流前必须保证已经禁止使能用户图片,否则返回该操作不允许的错误码OT_ERR_VDEC_NOT_PERM;
4.重复调用启动接收码流接口时,返回成功。

在这里插入图片描述

🎄四

在这里插入图片描述

🎄五

在这里插入图片描述

🎄六、

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

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

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

相关文章

Could NOT find resource [logback-test.xml]

修改 之后就可以正常启动了

连接备份1128

深度学习—分类识别篇:http://tr.daheng-imaging.com/watch/1050636http://tr.daheng-imaging.com/watch/1050636 深度学习—目标检测篇:http://tr.daheng-imaging.com/watch/1101141http://tr.daheng-imaging.com/watch/1101141 深度学习—缺陷分割篇&a…

JRT实现缓存协议

上一篇介绍的借助ORM的增、删、改和DolerGet方法,ORM可以很精准的知道热点数据做内存缓存。那么就有一个问题存在,即部署了多个站点时候,如果用户在一个Web里修改数据了,那么其他Web的ORM是不知道这个变化的,其他Web还…

案例,linux环境下OpenCV+Java,实现证件照在线更换背景色

先看效果(图片来自网络,如有侵权,请联系作者删除) 主要是通过java实现的,linux环境编译安装opencv及证件照背景色更换的核心算法在前面一篇文章中有写到。 目前算法还有瞎呲,当照片光线不均的时候会出现误…

nginx: [alert] could not open error log file

先把cmd的报错信息粘出来 nginx: [alert] could not open error log file: CreateFile() “logs/error.log” failed (3: The system cannot find the path specified) 2023/11/29 11:27:37 [emerg] 5040#18772: CreateDirectory() “D:\enviroment\nginx-1.24.0\conf/temp/cli…

Python GUI编程:dearpygui和tkinter的对比与选择详解

概要 随着Python在GUI(图形用户界面)编程中的不断发展,出现了许多优秀的库,如dearpygui和tkinter。 这两个库在许多方面都有所不同,不仅是在功能方面,还在设计哲学和用途上。 本文将对比这两个库,并使用Python代码举…

burp2023专业版,配置上游代理太难找

burpsuite2023专业版的工具栏与之前的版本不同的是,工具栏中没有了user options这一选项 但在通常的使用过程中,常用到配置上游代理。之前的版本呢,上游代理的配置都在user options选项中设置,user options选项还在工具栏中&#…

从意义中恢复,而不是从数据包中恢复

从书报,录放机,电视机到智能手机,vr 眼镜,所有学习的,娱乐的工具或玩具,几乎都以光声诉诸视听,一块屏幕和一个喇叭。 视觉和听觉对任何动物都是收发信息的核心,诉诸视觉和听觉的光和…

渗透测试考核(靶机1)

信息收集 主机发现 nbtscan -r 172.16.17.0/24 发现在局域网内,有两台主机名字比较可疑,177和134,猜测其为目标主机,其余的应该是局域网内的其他用户,因为其主机名字比较显眼,有姓名的拼音和笔记本电脑的…

Docker快速创建一个单机版的Jenkins实例

谈到 CI/CD,那便少不了这里面的佼佼者 Jenkins,正如 Jenkins 官网说的一样:“Build great things at any scale”,构建伟大,无所不能! 话不多说,该篇文章将会带你使用 Docker 快速创建一个单机…

如何通过CRM实现客户关系管理?

——“小米加步枪是打不赢现代化战争的。” ——”CRM系统已成为企业掘金未来的必备。“ 数字化转型已经成为了企业发展的重要方向,然而数字化转型不仅仅是把线下搬到线上,更重要的是,真正的数字化转型应该以客户的连接和客户的数字化作为突破…

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

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