/************************************************* * Copyright (C), Xiongmai Information Technologies Co., Ltd. 2018-2019. All rights reserved. * 文件名: maque_mem.h * 作者@编号: XM R&D @02479 * 版本: V1.00 * 创建日期: 2019.02.18 * 功能描述: 声明注册内存分配函数指针的接口。 * 给底层注册内存分配和释放接口。视频和Jpeg编码器输出的码流大小不一,都是分段的,要拼成 * 一帧完整数据,拷贝是不可避免的,并且往往需要分配大块内存。最简单想法是,底层编码输出 * 线程根据实际码流大小,调用malloc函数分配内存,上层负责释放,但这往往太理想化了,因为 * 内存紧张时,申请大块内存将会十分困难,延时大,甚至失败;反复申请和释放内存,必将造成 * 碎片化严重,进一步恶化。MaQue实现时,充分考虑了这些因素,提供了一套接口,由二次开发者 * 实现自己内存分配和释放优化程序。开发者可以在刚开始跑App内存很充裕的时候,申请大片内存 * 用作内存池,写一个既方便,又高效的内存管理器,例如,环形缓存区管理器。如果需要用到物理 * 内存的,还可以用物理和虚拟内存映射实现。 * 目前需要用到该套内存分配和释放接口模块由MaQueMemoryType_e决定。 * * 修改历史: ** 1.日期: 2019.02.18 ** 修改者: XM R&D @02479 ** 修改内容: 首次创建 。 ** 2.日期: 2019.02.18 ** 修改者: XM R&D @02479 ** 修改内容: 完成了基础版。 *************************************************/ #ifndef MAQUE_MEM_H #define MAQUE_MEM_H #ifdef __cplusplus extern "C" { #endif typedef enum { MAQUE_MEM_TYPE_VIDEO_ENC = 1, /* 视频编码。*/ MAQUE_MEM_TYPE_JPEG_ENC, /* Jpeg编码。*/ MAQUE_MEM_TYPE_YUV_GET /* YUV获取。*/ } MaQueMemoryType_e; typedef struct { MaQueMemoryType_e eMemType; /* 内存申请的类型。指明所申请的内存用于哪个模块。*/ XM_S32 subType; /* 对应于eMemType的子类型。eMemType只指定了一个大类,例如Video Enc,实际视频 * 编码又有主码流和副码流之分,可用该变量加以区分。目前,暂只用于视频编码, * subType对应于 MaQueStreamChannel_e。 */ XM_U32 nBufSize; /* 需要申请的Buffer大小。*/ XM_U32 nAlign; /* 申请内存的起始地址对齐字节数。*/ XM_U8 *pBuffer; /* 指向申请到的内存起始地址。*/ XM_U8 aReserved[8]; /* 保留。*/ } MaQueMemAllocParam_s; typedef XM_S32 (*MaQueMemoryAllocFuncPtr)(XM_HANDLE *pHandle, MaQueMemAllocParam_s *pstAllocParam); typedef XM_S32 (*MaQueMemoryReleaseFuncPtr)(XM_HANDLE handle); typedef XM_S32 (*MaQueMemoryAddRefFuncPtr)(XM_HANDLE handle); typedef XM_S32 (*MaQueMemorySetLengthFuncPtr)(XM_HANDLE handle, XM_U32 len); typedef struct { MaQueMemoryAllocFuncPtr pMemAllocFuncPtr; /* 申请内存回调。*/ MaQueMemoryReleaseFuncPtr pMemReleaseFuncPtr; /* 释放内存回调。如果使用参考数机制,则先把参考数减1,等参考数为0时,释放内存。*/ MaQueMemoryAddRefFuncPtr pMemAddRefFuncPtr; /* 给内存使用参考数加1。*/ MaQueMemorySetLengthFuncPtr pMemSetLenFuncPtr; /* 设置申请的内存实际使用量。*/ } MaQueMemoryApi_s; /* 【功能描述】 给底层注册内存分配和释放接口。目前应用于视频和Jpeg编码输出,以及YUV数据获取。 【参数】 参数名称 描述 pstMemApi [in] 注册给底层的内存分配和释放接口。 【返回值】 XM_SUCCESS 成功。 其它 失败,请参考错误码。 【注意】 目前需要用到该套内存分配和释放接口的模块由MaQueMemoryType_e决定,也即上层必须 实现MaQueMemoryType_e定义的所有类型内存分配。 */ XM_S32 LibXmMaQue_Mem_init(MaQueMemoryApi_s *pstMemApi); #ifdef __cplusplus } #endif #endif //MAQUE_MEM_H