【海思SS528 | VO】MPP媒体处理软件V5.0 | VO模块编程总结

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

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

目录

  • 🎄一、概述
  • 🎄二、VO设备
    • ✨2.1 设置VO设备公共属性 hi_mpi_vo_set_pub_attr
    • ✨2.2 使能VO设备 hi_mpi_vo_enable
  • 🎄三、VO视频层
    • ✨3.1 设置视频层属性 hi_mpi_vo_set_video_layer_attr
    • ✨3.2 使能视频层 hi_mpi_vo_enable_video_layer
  • 🎄四、VO通道
    • ✨4.1 设置VO通道属性 hi_mpi_vo_set_chn_attr
    • ✨4.2 使能VO通道 hi_mpi_vo_enable_chn
  • 🎄五、VO模块工作过程
    • ✨5.1 将视频图像送入VO通道显示 hi_mpi_vo_send_frame
  • 🎄六、VO模块销毁


在这里插入图片描述

🎄一、概述

上篇文章,我们学习了海思SS528的视频输出模块的一些基础知识,本文总结一下海思视频输出(VO)的使用。

使用海思的视频输出时,我们需要做下面几个步骤:

  • 1.设置VO设备公共属性、使能VO设备;
  • 2.设置视频层属性,使能视频层;
  • 3.设置VO通道属性,使能VO通道;
  • 4.向VO通道发送视频数据;
  • 5.使用后,可以销毁解码通道。

在这里插入图片描述

🎄二、VO设备

✨2.1 设置VO设备公共属性 hi_mpi_vo_set_pub_attr

VO设备公共属性的结构体如下:

typedef struct {td_u32 bg_color; /* RW; background color of a device, in RGB format. */ot_vo_intf_type intf_type; /* RW; type of a VO interface */ot_vo_intf_sync intf_sync; /* RW; type of a VO interface timing */ot_vo_sync_info sync_info; /* RW; information about VO interface timing */
} ot_vo_pub_attr;

结构体成员:

  • bg_color:设备背景色,表示方法RGB888
  • intf_type:设备接口类型
  • intf_sync:接口时序
  • sync_info:接口时序信息。intf_sync配置用户时序OT_VO_OUT_USER时,该结构体生效

看例子:

hi_vo_pub_attr vo_pub_attr = { 0 };
vo_pub_attr.intf_type = HI_VO_INTF_HDMI;
vo_pub_attr.intf_sync = HI_VO_OUT_3840x2160_30;
vo_pub_attr.bg_color = 0x0000FF;
ret = hi_mpi_vo_set_pub_attr(vo_dev, pub_attr);

注意
1、可以同时使用多个接口类型示意: intf_type = OT_VO_INTF_BT1120 | OT_VO_INTF_HDMI
2、所有接口均支持用户时序


✨2.2 使能VO设备 hi_mpi_vo_enable

使能VO设备时通过调用函数 hi_mpi_vo_enable,并指定设备号。函数原型如下:

hi_s32 hi_mpi_vo_enable(hi_vo_dev dev);VO设备号:
#define SAMPLE_VO_DEV_DHD0 0                  /* VO's device HD0 */
#define SAMPLE_VO_DEV_DHD1 1                  /* VO's device HD1 */
#define SAMPLE_VO_DEV_DSD0 2                  /* VO's device SD0 */
#define SAMPLE_VO_DEV_UHD  SAMPLE_VO_DEV_DHD0 /* VO's ultra HD device:HD0 */
#define SAMPLE_VO_DEV_HD   SAMPLE_VO_DEV_DHD1 /* VO's HD device:HD1 */

注意
1.在调用设备使能前,必须对设备公共属性进行配置,否则返回设备未配置错误
2.如果设备已经使能,调用此接口则返回未禁用错误,不支持重复使能。


在这里插入图片描述

🎄三、VO视频层

✨3.1 设置视频层属性 hi_mpi_vo_set_video_layer_attr

VO视频层属性的结构体如下

typedef struct {ot_rect display_rect; /* RW; display resolution */ot_size img_size; /* RW; canvas size of the video layer */td_u32 display_frame_rate; /* RW; display frame rate */ot_pixel_format pixel_format; /* RW; pixel format of the video layer */td_bool double_frame_en; /* RW; whether to double frames */td_bool cluster_mode_en; /* RW; whether to take cluster way to use memory */ot_dynamic_range dst_dynamic_range; /* RW; video layer output dynamic range type */td_u32 display_buf_len;            /* RW; Video Layer display buffer length */ot_vo_partition_mode partition_mode;  /* RW; Video Layer partition mode */ot_compress_mode compress_mode; /* RW; Compressing mode */
} ot_vo_video_layer_attr;

结构体成员:

  • display_rect:视频显示区域矩形结构体, SINGLE模式下display_rect为动态属性; MULTI模式下display_rect为静态属性。
  • img_size:图像分辨率结构体,即合成画面尺寸,静态属性。
  • display_frame_rate:视频显示帧率,静态属性
  • pixel_format:视频层输入像素格式: YVU420 SEMIPLANAR, YVU422 SEMIPLANAR,YUV420 SEMIPLANAR, YUV422 SEMIPLANAR, YUV400,静态属性
  • double_frame_en:视频层倍帧开关,静态属性
  • cluster_mode_en:视频层内存聚集使能开关,静态属性。
  • dst_dynamic_range:视频层输出动态范围类型,静态属性。
  • display_buf_len:视频层显示缓存的长度,静态属性。
    非省buffer方案下取值范围: [0], [3, 15]。
    省buffer方案下取值范围: [0], [2,15]
  • partition_mode: 视频层的分割模式: OT_VO_PARTITION_MODE_SINGLE,OT_VO_PARTITION_MODE_MULTI,静态属性。
  • compress_mode:视频层支持压缩或解压模式:支持OT_COMPRESS_MODE_NONE,OT_COMPRESS_MODE_SEG, OT_COMPRESS_MODE_SEG_COMPACT,OT_COMPRESS_MODE_LINE,静态属性。

注意:
1.img_size和display_rect的范围都要大于或等于显示的最小分辨率32x32。
2.img_size和display_rect要求2对齐。
3.对于不支持缩放的视频层,通常保持图像分辨率和显示分辨率一致

更多注意点可以看《MPP媒体处理软件V5.0》的ot_vo_video_layer_attr结构体。


✨3.2 使能视频层 hi_mpi_vo_enable_video_layer

使能VO视频层时通过调用函数 hi_mpi_vo_enable_video_layer,并指定设备层号。函数原型如下:

hi_s32 hi_mpi_vo_enable_video_layer(hi_vo_layer layer);

注意

  • 1、视频层使能前必须保证该视频层所绑定的设备处于使能状态。
  • 2、视频层使能前必须保证该视频层已经配置
  • 3、视频输出模块有4个视频层和4个图形层,如下定义:
    0: OT_VO_LAYER_V0,即视频层0;
    1: OT_VO_LAYER_V1,即视频层1;
    2: OT_VO_LAYER_V2,即视频层2,用作PIP层;
    3: OT_VO_LAYER_V3,即视频层3。
    4: OT_VO_LAYER_G0,即图形层0。
    5: OT_VO_LAYER_G1,即图形层1。
    6: OT_VO_LAYER_G2,即图形层2,用作鼠标层。
    7: OT_VO_LAYER_G3,即图形层3
  • 4、V0/V1/V3/G0/G1视频层和图形层固定绑定在相应的设备上面, PIP视频层V2可以选择绑定在设备DHD0或DHD1上,鼠标层G2可以选择绑定到设备DHD0/DHD1/DSD0上,图形层G3可以选择绑定到设备DHD0/DHD1/DSD0上。

更多注意点可以看《MPP媒体处理软件V5.0》的ot_vo_layer结构体。


在这里插入图片描述

🎄四、VO通道

✨4.1 设置VO通道属性 hi_mpi_vo_set_chn_attr

VO通道属性的结构体如下

typedef struct {td_u32 priority; /* RW; video out overlay priority sd */ot_rect rect; /* RW; rectangle of video output channel */td_bool deflicker_en; /* RW; deflicker or not sd */
} ot_vo_chn_attr;

结构体成员:

  • priority:视频通道叠加优先级,数值越大优先级越高,优先级高的在上层。该属性只在SINGLE模式下有效。
  • rect:通道矩形显示区域。以屏幕的左上角为原点。其取值必须是2对齐,且该矩形区域必须在屏幕范围之内。
  • deflicker_en:是否使能抗闪烁。
    TD_TRUE:使能;
    TD_FALSE:禁用。
    抗闪烁效果需要调用VGS实现,固只在SINGLE模式下有效。

注意
1.SINGLE模式下,当多个通道有重叠的显示区域时,优先级高的通道图像将覆盖优先级低的通道。优先级相同的各通道有重叠时,默认通道号大的图像将覆盖通道号小的通道图像。
2.如果有视频层放大的情况, rect是放大前视频层上的起始位置和宽高,放大后显示的起始位置和宽高会按视频层放大的比例偏移或放大。
3.通道显示区域不能超过视频层属性中设定的画布大小(img_size大小)。


✨4.2 使能VO通道 hi_mpi_vo_enable_chn

使能指定的视频输出通道可以调用函数hi_mpi_vo_enable_chn,并指定视频层和通道。函数原型如下:

hi_s32 hi_mpi_vo_enable_chn(hi_vo_layer layer, hi_vo_chn chn);

注意
1.调用前必须使能相应设备上的视频层
2.通道使能前必须进行通道配置,否则返回通道未配置的错误
3.允许重复使能同一视频输出通道,不返回失败。


在这里插入图片描述

🎄五、VO模块工作过程

✨5.1 将视频图像送入VO通道显示 hi_mpi_vo_send_frame

如果VO模块没有绑定源模块,则可以调用函数hi_mpi_vo_send_frame来将将视频图像送入VO通道显示。函数原型如下:

hi_s32 hi_mpi_vo_send_frame(hi_vo_layer layer, hi_vo_chn chn, const hi_video_frame_info *frame_info,hi_s32 milli_sec);

注意
1.调用该接口前必须保证通道已经使能
2.输入视频数据信息要符合VO数据的要求。宽和高需要与实际图像宽高相符,且均不能小于32,宽高要求以2对齐。像素格式为SPYCbCr420、 SPYCbCr422、SPYCrCb420、 SPYCrCb422或者单分量格式。视频格式支持LINEAR和TILE格式。
LINEAR视频格式的压缩模式支持非压缩,行压缩,紧凑型段压缩和非紧凑段压缩模式,通道支持的具体的确切的压缩模式与对应视频层相同。 TILE视频格式的压缩模式支持非压缩, TILE压缩


在这里插入图片描述

🎄六、VO模块销毁

1.先禁用VO通道

for (i = 0; i < (hi_s32)wnd_info.wnd_num; i++) {ret = hi_mpi_vo_disable_chn(vo_layer, i);if (ret != HI_SUCCESS) {sample_print("failed with %#x!\n", ret);return HI_FAILURE;}
}

2.禁用VO视频层

hi_s32 sample_comm_vo_stop_layer(hi_vo_layer vo_layer)
{hi_s32 ret;ret = hi_mpi_vo_disable_video_layer(vo_layer);if (ret != HI_SUCCESS) {sample_print("failed with %#x!\n", ret);return HI_FAILURE;}return HI_SUCCESS;
}

3.禁用VO设备

hi_s32 sample_comm_vo_stop_dev(hi_vo_dev vo_dev)
{hi_s32 ret;ret = hi_mpi_vo_disable(vo_dev);if (ret != HI_SUCCESS) {sample_print("failed with %#x!\n", ret);return HI_FAILURE;}return HI_SUCCESS;
}

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

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

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

相关文章

mysql5.7安装详细教程

文章目录 1 引言1.1 现有的数据存储方式有哪些&#xff1f;1.2 以上存储方式存在哪些缺点&#xff1f; 2 数据库2.1 概念2.2 数据库的分类 3 数据库管理系统3.1 概念3.2 常见数据库管理系统 4 MySQL4.1 简介4.2 访问与下载4.3 安装4.3.1 解压缩到非中文目录4.3.2 编写配置文件4…

一张图理解接口测试框架

测试框架先向测试数据库中插入测试数据&#xff08;如&#xff1a;name”Tom“&#xff09; 调用被测系统提供的接口&#xff08;传参&#xff1a;name”Tom“&#xff09; 从测试数据库中查到符合参数的数据 将查询到的数据组成Json格式&#xff0c;并返回给测试框架 提供…

【MySQL】:数据库基本认识

数据库基础 一.什么是数据库1.mysql是什么2.为什么要有数据库3.服务器&#xff0c;数据库&#xff0c;表关系4.Mysql架构5.SQL语句分类 二.存储引擎 一.什么是数据库 1.mysql是什么 1.mysql是数据库服务的客户端。 2.mysqld是数据库服务的服务器端。 3.mysql本质&#xff1a;基…

docker安装及配置mysql

docker 安装mysql 下载镜像文件 下载mysql5.7版本 sudo docker pull mysql:5.7检查是否下载成功 sudo docker images2.创建实例并启动 切换到root下避免每次使用sudo 密码&#xff1a;vagrant docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/my…

解决Error:You‘re using an RSA key with SHA-1, which is no longer allowed

一、问题 在微信开发者工具中&#xff0c;推送代码时发生错误Error:You‘re using an RSA key with SHA-1, which is no longer allowed...... 奇怪的是命令行可以正常push: 原因&#xff1a;因为生成密钥的RSA算法&#xff0c;由于安全性原因&#xff0c;现在已经不允许使用…

STM32F1定时器TIM

目录 1. TIM&#xff08;Timer&#xff09;定时器 2. 定时器类型 2.1 基本定时器框图 2.2 通用定时器框图 2.3 高级定时器框图 3. 定时器代码 3.1 恢复缺省配置 3.2 时基单元初始化 3.3 结构体变量附一个默认值 3.4 使能计数器 3.5 使能中断输出信号 3.…

MySQL Server 层和引擎层是如何交互的

Server 层、引擎层、BufferPool、磁盘间的关系 大体来说&#xff0c; MySQL可以分为Server层和存储引擎层两部分。 1&#xff09;Server 层&#xff1a;Server 层包括连接器、查询缓存、分析器、优化器、执行器等&#xff0c;涵盖MySQL的大多数核心服务功能&#xff0c;以及所…

git 克隆无权限-重新输入账号密码

克隆项目代码时提示没有权限&#xff0c;有可能是没有登录账号&#xff0c;也可能是账号密码改了&#xff0c;运行下面指令&#xff0c;然后重新克隆项目&#xff0c;下载的时候会让你重新输入账号密码&#xff0c;则克隆成功 git config --global credential.helper cache 参考…

2023 金砖国家职业技能大赛网络安全省赛理论题样题(金砖国家未来技能挑战赛)

2023 金砖国家职业技能大赛网络安全省赛理论题样题&#xff08;金砖国家未来技能挑战赛&#xff09; 一、参加比赛的形式 团队参与&#xff0c;每队2名选手&#xff08;设队长1名&#xff09;。 二、项目项目阶段简介 项目由四个阶段组成&#xff0c;将按顺序完成。向参与者…

STM32——震动传感器点亮LED灯

震动传感器简单介绍 若产品不震动&#xff0c;模块上的 DO 口输出高电平&#xff1b; 若产品震动&#xff0c;模块上的 DO 口输出低电平&#xff0c;D0-LED绿色指示灯亮。 震动传感器与STM32的接线 编程实现 需求&#xff1a;当震动传感器接收到震动信号时&#xff0c;使用中断…

分布式数据库HBase

文章目录 前言 一、HBase概述 1.1.1 什么是HBase HBase是一个分布式的、面向列的开源数据库HBase是Google BigTable的开源实现HBase不同于一般的关系数据库, 适合非结构化数据存储HBase是一种分布式、可扩展、支持海量数据存储的 NoSQL数据库。HBase是依赖Hadoop的。为什么HBa…

Linux中的输入输出重定向

目录 1.输出重定向 > 2.追加重定向 >> 3.标准 正确/错误 输出重定向 4.输入重定向 < 5.标准输入 0 1.输出重定向 > 将命令执行之后的结果不打印出来&#xff0c;可以输入在另外一个文件当中。 如&#xff0c;我查看文件a.txt 的前3行&#xff0c;然后不显…

如何从eureka-server上进行服务发现,负载均衡远程调用服务

在spring cloud的maven的pom文件中添加eureka-client的依赖坐标 <!--eureka-client依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependen…

gitLab 和Idea分支合并

以下二选1即可完成分支合并建议第一种简单有效 Idea合并方式 切换到被合并的分支&#xff0c;如我想把0701的内容合并到dev&#xff0c;切换到dev分支&#xff0c;然后再点击merge然后选择要合并的分支&#xff0c;即可,此时git上的代码没有更新只是把代码合到本地需要pull才…

盲盒小程序搭建:实现盲盒消费新体验

近几年来&#xff0c;潮玩市场中的盲盒逐渐席卷了年轻一代人的生活&#xff0c;吸引了不少消费者。盲盒的不确定性给消费者带来了惊喜和快乐&#xff0c;盲盒的商业价值也是逐渐增加&#xff0c;预计2024年盲盒市场规模将突破300亿元。 但在当下互联网快速发展的时代下&#x…

python/matlab图像去雾/去雨综述

图像去雾和去雨是计算机视觉领域的两个重要任务&#xff0c;旨在提高图像质量和可视化效果。本文将综述图像去雾和去雨的算法、理论以及相关项目代码示例。 一、图像去雾算法 基于暗通道先验的方法&#xff1a; 这是广泛应用于图像去雾的经典算法之一。该方法基于一个观察&…

Ubuntu22.04通过Maas和Juju部署openstack charm

目录 官方文档材料准备软件硬件 模板机和虚拟网络安装MAAS官方文档MAAS节点配置安装MAAS浏览器登录MAAS进行配置 激活DHCP 官方文档 https://docs.openstack.org/project-deploy-guide/charm-deployment-guide/2023.1/ 这是一个通过Maas面板即可部署openstack的方式&#xff0…

华为数通---使用基本ACL限制Telnet登录权限案例

组网需求 如下图所示&#xff0c;PC与设备之间路由可达&#xff0c;用户希望简单方便的配置和管理远程设备&#xff0c;可以在服务器端配置Telnet用户使用AAA验证登录&#xff0c;并配置安全策略&#xff0c;保证只有符合安全策略的用户才能登录设备。 配置通过Telnet登录设备…

学习极市开发平台

这是官网的链接&#xff1a;极市开发者平台-计算机视觉算法开发落地平台-极市科技 (cvmart.net) 第一次用这个平台有很多问题&#xff0c;首先在使用这个平台之前&#xff0c;我大部分时候使用的是百度的飞浆平台&#xff0c;也就是BML&#xff0c;去训练一些深度学习的模型。 …

防抖和节流

防抖&#xff08;Debouncing&#xff09;&#xff1a; 防抖是指在事件被触发后&#xff0c;等待一定的时间间隔&#xff0c;如果在这个时间间隔内再次触发该事件&#xff0c;则重新计时。只有当事件停止触发一段时间后&#xff0c;才会执行相应的操作。防抖常用于优化输入框的搜…