基于嵌入式視頻存儲(chǔ)的專用文件系統(tǒng)設(shè)計(jì)
每個(gè)錄像文件至少需要使用一個(gè)索引塊,每個(gè)索引塊包含N個(gè)索引信息,一個(gè)數(shù)據(jù)塊對(duì)應(yīng)一個(gè)索引信息。每個(gè)索引信息描述下一個(gè)數(shù)據(jù)塊的物理偏離和時(shí)間偏移,每個(gè)索引塊描述本索引塊所描述第一個(gè)數(shù)據(jù)塊的物理地址和時(shí)間偏移。典型的數(shù)據(jù)結(jié)構(gòu)如下:
typedef struct {
UInt8 TimeOffset;/*與上一個(gè)數(shù)據(jù)塊的時(shí)間偏移*/
UInt8 DBNOffset;/*與上一個(gè)數(shù)據(jù)塊的物理偏移*/
} IndexInfo; /*索引信息*/
typedef struct {
UInt16 BeginDBN;/*本索引塊的起始數(shù)據(jù)塊地址*/
UInt16 TimeOffset;/*本索引塊與上一個(gè)索引塊的時(shí)間偏移*/
IndexInfo IndexInfo[N];
} IndexBlockInfo; /*索引塊信息,包含N個(gè)索引信息*/
2.5 數(shù)據(jù)區(qū)
數(shù)據(jù)區(qū)是指整個(gè)磁盤空間除了用于以上文件系統(tǒng)開銷外的所有空間,重新劃分為若干個(gè)數(shù)據(jù)塊,數(shù)據(jù)塊的大小可以自由設(shè)置。數(shù)據(jù)塊是指錄像數(shù)據(jù)保存的最小單元,一般以32~512 KB之間為宜,每個(gè)數(shù)據(jù)塊的頭部保留幾個(gè)字節(jié)用于保存本數(shù)據(jù)塊的時(shí)間戳和相關(guān)數(shù)據(jù)塊的地址偏移。數(shù)據(jù)塊的結(jié)構(gòu)如圖2所示。
圖2 數(shù)據(jù)塊結(jié)構(gòu)示意圖
文件系統(tǒng)在使用前需要獲取磁盤的容量和可使用扇區(qū)的大小,并定義一個(gè)最大文件數(shù)。由于文件信息和索引信息需要占用一定的磁盤空間,并且與最大文件數(shù)密切相關(guān),在實(shí)際使用時(shí)定義一個(gè)最小文件的大小,并通過(guò)磁盤容量得到一個(gè)固定的最大文件數(shù),這樣文件信息和索引信息所占用的磁盤空間在整個(gè)磁盤中只占很小的比例。
3 系統(tǒng)實(shí)現(xiàn)
3.1 數(shù)據(jù)的存儲(chǔ)
數(shù)據(jù)的存儲(chǔ)過(guò)程比較簡(jiǎn)單,創(chuàng)建文件的時(shí)候系統(tǒng)自動(dòng)分配一個(gè)唯一的文件號(hào),并通過(guò)文件號(hào)進(jìn)行計(jì)算得到文件信息和索引信息對(duì)應(yīng)的磁盤地址。當(dāng)有足夠一個(gè)數(shù)據(jù)塊大小的數(shù)據(jù)時(shí)打包并保存到當(dāng)前可以使用的數(shù)據(jù)塊,同時(shí)更新文件信息和索引信息。
圖3 數(shù)據(jù)存儲(chǔ)流程
DIY機(jī)械鍵盤相關(guān)社區(qū):機(jī)械鍵盤DIY
評(píng)論