一、RELATIVE_TS_BASE宏定义
RELATIVE_TS_BASE是宏,定义在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的头文件libavformat/demux.h中:
#define RELATIVE_TS_BASE (INT64_MAX - (1LL << 48))
该宏定义等价于(INT64_MAX - (1LL << 48)),也就是9223372036854775807 - 281474976710656 ,计算结果为:9223090561878065151。所以RELATIVE_TS_BASE为十进制的9223090561878065151,转换成十六进制为0x7FFEFFFFFFFFFFFF。
二、is_relative函数
is_relative函数定义在头文件libavformat/demux.h中:
static av_always_inline int is_relative(int64_t ts)
{
return ts > (RELATIVE_TS_BASE - (1LL << 48));
}
RELATIVE_TS_BASE - (1LL << 48) 就是 9223090561878065151 - 281474976710656,计算结果为:9222809086901354495。转换成十六进制为0x7FFDFFFFFFFFFFFF。
所以is_relative函数得作用是:比较形参ts和0x7FFDFFFFFFFFFFFF的大小。如果ts的值更大,返回1,否则返回0。