rkmedia的API的详解
函数的功能:
初始化rkmedia的系统
函数的头文件
rkmedia_api.h
函数的原型
RK_S32 RK_MPI_SYS_Init();
函数的参数
无
函数的返回值
成功返回 0
失败返回 错误码
函数的功能:
设置VI通道的属性
函数的头文件
函数的原型
RK_MPI_VI_SetChnAttr(VI_PIPE ViPipe,
VI_CHN ViChn, const VI_CHN_ATTR_S *pstChnAttr);
函数参数
VI_PIPE ViPipe, 管道 0
VI_CHN ViChn, vi通道的编号 直接 0
const VI_CHN_ATTR_S *pstChnAttr vi通道的属性结构体
函数的返回值
成功返回 0
失败返回 错误码
typedef struct rkVI_CHN_ATTR_S {
const RK_CHAR *pcVideoNode; 摄像头的节点rkispp_scale0
RK_U32 u32Width; 视频的宽
RK_U32 u32Height; 视频的高
IMAGE_TYPE_E enPixFmt; 采集的数据的格式
RK_U32 u32BufCnt; // VI capture video buffer cnt.
缓冲帧的大小 范围3-5
// VI capture video buffer type.
VI_CHN_BUF_TYPE enBufType; 视频数据的存储的方式
内存映射
VI_CHN_WORK_MODE enWorkMode; 工作模式
正常工作模式
} VI_CHN_ATTR_S;
视频的类型的共用体
typedef enum rk_IMAGE_TYPE_E {
IMAGE_TYPE_UNKNOW = 0,
IMAGE_TYPE_GRAY8,
IMAGE_TYPE_GRAY16,
IMAGE_TYPE_YUV420P,
IMAGE_TYPE_NV12,
IMAGE_TYPE_NV21,
IMAGE_TYPE_YV12,
IMAGE_TYPE_FBC2,
IMAGE_TYPE_FBC0,
IMAGE_TYPE_YUV422P,
IMAGE_TYPE_NV16,
IMAGE_TYPE_NV61,
IMAGE_TYPE_YV16,
IMAGE_TYPE_YUYV422,
IMAGE_TYPE_UYVY422,
IMAGE_TYPE_RGB332,
IMAGE_TYPE_RGB565,
IMAGE_TYPE_BGR565,
IMAGE_TYPE_RGB888,
IMAGE_TYPE_BGR888,
IMAGE_TYPE_ARGB8888,
IMAGE_TYPE_ABGR8888,
IMAGE_TYPE_JPEG,
IMAGE_TYPE_BUTT
} IMAGE_TYPE_E;
函数的功能:
使能VI通道
函数的头文件
rkmedia_api.h
函数的原型
RK_S32 RK_MPI_VI_EnableChn(VI_PIPE ViPipe, VI_CHN ViChn);
函数参数
VI_PIPE ViPipe, 管道编号 0
VI_CHN ViChn 通道的编号 0
函数的返回值
成功返回 0
失败返回 错误码
函数的功能:
创建编码通道
函数的头文件
rkmedia_api.h
函数的原型
RK_S32 RK_MPI_VENC_CreateChn(VENC_CHN VeChn, VENC_CHN_ATTR_S *stVencChnAttr);
函数参数
VENC_CHN VeChn, 编码通道
VENC_CHN_ATTR_S *stVencChnAttr 编码通道的属性结构体
函数的返回值
成功返回 0
失败返回 错误码
编码属性结构体
typedef struct rkVENC_CHN_ATTR_S {
VENC_ATTR_S stVencAttr; // 编码器的属性结构体
VENC_RC_ATTR_S stRcAttr; //码率的控制属性
VENC_GOP_ATTR_S stGopAttr; // gop属性
} VENC_CHN_ATTR_S;
编码器的属性结构体
typedef struct rkVENC_ATTR_S {
CODEC_TYPE_E enType; //编码的协议的类型
RK_CODEC_TYPE_H264,
IMAGE_TYPE_E imageType; //输入的图像的类型 要跟VI通道保持一致
IMAGE_TYPE_NV12
RK_U32 u32VirWidth; // 虚拟的宽
RK_U32 u32VirHeight; 虚拟的高
RK_U32 u32Profile; 编码的等级 77
RK_BOOL bByFrame; 保留参数
RK_U32 u32PicWidth; 真实的宽
RK_U32 u32PicHeight; 真实的高
VENC_ROTATION_E enRotation; 旋转的角度
union {
VENC_ATTR_H264_S stAttrH264e; // attributes of H264e
VENC_ATTR_H265_S stAttrH265e; // attributes of H265e
VENC_ATTR_MJPEG_S stAttrMjpege; // attributes of Mjpeg
VENC_ATTR_JPEG_S stAttrJpege; // attributes of jpeg
};
} VENC_ATTR_S;
码率控制器的属性结构体
typedef struct rkVENC_RC_ATTR_S {
/* RW; the type of rc*/
VENC_RC_MODE_E enRcMode; 模式
VENC_RC_MODE_H264CBR
union {
VENC_H264_CBR_S stH264Cbr;
typedef struct rkVENC_H264_CBR_S {
RK_U32 u32Gop; 30
RK_U32 u32SrcFrameRateNum; 30
RK_U32 u32SrcFrameRateDen; 1
RK_FR32 fr32DstFrameRateNum; 30
RK_FR32 fr32DstFrameRateDen; 1
RK_U32 u32BitRate; 分辨率
} VENC_H264_CBR_S;
VENC_H264_VBR_S stH264Vbr;
VENC_H264_AVBR_S stH264Avbr;
VENC_MJPEG_CBR_S stMjpegCbr;
VENC_MJPEG_VBR_S stMjpegVbr;
VENC_H265_CBR_S stH265Cbr;
VENC_H265_VBR_S stH265Vbr;
VENC_H265_AVBR_S stH265Avbr;
};
} VENC_RC_ATTR_S;
函数的功能:
注册编码通道的回调函数
函数的头文件
rkmedia_api.h
函数的原型
RK_S32 RK_MPI_SYS_RegisterOutCb(const MPP_CHN_S *pstChn, OutCbFunc cb);
函数参数
const MPP_CHN_S *pstChn, 通道的描述结构体
OutCbFunc cb 回调函数 函数指针
typedef void (*OutCbFunc)(MEDIA_BUFFER mb);
函数的返回值
成功返回 0
失败返回 非零
通道描述结构体
typedef struct rkMPP_CHN_S {
MOD_ID_E enModId; 模块号 RK_ID_VENC
RK_S32 s32DevId; 设备号 0
RK_S32 s32ChnId; 通道号 0
} MPP_CHN_S;
函数的功能:
绑定vi和venc通道
函数的头文件
rkmedia_api.h
函数的原型
RK_S32 RK_MPI_SYS_Bind(const MPP_CHN_S *pstSrcChn,const MPP_CHN_S *pstDestChn);
函数参数
const MPP_CHN_S *pstSrcChn, 源通道 vi通道
const MPP_CHN_S *pstDestChn 目标通道 venc通道
函数的返回值
成功返回 0
失败返回 错误码
函数的功能:
解除vi通道和venc通道的绑定
函数的头文件
rkmedia_api.h
函数的原型
RK_MPI_SYS_UnBind(const MPP_CHN_S *pstSrcChn,const MPP_CHN_S *pstDestChn);
函数参数
const MPP_CHN_S *pstSrcChn, 源通道
const MPP_CHN_S *pstDestChn 目标通道
函数的返回值
成功返回 0
失败返回 错误码
函数的功能
销毁编码通道
函数的头文件
rkmedia_api.h
函数的原型
RK_S32 RK_MPI_VENC_DestroyChn(VENC_CHN VeChn);
函数的参数
VENC_CHN VeChn :通道的编号 0
函数的返回值
成功返回 0
失败返回 错误码
函数的功能
失能vi通道
函数的头文件
rkmedia_api.h
函数的原型
RK_S32 RK_MPI_VI_DisableChn(VI_PIPE ViPipe, VI_CHN ViChn);
函数的参数
VI_PIPE ViPipe, 管道
VI_CHN ViChn 通道
函数的返回值
成功返回 0