海思HI35xx平台软件开发快速入门之MPEG解码实例

2024-03-26 09:10

本文主要是介绍海思HI35xx平台软件开发快速入门之MPEG解码实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

  海思平台开发MPEG视频解码需要有HIMPP解码库API相关的知识,如果不具备基础的背景知识,请移步我的博文《海思HI35xx平台软件开发快速入门之背景知识》了解海思平台开发的基本步骤和相关知识基础。遵循海思平台软件开发架构,我们一步一步实现一个MPEG视频解码实例。先科普一下什么是MPEG视频,MPEG(Moving Picture Experts Group,动态图像专家组)是ISO成立针对运动图像和语音压缩制定国际标准的组织,MPEG标准主要有以下五个,MPEG-1、MPEG-2、MPEG-4、MPEG-7及MPEG-21等。目前应用较多的是MPEG-4,我们熟悉的DVD就普遍使用了MPEG-4解码标准,反过来说DVD的普及使用也促成了MPEG-4解码标准的知名度。目前MPEG4在数字电视、实时多媒体监控、低比特率下的移动多媒体通信、网络视频流与可视游戏、网络会议、交互多媒体应用、演播电视等领域应用广泛,更多相关MPEG的知识请参阅其官网。对于音视频开发者来说,有必要学习了解一下,如何在海思平台上实现MPEG解码。

知识背景

  海思平台音视频编解码架构遵循下图所示的数据处理流程,我们的MPEG解码实例要实现播放MPEG样例视频,故走的是HARD DISK->VDEC->VPSS->VO->显示器的流程,这个流程一定要熟悉牢记,代码实现都是围绕这条主线来编写的。

实例源码

  实例源码很简单,先来了解一下实现MPEG解码实例的几个函数,以达到了解实例源码大概构造组成,然后再对每个函数进行具体分析。

/*
**函数描述:linux标准信号捕捉函数
**函数功用:退出HIMPP调用,销毁缓冲
*/
HI_VOID SAMPLE_VDEC_HandleSig(HI_S32 signo)
{......
}
/*
**函数描述:用于音视频文件读写推流
**函数功用:用fread等文件操作函数读取音视频文件,并解析后推送HIMPP进行解码
*/
int SAMPLE_COMM_VDEC_JPEG_SendStream( VdecThreadParam *pArgs)
{......
}
/*
**函数描述:HIMPP系统初始化
**函数功用:配置HIMPP系统的各项参数以满足对目标进行编解码
*/
HI_S32 SAMPLE_VDEC_VdhMpeg4(char *filename)
{......
}/*
**主函数
*/
int main(int argc, char *argv[])
{......
}

   main函数讲解,main函数的完成的功能主要有两,一是对信号的初始化,信号的捕捉函数用来接收来之linux的内核消息,如进程退出等;二是将main函数的参数传递给MPEG解码样例函数。以下是main函数的详细内容:

int main(int argc, char *argv[])
{ if(argc != 2){printf("Usage: mpeg <vedio source filename>\n");exit(0);}signal(SIGINT, SAMPLE_VDEC_HandleSig);signal(SIGTERM, SAMPLE_VDEC_HandleSig);SAMPLE_VDEC_VdhMpeg4(argv[1]);return 0;
}

   下面重点讲解SAMPLE_VDEC_VdhMpeg4(char *filename)这个函数,它是MPEG解码样例的重点函数。HIMPP系统的API函数是海思提供的SDK开发包,调用它相关的接口,在编译时必须将其提供的相应库文件进行包含编译。下面结合样例程序讲述如何使用HIMPP提供的API实现自己的业务逻辑。MPEG视频解码实例走的是HARDDISK->VDEC->VPSS->VO->显示器流程,这个过程可以细分为八大步骤,这八大步骤在其他类型的音视频编解码样例也类似,可以说这八大步骤是使用海思HIMPP API的灵魂。下面简单介绍这个八大步骤的内容:

Step1:初始化HIMPP SYS和通用VB缓冲,包括设置缓冲区的大小,缓冲区块的数目。需要注意的是,在设置通用VB参数之前,必须确保HIMPP系统已经退出,

这篇关于海思HI35xx平台软件开发快速入门之MPEG解码实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/847993

相关文章

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤