最近做一个模块,需要用异步FIFO把链路层发来的局部不定时突发数据重建成连续稳定输出的视频流。
输出要达到连续稳定的话,开始输出之前,需要在FIFO里攒够一定数量的数据,即FIFO的低水线,用于防止underflow。对应的还有高水线,即数据不能多于高水线,否则来不及输出就overflow了。
从某个角度看,FIFO的的低水线给整个数据通道带来了一个latency。这个latency对于周期性的视频流来说,其最初的判定条件对于后续的数据传输有可能是不匹配的。除非能做到实时调整低水线。但是对于输出时序是固定的场景来说,不太可能有机会去做预测和实时调整。但好在FIFO前后的数据速率在大尺度上是保持一致的。因此只要在数据通道上再引入一个绝对的latency,就基本可以在一定范围内解决低水线判定对于后续传输不适应的问题。
一句话总结,就是给初次判定加点margin,让后续略有变化的数据传输能够满足这个判定。
输出要达到连续稳定的话,开始输出之前,需要在FIFO里攒够一定数量的数据,即FIFO的低水线,用于防止underflow。对应的还有高水线,即数据不能多于高水线,否则来不及输出就overflow了。
从某个角度看,FIFO的的低水线给整个数据通道带来了一个latency。这个latency对于周期性的视频流来说,其最初的判定条件对于后续的数据传输有可能是不匹配的。除非能做到实时调整低水线。但是对于输出时序是固定的场景来说,不太可能有机会去做预测和实时调整。但好在FIFO前后的数据速率在大尺度上是保持一致的。因此只要在数据通道上再引入一个绝对的latency,就基本可以在一定范围内解决低水线判定对于后续传输不适应的问题。
一句话总结,就是给初次判定加点margin,让后续略有变化的数据传输能够满足这个判定。