我在使用FFMPEG时遇到问题。
avcodec_send_packet()
返回错误代码-12。
我试图找出-12的含义。
我找到了此页面,但无法理解-12的计算结果
How can I find out what this ffmpeg error code means?
有人可以帮助我吗?
我正在使用DXVA2进行解码。并且avcodec_send_packet()
函数在第20帧之后返回-12。
第20帧返回
第21帧返回
答案 0 :(得分:1)
如果您读了avcodec_send_packet()
documentation,它会说:
返回
成功时为
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)
:无法将数据包添加到内部队列,或其他类似错误:合法的解码错误
据this version of error.h
(与this version相对)说:
#if LIBAVUTIL_VERSION_MAJOR < 51
#define AVERROR_INVALIDDATA AVERROR(EINVAL)
...
#define AVERROR_NOMEM AVERROR(ENOMEM)
...
#endif
您显示的屏幕快照正在测试avcodec_send_packet()
而不是AVERROR_INVALIDDATA
的{{1}}的返回值。