一种快速检测jpeg图片文件是否正确的嵌入式装置及方法

文档序号:8209000阅读:339来源:国知局
一种快速检测jpeg图片文件是否正确的嵌入式装置及方法
【技术领域】
[0001]本发明涉及一种快速检测JPEG图片文件是否正确的嵌入式装置及方法。
【背景技术】
[0002]嵌入式装置多媒体资料的使用,很多情况下会使用JPEG图片,而JPEG格式因为规格书定义的各种版本,虽然有少数容错设计,但并不像PNG格式那样专门有了防错的设计的格式的那么容易容错(PNG格式关键数据块(critical chunk)都有CRC(循环冗余检测)以判断存储的数据块内数据是否有错误发生)。而嵌入式设备存储介质存储或网络传送等原因,可能数据内容发生破坏或变化。如iNand介质存储擦写或读取一定次数后,其存储的内容可能就发生变化,虽然NAND里头Page内有ECC能校验和纠正出一定Bit的数据错误,但依然无法保证100%的无变化内容。JPEG图片内容如果内容发生错误,只能依靠解码软件或硬体的对JPEG异常的处理容错处理,而不同硬体解码芯片或解码库软体对错误处理并不周全,即使用内容不正确的JPEG图片进行显示,往往因为容错处理的不周全,而发生解码异常(exert1n)的情况。而如果要对软体解码容错处理周全,往往要话费大量人力进行解码库的修改,而硬体修改容错也是需要更大的硬体开发成本。
[0003]产品应用场景有很多时候用户是需要显示自己的JPEG格式图片,因为用户手头的JPEG文件并不只是某些封闭式嵌入式设备单独特定使用的JPEG图形数据,所以并不合适自行约定修改JPEG文件格式(如增加CRC或其它校验信息)。
[0004]可见针对软硬件解码部分对JPEG格式正确性检查存在弊端和不足,如何能快速的验证JPEG的格式是否正确,并且能在做JPEG检查时对产品使用解码速度的影响要越小越好。
[0005]如何使用最小的开发代价而能支持在开放平台的嵌入式设备能很好的处理好数据内容有可能损坏的JPEG格式的图形能不发生异常。

【发明内容】

[0006]为了解决【背景技术】中所存在的技术问题,本发明提出了一种快速检测JPEG图片文件是否正确的嵌入式装置及方法,极快速度就能判断出来JPEG文件是否格式正确,针对内容有误的JPEG文件,不需要修改硬件解码或软件解码库。
[0007]本发明的技术解决方案是:一种快速检测JPEG图片文件是否正确的嵌入式装置,其特征在于:所述嵌入式装置包括依次连接的初始S10/DQT/S0F/DHT/S0S五个Marker段计数器的初始化单元、获取JPEG文件大小并读取JPEG流文件的获取单元、Marker段扫描的扫描单元以及处理单元。
[0008]一种快速检测JPEG图片文件是否正确的方法,其特征在于:所述方法包括以下步骤:
[0009]I)初始化 S10/DQT/S0F/DHT/S0S 五个 Marker 段计数器都为 O ;
[0010]2)流文件打开JPEG文件,并获得JPEG文件大小;
[0011]3)读取JPEG流文件内容,并逐字符进行扫描,即Marker段扫描;
[0012]4)针对S1、DQT、SOF、DHT、SOS、DR1、COM、APP段后面紧跟着2个字节的段长度,判断当前位置偏移此记录的长度后是否会超出步骤2)中获得的JPEG文件大小,如超出判断JPEG图片NG ;如果没有超出,则往后Seek文件Marker段length位置后;如Seek万之后并非JPEG文件结尾处,则判断读取的字符如果不是Marker段标记OxFF值,如不是OxFF码值,则判断JPEG文件NG ;
[0013]5)统计S10、DQT、S0F、DHT、S0S段是否至少出现过I次,如果有I种类型出现次数少于I次则判断为JPEG文件NG。
[0014]上述步骤5)之后还包括步骤6)如果步骤I) 一步骤5)没有把JPEG图片文件判为NG,则JPEG图片文件为0K。
[0015]上述步骤6)具体是:
[0016]6.1)以流文件的方式打开待检查的JPEG文件,从文件开头往后扫描,JPEG文件Maker段都是以OxFF开头,直接检索OxFF的内容;
[0017]6.2)扫描过程中统计标记码(OxFF)后面的S1 (0xD8)、DQT (OxDB)、S0F(0xC0-0xC3、0xC5-0xCB、0xCD-0xCF)、DHT(0xC4)、SOS (OxDA)关键 Maker 段出现的次数,如JPEG文件缺少他们中任何一个Marker段,则直接将JPEG图片文件判断为NG ;
[0018]6.3)扫描过程中对有段长度信息的Marker段:S10(0xD8)、DQT (OxDB)、S0F(0xC0-0xC3、0xC5-0xCB、0xCD-0xCF)、DHT (0xC4)、SOS (OxDA)、DRI (OxDD)、COM (OxFE)、APP (OxEO-OxEF)做验算;
[0019]6.4)根据步骤6.3) Marker段文件在JPEG文件的起始位置以及配合他们的长度与JPEG文件总大小做对比,如果【Maker段文件起始+Maker段长度】大于【JPEG文件总大小】,则判断JPEG图片文件为NG ;否则,再直接根据取得Marker段长度直接跳过这些Marker段,如果后面还有数据,则判断下个Marker段开始是否为新Maker开始标记(OxFF),,如字符不是(OxFF)标记,则将JPEG图片文件判断为NG。
[0020]6.5)扫描到文件结束,如果前面的步骤没有将文件判断为NG,则可认为JPEG文件是OK的。
[0021]本发明的优点是:以软件简单高效的扫描的方式,极快速度就能判断出来JPEG文件是否格式正确,针对内容有误的JPEG文件,不需要修改硬件解码或软件解码库(不需要了解软硬件解码库的实现细节原理进行了解,更无需修改软硬件JPEG解码模组),解码前用次方法纯软件快速扫描一次JPEG,就能快速知晓JPEG文件格式是否正确。当格式判断正确后,再调用JPEG硬件解码或软件解码卡库进行图形解码,避免JPEG文件格式错误,而软硬件解码针对异常格式的JPEG解码而发生异常(Exert1n),而不必去投入大量开发人力去增强或修正软硬件解码模组对异常的处理,且对JPEG文件解码整个过程的耗时基本没速度影响(此扫描检查格式正确的算法速度极快,基本可以忽略增加的耗时,且实现起来也非常的简单),进而实现使用最小的开发代价(成本)而能支持在开放平台的嵌入式设备能很好的处理好数据内容有可能损坏的JPEG格式的图形能不发生异常。
【附图说明】
[0022]图1是本发明的结构示意图;
[0023]图2是本发明方法流程图;
【具体实施方式】
[0024]本发明针对JPEG文件格式,设-H种通过统计关键Marker段缺失与否,以及判断有大小标记的Marker段,将Marker段标记的段落大小配合段落开始位置与文件大小做对比,如果段落起始+段大小超过文件大小就可以判断出JPEG文件NG ;并段落内部数据直接跳过,流文件Seek的方式直接读取下个段落首字符,判断是否含有短开始标记OxFF,如果下短开始并不是OxFF标记,则直接判断为该JPEG文件NG。因为JPEG文件大部分数据是带有段大小的数据段,所以大部分数据数据并不需要再读取和解析,而是跳过,所以速度会非常快,对计算能力有限的嵌入式设备的硬体而言,增加的检查环节并不会影响什么速度。因为并不涉及具体文件的图像数据的解码,所以代码实现上也简便实用高效。
[0025]在需要显示终端用户自己的JPEG文件的嵌入式装置,特别实施JPEG Marker段落统计和检查,并做长短逻辑匹配判断,如果有关键段数据被增加或减少数据,或JPEG关键段落缺失,或数据文件本省被增加或减少内容,则都能被快速判断出来NG。而如果只是纯粹的数据段内个别字符或内容被变化(但数据段总体大小并未改变),这种情况只会引发解码出来的数据图像有变化(如图像变化或马赛克等),但并不会让解码器解码失控(不会发生except1n等严重异常或当机)。所以以一种最小的投入量,能最大可能的判断出出错的JPEG图像文件,而且因为检查机制会根据有短长度记录的段自动跳跃段内数据,所以速度非常快,从而实现嵌入式系统在使用解码库软件或纯硬体解码JPEG图片之前,执行JPEG图像文件内容正确性检查,并不会增加多少耗时,进而对终端用户的良好使用体验没有速度的影响。
[0026]参见图1,一种快速检测JPEG图片文件是否正确的嵌入式装置,,包括依次连接的初始化S10/DQT/S0F/DHT/S0S五个Ma
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1