gpt4 book ai didi

c++ - ffmpeg avcodec_decode_video2 函数错误代码

转载 作者:搜寻专家 更新时间:2023-10-31 02:06:27 26 4
gpt4 key购买 nike

我在函数 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) )并且在打印中我得到 ret 值是:203,3053,5120(或者更准确地说,这是我的打印品:

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

(av_err2str(ret) 只是打印修饰的 ret,仅此而已))

avcodec_decode_video2 文档说:出错时返回负值,否则返回使用的字节数,如果无法解压缩帧则返回零。

我没有遇到 avcodec_decode_video2 返回负值的情况,但我确实在 got_frame_ptr 处得到零,而不是 got_frame_ptr 将与 ret 一样的值,如 doc。说我得到这个奇数值 (203,3053,5120)。

我的问题是:

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

  2. 为什么我从这个函数中得到这个值?是 ffmpeg 错误吗?还是我当时不理解 ffmpeg?

谢谢G。

最佳答案

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

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

关于c++ - ffmpeg avcodec_decode_video2 函数错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50218233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com