如何找到FFmpeg错误代码的含义?

鸟类

我在使用FFMPEG时遇到问题。

avcodec_send_packet() 返回错误代码-12。

我试图找到-12的含义。

我找到了此页面,但无法理解-12的计算:

如何找出这个ffmpeg错误代码的含义?

谁能帮我?

我正在使用DXVA2进行解码。并且avcodec_send_packet()函数在第20帧之后返回-12。

第20帧返回

图片

第21帧返回

图片

雷米·勒博

如果您阅读该avcodec_send_packet()文档,它将显示:

退货

成功时为0,否则为负错误代码::AVERROR(EAGAIN)在当前状态下不接受输入-用户必须使用读取输出avcodec_receive_frame()(一旦读取了所有输出,应重新发送数据包,并且调用不会失败EAGAIN)。AVERROR_EOF:解码器已被刷新,并且不能向其发送新的数据包(如果发送了多个刷新数据包,则也将返回)AVERROR(EINVAL):编解码器未打开,它是编码器,或需要刷新AVERROR(ENOMEM):无法将数据包添加到内部队列,或其他类似错误:合法的解码错误

请注意,这avcodec_send_packet()是基于AVERROR()返回的错误代码,其定义libavutil/error.h如下:

/* error handling */
#if EDOM > 0
#define AVERROR(e) (-(e))   ///< Returns a negative error code from a POSIX error code, to return from library functions.
#define AVUNERROR(e) (-(e)) ///< Returns a POSIX error code from a library function error return value.
#else
/* Some platforms have E* and errno already negated. */
#define AVERROR(e) (e)
#define AVUNERROR(e) (e)
#endif

如您在文档中所见,标准POSIX错误代码正在传递给AVERROR()

现在,如果您查看在编译器的errno.h标头中定义的POSIX错误代码,您会发现它[-]12定义为ENOMEM,这是avcodec_send_packet()文档中提到的可能值之一

AVERROR(ENOMEM):无法将数据包添加到内部队列,或其他类似错误:合法的解码错误

根据该版本error.h(相对于此版本),其中的内容是:

#if LIBAVUTIL_VERSION_MAJOR < 51
#define AVERROR_INVALIDDATA AVERROR(EINVAL)  
...
#define AVERROR_NOMEM       AVERROR(ENOMEM)  
...
#endif

您显示的屏幕截图正在测试avcodec_send_packet()forAVERROR_INVALIDDATA而不是的返回值AVERROR_NOMEM

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章