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