首先,了解MPP编码之前,先了解一下MPP的MPI接口。
1、MPI接口结构
MPP设计的MPI接口,下面的图都来自于官方参考文档:
MppMem:C库malloc内存的封装;
MppBuffer:dmabuf内存的封装;
MppPacket:一维缓存封装,可以从MppMem、MppBuffer生成,用来表示码流数据;
MppFrame:二维帧数据封装,可以从MppMem、MppBuffer生成,用来表示图像数据;
MppMeta、MppTask:输入输出用任务的高级组合接口,可以指定输入输出方式;
使用MppPacket和MppFrame就可以完成一般的编解码工作。
以视频编码为例,图像输入端把图像数据和大小交给MppFrame,通过encode_put_frame输入,在输出端通过encode_get_packet得到编码后的码流MppPacket,就完成了一帧数据的编码。
2、MPI接口使用
MPI是MPP提供给用户的接口,通过C结构里的函数指针方式提供给用户,用户可以通过MPP上下文结构MppCtx与MPI接口结构MppApi组合实现编解码器。