基于嵌入式视频存储的专用文件系统设计
如图1所示。 图1 文件系统关系图 2.1 磁盘信息区 磁盘信息区的位置固定,用于保存当前磁盘信息和文件系统基本信息,如记录每个区域的具体位置和大小、信息区的使用情况、最后数据块位置等。下面为典型的磁盘信息结构: typedef STruct { UInt32 Formatted;/*格式化标志*/ UInt32 DBN_Num;/*总数据块数*/ UInt32 DBN_Size;/*数据块的大小*/ UInt32 DBN_Begin;/*当前可用数据块开始地址*/ UInt32 CurrentFAT;/*当前所用的分区*/ UInt32 OtherInfoBlockAddr; /*保留信息区开始扇区*/ UInt32 OtherInfoBlockSize;/*保留信息区大小*/ UInt32 FileInfoBlockAddr[2][MAX_CHANNEL]; /*文件信息块开始扇区*/ UInt32 FileInfoBlockSize;/*文件信息区大小*/ UInt32 IndexInfoBlockAddr[2][ MAX_CHANNEL];/*索引信息块开始扇区*/ UInt32 IndexInfoBlockSize;/*索引信息区大小*/ } DiskInfo; 2.2 保留信息区 保留信息区用于保存其他系统信息,如操作日志信息、系统设置信息等,此区域大小可自由设定。 2.3 文件信息区 文件信息区用于保存录像文件的文件信息,如录像开始和结束时间,第一个数据块和最后一个数据块的位置,索引信息的位置和其他文件信息。每个文件的数据结构和大小固定。通过文件序号就可以准确定位文件信息的具体位置。 文件信息区分两个部分,分别为分区一和分区二,用于描述覆盖前的文件信息和覆盖后的文件信息。每个分区根据最大文件数按录像路数顺序分配存储空间。 每个文件信息包含以下信息:文件开始时间和结束时间,文件开始索引块地址和结束索引块地址,文件开始数据块地址和结束数据块地址等。下面为典型的文件信息结构: typedef struct { UInt32 FileID;/*文件序号*/ time_t FileStartTime;/*录像开始时间*/ time_t FileEndTime;/*录像结束时间*/ UInt32 FileStartDBN;/*文件开始DBN*/ UInt32 FileEndDBN;/*文件结束DBN*/ IndexInfoAddr IndexInfoStart;/*索引信息开始地址*/ IndexInfoAddr IndexInfoEnd;/*索引信息结束地址*/ } FileInfo; 2.4 索引信息区 索引信息区用于保存录像文件所使用数据块的索引信息。索引信息也分为两部分,分别为分区一和分区二,用于描述覆盖前和覆盖后的索引信息。每个分区根据最大文件数按录像路数顺序分配存储空间。 每个录像文件至少需要使用一个索引块,每个索引块包含N个索引信息,一个数据块对应一个索引信息。每个索引信息描述下一个数据块的物理偏离和时间偏移,每个索引块描述本索引块所描述第一个数据块的物理地址和时间偏移。典型的数据结构如下: typedef struct { UInt8 TimeOffset;/*与上一个数据块的时间偏移*/ UInt8 DBNOffset;/*与上一个数据块的物理偏移*/ } IndexInfo; /*索引信息*/ typedef struct { UInt16 BeginDBN;/*本索引块的起始数据块地址*/ UInt16 TimeOffset;/*本索引块与上一个索引块的时间偏移*/ IndexInfo IndexInfo[N]; } IndexBlockInfo; /*索引块信息,包含N个索引信息*/ 2.5 数据区 数据区是指整个磁盘空间除了用于以上文件系统开销外的所有空间,重新划分为若干个数据块,数据块的大小可以自由设置。数据块是指录像数据保存的最小单元,一般以32~512 KB之间为宜,每个数据块的头部保留几个字节用于保存本数据块的时间戳和相关数据块的地址偏移。数据块的结构如图2所示。 图2 数据块结构示意图 文件系统在使用前需要获取磁盘的容量和可使用扇区的大小,并定义一个最大文件数。由于文件信息和索引信息需要占用一定的磁盘空间,并且与最大文件数密切相关,在实际使用时定义一个最小文件的大小,并通过磁盘容量得到一个固定的最大文件数,这样文件信息和索引信息所占用的磁盘空间在整个磁盘中只占很小的比例。 3 系统实现 3.1 数据的存储 数据的存储过程比较简单,创建文件的时候系统自动分配一个唯一的文件号,并通过文件号进行计算得到文件信息和索引信息对应的磁盘地址。当有足够一个数据块大小的数据时打包并保存到当前可以使用的数据块,同时更新文件信息和索引信息。 图3 数据存储流程 数据存储的流程如图3所示。可以看出,只要视频数据缓存到一个数据块的大小时就可以进行一次存盘。例如,数据块大小为64 KB,对应为512 kbps码率1 s的视频数据,也就是紧急断电等突发事故中实际丢失的视频数据最多是一个数据块的录像长度。由于突然断电导致文件信息和索引信息没有及时存储,可以在启动的时候通过扫描没有形成文件的数据块来进行恢复。即使在最坏的情况下,硬盘的磁盘信息、文件信息及索引信息等都丢失了,完全可以通过扫描所有的数据块来重
- 在FPGA上实现H.264/AVC 视频编码标准(07-23)
- 用FPGA替代DSP实现实时视频处理(08-26)
- DSP+FPGA嵌入式多路视频监控系统硬件平台(04-10)
- 基于DSP的视频采集驱动程序的实现(07-21)
- 未来的视频依赖转码技术(06-08)
- 视频跟踪算法在Davinci SOC上的实现与优化(10-06)