C++ ffmpeg avcodec_decode_video2功能错误代码

C++ ffmpeg avcodec_decode_video2功能错误代码,c++,ffmpeg,C++,Ffmpeg,我在函数avcodec\u decode\u 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); }

我在函数
avcodec\u decode\u 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(packet.isEOF()){
avfpkt;
av_初始_数据包(&eofpkt);
eofpkt.data=NULL;
eofpkt.size=0;
ret=avcodec\U decode\U VIDEO 2(d.codec\U ctx、d.frame和got\U frame\U ptr和eofpkt);
}否则{
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、 未编码的_size=qMin(packet.data.size()-ret,packet.data.size());
如果(ret<0){
//qWarning(“[VideoDecoderFmPegBase]%s”,av_err2str(ret));
返回false;
}
如果(!获取帧\u ptr){
qWarning(“无法解压缩任何帧:%s%d/%d”,av_err2str(ret),d.undecoded_size,packet.data.size());
return!packet.isEOF();
}
当我运行它时,我得到一个错误(我进入
if(!got_frame\u ptr)
),在打印时我得到的ret值是: 203,3053,5120 (或更准确地说,这是我的印刷品:

警告:“无法解压缩任何帧:发生错误号203 0/203”
警告:“无法解压缩任何帧:发生错误号3053 0/3053”
警告:“无法解压缩任何帧:出现错误编号5120 0/5120”

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

avcodec\u decode\u video2
docometatin说:
出错时返回负值,否则返回使用的字节数,如果无法解压缩帧,则返回零。

我不认为avcodec\U decode\U VIDEO 2会返回负值,但我在got\U frame\U ptr时得到零,而不是got\U frame\U ptr将与doc一样的值相同。说我得到这个奇数值(20330535120)

我的问题是:

  • 这个错误代码是什么意思?(我在ffmpeg文档中搜索,没有找到关于每个数值应该代表什么的好记录)

  • 为什么我从这个函数中得到这个值?这是一个错误吗?还是我现在不明白

  • 多谢各位
    g

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

    [编辑] 换句话说,如果
    ret>=0&&got\u frame\u ptr==0
    ,则继续正常操作,并假设操作成功,但输出延迟。当使用
    NULL
    数据包刷新队列时,延迟的数据将在末尾返回