我怎么知道这个ffmpeg错误代码是什么意思? [英] How can I find out what this ffmpeg error code means?

查看:1563
本文介绍了我怎么知道这个ffmpeg错误代码是什么意思?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的功能是 avcodec_decode_video2 。在流中的编码更改时,它返回-1094995529。文档仅说明:


发生错误时返回负值,否则使用字节数
,否则为零可以解压缩。


但似乎没有枚举的返回码或任何其他形式的文档。

解决方案

ffmpeg(来自avutil的error.h)的错误代码是什么意思? :
http://ffmpeg.org/doxygen/trunk/error_8h_source.html



原来你指定的值是:

  #define AVERROR_INVALIDDATA FFERRTAG我','N','D','A')

-1094995529变成-0x41444E49当您查看这些字母时,在ACSII中,0x41 ='A',0x44 ='D',0x4E ='N,0x49 ='I'。由于宏/ etc的情况相反,所以ADNI变成INDA,你可以从#define片段中看到,是AVERROR_INVALIDDATA定义的FFERRTAG('I','N','D','A')。 p>

其余错误代码在该文件中,我已将它们粘贴到这里:

  #define AVERROR_BSF_NOT_FOUND FFERRTAG(0xF8,'B','S','F')///<未找到位流过滤器
#define AVERROR_BUG FFERRTAG('B','U','G','!')///<内部错误,另见AVERROR_BUG2
#define AVERROR_BUFFER_TOO_SMALL FFERRTAG('B','U','F','S')///<缓冲区太小
#define AVERROR_DECODER_NOT_FOUND FFERRTAG(0xF8,'D','E','C')///<解码器未找到
#define AVERROR_DEMUXER_NOT_FOUND FFERRTAG(0xF8,'D','E','M')///<未找到Demuxer
#define AVERROR_ENCODER_NOT_FOUND FFERRTAG(0xF8,'E','N','C')///<没有找到编码器
#define AVERROR_EOF FFERRTAG('E','O','F','')///<文件结束
#define AVERROR_EXIT FFERRTAG('E','X','I','T')///<要求立即退出;调用函数不应该重新启动
#define AVERROR_EXTERNAL FFERRTAG('E','X','T','')///<外部库中的通用错误
#define AVERROR_FILTER_NOT_FOUND FFERRTAG(0xF8,'F','I','L')///<过滤器未找到
#define AVERROR_INVALIDDATA FFERRTAG('I','N','D','A')///<处理输入时发现的无效数据
#define AVERROR_MUXER_NOT_FOUND FFERRTAG(0xF8,'M','U','X')///<未找到Muxer
#define AVERROR_OPTION_NOT_FOUND FFERRTAG(0xF8,'O','P','T')///<选项未找到
#define AVERROR_PATCHWELCOME FFERRTAG('P','A','W','E')///<在FFmpeg中尚未实现,补丁欢迎
#define AVERROR_PROTOCOL_NOT_FOUND FFERRTAG(0xF8,'P','R','O')///<未找到协议
#define AVERROR_STREAM_NOT_FOUND FFERRTAG(0xF8,'S','T','R')///<流未找到
#define AVERROR_BUG2 FFERRTAG('B','U','G','')
#define AVERROR_UNKNOWN FFERRTAG('U','N','K','N ')///<未知错误,通常来自外部库
#define AVERROR_EXPERIMENTAL(-0x2bb2afa8)///<被请求的特征被标记为实验性。设置strict_std_compliance如果你真的想使用它。
#define AVERROR_INPUT_CHANGED(-0x636e6701)///<呼叫之间的输入改变。重新配置是必需的。 (可以使用AVERROR_OUTPUT_CHANGED进行编辑)
#define AVERROR_OUTPUT_CHANGED(-0x636e6702)///<呼叫之间的输出改变。重新配置是必需的。 (可以与AVERROR_INPUT_CHANGED进行OR-ed)
#define AVERROR_HTTP_BAD_REQUEST FFERRTAG(0xF8,'4','0','0')
#define AVERROR_HTTP_UNAUTHORIZED FFERRTAG(0xF8,'4','0' ,'1')
#define AVERROR_HTTP_FORBIDDEN FFERRTAG(0xF8,'4','0','3')
#define AVERROR_HTTP_NOT_FOUND FFERRTAG(0xF8,'4','0' )
#define AVERROR_HTTP_OTHER_4XX FFERRTAG(0xF8,'4','X','X')
#define AVERROR_HTTP_SERVER_ERROR FFERRTAG(0xF8,'5','X','X')


I'm using the function avcodec_decode_video2. On an encoding change in the stream, it returns -1094995529. The documentation only states:

On error a negative value is returned, otherwise the number of bytes used or zero if no frame could be decompressed.

But there doesn't seem to be an enum of return codes or any other form of documentation. What does the error mean and how can I determine that in general?

解决方案

Error codes from ffmpeg (error.h from avutil) : http://ffmpeg.org/doxygen/trunk/error_8h_source.html

It turns out the value you specified is :

#define AVERROR_INVALIDDATA        FFERRTAG( 'I','N','D','A')

The -1094995529 becomes -0x41444E49 and when you look at those letters, in ACSII, 0x41 = 'A', 0x44 = 'D', 0x4E = 'N, and 0x49 = 'I'. Due to the macro/etc things are reversed, so ADNI becomes INDA, which you can see from the #define snippet, is the AVERROR_INVALIDDATA defined FFERRTAG( 'I','N','D','A').

The rest of the error codes are in that file and I've pasted them below here :

#define AVERROR_BSF_NOT_FOUND      FFERRTAG(0xF8,'B','S','F') ///< Bitstream filter not found
#define AVERROR_BUG                FFERRTAG( 'B','U','G','!') ///< Internal bug, also see AVERROR_BUG2
#define AVERROR_BUFFER_TOO_SMALL   FFERRTAG( 'B','U','F','S') ///< Buffer too small
#define AVERROR_DECODER_NOT_FOUND  FFERRTAG(0xF8,'D','E','C') ///< Decoder not found
#define AVERROR_DEMUXER_NOT_FOUND  FFERRTAG(0xF8,'D','E','M') ///< Demuxer not found
#define AVERROR_ENCODER_NOT_FOUND  FFERRTAG(0xF8,'E','N','C') ///< Encoder not found
#define AVERROR_EOF                FFERRTAG( 'E','O','F',' ') ///< End of file
#define AVERROR_EXIT               FFERRTAG( 'E','X','I','T') ///< Immediate exit was requested; the called function should not be restarted
#define AVERROR_EXTERNAL           FFERRTAG( 'E','X','T',' ') ///< Generic error in an external library
#define AVERROR_FILTER_NOT_FOUND   FFERRTAG(0xF8,'F','I','L') ///< Filter not found
#define AVERROR_INVALIDDATA        FFERRTAG( 'I','N','D','A') ///< Invalid data found when processing input
#define AVERROR_MUXER_NOT_FOUND    FFERRTAG(0xF8,'M','U','X') ///< Muxer not found
#define AVERROR_OPTION_NOT_FOUND   FFERRTAG(0xF8,'O','P','T') ///< Option not found
#define AVERROR_PATCHWELCOME       FFERRTAG( 'P','A','W','E') ///< Not yet implemented in FFmpeg, patches welcome
#define AVERROR_PROTOCOL_NOT_FOUND FFERRTAG(0xF8,'P','R','O') ///< Protocol not found
#define AVERROR_STREAM_NOT_FOUND   FFERRTAG(0xF8,'S','T','R') ///< Stream not found
#define AVERROR_BUG2               FFERRTAG( 'B','U','G',' ')
#define AVERROR_UNKNOWN            FFERRTAG( 'U','N','K','N') ///< Unknown error, typically from an external library
#define AVERROR_EXPERIMENTAL       (-0x2bb2afa8) ///< Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it.
#define AVERROR_INPUT_CHANGED      (-0x636e6701) ///< Input changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_OUTPUT_CHANGED)
#define AVERROR_OUTPUT_CHANGED     (-0x636e6702) ///< Output changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_INPUT_CHANGED)
#define AVERROR_HTTP_BAD_REQUEST   FFERRTAG(0xF8,'4','0','0')
#define AVERROR_HTTP_UNAUTHORIZED  FFERRTAG(0xF8,'4','0','1')
#define AVERROR_HTTP_FORBIDDEN     FFERRTAG(0xF8,'4','0','3')
#define AVERROR_HTTP_NOT_FOUND     FFERRTAG(0xF8,'4','0','4')
#define AVERROR_HTTP_OTHER_4XX     FFERRTAG(0xF8,'4','X','X')
#define AVERROR_HTTP_SERVER_ERROR  FFERRTAG(0xF8,'5','X','X')

这篇关于我怎么知道这个ffmpeg错误代码是什么意思?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆