1.函数
1) RK_MPI_VI_SetChnAttr
_CAPI RK_S32 RK_MPI_VI_SetChnAttr(VI_PIPE ViPipe, VI_CHN ViChn,
const VI_CHN_ATTR_S *pstChnAttr);
/*
VI通道属性结构体指针
1)pcVideoNode:video节点路径
2)u32BufCnt:VI捕获视频缓冲区计数
3)u32Width:宽度
4)u32Height:高度
5)enPixFmt:视频输入的图像格式,默认是NV12;
6)enBufType:VI捕捉视频的类型;DMA或者MMP
DMA:直接访问内存,相当于音视频数据直接从硬件传输到内存里面。
优点:速度快
缺点:消耗资源
MMP:内存映射,直接把硬件外设、磁盘文件映射到虚拟内存
优点:占用硬件资源比较少
缺点:读写速度比较慢;有时候会数据丢失
7)enWorkMode:VI的工作模式,默认是NORMAL;
NORMAL:相对于“亮度模式”,该模式下正常读取camera数据并发给后级;
LUMA_ONLY:亮度模式,该模式仅用于亮度统计,无法通过回调函数或者RK_MPI_SYS_Get_MediaBuffer获取数据
*/
VI_CHN_ATTR_S vi_chn_attr;
vi_chn_attr.pcVideoNode = pDeviceName;
vi_chn_attr.u32BufCnt = 3;
vi_chn_attr.u32Width = u32Width;
vi_chn_attr.u32Height = u32Height;
vi_chn_attr.enPixFmt = IMAGE_TYPE_NV12;
vi_chn_attr.enBufType = VI_CHN_BUF_TYPE_DMA;
vi_chn_attr.enWorkMode = VI_WORK_MODE_NORMAL;
/*
设置VI通道属性
函数原型:RK_S32 RK_MPI_VI_SetChnAttr(VI_PIPE ViPipe, VI_CHN ViChn,const VI_CHN_ATTR_S *pstChnAttr);
参数:1)VI_PIPE ViPipe:VI管道号;
2)VI_CHN ViChn:VI通道号,取值范围:0~VI_MAX_CHN_NUM;
3)通道属性结构体指针
返回值:0表示成功;非0返回错误码。
说明:1)如果设置的通道已经通过RK_MPI_SYS_Bind()与其他通道绑定,则在这使用这个函数之前需要通过RK_MPI_SYS_UnBind()解绑;
2)如果设置的通道已经通过RK_MPI_VI_EnableChn()使能,则在使用该函数之前需要通过RK_MPI_VI_DisableChn()解绑
*/
ret = RK_MPI_VI_SetChnAttr(s32CamId, 0, &vi_chn_attr);
2)RK_MPI_VI_EnableChn
_CAPI RK_S32 RK_MPI_VI_EnableChn(VI_PIPE ViPipe, VI_CHN ViChn);
/*
启用VI通道
函数原型:RK_S32 RK_MPI_VI_EnableChn(VI_PIPE ViPipe, VI_CHN ViChn)
参数:1)VI_PIPE ViPipe:VI管道号;
2)VI_CHN ViChn:VI通道号;
*/
ret |= RK_MPI_VI_EnableChn(s32CamId, 0);//
3) 编码器类型
VENC_CHN_ATTR_S venc_chn_attr;
/*
VENC_ATTR_S stVencAttr; //编码器类型
VENC_RC_ATTR_S stRcAttr; //码率控制器
VENC_GOP_ATTR_S stGopAttr; //GOP属性
*/
memset(&venc_chn_attr, 0, sizeof(venc_chn_attr));//清空设置
// venc_chn_attr.stVencAttr.enRotation=VENC_ROTATION_270;//旋转270度
venc_chn_attr.stRcAttr.enRcMode = VENC_RC_MODE_H264CBR;//编码器协议类型
venc_chn_attr.stRcAttr.stH264Cbr.u32Gop = 30;//H264协议编码通道Cbr模式属性-I帧间隔,取值范围:1-65536
venc_chn_attr.stRcAttr.stH264Cbr.u32BitRate = u32Width * u32Height;//H264协议编码通道Cbr模式属性-数据源帧率分子
// frame rate: in 30/1, out 30/1.
venc_chn_attr.stRcAttr.stH264Cbr.fr32DstFrameRateDen = 1;//H264协议编码通道Cbr模式属性-目标帧率分母
venc_chn_attr.stRcAttr.stH264Cbr.fr32DstFrameRateNum = 30;//H264协议编码通道Cbr模式属性-目标帧率分子
venc_chn_attr.stRcAttr.stH264Cbr.u32SrcFrameRateDen = 1;//H264协议编码通道Cbr模式属性-数据源帧率分母
venc_chn_attr.stRcAttr.stH264Cbr.u32SrcFrameRateNum = 30;//H264协议编码通道Cbr模式属性-数据源帧率分母
venc_chn_attr.stVencAttr.enType = RK_CODEC_TYPE_H264;//编码器类型
venc_chn_attr.stVencAttr.imageType = IMAGE_TYPE_NV12;//输入图像类型
venc_chn_attr.stVencAttr.u32PicWidth = u32Width;//编码图像宽度,以像素为单位
venc_chn_attr.stVencAttr.u32PicHeight = u32Height;//编码图像高度,以像素为单位
venc_chn_attr.stVencAttr.u32VirWidth = u32Width;//stride宽度,通常与buffer_width相同,如果u32VirWidth大于buffer宽度,则必须满足16对齐
venc_chn_attr.stVencAttr.u32VirHeight = u32Height;//stride宽度,通常与buffer_height相同,如果u32VirHeight大于buffer宽度,则必须满足16对齐
/*
编码等级:
1)H264:66-baseline;77-main profile;100-high profile
2)H265:默认是Main
3)Jpege/MJpege:默认是baseline
*/
venc_chn_attr.stVencAttr.u32Profile = 77;
3)RK_MPI_VENC_CreateChn
_CAPI RK_S32 RK_MPI_VENC_CreateChn(VENC_CHN VencChn,
VENC_CHN_ATTR_S *stVencChnAttr);
/*
创建编码通道
函数原型:RK_S32 RK_MPI_VENC_CreateChn(VENC_CHN VeChn, VENC_CHN_ATTR_S *stVencChnAttr)
参数:1)VENC_CHN VeChn:编码通道
2)VENC_CHN_ATTR_S *stVencChnAttr:编码通道属性指针
返回值:成功为0;失败为非0
*/
ret = RK_MPI_VENC_CreateChn(0, &venc_chn_attr);