ffmpeg avcodec_decode_video2函数错误代码

时间:2018-05-07 16:00:59

标签: c++ ffmpeg

我在流程中使用avcodec_decode_video2函数:

if (packet.isEOF()) {
    AVPacket eofpkt;
    av_init_packet(&eofpkt);
    eofpkt.data = NULL;
    eofpkt.size = 0;
    ret = avcodec_decode_video2(d.codec_ctx, d.frame, &got_frame_ptr, &eofpkt);
} else {
    ret = avcodec_decode_video2(d.codec_ctx, d.frame, &got_frame_ptr, (AVPacket*)packet.asAVPacket());
}
//qDebug("pic_type=%c", av_get_picture_type_char(d.frame->pict_type));
d.undecoded_size = qMin(packet.data.size() - ret, packet.data.size());
if (ret < 0) {
    //qWarning("[VideoDecoderFFmpegBase] %s", av_err2str(ret));
    return false;
}
if (!got_frame_ptr) {
    qWarning("no frame could be decompressed: %s %d/%d", av_err2str(ret), d.undecoded_size, packet.data.size());
    return !packet.isEOF();
}

当我运行它时,我收到一个错误(我进入if(!got_frame_ptr))并且在打印中我得到的返回值是: 203,3053,5120 (或者更准确的是我的印刷品:

Warning: "no frame could be decompressed: Error number 203 occurred 0/203" Warning: "no frame could be decompressed: Error number 3053 occurred 0/3053" Warning: "no frame could be decompressed: Error number 5120 occurred 0/5120"

av_err2str(ret)只打印装饰ret,仅此而已))

avcodec_decode_video2 docomentatin说: On error a negative value is returned, otherwise the number of bytes used or zero if no frame could be decompressed.

我不是在avcodec_decode_video2返回负值的情况下,但我在got_frame_ptr得到零,而不是got_frame_ptr将与ret像doc一样。说我得到这个奇怪的值(203,3053,5120)。

我的问题是:

  1. 此错误代码的含义是什么? (我在ffmpeg doc上搜索,我没有找到关于每个数值应该代表什么的好记录)

  2. 为什么我从这个函数中得到这个值?是ffmpeg bug吗?或者我当然不理解ffmpeg?

  3. 谢谢你 G。

1 个答案:

答案 0 :(得分:2)

不完成解压缩帧并不是错误,帧解码往往会延迟几帧以启用帧多线程。

[编辑] 换句话说,如果ret >= 0 && got_frame_ptr == 0,只需继续正常并假设它成功但输出被延迟。使用NULL数据包刷新队列时,延迟数据将在最后返回。