概述
系统层次图:
MPP包含:
- VI:视频输入
- VPSS:视频处理
- VENV:视频编码
- VDEC:视频解码
- VO:视频输出
- AVS:视频拼接
- AI:音频输入
- AO:音频输出
- AENC:音频编码
- ADEC:音频解码
- REGION:区域管理
MPP内部处理流程:
- VI可进行去噪等处理,可输出多路
- VPSS可进行图像增强/锐化等处理,同源输出多路不同分辨率图像
系统控制模块
- 硬件复位,初始化
- MPP内部各业务模块初始化
- MPP内部各业务模块的工作状态
- 大块物理内存管理
视频缓存池
- 所有模块公用1个缓存池
- hi_buffer.h中能够计算缓存池大小
- mpi_vb.h中申请释放缓存池,申请释放block
- hi_comm_video.h中定义了相关结构体
代码示例(sample_yuv.c):
VB_CAL_CONFIG_S stCalConfig;
VB_POOL_CONFIG_S stVbPoolCfg;
...
enCmpMode = COMPRESS_MODE_NONE;
enPixelFormat = g_stFrame.stVFrame.enPixelFormat;
enBitWidth = (DYNAMIC_RANGE_SDR8 == g_stFrame.stVFrame.enDynamicRange) ? DATA_BITWIDTH_8 : DATA_BITWIDTH_10;
u32Width = g_stFrame.stVFrame.u32Width;
u32Height = g_stFrame.stVFrame.u32Height;
COMMON_GetPicBufferConfig(u32Width, u32Height, enPixelFormat, enBitWidth, enCmpMode, u32Align, &stCalConfig);
g_u32BlkSize = stCalConfig.u32VBSize;
memset(&stVbPoolCfg, 0, sizeof(VB_POOL_CONFIG_S));
stVbPoolCfg.u64BlkSize = g_u32BlkSize;
stVbPoolCfg.u32BlkCnt = 1;
stVbPoolCfg.enRemapMode = VB_REMAP_MODE_NONE;
/*create comm vb pool*/
g_hPool = HI_MPI_VB_CreatePool(&stVbPoolCfg);
if (VB_INVALID_POOLID == g_hPool)
{
printf("HI_MPI_VB_CreatePool failed! \n");
VPSS_Restore(Grp, Chn);
return HI_NULL;
}
g_stMem.hPool = g_hPool;
while ((g_stMem.hBlock = HI_MPI_VB_GetBlock(g_stMem.hPool, g_u32BlkSize, HI_NULL)) == VB_INVALID_HANDLE)
{
;
}
系统绑定
- 数据接收者绑定数据发送者
- 绑定后,收据发送者的数据自动发送给数据接收者
接口(mpi_sys.h):
HI_S32 HI_MPI_SYS_Bind(const MPP_CHN_S *pstSrcChn, const MPP_CHN_S *pstDestChn);
HI_S32 HI_MPI_SYS_UnBind(const MPP_CHN_S *pstSrcChn, const MPP_CHN_S *pstDestChn);
HI_S32 HI_MPI_SYS_GetBindbyDest(const MPP_CHN_S *pstDestChn, MPP_CHN_S *pstSrcChn);
HI_S32 HI_MPI_SYS_GetBindbySrc(const MPP_CHN_S *pstSrcChn, MPP_BIND_DEST_S *pstBindDest);
示例代码(sample_comm_sys.c):
HI_S32 SAMPLE_COMM_VI_Bind_VO(VI_PIPE ViPipe, VI_CHN ViChn, VO_LAYER VoLayer, VO_CHN VoChn)
{
MPP_CHN_S stSrcChn;
MPP_CHN_S stDestChn;
stSrcChn.enModId = HI_ID_VI;
stSrcChn.s32DevId = ViPipe;
stSrcChn.s32ChnId = ViChn;
stDestChn.enModId = HI_ID_VO;
stDestChn.s32DevId = VoLayer;
stDestChn.s32ChnId = VoChn;
CHECK_RET(HI_MPI_SYS_Bind(&stSrcChn, &stDestChn), "HI_MPI_SYS_Bind(VI-VO)");
return HI_SUCCESS;
}
VI,VPSS工作模式
- 在线模式
- 离线模式
- 并行模式
重要接口分析
HI_S32 HI_MPI_SYS_GetVPSSVENCWrapBufferLine(VPSS_VENC_WRAP_PARAM_S *pWrapParam, HI_U32 *pu32BufLine);
通过pWrapParam里计算卷绕buffer的行数,pWrapParam的参数如下:
typedef struct hiVPSS_VENC_WRAP_PARAM_S {
HI_BOOL bAllOnline;
HI_U32 u32FrameRate; /* Input frame rate of VIPROC(linear/Frame mode WDR is the sensor frame rate,
* and the line mode WDR is the frame rate after synthesis) */
HI_U32 u32FullLinesStd; /* Total height of sensor, include of VBlank */
SIZE_S stLargeStreamSize; /* VENC Large Stream Size */
SIZE_S stSmallStreamSize; /* VENC Small Stream Size */
} VPSS_VENC_WRAP_PARAM_S;
视频输入(VI)
输入源:
- MIPI
- LVDS
- HISPI
- SLVS-EC
- BT.1120
- BT.656
- BT.601
- DC
重要概念:
- LDC:镜头畸变校正
- DIS:防抖
- BAS:Bayer域缩放
- 低延时:图像写出指定行数到DDR后,VI上报一个中断,把图像发给后端模块处理,可以减少延时,硬件会保证图像是先写后读,不会出现读图像错误
- 提前上报中断:图像写出指定行数到DDR后,VI上报一个中断,把图像发给后端模块处理,可以减少延时,但没有和低延时一样的硬件机制保证后端模块读图像不会出错
功能框图:
- VI设备相互独立
- PIPE包含ISP的相关处理,处理后输出YUV
硬件单元功能框图:
视频输出(VO)
- DHDx:Device HDx,高清设备x
- VHDx:Video Layer of HDx,高清视频层
- WD:Wirte Back Channel Device,回写通道设备
- Gx:Graphic layer x,鼠标层
VPSS(Video Process Sub-System)视频处理子系统
功能支持:
- FRC(Frame Rate Control)
- CROP
- Sharpen
- 3DNR
- Scale
- 像素格式转换
- LDC
- Spread
- 固定角度旋转
- 任意角度旋转
- 鱼眼校正
- Cover/Coverex
- Overlayex
- Mosaic
- Mirror/Flip
- HDR
- Aspect Ratio
- 压缩/解压缩
上下文关系:
Hi3559AV100ES VPSS数据流图:
VENC
输入源:
- File
- VI->VPSS->VENC
- VI->AVS->VENC
- VI->VENC
- VDEC->VPSS->VENC
- VO->WBC->VENC
编码数据流图:
编码通道功能模块划分:
编码码率控制:
- CBR(Constant Bit Rate):固定比特率
- VBR(Variable Bit Rate):可变比特率
- AVBR(Adaptive Variable Bit Rate):可变比特率,基于运动检测
- QVBR(Quality Variable Bit Rate):可变比特率,基于主观图像质量
- CVBR(Constrained Variable Bit Rate):基于VBR,并对码率进行限制,满足传输带宽和存储空间要求
- FIXQP:固定Qp值
- QPMAP:
VDEC
码流发送方式:
- 流式发送
- 按帧发送
- 兼容模式发送
REGION
细节
AI/AO/AENC/ADEC
录音播放示意图:
AI/AO模块支持特性:
- 重采样(RES)
- 声音质量增强VQE(Voice Quality Enhancement),回声消除(AEC)/语音降噪(ANR)/自动增益(AGC)/高通滤波(HPF)/均衡器(EQ)/动态压缩/录音噪声消除(RNR)/动态压缩控制(DRC)/音量调节(GAIN)/参量均衡器(PEQ)/高动态范围(HDR)
UpVQE处理流程:
DnVQE处理流程:
视频图形子系统(VGS)
支持特性:
- 缩放
- 像素格式转换
- 存储格式转换
- 压缩/解压缩
- COVER
- OSD
- 画线
- 旋转
- 动态范围转换
几何畸变校正GDC(Geometric Distortion Correction)
支持特性:
- 鱼眼校正:360度全景/180度全景/Normal
- LDC(镜头畸变校正)
- 旋转
- 输出图像拼接
- 输出图像打背景色和展宽
全景拼接AVS(Any View Stitching)
支持特性:
- 融合拼接(AVS_MODE_BLEND)
- 非融合拼接(水平/垂直/田字形)(AVS_MODE_NOBLEND_VER/AVS_MODE_NOBLEND_HOR/AVS_MODE_NOBLEND_QR)