我在使用FFMPEG时遇到问题。
avcodec_send_packet()
返回错误代码-12。
我试图找到-12的含义。
我找到了此页面,但无法理解-12的计算:
谁能帮我?
我正在使用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] 删除。
我来说两句