预分配文件类型:
发表于: 2019-06-20 07:44:35 | 已被阅读: 27 | 分类于: 杂谈
预分配文件类型:
- 视频 (连续文件)
- 图片,音频 (独立文件)
- 报警事件,用户日志,系统日志 (独立文件,但是小size,若同2一种索引会浪费空间)
- 串口数据 (暂不明确)
- GPS数据 (固定格式)
对应保存在磁盘中的文件名为:
- CR00000x.mp4 - VIndex0x.bin
- CR00000x.pio - PIndex0x.bin
- CR00000x.log - LIndex0x.bin
- CR00000x.srl - SIndex0x.bin
- CR00000x.gps - GIndex0x.bin
类型 2 包含图片,音频两种文件,可在类型 2 的索引文件设置标志位区分,这点类型 3 类似。 需要设计 5 种不同类型的存储方案。
先完成类型 2 的文件预分配存储和读取
以图片为例。音频的存储和图片一样,只是在磁盘位置不同。
写入的函数接口:
int WritePic(__le8 chnnl, // in 通道
__le16 reason, // in 存储原因
void* picBuf, // in 要存储的数据
__le32 picBufLen, // in 存储数据的长度
__le8 flag, // in 标志位
__le32* ioContinueID // io 连续 ID
);
- 存储某一张图片时,可能一次性存完,也可能分好几次存完。
- 每当开始一个新的图片存储时,若一次性写完,标志应设置为 MPIC_FLAG_NEW_PIC_DATA。
- 若本次写不完,则需 MPIC_FLAG_NEW_PIC_DATA | MPIC_FLAG_CONTINUE_DATA 标志。
- 下一次的 continueData 如果不是最后一帧,则只需 MPIC_FLAG_CONTINUE_DATA 标志,如果是最后一帧,则需要 MPIC_FLAG_CONTINUE_DATA | MPIC_FLAG_PIC_DATA_FINISHED 标志。
如果
若
#define MPIC_FLAG_NEW_PIC_DATA 0x01 // 新数据,并且一次就写完了
#define MPIC_FLAG_CONTINUE_DATA 0x02 // 接着之前写的数据
#define MPIC_FLAG_PIC_DATA_FINISHED 0x04 // 之前没写完,现在写完了。只有continueData,才与之搭配
#define MPIC_FLAG_RESET 0x08
查询接口:
typedef struct __MPIC_QUERY_REQUEST_INFO
{
__le32 startTime; // 起始时间
__le32 endTime; // 结束时间
__le16 expectedCnt; // 本次需要查询的期望数目,实际超过,则返回该值。不足则返回实际值。
__le16 fromPicID; // 从该 pic 文件开始开始
__le16 fromNum; // 从 fromNum 序号开始查询。
__le8 chnnl; // 通道
}MPIC_QUERY_REQUEST_INFO;
int ReleaseAllQueriedPicInfo(); // 释放所有已查到的信息
int QueryPicInfo(MPIC_QUERY_REQUEST_INFO* queryInfo, // in
__le32* outRealPicCnt, // out 实际查询到的图片数
__le16* outLastPicID, // out 结束查询时,查询到的 pic 文件ID
__le16* outLastPicSerialNum, // out 结束查询时的 序号
__le8* outIsEnd // out 是否完符合条件的图片
);
int GetOnePicBuf(void* outBuf, // out 返回的图片数据
__le32* outBufLen, // out 返回的图片数据长度
__le8* outIsEnd // out 是否获取完了
);