瑞芯微芯片资料中关于图像处理相关的知识点

MPI层

文件:Rockchip_Developer_Guide_MPI.pdf
RK MPI:Rockchip Media Process Interface,媒体处理接口。

模块介绍

RK MPI层的模块介绍:
在这里插入图片描述

IPC的应用

在这里插入图片描述

  • VI 模块捕获视频图像,可对其做剪切、缩放、镜像等处理,并输出多路不同分辨率的图像数据。
  • VDEC 模块对编码后的视频码流进行解码,并将解析后的图像数据送 VPSS 进行图像处理或直接送VO显示。可对 H.264/H.265/MJPEG/MPEG2/MPEG4等多种格式的视频码流进行解码。
  • VPSS 模块接收 VI 和解码模块发送过来的图像,可对图像进行裁剪、缩放、旋转、镜像、贴图等处理,并实现同源输出多路不同分辨率的图像数据用于编码、预览、智能分析或抓拍。
  • VENC 模块接收 VI 捕获并经 VPSS 处理后输出的图像数据,可叠加用户通过 Region模块设置的OSD 图像,然后按不同协议进行编码并输出相应码流。
  • VO 模块接收 VPSS 处理后的输出图像,可进行播放控制等处理,最后按用户配置的输出协议输出给外围视频设备。

像素格式排布

RK MPI图像数据存储为大端模式,在平台图像输入和图像输出处理时需要注意这一点,否则将会出现RGB中B像素和R像素颠倒的情况出现。以RGB888/ARGB8888格式的图像存储为例:
在这里插入图片描述

图. RGB888格式的图像存储示意图(大端模式)

在这里插入图片描述

图. ARGB8888格式的图像存储示意图(大端模式)

系统绑定

RK MPI提供系统绑定接口(RK_MPI_SYS_Bind),即通过数据接收者绑定数据源来建立两者之间的关联关系(只允许数据接收者绑定数据源)。绑定后,数据源生成的数据将自动发送给接收者。目前RK MPI支持的绑定关系如下表:
在这里插入图片描述

API接口

主要介绍RKMPI 实例使用指南——编译运行luckfox_pico_rtsp_yolov5所使用到的API接口


RK_MPI_SYS_Init

【描述】
初始化RK MPI系统。
【语法】
RK_S32 RK_MPI_SYS_Init(RK_VOID);
【参数】

【返回值】
在这里插入图片描述【注意】

  • 运行RK MPI系统前必须调用该接口进行初始化。
  • RK_MPI_SYS_Exit成对使用,不允许连续调用该接口。
  • 多个进程暂无法共享资源使用各模块,仅MB模块相关接口可多进程使用。

RK_MPI_SYS_Bind

【描述】
数据源到数据接收者绑定的接口。
【语法】
RK_S32 RK_MPI_SYS_Bind(const MPP_CHN_S *pstSrcChn, const MPP_CHN_S *pstDestChn);
【参数】
在这里插入图片描述
【返回值】
在这里插入图片描述
【注意】

  • 系统目前支持的绑定关系,请参见系统绑定章节。
  • 同一个数据接收者只能绑定一个数据源。
  • 绑定是指数据源和数据接收者建立关联关系。绑定后,数据源生成的数据将自动发送给接收者。
  • VIVDEC作为数据源,是以通道为发送者,向其他模块发送数据,用户将设备号置为 0,SDK不检查输入的设备号。
  • VPSS作为数据接收者时,是以设备(GROUP)为接收者,接收其他模块发来的数据,用户将通道号置为 0。
  • 模块作为数据发送者时,没有图像队列深度(DEPTH)设置的模块,绑定后无法调用自身模块的接口获取图像,能够设置图像深度的模块,必须图像深度不为0才可手动获取图像。

RK_MPI_VPSS_GetChnFrame

【描述】
用户从通道获取一帧处理完成的图像。
【语法】
RK_S32 RK_MPI_VPSS_GetChnFrame(VPSS_GRP VpssGrp, VPSS_CHN VpssChn, VIDEO_FRAME_INFO_S *pstVideoFrame, RK_S32 s32MilliSec);
【参数】
在这里插入图片描述
【返回值】
在这里插入图片描述
【注意】

  • GROUP必须已创建。
  • 队列深度不为 0,才能获取到图像。
  • 调用该接口获取图像,不会对后端绑定的模块有影响。如后端绑定VO显示,可以在显示过程中获取图像,VO仍正常显示,不会受到影响。
  • s32MilliSec设为-1 时,表示阻塞模式,程序一直等待,直到获取到图像才返回。如果s32MilliSec等于 0 时,表示非阻塞模式。如果s32MilliSec大于 0 时,表示超时等待模式,参数的单位是毫秒,指超时时间,在此时间内如果没有获取到图像,则超时返回。
  • 通道为PAST模式时,调用该接口时会使用VGS进行图像处理。
  • 默认在私有MB模式下,通道为USER模式时,最大输出帧个数限制到3个。
  • 默认在私有MB模式下,通道为PAST模式时,不限制最大输出帧个数。
  • 推荐队列深度设置为3个以内,否则在队列输出图像超过3个时,VPSS将会停止工作,同时同一Group的其他通道也将停止工作。

RK_MPI_MB_Handle2VirAddr

【描述】
获取一个内存缓存池中的缓存块的用户态虚拟地址。
【语法】
RK_VOID *RK_MPI_MB_Handle2VirAddr(MB_BLK mb);
【参数】
在这里插入图片描述
【返回值】
在这里插入图片描述
【举例】
用户获取YUV图像数据,可以通过RK_MPI_MB_Handle2VirAddr转换pMbBlk成虚拟地址来使用

data = RK_MPI_MB_Handle2VirAddr(sFrame.stVFrame.pMbBlk);
fwrite(data, 1, sFrame.stVFrame.u32Width * sFrame.stVFrame.u32Height * 3 /2, fp);
fflush(fp);

RK_MPI_VENC_SendFrame

【描述】
用户发送原始图像进行编码。
【语法】
RK_S32 RK_MPI_VENC_SendFrame(VENC_CHN VeChn, const VIDEO_FRAME_INFO_S *pstFrame, RK_S32 s32MilliSec);
【参数】
在这里插入图片描述
【返回值】
在这里插入图片描述


RK_MPI_VENC_GetStream

【描述】
获取编码的码流。
【语法】
RK_S32 RK_MPI_VENC_GetStream(VENC_CHN VeChn, VENC_STREAM_S *pstStream, RK_S32s32MilliSec);
【参数】
在这里插入图片描述
【返回值】
在这里插入图片描述


RK_MPI_VPSS_ReleaseChnFrame

【描述】
用户释放一帧通道图像。
【语法】
RK_S32 RK_MPI_VPSS_ReleaseChnFrame(VPSS_GRP VpssGrp, VPSS_CHN VpssChn, const VIDEO_FRAME_INFO_S *pstVideoFrame);
【参数】
在这里插入图片描述
【返回值】
在这里插入图片描述
【注意】

  • 此接口需与RK_MPI_VPSS_GetChnFrame配对使用。
  • 接口调用同RK_MPI_VPSS_GetChnFrame调用次数一一对应,不允许同一帧多次调用。
  • 通过RK_MPI_VPSS_GetChnFrame获取的帧,需要及时调用该接口释放,否则达到最大输出帧个数后无法获取新的帧。

RK_MPI_VENC_ReleaseStream

【描述】
释放码流缓存。
【语法】
RK_S32 RK_MPI_VENC_ReleaseStream(VENC_CHN VeChn, VENC_STREAM_S *pstStream);
【参数】
在这里插入图片描述
【返回值】
在这里插入图片描述


RK_MPI_SYS_UnBind

【描述】
数据源到数据接收者解绑定。
【语法】
RK_S32 RK_MPI_SYS_UnBind(const MPP_CHN_S *pstSrcChn, const MPP_CHN_S *pstDestChn);
【参数】
在这里插入图片描述
【返回值】
在这里插入图片描述
【注意】

  • pstDestChn如果找不到绑定的源通道或者找到了绑定的源通道,但是绑定的源通道和pstSrcChn不匹配,则返回失败。

RK_MPI_VI_DisableChn

【描述】
禁用 VI 通道。
【语法】
RK_S32 RK_MPI_VI_DisableChn(VI_PIPE ViPipe, VI_CHN VIChn);
【参数】
在这里插入图片描述
【返回值】
在这里插入图片描述
【注意】

  • PIPE必须已绑定设备,否则会返回失败。

RK_MPI_VI_DisableDev

【描述】
禁用VI设备。
【语法】
RK_S32 RK_MPI_VI_DisableDev(VI_DEV ViDev);
【参数】
在这里插入图片描述【返回值】
在这里插入图片描述
【注意】

  • 如果VI设备未启用,则返回未启用的VI错误码。
  • 禁用VI设备会禁用设备下所有VI通道。如果只有关闭一个通道,调用关闭通道函数即可。

RK_MPI_VPSS_StopGrp

【描述】
禁用VPSS GROUP
【语法】
RK_S32 RK_MPI_VPSS_StopGrp(VPSS_GRP VpssGrp);
【参数】
在这里插入图片描述
【返回值】
在这里插入图片描述
【注意】

  • GROUP必须已创建。
  • 同组调用该函数仅第一次调用成功,重复调用返回失败。

RK_MPI_VPSS_DestroyGrp

【描述】
销毁一个VPSS GROUP
【语法】
RK_S32 RK_MPI_VPSS_DestroyGrp(VPSS_GRP VpssGrp);
【参数】
在这里插入图片描述
【返回值】
在这里插入图片描述
【注意】

  • GROUP必须已创建。
  • 调用此接口之前,必须先调用RK_MPI_VPSS_StopGrp禁用此GROUP
  • 调用此接口时,会一直等待此GROUP当前任务处理结束才会真正销毁。

RK_MPI_VENC_StopRecvFrame

【描述】
停止编码通道接收输入图像。
【语法】
RK_S32 RK_MPI_VENC_StopRecvFrame(VENC_CHN VeChn);
【参数】
在这里插入图片描述
【返回值】
在这里插入图片描述


RK_MPI_VENC_DestroyChn

【描述】
销毁编码通道。
【语法】
RK_S32 RK_MPI_VENC_DestroyChn(VENC_CHN VeChn);
【参数】
在这里插入图片描述
【返回值】
在这里插入图片描述


RK_MPI_SYS_Exit

【描述】
反初始化RK MPI系统。
【语法】
RK_S32 RK_MPI_SYS_Exit(RK_VOID);
【参数】

【返回值】
在这里插入图片描述
【注意】

  • 退出RK MPI系统前必须调用该函数。
  • RK_MPI_SYS_Init成对使用,不允许连续调用该接口。

VI模块

视频输入(VI)模块实现的功能:通过MIPI Rx(含 MIPI 接口、LVDS 接口),BT.1120,BT.656,BT.601,DC 等接口接收视频数据。VI 将接收到的数据存入到指定的内存区域,实现视频数据的采集。

VI处理流程

在这里插入图片描述
VI从软件上划分了输入设备(dev),输入pipe(暂未实现,采用dev直通到chn)、输出通道(channel)三个层级。各芯片的设备、PIPE、通道个数差异如下所示。
在这里插入图片描述

RV1106/RV1103 VI硬件处理流程框图

在这里插入图片描述
【注意】

  • vi使用过程无赋值aEntityName(参考VI_ISP_OPT_S结构体定义),则默认chn0_out对应mainpathchn1_out对应selfpathchn2_out对应bypasspath。多路isp使用时建议通过dev/pipe/channel使用默认定义。
  • aEntityName对应的/dev/videoX节点X不是固定的,可以使用media-ctl查看对应的节点。

各路输出分辨率限制如下表:
在这里插入图片描述
【注意】

  • 以上分辨率输出限制是单路isp限制。
  • sensor输入最大输入3072x1728 (5M) @30fps,最小256x256
  • device编号根据dts配置中sensor连接的属性camera-module-index值一一对应。
  • sensor输出最大分辨率根据sensor的宽高比不同而不同,支持sensor最大输出分辨率,并支持缩放。
  • mainpath支持卷绕模式,selfpathbypass理论支持卷绕模式;同时只能支持一路码率和编码器卷绕。
  • 只有selfpath支持XBGR8888格式输出。
  • 支持对rkisp_mainpathrkisp_bypasspath通道的下采样采集。仅支持4x4的下采样。故各下采样通道的分辨率是对应通道分辨率的四分之一。下采样通道采集时,需在被采样对象通道开启后开启,在被采样通道停止前停止。
  • 更多isp细节参看rv1106 datasheetisp章节说明。

举例测试DEMO,为test_mpi_vi.cpp

VPSS模块

VPSS(Video Process Sub-System)是视频处理子系统,支持的具体图像处理功能包括CROPScale、像素格式转换、固定角度旋转、Cover/CoverexMirror/Flip、压缩解压等。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值