【海思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;
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Netty中Channel的isWritable方法理解

目录 初见 深入 需要注意 对待超SIZE情况开源项目怎么做 1、seata中 2、SUMMER中 3、一些资料中 总结 初见 以下是包中注释 Returns true if and only if the I/O thread will perform the requested write operation immediately. Any write requests made when t…

如何解决syntaxerror: more than 255 arguments 报错

如何解决syntaxerror: more than 255 arguments 报错 问题背景解释解决方案 问题背景 今天拼接特征的时候&#xff0c;突然代码报错syntaxerror: more than 255 arguments &#xff0c;看了一下感觉这个报错非常有意思&#xff0c;估计平时也是没机会碰到&#xff0c;和大家分…

线程基础介绍

什么是线程&#xff1f; linux内核中是没有线程这个概念的&#xff0c;而是轻量级进程的概念&#xff1a;LWP。一般我们所说的线程概念是C库当中的概念。 1.1线程是怎样描述的&#xff1f; 线程实际上也是一个task_struct&#xff0c;工作线程拷贝主线程的task_struct&#…

推出ASM2824 PCIe交换机,预计M.2插槽将增加,E3SB40E00004EE、E2SB40E00000JE 40MHz晶振

一、ASM2824 PCIe交换机&#xff0c;预计M.2插槽将增加 ASM2824 PCI-Express Gen 3.0 x24交换机采用PCI-Express 3.0 x8&#xff0c;并提供四个PCI-Express 3.0 x4连接&#xff0c;其结构为PLX PEX8747的一半。从理论上讲&#xff0c;这将允许主板设计人员从英特尔Z390芯片组的…

C++类和对象——(8)类的组合

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 人生就像骑单车&#xff0c;想保持平衡…

香港科技大学广州|机器人与自主系统学域博士招生宣讲会—北京专场!!!(暨全额奖学金政策)

在机器人和自主系统领域实现全球卓越—机器人与自主系统学域 硬核科研实验室&#xff0c;浓厚创新产学研氛围&#xff01; 教授亲临现场&#xff0c;面对面答疑解惑助攻申请&#xff01; 一经录取&#xff0c;享全额奖学金1.5万/月&#xff01; 时间&#xff1a;2023年12月09日…

Python实现广义线性回归模型(statsmodels GLM算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 广义线性模型(Generalized Linear Model&#xff0c;简称GLM)是一种广泛应用于回归分析和分类问题的统…

MySql概述及其性能说明

MySQL是一种开源的关系型数据库管理系统&#xff0c;由瑞典MySQL AB公司开发&#xff0c;现属于Oracle公司。MySQL是最流行的开源数据库之一&#xff0c;被广泛地应用于Web开发中。MySQL提供了一个高度稳定可靠的数据存储解决方案&#xff0c;同时也可以很容易地跨平台运行。My…

前端十几年后的变迁:从代码编织者到创新驱动者

十几年前的前端开发&#xff0c;是一个被大多数人忽视的领域。那时的网页设计简陋&#xff0c;功能单一&#xff0c;前端开发的工作也相对简单。然而&#xff0c;随着科技的发展和互联网的普及&#xff0c;前端开发已经从一个边缘角色成长为一个关键的创新驱动力。那么&#xf…

6.1810: Operating System Engineering 2023 <Lab3: page tables>

一、本节任务 实验环境&#xff1a; 二、要点 如何防止程序破坏内核或其他进程空间&#xff1f;隔离地址空间&#xff0c;进程只能读写自己的内存空间。 在保证隔离的同时&#xff0c;如何将多个地址空间复用到一个物理内存上&#xff1f;虚拟内存/页表。操作系统通过页表来为…

Bert4keras相关环境安装

1. 创建虚拟环境&#xff0c;先安装cudatoolkit和cudnn cudatoolkit版本不对容易报so库找不到的错。 具体安装参考&#xff1a;在conda虚拟环境中安装cuda和cudnn&#xff0c;解决pip install or python setup.py install 将安装包安装到全局环境中的问题&#xff08;1.2部分&…

有源功率因数校正电路的设计(论文+仿真)

1. 系统设计 本文围绕有源功率因数校正电路的设计而展开&#xff0c;拟以BOOST的拓扑结构进行有源功率因数校正电路的搭建&#xff0c;通过不同电流模式的Boost变换电路实际应用及其分析&#xff0c;能够总结最优的解决设计方案&#xff0c;在方案建立的基础之上&#xff0c;通…

企业数字档案馆室建设指南

数字化时代&#xff0c;企业数字化转型已经成为当下各行业发展的必然趋势。企业数字化转型不仅仅是IT系统的升级&#xff0c;也包括企业内部各种文件、档案、合同等信息的数字化管理。因此&#xff0c;建设数字档案馆室也变得尤为重要。本篇文章将为您介绍企业数字档案馆室建设…

华为鸿蒙爆发真实力!原生应用媲美iOS,使用流畅度将提升20至30%

随着华为鸿蒙原生应用开发计划的启动&#xff0c;一场席卷全球的科技浪潮正在涌动。鸿蒙生态的快速发展&#xff0c;吸引了无数企业和开发者的关注&#xff0c;他们纷纷拥抱这个新兴的生态系统&#xff0c;共同构建一个更加繁荣的鸿蒙世界。 华为鸿蒙原生应用开发计划引爆全球…

【计算机二级MS Office】word(上)

这里写目录标题 文件选项卡保存和另存为属性检查文档 开始选项卡字体更改字体和字号设置中文和英文为两种不同字体的快捷方式介绍其余图标文本效果突出颜色如何挑选字体颜色字符底纹带圈字符字体对话框&#xff08;隐藏&#xff09; 段落 插入选项卡设计选项卡布局选项卡引用选…

Ribbon 饥饿加载

Ribbon默认是采用懒加载&#xff0c;即第一次访问时才会去创建LoadBalanceClient&#xff0c;请求时间会很长而饥饿加载则会在项目启动时创建&#xff0c;降低第一次访问的耗时&#xff0c;通过下面配置开启饥饿加载: 一、懒加载 Ribbon 默认为懒加载即在首次启动Application…

妈妈和老婆掉进水里,孟子认为先救老婆是禽兽

妈妈和老婆同时掉进水里先救谁&#xff1f; 多数男人不敢回答&#xff0c;怕得罪老婆。孟子认为&#xff0c;必须先救妈妈。因为父母都照顾不好&#xff0c;是不孝。先救妈妈&#xff0c;再救老婆。 中国人的信仰是天&#xff0c;以及孔孟之道。中国人不信宗教。 孟子&#x…

mysql锁介绍

锁分类&#xff1a; 加锁时机 普通select 语句会加MDL读锁&#xff0c;防止DDL的MDL写锁产生冲突 update、insert、delete会自动加入排它锁X&#xff0c;以及意向IX锁 select ... lock in share mode 加意向IS锁以及共享S锁 select... for update 加意向IX锁以及排它锁X

数据结构(超详细讲解!!)第二十六节 图(下)

1.无向图的连通分量 图遍历时&#xff0c;对于连通图&#xff0c;无论是广度优先搜索还是深度优先搜索&#xff0c;仅需要调用一次搜索过程&#xff0c;即从任一个顶点出发&#xff0c;便可以遍历图中的各个顶点。对于非连通图&#xff0c;则需要多次调用搜索过程&#xff0c;而…

二叉平衡树

一直想深入的研究一下&#xff0c;并手写平衡二叉树的插入、删除代码。 二叉树是动态查找的典范&#xff0c;但在极限情况下&#xff0c;二叉树的查找效果等同于链表&#xff0c;而平衡二叉树可以完美的达到 log ⁡ 2 n \log_2 n log2​n。 AVL简称平衡二叉树&#xff0c;缩写…