下载
EN
注册

VDEC视频帧解码失败不触发回调函数

现象描述

用户输入码流给VDEC解码,某些帧或所有帧都没有触发回调函数,用户收不到解码结果。

可能原因

码流中某些帧是坏帧,导致语法解析不出这些帧的含义,或者解码这些帧失败,从而不调用回调函数。

处理步骤

针对分析的可能原因,请参考以下步骤进行处理:

  1. 查看日志中是否有VDEC视频解码丢帧/丢包中的日志报错信息,若有,则是因为异常帧解码失败导致没有回调。
  2. 若没有VDEC视频解码丢帧/丢包中的日志报错信息,则调整DVPP模块或全局日志级别为info,查看下述三条日志打印的总次数是否和输入的帧数相等。
    • (1)"The queue is empty, so call the non-intelligent pointer callback interface."
    • (2)"The queue is not empty, so call the smart pointer callback interface."
    • (3)"The queue is not empty, but hiai_data_sp is nullptr."

    生成上述3种日志信息的场景如下:

    • 未使用hiai_data_sp,成功解码返回,打印(1)日志,然后调用用户注册的回调函数。
    • 每一帧对应设置一个hiai_data_sp,成功解码返回,打印(2)日志,然后调用用户注册的回调函数。
    • N帧对应设置一个hiai_data_sp,第1帧成功解码返回,打印(2)日志,然后调用用户注册的回调函数;其他N-1帧,成功解码后打印(3)日志信息,并调用用户注册的回调函数。

    不论上述场景中哪一种,均会调用用户注册的回调函数,即只要调用一次用户回调函数就说明解码返回一帧。所以上述三条日志出现的次数总和与用户输入总帧数相等,则说明无解码丢帧,用户需排查自身接收解码结果的统计是否有误。