Hi3559 MPP学习记录(1)

文章介绍了海思的MPP媒体处理平台,包括其组成部分如VI、VPSS等模块,以及系统初始化、绑定机制和工作模式。提供了代码实例展示了如何使用MPP进行视频输入和输出,并涉及到了ISP和MIPI接口的相关知识。
摘要由CSDN通过智能技术生成


前言

最近开始接触Hi3559,开启一段新的学习之旅,在这里简单记录一下学习过程以及遇到的问题


一、MPP是什么?

MPP是海思提供的媒体处理软件平台(Media Process Platform,简称 MPP),包括视频输入(VI)、视频 处理(VPSS)、视频编码(VENC)、视频解码(VDEC)、视频输出(VO)、视频拼接 (AVS)、音频输入(AI)、音频输出(AO)、音频编码(AENC)、音频解码(ADEC)、区域管理(REGION)等模块。
该平台对应用软件屏蔽了芯片相关的复杂的底层处理,并对应用软件直接提供 MPI(MPP Program Interface)接口完成相应功能。

更多关于MPP的详细介绍在官方的说明文档《HiMPP V4.0 媒体处理软件开发参考.pdf》中

  • 应用程序启动 MPP 业务前,必须完成 MPP 系统初始化工作
  • 应用程序退出 MPP 业务后,也要完成 MPP 系统去初始化工作,释放资源

二、系统绑定(Bind)

  • 通过数据接收者绑定数据源来建立两者之间的关联关系(只允许数据接收者绑定数据源)。绑定后,数据源生成的数据将自动发送给接收者。
    有点像QT的信号和槽的机制?

三、工作模式

VI 和 VPSS 各自的工作模式分为在线,离线,并行模式。

VI

  • 在线模式:VI_CAP 与 VI_PROC 之间在线 数据流传输,此模式下 VI_CAP 不会写出 RAW 数据到 DDR, 而是直接把数据流送给 VI_PROC;
  • 离线模式:VI_CAP 写出 RAW 数据到DDR,然后 VI_PROC 从 DDR 读取 RAW 数据进行后处理;
  • 并行模式:当对接大数据量的时序,,需要 VI_CAP 与 两个 VI_PROC 处于并行模式,VI_CAP 直接把一帧数据送给两 个 VI_PROC 并行处理。

VPSS

-在线模式:VI_PROC 与 VPSS 之间的在线数据流传输,在此模式下 VI_PROC 不会写出 YUV 数据到 DDR,而 是直接把数据流送给 VPSS;

  • 离线模式:VI_PROC 写出 YUV 数据到DDR,然后 VPSS 从 DDR 读取YUV 数据进行后处理;
  • 并行模式:当对接大数据量的时序,需要 VI_CAP 与 两个 VI_PROC 处于并行模式, 同时两个 VPSS 也分别与 VI_PROC 处于并行模式, VI_CAP 直接把一帧数据送给两 个 VI_PROC 并行处理,再给 VPSS 并行处理。

VI_CAP模块可以接收并处理多达8个摄像头的输入信号,同时支持多种图像格式,包括YUV、RGB等。
VI_PROC模块可用于图像处理、视频编码、人脸识别等应用场景。能够增强图像的质量,使得用户能够用更高的效率处理数据。


四、代码实例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>

#include "sample_comm.h"

/******************************************************************************
* function : to process abnormal case
******************************************************************************/
void SAMPLE_VIO_HandleSig(HI_S32 signo)
{
   
    //当捕获到异常信号后触发的自定义函数如下,主要是对信号的重新定义以及系统退出资源的释放
    if (SIGINT == signo || SIGTERM == signo)
    {
   
        SAMPLE_COMM_All_ISP_Stop();
        SAMPLE_COMM_SYS_Exit();
        printf("\033[0;31mprogram termination abnormally!\033[0;39m\n");
    }
    exit(-1);
}

HI_S32 SAMPLE_VIO_StartViVo(SAMPLE_VI_CONFIG_S* pstViConfig, SAMPLE_VO_CONFIG_S* pstVoConfig)
{
   
    HI_S32  s32Ret;

    s32Ret = SAMPLE_COMM_VI_StartVi(pstViConfig);

    if (HI_SUCCESS != s32Ret)
    {
   
        SAMPLE_PRT("start vi failed!\n");
        return s32Ret;
    }

    s32Ret = SAMPLE_COMM_VO_StartVO(pstVoConfig);

    if (HI_SUCCESS != s32Ret)
    {
   
        SAMPLE_PRT("SAMPLE_VIO start VO failed with %#x!\n", s32Ret);
        goto EXIT;
    }

    return s32Ret;

EXIT:
    //VO失败了需要把VI一同停止
    SAMPLE_COMM_VI_StopVi(pstViConfig);

    return s32Ret;
}

HI_S32 SAMPLE_VIO_StopViVo(SAMPLE_VI_CONFIG_S* pstViConfig, SAMPLE_VO_CONFIG_S* pstVoConfig)
{
   
    SAMPLE_COMM_VO_StopVO(pstVoConfig);

    SAMPLE_COMM_VI_StopVi(pstViConfig);

    return HI_SUCCESS;
}

HI_S32 SAMPLE_VIO_4K30_FreeRotation(VO_INTF_TYPE_E enVoIntfType)
{
   
    // Embeded isp, FreeRotation.
    HI_S32             s32Ret;     //返回值
    VI_DEV             ViDev               = 0;
    VI_PIPE            ViPipe              
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值