Linux系统中调整刷新率

分类: 桌面应用   出处:iocblog整理  更新时间:2009-07-21   添加到收藏  

    我接触linux有一年多了.linux给我以优雅体面的感觉,在linux下面工作,心情都和在ms windows下面不一样.

    但是x window 的刷新率一直是我心中的痛.我不知道用xf86config设置了多少遍,xf86config的选择我背都背得下来,但是x window还是有闪烁感.我想x的设置怎么这么保守.因此,我喜欢linux的字符模式.上网只能在ms windows下面了.前几天我痛下决心一定要把刷新率给搞定,开始看有关x的文档.原来我误会了,xf86的目标就是充分地利用硬件,哪是什么保守.是我自己不看文档.下面就是我认为最值得看的几篇文章:

    /usr/x11r6/lib/x11/doc/readme.config
    /usr/x11r6/lib/x11/doc/quickstart.doc
    /usr/x11r6/lib/x11/doc/videomode.doc

    特别是最后那篇文章彻底解决了刷新率的问题.现在我就谈点体会.有什么不清楚的话,请看原文.

    先介绍一些术语:

    hsf:显示器的水平扫描频率,单位是khz
    vsf:垂直刷新率,单位是hz
    显卡的"dot-clock",正式名称是driving clock frequency(dcf),它表示每秒钟能
    向屏幕发出的象素数,单位是mhz
    rr:刷新率(refresh rate)
    hr:水平分辨率
    vr:垂直分辨率
    frame:帧,由于显示器的扫描枪扫描到屏幕边缘的时候不可能马上回来,会有一段调
    整的时间,这时候它仍在
    扫描,但对我们来说是不可见的.因此帧比hrxvr略大些.[www.iocblog.net 来源]
    hfl:帧宽,比hr略大些,经验hfl = 1.25hr
    vfl:帧长,比vr略大些,经验vfl = 1.05vr

    下面就是很重要的公式:

    rr = dcf/(hfl*vfl)

    hfl = dcf/hsf

    或 hsf = dcf/hfl

    我们的问题就是:在给定分辨率和刷新率的条件下,显卡的dcf是多少?水平扫描频率(hsf)是多少,它是否超出了[www.iocblog.net 来源]

    显示器所能允许的最大水平扫描频率?

    我们看到,在这里显卡的dcf不是问题,就是最一般的s3 trio64v+的dcf也有135mhz,瓶颈是显示器所能允许的最大水平扫描频率.我们在启动x的时候会看到许多模式不能用,就是因为经过计算,水平扫描频率超出了显示器所能允许的最大水平扫描频率.

    事情还没有完:

    在xf86config文件里,有许多这样的行:
    mode "800x600" 55.2 800 832 1064 1096 600 602 610 630

    也许写成这样看得更清楚些:
    mode "800x600" 55.2 800 832 1064 1096
    600 602 610 630

    mode是关键词,引号中的800x600是名称,可以随便起. 55.2就是dcf,800和600当然就是分辨率了,1096和630是帧宽和帧长(hfl,vfl).中间两个数是什么意思呢?原来它们决定了同步脉冲的开始位置和结束位置.

    800 832 1064 1096 这组数可以这样理解:

    水平分辨率是800,扫描枪扫到第800个象素的时候还要继续往前扫,到第832个象素的时候,发出同步脉冲,该脉冲持续一段时间,到第1064个象素的时候结束.扫描枪扫继续往前扫,到达帧宽的时候返回到最左边,扫描下一条线.

    600 602 610 630是垂直方面的,也可以这样理解.这就是这组神密数字的含义.

    自己从头生成一组这样的数字是挺麻烦的,我的做法是修改当前使用的模式,比如我用的是xf86config自动生成的800x600模式,但刷新率偏低.我就找到xf86config文件中对应的行,直接增大dcf的值,再计算一下:水平扫描频率hsf=dcf/hfl .只要水平扫描频率不超出显示器所能允许的最大水平扫描频率就行.再到x window中用xvidtune微调一下.



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。