Filter滤镜剖析—time_base时间基
作者:罗上文,微信:Loken1,公众号:FFmpeg弦外之音
帧同步的数据结构里面有两个时间基 time_base,如下:
FFFrameSyncIn::time_base,输入流的时间基FFFrameSync::time_base,帧同步器的时间基
FFFrameSyncIn::time_base 其实是一个冗余的字段,它是等于输入流的时间基的,存多一个字段是为了方便知道从输入流读取的 AVFrame 的时间基是多少。

不过需要注意,FFFrameSyncIn::time_base 仅仅是刚从 AVFIlterLink 读取的 AVFrame 的时间基,它并不是 FFFrameSyncIn::pts、FFFrameSyncIn::pts_next 的时间基。
FFFrameSyncIn::pts 跟 FFFrameSyncIn::pts_next 的时间基是 FFFrameSync::time_base。
他每次从 AVFIlterLink 读取到 AVFrame 之后,都会把 pts 的时间基转成 FFFrameSync::time_base,如下:

简单来说,AVFilterContext 有多个输入流,每个输入流有各自不同的时间基。FFFrameSync 也有多个输入流,但是他们统一使用同一个时间基 FFFrameSync::time_base,这样在执行同步算法的时候,方便比较 pts。
在 FFFrameSync 里,无论是输入还是输出,其实使用的时间基都是 FFFrameSync::time_base,如下:

上图中,mainpic 就是滤波处理后输出的 AVFrame,他的时间基还是 FFFrameSync::time_base。
所以当传递给下一级 AVFilterContext 的时候,要转化一下时间基。
