首页 > 技术知识 > 正文

【海思基础篇】-(1)VPSS模块

VPSS(Video Process Sub-System)是视频处理子系统。支持对输入图像进行统一预处理,如去噪、去隔行、裁剪等,然后再对各通道分别进行处理,如缩放、加边框等。 支持的具体图像处理功能包括FRC(Frame Rate Control)、Crop、3DNR、DEI(De-interlace)、IE(Image Enhance)、DCI(Dynamic Contrast Improvement)、LTI(LuminanceTransition Improvement)/CTI(Chroma Transition Improvement)、Cover/CoverEx、Overlay/OverlayEx、Mosaic/MosaicEx、Scale、固定角度旋转、Mirror/Flip、Aspect Ratio、Border、像素格式转换、压缩解压。

1.工作模式

​ AUTO 和USER,两种模式间可动态切换。

​ AUTO 模式下各通道仅可与一个接收者绑定,主要用于预览 和回放场景下做播放控制。

​ USER 模式下各通道可与多个接收者绑定。

2.特别注意

​ USER 模式主要用于对同一通道图像进行多路编码的场景,此模式下播放控制不生效,因此回放场景下不建议使用 USER 模式。VPSS只有工作在离线模式下才支持 AUTO 模式。

【海思基础篇】-(1)VPSS模块

USER模式可以自动缩小分辨率

,比如VPSS分辨率为1080P,抓拍属性可以设置为1080P,720P,D1等分辨率抓拍;同时针对HI3519AV100 VI PIPE0,1不支持YUV,经过IVE转换后YUV数据,直接通过HI_MPI_VPSS_SendFrame发送时,VPSS CHN属性必须如下USER模式,否则编码数据有问题。

​ 针对vpss组中通道而言,只支持一个通道放大,其他通道不能发达只具有缩小功能。因此针对该场景的时候,我们只能针对该输入分辨率下一个通道放大,其他通道宽高属性只能小于等于该输入分辨率。同时该vpss组下通道如果绑定了venc,也不能通道vpss自动放大而编码超过该输入分辨率的编码宽高的录像。这一点一定要注意,有时可以通过cat /dev/logmpp 查看。

3.VI PIPE

​ 针对Hi3519AV100 所有PIPE通道都支持RAW,但是只有PIPE2-5只支持YUV数据,PIPE0,1不支持YUV数据情况,在针对PIPE0和1时候,VI有些特殊的设置。

if(g_PipeId[i][j] == 0 || g_PipeId[i][j] == 1)

{

VI_DUMP_ATTR_S stRawDumpAttr;

VI_DUMP_ATTR_S stDumpAttr;

s32Ret = HI_MPI_VI_GetPipeDumpAttr(g_PipeId[i][j], &stRawDumpAttr);

if (HI_SUCCESS != s32Ret)

{

printf(“Get Pipe %d dump attr failed!\n”, g_PipeId[i][j]);

return s32Ret;

}

memcpy(&stDumpAttr, &stRawDumpAttr, sizeof(VI_DUMP_ATTR_S));

stDumpAttr.bEnable = HI_TRUE;

stDumpAttr.u32Depth = 2;

stDumpAttr.enDumpType = VI_DUMP_TYPE_RAW;

s32Ret = HI_MPI_VI_SetPipeDumpAttr(g_PipeId[i][j], &stDumpAttr);

if (HI_SUCCESS != s32Ret)

{

printf(“Set Pipe %d dump attr failed!\n”, g_PipeId[i][j]);

return s32Ret;

}

}
<

/* Disconnect data flow between FE and BE in driver */

s32Ret = HI_MPI_VI_SetPipeFrameSource(g_PipeId[i][j], VI_PIPE_FRAME_SOURCE_USER_BE);

if (HI_SUCCESS != s32Ret)

{

DEBUG_PRINTF(“HI_MPI_VI_SetPipeFrameSource failed with %#x\n”, s32Ret);

return s32Ret;

}

猜你喜欢