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

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

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

相关文章:

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

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

逻辑卷管理器lvm

啥意思&#xff0c;个人理解就是可以将物理分区合并一起组成大的磁盘&#xff0c;也可以移除其中的某个分区。 有四个概念需要了解下 PV&#xff0c;物理卷&#xff0c;VG 卷用户组&#xff0c;PE物理扩展块&#xff0c;LV逻辑卷 p物理&#xff0c;v卷&#xff0c;g用户组&a…...

函数声明后的“ - >”是什么?

这种语法的优势之一是可以在函数的返回类型中使用函数参数&#xff0c;使得返回类型更灵活。 先来看一个使用尾返回类型的例子&#xff1a; #include <iostream> auto add(int a, int b) -> int {return a b; }int main() {std::cout << add(3, 4) <<…...

51爱心流水灯32灯炫酷代码

源代码摘自远眺883的文章&#xff0c;大佬是30个灯的&#xff0c;感兴趣的铁汁们可以去看看哦~&#xff08;已取得原作者的许可&#xff09;&#xff1a;基于STC89C51单片机设计的心形流水灯软件代码部分_单片机流水灯代码_远眺883的博客-CSDN博客 由于博主是个小菜鸡&#xff…...

将不同时间点的登录状态记录转化为不同时间段的相同登录状态SQL求解

题目 有不同时间点的登录状态记录表state_log如下 请使用sql将其转化为如下表的不同时间段的相同登录状态记录 思路分析&#xff1a; 此类问题需要用到lag或lead函数取上下行对应的数据&#xff0c;然后对前后结果做比较打标签&#xff08;0或1&#xff09;&#xff0c;再…...

正则表达式与SQL数据库教程

使用正则表达式通过用例查询 Postgres 数据库&#xff1a; 正则表达式&#xff08;又名 Regex&#xff09; 正则表达式是一个强大的工具&#xff0c;广泛用于模式匹配和文本操作。 几乎所有编程语言都支持它们&#xff0c;并且经常用于文本提取、搜索和匹配文本等用例。 正则…...

HTML_web扩展标签

1.表格标签 2.增强表头表现 4.表格属性&#xff08;实际不常用&#xff09; 结构标签&#xff1a; 合并单元格&#xff1a; 更多请查看主页...

论文阅读:Distributed Initialization for VVIRO with Position-Unknown UWB Network

前言 Distributed Initialization for Visual-Inertial-Ranging Odometry with Position-Unknown UWB Network这篇论文是发表在ICRA 2023上的一篇文章&#xff0c;本文提出了一种基于位置未知UWB网络的一致性视觉惯性紧耦合优化测距算法( DC-VIRO )的分布式初始化方法。 对于…...

scrapy爬虫中间件和下载中间件的使用

一、关于中间件 之前文章说过&#xff0c;scrapy有两种中间件&#xff1a;爬虫中间件和下载中间件&#xff0c;他们的作用时间和位置都不一样&#xff0c;具体区别如下&#xff1a; 爬虫中间件&#xff08;Spider Middleware&#xff09; 作用&#xff1a; 爬虫中间件主要负…...

手敲单链表,简单了解其运行逻辑

1. 链表 1.1 结构组成 链表是一种物理存储结构上非连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。 链表的结构如下图所示&#xff0c;是由很多个节点相互通过引用来连接而成的&#xff1b;每一个节点由两部分组成&#xff0c;分别数据域&…...

Redis RDB

基于内存的 Redis, 数据都是存储在内存中的。 那么如果重启的话, 数据就会丢失。 为了解决这个问题, Redis 提供了 2 种数据持久化的方案: RDB 和 AOF。 RDB 是 Redis 默认的持久化方案。当满足一定条件的时候, 会把当前内存中的数据写入磁盘, 生成一个快照文件 dump.rdb。Redi…...

Elasticsearch一些函数查询

1. 根据价格分组统计数量&#xff0c;每组区间为2000&#xff0c; filter_pathaggregations 设置查询结果只展示函数结果 也有date_histogram函数根据日期分组等等 GET order/_search?filter_pathaggregations {"aggs": {"hist_price": {"histogr…...

竞赛选题 : 题目:基于深度学习的水果识别 设计 开题 技术

1 前言 Hi&#xff0c;大家好&#xff0c;这里是丹成学长&#xff0c;今天做一个 基于深度学习的水果识别demo 这是一个较为新颖的竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/pos…...

Linux expect命令详解

在Linux系统中&#xff0c;expect 是一款非常有用的工具&#xff0c;它允许用户自动化与需要用户输入进行交互的程序。本文将深入探讨expect命令的基本语法、使用方法以及一些最佳实践。 什么是Expect命令&#xff1f; expect 是一个用于自动化交互式进程的工具。它的主要功能…...

ubuntu18编译Android8的Failed to contact Jack server问题

环境 ubuntu18.04 Android8.1.0 步骤 安装环境 apt install git-core apt install gnupg apt install flex apt install bison apt install gperf apt install build-essential apt install curl apt install libc6-dev apt install libssl-dev apt install libncurses5-dev:…...

FindSecBugs支持的检测规则

很多SAST集成了FindSecBugs这个开源工具&#xff0c;其好处是直接对Class文件进行检测&#xff0c;也就是直接检测二进制问题&#xff0c;可以直接检测war、jar&#xff0c;还是非常方便的。虽然误报率较高&#xff0c;但是这些检测出来的安全漏洞很多是安全从业人员耳熟能详的…...

【WPF.NET开发】WPF.NET桌面应用开发概述

本文内容 为何从 .NET Framework 升级使用 WPF 进行编程标记和代码隐藏输入和命令控件布局数据绑定图形和动画文本和版式自定义 WPF 应用 Windows Presentation Foundation (WPF) 是一个与分辨率无关的 UI 框架&#xff0c;使用基于矢量的呈现引擎&#xff0c;构建用于利用现…...

态势感知是什么

在当今高度信息化的时代&#xff0c;信息安全风险已经成为企业、政府和个人的重要关注点。为了有效应对这些风险&#xff0c;态势感知成为了一种日益重要的能力。态势感知是一种基于环境的、动态、整体地洞悉安全风险的能力&#xff0c;是以安全大数据为基础&#xff0c;从全局…...

Spring MVC常用的注解, Controller注解的作用,RequestMapping注解的作用 @ResponseBody注解的作用

文章目录 Spring MVC常用的注解和注解的相关作用Controller注解的作用RequestMapping注解的作用ResponseBody注解的作用PathVariable和RequestParam的区别 Spring MVC常用的注解和注解的相关作用 RequestMapping&#xff1a;用于处理请求 url 映射的注解&#xff0c;可用于类或…...

「Verilog学习笔记」自动贩售机1

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 自动贩售机中可能存在的几种金额&#xff1a;0&#xff0c;0.5&#xff0c;1&#xff0c;1.5&#xff0c;2&#xff0c;2.5&#xff0c;3。然后直接将其作为状态机的几种状…...

为AI智能体设计的任务管理后端:构建标准化、机器友好的任务元模型

1. 项目概述&#xff1a;一个为AI而生的待办清单最近在折腾各种AI工具链和自动化流程时&#xff0c;我遇到了一个挺普遍的问题&#xff1a;如何让AI助手&#xff0c;比如ChatGPT、Claude或者本地部署的大语言模型&#xff0c;更好地理解并管理我手头一堆零散、动态的任务&#…...

Helm Diff插件:可视化Kubernetes部署变更,保障发布安全

1. 项目概述&#xff1a;Helm Diff&#xff0c;一个让Kubernetes部署变更“可视化”的利器 如果你和我一样&#xff0c;长期在Kubernetes&#xff08;K8s&#xff09;环境中摸爬滚打&#xff0c;使用Helm来管理复杂的应用部署&#xff0c;那么你一定经历过这样的场景&#xff1…...

ElevenLabs匈牙利语音合成效果深度测评(实测12种场景+WAV/MP3/SSML对比数据)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs匈牙利语音合成技术概览 ElevenLabs 自 2023 年起逐步扩展其多语言支持能力&#xff0c;匈牙利语&#xff08;hu-HU&#xff09;作为东欧高复杂度音系语言的代表&#xff0c;于 v2.5 API 版本…...

腾讯云秒杀活动是什么?2026年最新参与指南(附抢购技巧)

腾讯云秒杀活动是什么&#xff1f;怎么参与&#xff1f;本文将详细解析腾讯云秒杀活动规则、参与入口、抢购技巧及备选方案&#xff0c;助力大家低成本开启云端之旅&#xff01; 一、活动介绍 腾讯云秒杀活动是腾讯云官方推出的限量限时抢购活动&#xff0c;主打高性价比的轻量…...

峰值电流模式控制中传播延迟的功率影响与补偿方案

1. 项目概述&#xff1a;直面峰值电流模式控制的“功率之殇”做电源设计&#xff0c;尤其是反激式开关电源&#xff0c;有一个场景大家肯定都遇到过&#xff0c;而且非常头疼&#xff1a;你的电源在最低输入电压&#xff08;比如85VAC&#xff09;下&#xff0c;各项指标都调得…...

LabVIEW数据记录编程:生产者-消费者模式与TDMS文件实战

1. 项目概述&#xff1a;为什么数据记录是自动化测试的“定海神针”干了这么多年自动化测试和工业测控&#xff0c;我越来越觉得&#xff0c;一个系统稳不稳&#xff0c;关键看它的数据记录环节扎不扎实。你可能花了大把时间把传感器信号调理得漂漂亮亮&#xff0c;把控制算法写…...

盘点那些能让性能翻倍的C++现代特性

在C开发中&#xff0c;“性能”是压倒一切的核心诉求之一。虽然编译器在不断变聪明&#xff0c;但有些底层优化仍需开发者通过选用正确的语言特性来触发。今天这篇文章&#xff0c;我们就来盘点几个能给代码带来质跃式性能提升的 C 现代特性&#xff0c;并附带直观的代码示例。…...

Word里MathType插件报错?别慌,手把手教你搞定MathPage.wll文件丢失问题

Word里MathType插件报错&#xff1f;三步精准定位MathPage.wll文件问题 当你正全神贯注地在Word中编辑数学公式&#xff0c;突然弹出一个刺眼的错误提示&#xff1a;"无法找到MathPage.wll文件"——这种突如其来的技术故障足以打断任何人的工作节奏。作为科研工作者、…...

AI提示词工程化:Git仓库管理、版本控制与团队协作实战

1. 项目概述&#xff1a;一个提示词仓库的诞生与价值最近在折腾AI应用开发时&#xff0c;我遇到了一个几乎所有开发者都会头疼的问题&#xff1a;如何高效地管理和复用那些精心调校过的提示词&#xff08;Prompt&#xff09;。无论是用于代码生成的、内容创作的&#xff0c;还是…...

如何选择Mac Mouse Fix安装方式:终极指南让您的Mac鼠标体验完美升级

如何选择Mac Mouse Fix安装方式&#xff1a;终极指南让您的Mac鼠标体验完美升级 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix Mac Mouse Fix是…...