时钟转换

概览

时钟对象表示一些函数,可将参考时钟时间轴上的所有点映射到时钟对象时间轴上的所有点。一直以来,此函数均表示为分段线性函数。此函数的每个线段都是一维仿射转换,将参考时间轴与时钟时间轴相关联。

时钟对象在任何给定时间仅存储转换的最新片段,而不是整个历史记录。

仿射转换的定义

分段线性函数的分段使用四个数字存储。

  • 参考时间轴上的偏移量Roff(64 位)
  • 时钟时间轴上的偏移量 Coff(64 位)
  • 参考与时钟速率的比率(Rrate/Crate)(32/32 位)

在给定参考时间 r 下,用于应用转换最新片段的函数 C(r) 的计算方式为:

C(r) = (((r - R) * Crate) / Rrate) + Coff

在给定时钟时间 c 的情况下,可以使用 C 的相反值计算参考时间轴 r 上的相应时间。

C-1(c) = r = (((c - Coff) * Rrate) / Crate) + Roff

在缩放偏移值时应注意避免溢出。建议先将乘法的中间结果存储为 96 位,然后再将其拆分为适合 64 位的值。