• 初始化 Rockit
//RK_MPI_SYS_Init()在`rk_mpi_sys.h`
if(RK_MPI_SYS_Init() != RK_SUCCESS){  //RK_SUCCESS 是 0
}
  • 创建通道
VENC_CHN_ATTR_S chn_attr;
memset(&chn_attr, 0, sizeof(chn_attr));
/*
*	省略配置chn_attr相关参数
*/
RK_S32 ret = RK_MPI_VENC_CreateChn(0, &chn_attr);//第0通道
  • 接收流
/* 开启收流,和编码有一定出入 */
RK_S32 ret = RK_MPI_VDEC_StartRecvStream(0);
  • 送码流给 VDEC(MP4 格式是 4字节长度前缀,VDEC 直接支持)
// 缓冲包装成 MB_BLK
MB_BLK blk = NULL;
MB_EXT_CONFIG_S mb_cfg;
memset(&mb_cfg, 0, sizeof(mb_cfg));
/*
*	配置mb_cfg种种 ...
*/
RK_S32 ret = RK_MPI_SYS_CreateMB(&blk, &mb_cfg);

/* 拷贝码流数据到 MB 缓冲 */
void *vir_addr = RK_MPI_MB_Handle2VirAddr(blk);

/* 填充码流包信息 */
VDEC_STREAM_S stream;
memset(&stream, 0, sizeof(stream));
stream.pMbBlk = blk;
stream.u32Len = len;
stream.u64PTS = pts_ms;
stream.bEndOfFrame = RK_TRUE;      /* 一帧结束标志 */
stream.bEndOfStream = RK_FALSE;
stream.bBypassMbBlk = RK_FALSE;    /* 内部会拷贝数据 */

ret = RK_MPI_VDEC_SendStream(0, &stream, 1000);

/* 释放 MB 缓冲(内部已拷贝,原始缓冲可释放) */
RK_MPI_MB_ReleaseMB(blk);