(转)Sync Renderer与画面撕裂

 

关于Sync Renderer与画面撕裂(tearing & judder)的一些讨论



众所周知,我们深爱的VMR9其实存在种种不便。其一为困扰我们多年的色阶问题(0-255)。所幸,在众多高人的努力下,色阶问题有了各种解决方案。
其二,就是画面撕裂的问题。这个只在VMR上存在的问题,至今还没有一个十分完美的方法解决,特别是在我最钟爱的MPC-HC上。导致我们重新回到overlay的怀抱(个人觉得,overlay的好坏取决于显卡)。
在1465版的MPC-HC中,Directshow渲染器突然多了一个Sync Renderer渲染器,很多筒子也发文表示关注到了这个变化,可是实际使用下发现画质和vmr相比没有变化。不过Sync这个词令人想到这会不会与垂直同步有关,而同步问题恰恰是解决撕裂(tearing)的关键。
在doom9上有这个问题的答案,Sync Renderer的前身是ar-jar编写的GothPlayer,现在已经整合到mpc-hc中来了。ar-jar筒子在他的web上提出观点,tearing的原因在于视频源的frame大多为24/25fps(我发现还有更多动画是30fps),而我们的播放设备往往是50hz/60hz, 这导致了很多关键帧在播放设备上需要重复reflash两次或三次,导致画面出现不连贯甚至撕裂的现象。一个简单的方法就是把我们的显示设备刷新率调成与视频同步(24/25), 或是将视频本身插值一些过渡帧。这也是ar-jar的基本思路。

在我们选中Sync  Renderer后,选项中的Synchronization就可以选择了。其中有3个选项:
1,Synchronize video to display。顾名思义,就是将视频帧插值,于播放设备同步。这其实是最简单的,效果也能达到完美。但有一定限制,就是视频源与设备的不同步率不能太高,不然会导致音频输出稍有不同步,特别是在SPDIF输出的情况下。其实,这种方案就是使用evr同步的原理。
2,Synchronize display to video。将播放设备与视频同步,也就是调整显示设备的刷新率。个人认为,这其实才是最完美的方法,不会存在音频问题,不会生成垃圾帧。只是,实现起来有一定难度,我们需要配合PowerStrip。是的,实质这个选项就是利用PowerStrip调整显示器刷新率。这里也有一定局限,PowerStrip的兼容性并不是那么好,部分显卡和显示器不能实现自动调整。恩,其实吧overlay理解成一种播放设备,这其实就是overlay之所以同步的原因。
3,Present at nearest vsync。这是一种近似的解决方案,我理解时候和第一种有相似之处,但作者指出这种方案只是近似‘完美’,不能达到真正的同步。

好,我们的结论。这个新渲染器使用的前提:如果我们的显示器支持TV模式,也就是说,能支持24/25或其整数倍的刷新率(120hz是最完美的,是24与30的公倍数),那么使用这种渲染器,我们能达到完美的显示效果!!没有撕裂,没有停顿,如丝般柔顺。而对于普通显示器,与其用模式1,不如换用EVR或overlay,效果会更好。

[attach]567285[/attach]

没想到加精了。。呵呵,补充一下。
其实这个Sync模式作者也还在测试阶段。作者设计之初的目的,是为了在液晶电视,投影仪等播放设备上实现完全同步。
我们看这幅图
[attach]568165[/attach]
黄线处第一行是frame cycle,一部25fps的影片是40ms,第二行display cycle,50hz的显示器是20ms。显然display cycle与frame cycle成整数倍关系,说明片源于刷新率可以同步。所以我们看到第三行cycle mismatch为0%
模式2的目标就是这个cycle mismatch为0%
可以用PowerStrip,论坛也有朋友提供脚本。

而模式1,我们也能用reclock实现,同样有音频不同步的问题。

你可能感兴趣的:(mpc-hc)