1.找不到 int64_min, int64_max
//copy from stdin.h
#ifndef INT64_MIN
#define INT64_MIN (__INT64_C(-9223372036854775807)-1)
#endif
#ifndef INT64_MAX
#define INT64_MAX (__INT64_C(9223372036854775807))
#endif
定义在stdin.h中,而且代码的逻辑确实走到了这里,但是不知道什么原因,还是提示找不到.解决办法,直接把这个值拷贝到android ffmpeg 代码里面.
2. av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum)
c创建函数时申请内存不被允许
//#define av_err2str(errnum) \
// av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum)
static inline char *av_err2str(int errnum)
{
static char err_buff[AV_ERROR_MAX_STRING_SIZE]={0};
av_make_error_string(err_buff, AV_ERROR_MAX_STRING_SIZE, errnum);
return err_buff;
}
3.宏申请内存作为全局变量
//#define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE}
static struct AVRational AV_TIME_BASE_Q = {1, AV_TIME_BASE};
4.宏定义类型转换错误
#define MATCH_PER_STREAM_OPT(name, type, outvar, fmtctx, st)\
{\
int i, ret;\
for (i = 0; i < o->nb_ ## name; i++) {\
char *spec = o->name[i].specifier;\
if ((ret = check_stream_specifier(fmtctx, st, spec)) > 0)\
outvar =(__typeof(outvar)) o->name[i].u.type;\
else if (ret < 0)\
exit_program(1);\
}\
}
#define MATCH_PER_TYPE_OPT(name, type, outvar, fmtctx, mediatype)\
{\
int i;\
for (i = 0; i < o->nb_ ## name; i++) {\
char *spec = o->name[i].specifier;\
if (!strcmp(spec, mediatype))\
outvar =(__typeof(outvar)) o->name[i].u.type; \
}\
}
5.uint8_t*, char *, const char*类型转换
uint8 *uint8_pointer = ?;
// C style cast
const char *char_pointer = (char*)uint8_pointer;
// newer C++ style cast syntax
const char *char_pointer2 = reinterpret_cast<char*>(uint8_pointer);
You can also do it the other way round:
char *char_pointer = ?;
uint8 *uint8_pointer = reinterpret_cast<uint8*>(char_pointer);
6 : PRIx64报错
error: expected ')' before 'PRIx64'
"0x%"PRIx64, 改成: 0x%llx