DVPP媒体数据处理图片解码问题案例
收藏回复举报
DVPP媒体数据处理图片解码问题案例
发表于2023-05-29 19:25:10
0 查看

DVPPDigital Vision Pre-Processing是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强大的媒体处理硬加速能力主要功能包括图像编解码、视频编解码、图像抠图缩放等。

本期就分享几个关于DVPP图片解码问题的典型案例并给出原因分析及解决方法

1. 图片格式不支持或图片数据不完整,图片解码失败

2. 图像解码进程超时退出

01图片格式不支持或图片数据不完整,图片解码失败 

问题现象信息

图片解码失败,查看日志有类似如下报错信息:

日志片段举例1:

Unsupported subsample format, just support jpeg with YUV 444 440 422 420 400
do not support progressive mode
do not support arithmetic code, support huffman code only

日志片段举例2

EOI segment of the stream is invalid

原因分析

分析上面日志信息,可能存在以下可能原因:

  • 数据格式不支持
  • 数据不完整

解决措施

针对上述可能原因,请按以下方式处理:

1、目前不支持的超规格图像格式,建议用户自行使用第三方软件解码。

解码JPEG图片只支持JPEG图片为huffman编码(colorspace: yuv, subsample: 444/440/422/420/400 ),不支持算术编码,不支持渐进编码,不支持jpeg2000格式。

2、图片数据不完整,根据报错提示,通过第三方软件查看原图像二进制进行确认。

     图像缺失最后的EOI结束符,对应图像二进制类似下图所示。正常JPEG图片最后应该由标记码FF D9结束,该数据最后缺失FF D9标记码。

     如果确认原图数据不完整,报错属于正常现象,需更换图片

     cke_639854.png

3、原图像数据完整,可能数据在传输过程中存在损坏,需要在调用图片解码接口前,通过fwrite函数将送入解码接口的的图片码流保存下来,与原JPEG图进行二进制比较。如果不一致,传输过程出现数据缺失,需进一步定位传输过程数据缺失问题后,再重新解码图片

02图像解码进程超时退出

问题现象信息

用户进程退出。

查看应用类日志,发现类似ERROR日志“task timeout, userData= ..., timeout=30, duration=…”和WARNING日志“frames statistic: ACL receive(n), send(n-1)”,n表示处理任务数量,需根据实际情况确定。

日志片段举例如下:

[ERROR] AICPU(pid,pName):DateTimeMS [dvpp_timeout_manager.cc:33][OnPulse][tid:2581][DVPP_KERNELS] WaitId[10] task timeout, userData=0xe7ffe0001280, timeout=30, duration=30.930062.
[INFO] AICPU(pid,pName):DateTimeMS [dvpp_kernel_base.cc:222][SendTaskCompleteToTs][tid:2581][DVPP_KERNELS] Send task complete to ts success, taskId=2, streamId=44, errorCode=1.
[WARNING] DVPP(pid,pName):DateTimeMS [JpegdAsyncManager.cpp:405][API] [PrintFrameCount:405] [T208] DFX [JPEGD]: frames statistic: ACL receive(16), send(15)

原因分析

多路并发解码JPEG图片场景下,如果每一路解码的JPEG图片中,都包含带旋转信息的大分辨率图片,例如3840*2160分辨率及以上的图片,则可能导致图片解码时间过长,从而导致用户进程超时退出。

解决措施

1、确定大分辨率的图片是否包含旋转信息。

     使用JPEG码流分析工具(例如JPEGsnoop)解析大分辨率的图片,查看其是否包含旋转信息,若Orientation信息为1,则表示不旋转;否则,都带有一定角度的旋转,例如下图解析出来的Orientation信息为8,表示顺时针旋转270°。

    cke_700222.png

2、如果无法更换图片确定这些图片是带旋转的大分辨率图片,则建议用户先调用第三方库(例如OpenCV)进行解码。

03更多介绍 

[1]昇腾文档中心cid:link_1

[2]昇腾社区在线课程cid:link_0

[3]昇腾论坛cid:link_2

本帖最后由 匿名用户2025/04/02 12:07:23 编辑

我要发帖子