bash
#define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d))
//它负责将四个字符组合成一个32位整数
AVERROR_BSF_NOT_FOUND = -1179861752
AVERROR_BUG = -558323010
AVERROR_DECODER_NOT_FOUND = -1128613112
AVERROR_DEMUXER_NOT_FOUND = -1296385272
AVERROR_ENCODER_NOT_FOUND = -1129203192
AVERROR_EOF = -541478725
AVERROR_EXIT = -1414092869
AVERROR_FILTER_NOT_FOUND = -1279870712
AVERROR_INVALIDDATA = -1094995529
AVERROR_MUXER_NOT_FOUND = -1481985528
AVERROR_OPTION_NOT_FOUND = -1414549496
AVERROR_PATCHWELCOME = -1163346256
AVERROR_PROTOCOL_NOT_FOUND = -1330794744
AVERROR_STREAM_NOT_FOUND = -1381258232
AVERROR_BUG2 = -541545794
AVERROR_UNKNOWN = -1313558101
使用ffmpeg的时候,如果有错误,会返回一个int型负数。比如AVERROR_EOF就是-541478725。
从错误号解析为字符串方法如下
cpp
#include <stdint.h>
#define FFERRTAG(a, b, c, d) (-(int32_t)MKTAG(a, b, c, d))
void getInt32Chars(int32_t value, char* chars)
{
chars[0] = (value >> 24) & 0xFF; // 获取高8位
chars[1] = (value >> 16) & 0xFF; // 获取次高8位
chars[2] = (value >> 8) & 0xFF; // 获取次低8位
chars[3] = value & 0xFF; // 获取低8位
}
int main()
{
int32_t err = FFERRTAG('A', 'B', 'C', 'D');
char chars[4];
getInt32Chars(err, chars);
// 输出字符
for (int i = 0; i < 4; i++)
{
printf("%c", chars[i]);
}
printf("\n");
return 0;
}
有些时候会返回-11、-22等无法解析为字符串的错误号是什么原因?
FFmpeg 中的 AVERROR
宏将错误码转换为负值,以便与 FFmpeg 的错误处理系统兼容。AVERROR
宏的定义通常如下:
cpp
#define AVERROR(e) (-(e))
EAGAIN
在大多数系统上定义为11,因此,AVERROR(EAGAIN)
的值为 -11
。