IJG JPEG库运行时错误:Corrupt JPEG data 的解决方案

做嵌入式图像识别,用V4L2捕获图像为JPEG格式,用IJG JPEG库转成BMP格式时偶尔出现如下错误或警告:

Corrupt JPEG data: XX extraneous bytes before marker 0xXX

Corrupt JPEG data: premature end of data segment

 

由于这些错误在IJG JPEG库里只认为是警告,如果不对其处理,代码将继续执行,因而捕获的图像不正常。这个错误对我的处理算法结果造成影响,决定排除。

Google百度下来发现没有什么好的解决方案,最好的一个是对 Corrupt JPEG data: XX extraneous bytes before marker 0xXX的解决,他是这样做的:

 

意思是把WARNMS2()注掉,然后重新编译IJG JPEG源码,就不会出现Corrupt JPEG data: XX extraneous bytes before marker 0xXX。这个可有点勉强。。。太麻烦了,总应该有好的办法。

 

Google百度一下 WARNMS2,没有~于是找 JWRN_EXTRANEOUS_DATA,

找到了jerror.h的源码,看到下面有一段:

发现发出的异常消息是emit_message,异常等级为-1, 于是处理掉这个异常就OK了!

代码如下:

 

先声名一个异常处理函数:my_emit_message

再捕获这个异常(注意这里没写出其它异常类型处理,如error_exit):

 

这样就解决了,Corrupt JPEG data: XX extraneous bytes before marker 0xXX 问题,不过把所有的emit_message异常都屏蔽了,并认为是失败,代码运行后发现Corrupt JPEG data: premature end of data segment也是其中之一,所以也正好都解决了。代码运行了几分钟很正常,都显示屏蔽了。

 

这个方法发上来备忘一下,也给需要的人参考。

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值