昇腾实战丨 DVPP 媒体数据处理图片解码问题案例
本文分享自华为云社区《DVPP媒体数据处理图片解码问题案例》,作者:昇腾 CANN 。
DVPP(Digital Vision Pre-Processing)是昇腾 AI 处理器内置的图像处理单元,通过 AscendCL 媒体数据处理接口提供强大的媒体处理硬加速能力,主要功能包括图像编解码、视频编解码、图像抠图缩放等。
本期就分享几个关于 DVPP 图片解码问题的典型案例,并给出原因分析及解决方法:
1. 图片格式不支持或图片数据不完整,图片解码失败
2. 图像解码进程超时退出
01 图片格式不支持或图片数据不完整,图片解码失败
问题现象信息
图片解码失败,查看日志有类似如下报错信息:
日志片段举例 1:
日志片段举例 2:
原因分析
分析上面日志信息,可能存在以下可能原因:
数据格式不支持
图片数据不完整
解决措施
针对上述可能原因,请按以下方式处理:
1、目前不支持的超规格图像格式,建议用户自行使用第三方软件解码。
解码 JPEG 图片,只支持 JPEG 图片为 huffman 编码(colorspace: yuv, subsample: 444/440/422/420/400 ),不支持算术编码,不支持渐进编码,不支持 jpeg2000 格式。
2、图片数据不完整,根据报错提示,通过第三方软件查看原图像二进制进行确认。
图像缺失最后的 EOI 结束符,对应图像二进制类似下图所示。正常 JPEG 图片最后应该由标记码 FF D9 结束,该数据最后缺失 FF D9 标记码。
如果确认原图数据不完整,报错属于正常现象,需更换图片。
3、原图像数据完整,可能数据在传输过程中存在损坏,需要在调用图片解码接口前,通过 fwrite 函数将送入解码接口的的图片码流保存下来,与原 JPEG 图进行二进制比较。如果不一致,传输过程出现数据缺失,需进一步定位传输过程数据缺失问题后,再重新解码图片。
02 图像解码进程超时退出
问题现象信息
用户进程退出。
查看应用类日志,发现类似 ERROR 日志“task timeout, userData= ..., timeout=30, duration=…”和 WARNING 日志“frames statistic: ACL receive(n), send(n-1)”,n 表示处理任务数量,需根据实际情况确定。
日志片段举例如下:
原因分析
多路并发解码 JPEG 图片场景下,如果每一路解码的 JPEG 图片中,都包含带旋转信息的大分辨率图片,例如 3840*2160 分辨率及以上的图片,则可能导致图片解码时间过长,从而导致用户进程超时退出。
解决措施
1、确定大分辨率的图片是否包含旋转信息。
使用 JPEG 码流分析工具(例如 JPEGsnoop)解析大分辨率的图片,查看其是否包含旋转信息,若 Orientation 信息为 1,则表示不旋转;否则,都带有一定角度的旋转,例如下图解析出来的 Orientation 信息为 8,表示顺时针旋转 270°。
2、如果无法更换图片,确定这些图片是带旋转的大分辨率图片,则建议用户先调用第三方库(例如 OpenCV)进行解码。
03 更多介绍
[1]昇腾文档中心:https://www.hiascend.com/zh/document
[2]昇腾社区在线课程:https://www.hiascend.com/zh/edu/courses
[3]昇腾论坛:https://www.hiascend.com/forum
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/f6366d71e67f024c691e71b5e】。文章转载请联系作者。
评论