強(qiáng)烈建議你檢查你的MTRR注冊(cè)是否正確的設(shè)定了,因?yàn)樗麄兡軜O大的提高性能。
運(yùn)行'cat /proc/mtrr
':
--($:~)-- cat /proc/mtrr
reg00: base=0xe4000000 (3648MB), size= 16MB: write-combining, count=9
reg01: base=0xd8000000 (3456MB), size= 128MB: write-combining, count=1
這是正確的,顯示我的Matrox G400有16MB顯存存。我從XFree 4.x.x得到這個(gè),它會(huì)自動(dòng)地設(shè)定MTRR注冊(cè)。
如果沒有什么自動(dòng)工作,你將不得不手工做。首先,你必須找到基地址。你有3種方法找它:
- 根據(jù)X11的啟動(dòng)信息,例如:
(--) SVGA: PCI: Matrox MGA G400 AGP rev 4, Memory @ 0xd8000000, 0xd4000000
(--) SVGA: Linear framebuffer at 0xD8000000
- 從/proc/pci(使用lspci -v命令):
01:00.0 VGA compatible controller: Matrox Graphics, Inc.: Unknown device 0525
Memory at d8000000 (32-bit, prefetchable)
- 根據(jù)mga_vid內(nèi)核驅(qū)動(dòng)的信息(使用dmesg):
mga_mem_base = d8000000
接著讓我們來確定顯存大小。這十分容易,只要把顯存大小變?yōu)槭M(jìn)制,或者使用這個(gè)表格:
|
1 MB |
|
0x100000 |
|
2 MB |
|
0x200000 |
|
4 MB |
|
0x400000 |
|
8 MB |
|
0x800000 |
|
16 MB |
|
0x1000000 |
|
32 MB |
|
0x2000000 |
你知道了基地址和顯存大小,下面讓我們進(jìn)行MTRR注冊(cè)!例如,對(duì)于上述32MB顯存( size=0x2000000 )的Matrox顯卡(base=0xd8000000)就運(yùn)行:
echo "base=0xd8000000 size=0x2000000 type=write-combining" >| /proc/mtrr
并非所有CPU都支持MTRR。比如較老的K6-2[266MHz左右,步進(jìn)值0]不支持MTRR,但是步進(jìn)值12的就支持(用'cat /proc/cpuinfo
'命令檢查)。
在XFree86 4.0.2或者更新的版本下,你能使用XVideo擴(kuò)展來使用你的顯卡的硬件YUV例程。這是就是'-vo xv'所使用的。同時(shí),這是支持調(diào)節(jié)亮度/對(duì)比度/色相/等等的驅(qū)動(dòng)(除非你使用舊的,緩慢的DirectShow DivX解碼器,什么驅(qū)動(dòng)它都支持),參見man page。
為了使它工作,確信做如下檢查:
- 你必須使用XFree86 4.0.2或者更新的版本(以前的版本沒有XVideo)
- 你的顯卡確實(shí)支持硬件加速(現(xiàn)在的顯卡都支持)
- X加載了XVideo擴(kuò)展,它是像這樣的:
(II) Loading extension XVideo
顯示在/var/log/XFree86.0.log中
注意: 這只是加載XFree86的擴(kuò)展。在正常的安裝中,這是總被加載的,這并不意味著顯卡的XVideo支持被加載了!
- 你的顯卡在Linux下有Xv支持。為了檢查,運(yùn)行'xvinfo',它是XFree86程序集的一部分。它應(yīng)該顯示一段很長(zhǎng)的文字,類似于這樣:
X_video Extension version 2.2
screen #0
Adaptor #0: "Savage Streams Engine"
number of ports: 1
port base: 43
operations supported: PutImage
supported visuals:
depth 16, visualID 0x22
depth 16, visualID 0x23
number of attributes: 5
(...)
Number of image formats: 7
id: 0x32595559 (YUY2)
guid: 59555932-0000-0010-8000-00aa00389b71
bits per pixel: 16
number of planes: 1
type: YUV (packed)
id: 0x32315659 (YV12)
guid: 59563132-0000-0010-8000-00aa00389b71
bits per pixel: 12
number of planes: 3
type: YUV (planar)
(...etc...)
它必須支持YUY2 packed和YV12 planar象素格式,MPlayer才能使用它。
- 最后,檢查MPlayer是否編譯了'xv'支持。./configure可以顯示出來。
老的的3dfx驅(qū)動(dòng)存在XVideo加速的問題,它不支持YUY2或者YV12之類的格式。確定你的XFree86版本在4.2.0以上,它在YV12和YUY2模式下工作很好。以前的版本,包括4.1.0,會(huì)在YV12下崩潰。如果你使用-vo xv時(shí)遇到奇怪的問題,嘗試使用SDL(它也有XVideo)看是否有幫助。細(xì)節(jié)請(qǐng)察看SDL部分。
或者,試試新的-vo tdfxfb驅(qū)動(dòng)! 參見tdfxfb部分。
S3 Savage3D應(yīng)該能正常工作,不過對(duì)于Savage4,請(qǐng)使用XFree86 4.0.3或更新的版本(如果圖象有問題,試試16bpp)。至于S3 Virge,雖然有xv支持,但是這種顯卡實(shí)在太慢,因此你最好賣了它。
注意:目前不清楚Savage結(jié)構(gòu)的那個(gè)部分缺少YV12支持,而是用驅(qū)動(dòng)進(jìn)行轉(zhuǎn)換的(很慢)。如果你懷疑你的顯卡,找一個(gè)新的驅(qū)動(dòng),或者在mplayer-users的郵件列表上禮貌的詢問支持MMX/3DNow的驅(qū)動(dòng)。
nVidia在Linux下不是很好的選擇(nVidia認(rèn)為,這并非真實(shí)情況).. 你將不得不使用二進(jìn)制的非開源的nVidia驅(qū)動(dòng),nVidia的網(wǎng)站可以找到。標(biāo)準(zhǔn)XFree86驅(qū)動(dòng)沒有這些顯卡的XVideo支持,因?yàn)閚Vidia沒有公開源碼/規(guī)格。
據(jù)我所知最新的XFree86驅(qū)動(dòng)包含了GeForce2和3的XVideo支持。
Riva128顯卡即使用nVidia的驅(qū)動(dòng)也沒有XVideo支持:(向nVidia抱怨去吧。
- GATOS驅(qū)動(dòng)(除非你有Rage128或者Radeon,否則你應(yīng)該使用它)缺省打開VSYNC。這意味著解碼速度(!)與顯示器的刷新率是同步的。如果覺得播放速度緩慢,以某種方式禁用VSYNC,或者把刷新率調(diào)到到n*(電影的fps)Hz。
- Radeon VE -- 目前只有XFree86的CVS里有這種顯卡的驅(qū)動(dòng),4.1.0版沒有。同時(shí)沒有電視支持。當(dāng)然,使用MPlayer你能幸福地得到加速顯示,有或沒有電視輸出,而且不需要任何庫或者X。閱讀Vidix一節(jié)。
這些顯卡能在許多筆記本電腦里找到。不幸的是,X 4.2.0的驅(qū)動(dòng)不能使用Xv,但是我們?yōu)槟銣?zhǔn)備了一個(gè)經(jīng)過修改,能夠使用Xv 的驅(qū)動(dòng)。到這里下載。這個(gè)驅(qū)動(dòng)是由Stefan Seyfried提供的。
像這樣修改你的XF86Config使之能進(jìn)行DVD大小的內(nèi)容的播放:
Section "Device"
[...]
Driver "neomagic"
Option "OverlayMem" "829440"
[...]
EndSection
如果你想要在Trident顯卡上使用xv,它在4.1.0下不工作,嘗試XFree最新的CVS或者等候XFree 4.2.0。最新的CVS加入了Cyberblade XP顯卡的全屏Xv支持。
如果你想在一塊基于Kyro的顯卡(例如Hercules Prophet 4000XT)上使用Xv,你應(yīng)該從PowerVR的網(wǎng)站上下載驅(qū)動(dòng)。
引言
這部分文檔試圖花些篇幅來解釋DGA大概是什么以及MPlayer的DGA視頻輸出驅(qū)動(dòng)能干什么(和不能干什么)。
DGA是什么
DGA是Direct Graphics Access的簡(jiǎn)稱,是一種使程序繞過X-服務(wù)器直接修改幀緩沖顯存的方法。從技術(shù)角度說這是通過把幀緩沖顯存映射到你的處理器的內(nèi)存范圍之內(nèi)。只有你有超級(jí)用戶權(quán)限的時(shí)候內(nèi)核才允許這種操作。用root登錄或者給MPlayer的執(zhí)行文件設(shè)置SUID位(推薦使用!)可以做到這一點(diǎn)。
DGA有兩種版本: DGA1用于XFree 3.x.x和DGA2從XFree 4.0.1開始引入。
DGA1只提供了前述的幀緩沖直接操作功能。你不得不使用XVidMode擴(kuò)展來切換視頻信號(hào)的分辨率。
DGA2結(jié)合了XVidMode擴(kuò)展的特性而且也允許切換顯示的色彩深度。因此,雖然一般使用32位色X服務(wù)器,你也能切換到15位色深,反之亦然。
然而DGA也有一些弊端。它似乎有些依賴于你使用的圖形芯片和X服務(wù)器中控制該芯片的視頻驅(qū)動(dòng)。因此,它并不是對(duì)所有的系統(tǒng)都起作用。
為MPLAYER安裝DGA支持
首先確保X裝載了DGA擴(kuò)展,察看/var/log/XFree86.0.log:
(II) Loading extension XFree86-DGA
可見,強(qiáng)烈推薦XFree86 4.0.x或更高版本,MPlayer的DGA驅(qū)動(dòng)在./configure時(shí)會(huì)自動(dòng)檢測(cè)到,否則你可以用--enable-dga強(qiáng)行編譯它。
如果你的驅(qū)動(dòng)不能切換到一個(gè)較小的分辨率,嘗試使用-vm(只用于X 3.3.x),-fs,-bpp,-zoom選項(xiàng)找一個(gè)適合你的電影的視頻模式。目前沒有轉(zhuǎn)換功能:(
成為root。DGA需要root權(quán)限來直接寫顯存。如果你想用普通用戶運(yùn)行它,給MPlayer設(shè)置SUID root權(quán)限:
chown root /usr/local/bin/mplayer
chmod 750 /usr/local/bin/mplayer
chmod +s /usr/local/bin/mplayer
它現(xiàn)在也能被普通用戶使用了。
警告:安全風(fēng)險(xiǎn)
這是一個(gè)很大的安全風(fēng)險(xiǎn)!永遠(yuǎn)不要在除了你之外還有人可以使用的服務(wù)器上這樣做,因?yàn)樗麄兡芡ㄟ^SUID root的MPlayer獲得root權(quán)限。
現(xiàn)在使用-vo dga
選項(xiàng),開始使用(如此希望:))! 你也應(yīng)該嘗試看看-vo sdl:dga
選項(xiàng)能否正常工作。它快得多。
DGA驅(qū)動(dòng)允許切換輸出信號(hào)的分辨率。這樣能避免使用(緩慢的)軟件縮放同時(shí)又提供全屏圖象。理想情況下,它將精確切換成視頻數(shù)據(jù)的分辨率(除了為了保持長(zhǎng)寬比),但是X服務(wù)器僅允許切換到/etc/X11/XF86Config
(XFree 4.0.X使用/etc/X11/XF86Config-4
用于區(qū)別)中預(yù)定義的分辨率。它們被所謂的modelines定義并且依賴于你的視頻硬件的能力。X服務(wù)器啟動(dòng)時(shí)掃描這個(gè)配制文件并且禁用那些不適用于你的硬件的modelines。你能通過X11的log文件找出哪些方式可用。它能在這里找到:/var/log/XFree86.0.log
。
下面的例子對(duì)于一塊Riva128芯片工作良好,使用X server的驅(qū)動(dòng)模塊nv.o
。
Section "Modes"
Identifier "Modes[0]"
Modeline "800x600" 40 800 840 968 1056 600 601 605 628
Modeline "712x600" 35.0 712 740 850 900 400 410 412 425
Modeline "640x480" 25.175 640 664 760 800 480 491 493 525
Modeline "400x300" 20 400 416 480 528 300 301 303 314 Doublescan
Modeline "352x288" 25.10 352 368 416 432 288 296 290 310
Modeline "352x240" 15.750 352 368 416 432 240 244 246 262 Doublescan
Modeline "320x240" 12.588 320 336 384 400 240 245 246 262 Doublescan
EndSection
DGA & MPLAYER
MPlayer在有兩種方法使用DGA:SDL驅(qū)動(dòng)能使用它(-vo sdl:dga),DGA驅(qū)動(dòng)(-vo dga)頁使用它。上面說的內(nèi)容對(duì)兩者都有效;在下列的幾段中我將解釋MPlayer中DGA驅(qū)動(dòng)是如何工作的。
特性
DGA驅(qū)動(dòng)通過命令行中的-vo dga選項(xiàng)調(diào)用。默認(rèn)操作是轉(zhuǎn)換成與原來的視頻盡可能接近的分辨率。它將忽略-vm和-fs選項(xiàng)(開啟視頻模式切換和全屏方式) -- 它總試圖通過切換顯示模式盡可能多的覆蓋你的屏幕,這樣阻礙你的CPU使用一個(gè)單一的附加的周期來放大圖像。如果你不喜歡它選擇的模式你能強(qiáng)迫它選擇最接近于你通過-x和-y選項(xiàng)規(guī)定的分辨率的模式。使用-v選項(xiàng),DGA驅(qū)動(dòng)將在一大堆別的東西中打印出你當(dāng)前XF86-Config文件支持的所有分辨率的列表。如果是DGA2你也能通過使用-bpp選項(xiàng)強(qiáng)迫它使用一定的色彩深度。有效的色深是15,16,24和32。這取決于你的硬件對(duì)這些色深是否本地支持,還是通過某種(有可能很慢)的轉(zhuǎn)化來完成的。
如果你非常幸運(yùn),有足夠顯存的屏外緩沖區(qū)來存放整個(gè)圖象,DGA驅(qū)動(dòng)將使用雙重緩沖,這能使電影播放更加平滑。它會(huì)告訴你雙重緩沖是否被打開。
雙重緩沖的意思是在你的視頻的當(dāng)前幀被顯示時(shí),下一幀在屏外緩沖區(qū)中被繪制。當(dāng)下一幀準(zhǔn)備完畢時(shí),圖形芯片被告知下一幀在顯存中的位置并且直接從那里將要顯示的數(shù)據(jù)讀出來。在此期間其它在記憶中的緩沖器將再一次被裝滿新的視頻數(shù)據(jù)。
雙重緩沖可以用-double選項(xiàng)開啟也可以用-nodouble選項(xiàng)禁止。目前缺省選項(xiàng)是禁用雙重緩沖。屏幕顯示功能(OSD)在使用DGA驅(qū)動(dòng)模式時(shí)必須打開雙重緩沖功能。然而,使用雙重緩沖可能導(dǎo)致較大的速度下降(在我的K6-II+ 525上它多占用20%的CPU時(shí)間!),下降程度取決于DGA操作你的硬件的方法。
速度問題
一般來說,DGA幀緩沖至少應(yīng)該跟X11驅(qū)動(dòng)一樣快同時(shí)還有全屏圖象的附加好處。對(duì)MPlayer打印出的百分比速度的評(píng)價(jià)應(yīng)該小心,比如X11驅(qū)動(dòng)它們并不包括X-服務(wù)器真正繪制所用的時(shí)間。開一個(gè)終端連到你的機(jī)器的串口上運(yùn)行top命令看看你的機(jī)器真正在干什么...
一般來說,使用DGA相對(duì)“普通的”使用X11所產(chǎn)生的速度提高高度依賴于你的顯卡,以及X-服務(wù)器中它的模塊做了多少優(yōu)化。
如果你的系統(tǒng)較慢,最好使用15或者16bit色深,因?yàn)樗麄儍H僅要求32bit顯示的顯存帶寬的一半。
即使你的顯卡自身就支持32bit色深,使用24bit的色深也是個(gè)好主意,因?yàn)樗?2/32方式少傳輸25%的數(shù)據(jù)。
我曾見過一些AVI文件能在Pentium MMX 266上播放。AMD K6-2 CPU在400 MHZ以上的應(yīng)該可以工作。
已知的BUG
嗯,據(jù)一些XFree的開發(fā)者說,DGA像頭野獸。他們告訴你不要使用它。并非對(duì)任何芯片的驅(qū)動(dòng)它的操作都是沒有瑕疵的。
- 在XFree 4.0.3的nv.o有一個(gè)bug導(dǎo)致奇怪的顏色。
- ATI驅(qū)動(dòng)在使用DGA完成之后要不只一次的切換顯示模式。
- 一些驅(qū)動(dòng)無法切換會(huì)正常的分辨率(用Ctrl-Alt-小鍵盤+,-來手工切換)。
- 一些驅(qū)動(dòng)顯示奇怪的顏色。
- 一些驅(qū)動(dòng)錯(cuò)誤報(bào)告他們映射到處理器地址空間中的顯存數(shù)量,這樣vo-dga將無法使用雙重緩沖(SIS?)。
- 一些驅(qū)動(dòng)好像根本找不到一個(gè)可用的模式。在這種情況下,DGA驅(qū)動(dòng)將crash并報(bào)告100000x100000的無效模式之類的東西...
- OSD只能在雙重緩沖開啟的時(shí)候才正常工作(否則會(huì)閃爍)。
SDL(Simple Directmedia Layer)基本上是一種統(tǒng)一的視頻/音頻接口。使用它的程序只要知道SDL,而不需要了解SDL實(shí)際上使用的視頻或音頻驅(qū)動(dòng)。例如使用SDL的Doom移植能在svgalib,aalib,X,fbdev,和其他東西上使用,你僅需要用環(huán)境變量SDL_VIDEODRIVER規(guī)定(例如)使用的視頻驅(qū)動(dòng)。嗯,至少在理論上。
在MPlayer中,我們使用它的X11驅(qū)動(dòng)的軟件縮放功能,用于不支持XVideo的芯片/顯卡,直到我們做出我們自己的(更快,更好)的軟件縮放代碼。同時(shí)我們使用它的aalib輸出,但是現(xiàn)在我們自己的更合適的了。它的DGA模式比我們的好,直到最近。現(xiàn)在明白了? :)
它對(duì)一些buggy的驅(qū)動(dòng)/顯卡也有幫助,例如視頻跳躍(不是系統(tǒng)緩慢的問題),或者音頻延遲。
SDL視頻輸出支持在電影下面,(如果出現(xiàn))的黑條上顯示字幕。
這里是一些關(guān)于SDL輸出的控制選項(xiàng):
-vo sdl:name
- 規(guī)定使用的sdl視頻驅(qū)動(dòng)(例如aalib,dga,x11)
-ao sdl:name
- 規(guī)定使用的sdl音頻驅(qū)動(dòng)(例如dsp,esd,arts)
-noxv
- 禁用XVideo硬件加速
-forcexv
- 嘗試強(qiáng)制XVideo加速
SDL控制鍵: |
|
F |
|
切換全屏/窗口方式 |
|
C |
|
循環(huán)切換可用的全屏方式 |
|
W與S |
|
*和/的映射(音量控制) |
已知的BUG:
- 在sdl:aalib控制臺(tái)驅(qū)動(dòng)下按下的鍵將永遠(yuǎn)重復(fù)。(使用-vo aa!)它是SDL中的bug,我無法改變它(用SDL 1.2.1測(cè)試)。
- 不要在GUI中使用SDL!它不會(huì)像預(yù)想的那樣工作。
安裝
你必須安裝svgalib和它的開發(fā)包來使MPlayer編譯它的SVGAlib驅(qū)動(dòng)(自動(dòng)檢測(cè),但是也能強(qiáng)制使用),別忘了編輯/etc/vga/libvga.config來配合你的顯卡&監(jiān)視器。
注意
一定不要用-fs選項(xiàng),因?yàn)樗鼘?dǎo)致使用軟件縮放,速度會(huì)很慢,如果你確實(shí)需要,使用-sws 4
選項(xiàng),質(zhì)量會(huì)有點(diǎn)差,但是無論如何它更快。
EGA(4BPP)支持
SVGAlib結(jié)合了EGAlib,使得MPlayer有可能用16種顏色播放任何電影,下列的配制中可以使用:
- EGA顯卡和EGA顯示器: 320x200x4bpp,640x200x4bpp,640x350x4bpp
- EGA顯卡和CGA顯示器: 320x200x4bpp,640x200x4bpp
bpp(每象素比特?cái)?shù))的值必須手工設(shè)為4:
-bpp 4
電影可能必須被按比例縮小到EGA適合的模式:
-vop scale=640:350
或者
-vop scale=320:200
為做到這一點(diǎn)我們需要使用快速但低質(zhì)量的例程:
-sws 4
也許自動(dòng)糾正長(zhǎng)寬比的功能需要關(guān)閉:
-noaspect
注意:根據(jù)我的經(jīng)驗(yàn)用-vop eq=-20:0
稍稍降低亮度可以在EGA屏幕上獲得最好的圖象質(zhì)量。在我的機(jī)器上我也要降低音頻采樣率,因?yàn)槁曇粼?4kHz時(shí)很差:-srate 22050
.
你只有打開expand
濾鏡才能使用OSD和字幕。具體參數(shù)參見man page。
是否編譯FBdev目標(biāo)是在./configure期間自動(dòng)檢測(cè)的。閱讀內(nèi)核源碼中的幀緩沖的文檔(Documentation/fb/*)來了解更多信息。
如果你的顯卡不支持VBE 2.0標(biāo)準(zhǔn)(較舊的ISA與PCI顯卡,諸如S3 Trio64),僅支持VBE 1.2(或者更老的?):嗯,VESAfb仍然是可用的,但是你將必須在啟動(dòng)Linux之前裝載SciTech Display Doctor(從前叫UniVBE )。用DOS啟動(dòng)盤或隨便什么。同時(shí),別忘了注冊(cè)你的UniVBE ;))
FBdev輸出有些除了以前說過的參數(shù)外的附加參數(shù):
-fb
- 規(guī)定使用的幀緩沖設(shè)備(/dev/fb0)
-fbmode
- 使用的模式名(按照/etc/fb.modes文件)
-fbmodeconfig
- 模式的配置文件方式(默認(rèn)為/etc/fb.modes)
-monitor_hfreq
-monitor_vfreq
-monitor_dotclock
- 重要的參數(shù),參見
example.conf
如果你想要切換到某個(gè)具體模式,那么使用
mplayer -vm -fbmode (NameOfMode) filename
- -vm單獨(dú)使用將從/etc/fb.modes中選出最適合的模式。也可以與-x和-y選項(xiàng)一起使用。-flip選項(xiàng)只有當(dāng)電影的像素格式與視頻模式的像素格式相同時(shí)才支持。注意bpp的值,fbdev驅(qū)動(dòng)將嘗試使用當(dāng)前值,如果你設(shè)定-bpp選項(xiàng),那么就是那個(gè)值。
- -zoom選項(xiàng)不支持(軟件定標(biāo)太慢了)。-fs選項(xiàng)不支持。你不能使用8bpp(或者更少)的模式。
- 你有可能想要關(guān)掉光標(biāo):
echo -e '\033[?25l'
或setterm -cursor off
和屏幕保護(hù):setterm -blank 0
要重新開啟光標(biāo):echo -e '\033[?25h'
或setterm -cursor on
注意:使用VESA 幀緩沖時(shí)FBdev視頻方式不能改變,也不要要求這個(gè)功能,因?yàn)樗皇怯捎贛Player自身的限制。
這一段是關(guān)于Matrox G200/G400/G450/G550 BES (Back-End Scaler)的支持,mga_vid內(nèi)核驅(qū)動(dòng)。它現(xiàn)在是由A'rpi開發(fā),它有三重緩沖的硬件VSYNC支持。它在幀緩沖控制臺(tái)下和X下都可以工作。
警告:在非Linux系統(tǒng)(在FreeBSD上測(cè)試過)上,要使用VIDIX實(shí)現(xiàn)mga_vid!
安裝:
- 為了使用它,你首先必須編譯mga_vid.o:
cd drivers
make
- 然后創(chuàng)建
/dev/mga_vid
設(shè)備:
mknod /dev/mga_vid c 178 0
然后這樣加載驅(qū)動(dòng)
insmod mga_vid.o
- 你應(yīng)該使用
dmesg
命令檢查顯存大小的檢測(cè)結(jié)果。如果不對(duì),那么使用mga_ram_size選項(xiàng)(先rmmod mga_vid
),以MB為單位指定顯卡的顯存大小:
insmod mga_vid.o mga_ram_size=16
- 為了使它在需要時(shí)自動(dòng)地加載/卸載,首先在
/etc/modules.conf
的末尾加上下面這一行:
alias char-major-178 mga_vid
然后把mga_vid.o
模塊復(fù)制到/lib/modules/<kernel version>/somewhere
下的適當(dāng)位置。
然后運(yùn)行
depmod -a
- 你現(xiàn)在需要(重新)編譯MPlayer,
configure
將檢測(cè)到/dev/mga_vid
并且編譯'mga'驅(qū)動(dòng)。如果你使用matroxfb控制臺(tái), 在MPlayer中用-vo mga
使用它,或者在XFree86 3.x.x或者4.x.x下的使用-vo xmga
。
mga_vid驅(qū)動(dòng)能與Xv協(xié)同工作。
可以閱讀/dev/mga_vid
設(shè)備文件(例如cat /dev/mga_vid
)來查找一些信息,也可以通過寫它來調(diào)整亮度:echo "brightness=120" > /dev/mga_vid
這個(gè)驅(qū)動(dòng)使用內(nèi)核的tdfx幀緩沖驅(qū)動(dòng)來利用YUV加速播放電影。你需要一個(gè)支持tdfxfb的內(nèi)核,然后用./configure --enable-tdfxfb
重新編譯
MPlayer支持使用OpenGL顯示電影,但是如果你的平臺(tái)/驅(qū)動(dòng)支持xv,就象使用linux的PC機(jī)那樣,就使用xv,OpenGL的效果與它相比相當(dāng)壞。如果你只有沒有xv支持的X11程序,OpenGL是可用的選擇。
不幸的是并非所有驅(qū)動(dòng)都支持這個(gè)特性。Utah-GLX驅(qū)動(dòng)(針對(duì)XFree86 3.3.6)對(duì)所有顯卡都支持它。訪問http://utah-glx.sourceforge.net了解安裝它的細(xì)節(jié)問題。
XFree86(DRI) 4.0.3以上支持Matrox和Radeon顯卡的OpenGL,4.2.0或更新版本支持Rage128。訪問http://dri.sourceforge.net以尋找下載和安裝指導(dǎo)。
AAlib 是一個(gè)用于在文本模式下顯示圖形的庫,它使用強(qiáng)大的ASCII渲染器。有許多程序提供對(duì)它的支持,像Doom,Quake等等。 MPlayer包含一個(gè)針對(duì)它的實(shí)用的驅(qū)動(dòng)。如果./configure發(fā)現(xiàn)安裝了aalib,aalib的libvo驅(qū)動(dòng)將被編譯。
你能在AA窗口中使用一些控制鍵來改變渲染參數(shù): |
|
1 |
|
減少對(duì)比度 |
|
2 |
|
增加對(duì)比度 |
|
3 |
|
減少亮度 |
|
4 |
|
增加亮度 |
|
5 |
|
打開/關(guān)閉快速渲染 |
|
6 |
|
設(shè)置抖動(dòng)方式(不抖動(dòng), 誤差分布算法, Floyd Steinberg算法) |
|
7 |
|
反轉(zhuǎn)圖象 |
|
a |
|
轉(zhuǎn)換aa和MPlayer的控制鍵 |
下列的命令行選項(xiàng)能夠使用:
-aaosdcolor=V
- 改變OSD顏色
-aasubcolor=V
- 改變字幕顏色
V的值可以是:(0/正常,1/暗色,2/粗體,3/粗體字體,4/反轉(zhuǎn),5/特殊)
AAlib自身也提供了大量的選項(xiàng)。這里是一些重要的:
-aadriver
- 設(shè)置推薦aa的驅(qū)動(dòng)( X11,curses,Linux )
-aaextended
- 使用所有的256個(gè)字符
-aaeight
- 使用8比特的ASCII
-aahelp
- 列出所有的aalib選項(xiàng)
注意:渲染效果是十分消耗CPU的,特別是使用AA-on-X(在X上使用aalib),在標(biāo)準(zhǔn)的非幀緩沖控制臺(tái)上的CPU消耗是最小的,用SVGATextMode設(shè)置一個(gè)大的文本模式,然后再欣賞電影!(大力神顯卡的第二個(gè)接口就不錯(cuò):))(但我建議你用-vop 1bpp
選項(xiàng)在hgafb上獲得圖象;)
如果你的計(jì)算機(jī)速度不足以渲染所有幀就使用-framedrop
選項(xiàng)
在終端中播放電影時(shí)使用Linux驅(qū)動(dòng)你將會(huì)得到更好的速度和畫面質(zhì)量,不要用curses(-aadriver Linux
)。但是為此你需要/dev/vcsa<terminal>
的寫權(quán)限。那是aalib不能自動(dòng)檢測(cè)的,但vo_aa會(huì)嘗試搜索最佳模式,進(jìn)一步的調(diào)節(jié)問題參見http://aa-project.sourceforge.net/tune/。
這個(gè)驅(qū)動(dòng)被設(shè)計(jì)并引入作為一個(gè)通用的驅(qū)動(dòng)用于任何有VESA VBE 2.0兼容的BIOS的顯卡。這驅(qū)動(dòng)的另一個(gè)優(yōu)點(diǎn)是能試圖迫使在其上進(jìn)行電視輸出。
VESA BIOS EXTENSION(VBE)3.0版 日期:1998年九月16日(第70頁)說:
雙重控制器設(shè)計(jì)
VBE 3.0支持雙重控制器設(shè)計(jì)基于如下假設(shè),由于兩個(gè)控制器一般是同樣的OEM提供的,被同一塊顯卡上的一個(gè)的BIOS ROM,所以可以對(duì)程序隱藏有兩個(gè)控制器在作用的事實(shí)。這限制了同時(shí)的使用獨(dú)立的控制器的功能,但是允許VBE 3.0發(fā)布前的程序能正常工作。VBE函數(shù)00h(返回控制器信息)返回經(jīng)過合并的兩個(gè)控制器的信息,包括經(jīng)過合并的可供使用的方式的列表。當(dāng)程序選擇一個(gè)方式時(shí),相應(yīng)的控制器被激活。然后剩下的VBE函數(shù)都作用在激活的控制器上。
因此,你有可能通過這個(gè)驅(qū)動(dòng)得到電視輸出。
(我猜想電視至少經(jīng)常地是使用獨(dú)立的頭或者獨(dú)立的輸出)。
優(yōu)點(diǎn)
- 即使Linux不能識(shí)別你的視頻硬件你或許還能看電影。
- 你不需要在你的Linux上安裝任何圖形相關(guān)的東西(像X11(或者叫XFree86),fbdev諸如此類)。這個(gè)驅(qū)動(dòng)能從文本方式運(yùn)行。
- 你有機(jī)會(huì)獲得可用的電視輸出。(至少已知ATI的顯卡可以)。
- 這個(gè)驅(qū)動(dòng)調(diào)用int 10h中斷因此它不是模擬器 -- 它實(shí)時(shí)調(diào)用真正的BIOS中的真正的功能。(效果不錯(cuò) -- 按vm86方式)。
- 你可以對(duì)它使用Vidix,這樣能加速視頻顯示同時(shí)也加快電視輸出!(ATI顯卡推薦)
- 如果你有VESA VBE 3.0+,而且在什么地方(配置文件,或者命令行)設(shè)置了
monitor_hfreq
, monitor_vfreq
, monitor_dotclock
你將獲得可能的最高的刷新率。 (使用一般的計(jì)時(shí)公式)。要啟用這個(gè)特性你必須設(shè)定你的顯示器的所有選項(xiàng)。
缺點(diǎn)
- 它只能在x86系統(tǒng)上工作。
- 它只能由root使用。
- 它目前只能用在Linux上。
使用GCC 2.96就不要使用這個(gè)驅(qū)動(dòng)!它不能工作!
可用于VESA命令行選項(xiàng)
-vo vesa:opts
- 當(dāng)前能識(shí)別的:dga強(qiáng)迫dga方式,nodga禁用dga方式。在dga模式下你可以通過使用
-double
選項(xiàng)來使用雙重緩沖。注意:你能 省略這些參數(shù)來開啟自動(dòng)檢測(cè)dga方式。
已知的問題和繞過辦法
- 如果你在你的Linux機(jī)器上安裝了NLS并且從文本方式運(yùn)行VESA驅(qū)動(dòng),那么MPlayer終止后你將看到ROM字體而不是本地的字體。你可以重新加載本地的字體例如在Mandrake中使用setsysfont。
(提示:相同的工具也用于fbdev的地方化)。 - 一些Linux顯卡驅(qū)動(dòng)不更新在DOS內(nèi)存中的活動(dòng)的BIOS模式。因此如果你有這樣問題 -- 總是只從文本方式使用VESA驅(qū)動(dòng)。否則,文本方式(#03)總要被激活接著你將需要重起你的計(jì)算機(jī)。
- 通常在終止VESA驅(qū)動(dòng)之后你將看到黑屏。為了把你的屏幕回復(fù)原狀 -- 只要切換到其它控制臺(tái)(通過按Alt-Fx)然后再用同樣的方法切換回你以前的控制臺(tái)。
- 為了得到可用的電視輸出你需要在啟動(dòng)導(dǎo)入你的電腦之前將電視連接器插上,因?yàn)橐曨lBIOS只在自舉過程中進(jìn)行一次初始化。
盡量避免使用它。輸出到X11(使用共享內(nèi)存擴(kuò)展),完全沒有硬件加速。支持(MMX/3DNow與SSE加速,但是仍然緩慢的)軟件縮放,使用選項(xiàng)-fs -zoom
。大多數(shù)顯卡有硬件縮放支持,使用-vo xv
對(duì)他們輸出,或者對(duì)于Matroxes使用-vo xmga
。
問題在于大多數(shù)顯卡的驅(qū)動(dòng)在第二個(gè)接口/電視接口上不支持硬件加速。在那些情況下,你將看到綠色和藍(lán)色的彩色窗口而不是電影。這是這個(gè)驅(qū)動(dòng)起作用的地方,但是你需要強(qiáng)大的CPU來使用軟件縮放。不要使用SDL驅(qū)動(dòng)的軟件輸出+縮放,它的圖象質(zhì)量比較差!
軟件縮放是十分緩慢的,你最好嘗試用改變視頻模式的方法代替它。它十分簡(jiǎn)單。參見DGA一節(jié)的modelines,并且將他們插入到你的XF86Config。
- 如果你有XFree86 4.x.x -- 使用
-vm
選擇。它將切換到適合你的電影的分辨率。如果你的XFree86不是: - 使用XFree86 3.x.x -- 你必須使用CTRL-ALT-plus和minus控制鍵循環(huán)可用的分辨率。
如果你調(diào)整不到你設(shè)定的模式,檢查XFree86的輸出。有些驅(qū)動(dòng)不能使用低分辨率視頻方式所需要的低的像素頻率。
引言
VIDIX是VIDeo Interface for *niX的縮寫。
VIDIX被設(shè)計(jì)和引入作為快速的用戶空間驅(qū)動(dòng)的接口提供類似mga_vid為了Matrox顯卡提供的這樣視頻性能的。它也十分易于移植。
這個(gè)接口被設(shè)計(jì)來作為一個(gè)將存在的視頻加速接口(就是mga_vid,rage128_vid,radeon_vid,pm3_vid )統(tǒng)一到一個(gè)固定的系統(tǒng)的嘗試。它給芯片提供BES(BackEnd scalers)或OV(Video Overlays)之類的高層接口。它不為那些圖像服務(wù)器該做的事情提供底層接口。 (我不想跟X11開發(fā)組在切換圖像模式上競(jìng)爭(zhēng))。即這接口的主要目的是充分提高視頻播放的速度。
用法
- 你能使用獨(dú)立的視頻輸出驅(qū)動(dòng):
-vo xvidix
這個(gè)驅(qū)動(dòng)被設(shè)計(jì)為使用VIDIX技術(shù)的X11的前端。它要求X服務(wù)器而且僅僅只能在X服務(wù)器下工作。注意,由于它繞過X的驅(qū)動(dòng)直接訪問硬件,顯存中的暫存的圖像可能被破壞。你可以通過設(shè)置XF86Config中的device部分的"VideoRam"選項(xiàng)限制X使用的顯存大小來避免這種情況。你應(yīng)該設(shè)置為你的顯卡上顯存大小減去4MB。如果你的顯存小于8MB,你可以設(shè)置screen部分的"XaaNoPixmapCache"選項(xiàng)。 - 你能在若干視頻的輸出驅(qū)動(dòng)中使用VIDIX副驅(qū)動(dòng),諸如:
-vo vesa:vidix
(只用于Linux)和-vo fbdev:vidix
實(shí)際上什么視頻輸出驅(qū)動(dòng)與
VIDIX配合使用并不重要。
要求
- 視頻顯卡應(yīng)該工作于圖形方式(我所以寫應(yīng)該只是因?yàn)槲以谖谋痉绞较聹y(cè)試了它 -- 它能工作但是輸出效果很可怕 ;) 對(duì)它還是使用AAlib)。
注意:每個(gè)人能通過注釋掉vo_vesa驅(qū)動(dòng)的模式切換部分的方式嘗試這個(gè)技巧。 - MPlayer的視頻輸出驅(qū)動(dòng)應(yīng)該知道活動(dòng)的視頻方式和能夠告訴達(dá)到VIDIX副驅(qū)動(dòng)服務(wù)器的一些視頻特性。
使用方法
當(dāng)VIDIX被用作副驅(qū)動(dòng)時(shí)(-vo vesa:vidix
)視頻方式的配置由視頻輸出設(shè)備執(zhí)行(簡(jiǎn)單來說就是vo_server)。因此,你能對(duì)MPlayer使用與vo_server同樣的命令行指令。此外,它能使用-double
作為全局的參數(shù)。 (我建議至少在使用ATI顯卡時(shí)對(duì)VIDIX使用這個(gè)參數(shù))。
至于-vo xvidix
:目前它能識(shí)別下列的選項(xiàng): -fs -zoom -x -y -double
。
你還能在命令行中使用第三個(gè)副參數(shù)直接制定VIDIX的驅(qū)動(dòng):
mplayer -vo xvidix:mga_vid.so -fs -zoom -double file.avi
or
mplayer -vo vesa:vidix:radeon_vid.so -fs -zoom -double -bpp 32 file.avi
但這有點(diǎn)危險(xiǎn),所以你不應(yīng)該這么做。在這種情況下,被指定的驅(qū)動(dòng)會(huì)被強(qiáng)制使用而其結(jié)果是無法預(yù)計(jì)的(它可以把你的計(jì)算機(jī)鎖死)。只有在你絕對(duì)確信它能工作,而MPlayer沒有自動(dòng)選擇它時(shí),你才能這么做。請(qǐng)把情況報(bào)告給開發(fā)者。正確的使用方法是使用沒有參數(shù)的VIDIX來使用驅(qū)動(dòng)的自動(dòng)檢測(cè)。
VIDIX是一項(xiàng)新技術(shù)所以它極有可能在你的系統(tǒng)上不能正常工作。在這種情況下,你唯一的解決辦法是移植它(主要是libdha)。但它在X11能正常工作的那些系統(tǒng)的上有正常工作的希望。
因?yàn)閂IDIX需要對(duì)硬件直接訪問,所以你或者以root運(yùn)行它,或者給MPlayer的二進(jìn)制程序設(shè)置SUID位(警告:這有安全風(fēng)險(xiǎn))。或者,你可以使用一個(gè)特別的內(nèi)核模塊,像這樣:
- 下載svgalib的開發(fā)版本(比如1.9.17),
或者
從這里.下載一個(gè)Alex做的供MPlayer使用的版本(不需要svgalib的源代碼就可以編譯)。 - 編譯
svgalib_helper
目錄中的模塊(如果你是從svgalib的網(wǎng)頁上下載的源代碼,可以在svgalib-1.9.17/kernel/
目錄下找到它),然后insmod。 - 把
svgalib_helper
目錄移到mplayer/main/libdha/svgalib_helper
. - 如果你是從svgalib的站點(diǎn)下載的源代碼需要:刪掉
libdha/Makefile
中包含"svgalib_helper"字符串的CFLAGS行前面的注釋號(hào)。 - 重新編譯安裝libdha.
目前大部分ATI顯卡都實(shí)現(xiàn)了本地支持,從Mach64到最新的Radeon。
編譯生成兩個(gè)二進(jìn)制文件:用于Radeon的radeon_vid
和用于Rage 128顯卡的rage128_vid
。你可以強(qiáng)制使用其中一個(gè)或者讓VIDIX系統(tǒng)自動(dòng)載入所有可用的驅(qū)動(dòng)。
Matrox G200,G400,G450和G550據(jù)報(bào)告可以工作。
這個(gè)驅(qū)動(dòng)支持視頻均衡器比且應(yīng)該幾乎和Matrox幀緩沖一樣快。
有一個(gè)可用于Trident Cyberblade/i1芯片的驅(qū)動(dòng),它們一般出現(xiàn)在VIA的Epia主板上。
這個(gè)驅(qū)動(dòng)有Alastair M. Robinson編寫并維護(hù),他在他的主頁上提供他的最新版本的驅(qū)動(dòng)下載。這個(gè)驅(qū)動(dòng)會(huì)很快被加到MPlayer中,所以CVS應(yīng)該已經(jīng)包含最新驅(qū)動(dòng)了。
盡管有一個(gè)用于3DLabs GLINT R3和Permedia3芯片的驅(qū)動(dòng),但沒有人測(cè)試過,所以歡迎報(bào)告信息。
"DirectFB是設(shè)計(jì)用于嵌入系統(tǒng)的圖形庫。它能利用最小的資源開銷提供最大的硬件加速效果。" -- 引自http://www.directfb.org.
我在這一部分中將略去DirectFB的特性。
盡管MPlayer不是DirectFB支持的"video provider",這個(gè)輸出驅(qū)動(dòng)將開啟使用DirectFB的視頻播放。這將 -- 當(dāng)然 -- 實(shí)現(xiàn)加速,在我的Matrox G400上DirectFB的速度跟XVideo一樣。
總是盡量使用最新的DirectFB。你可以在命令行中通過使用-dfbopts
選項(xiàng)設(shè)置DirectFB的選項(xiàng)。層選擇可以通過副驅(qū)動(dòng)模式實(shí)現(xiàn),例如:-vo directfb:2
(默認(rèn)使用layer -1:自動(dòng)選擇)
請(qǐng)閱讀DirectFB的一般介紹部分來了解概要信息。
這個(gè)視頻輸出驅(qū)動(dòng)將開啟Matrox G400/G450/G550顯卡上的CRTC2(第二個(gè)接口),顯示獨(dú)立于第一個(gè)接口的視頻。
使其工作的方法可以在技術(shù)部分和直接從Ville Syrjala的主頁獲得。
注意:我們沒能讓它工作,但是有人做到了。不管怎樣,將CRTC2代碼移植到mga_vid的工作正在進(jìn)行中。
MPlayer支持Siemens,Technotrend,Galaxis或Hauppauge提供的使用Siemens DVB芯片的顯卡。最新的DVB驅(qū)動(dòng)在Linux TV site。如果你想要軟件解碼你需要一個(gè)至少1GHz的CPU。
Configure應(yīng)該能檢測(cè)到你的DVB顯卡。如果它沒有,使用下列命令強(qiáng)制使用
./configure --enable-dvb
如果你在非標(biāo)準(zhǔn)的路徑下有ost頭文件,使用下列命令設(shè)置路徑
./configure --with-extraincdir=<DVB source directory>/ost/include
然后正常編譯安裝。
使用方法
硬件解碼(播放標(biāo)準(zhǔn)的MPEG1/2文件)使用下列命令:
mplayer -ao mpegpes -vo mpegpes file.mpg|vob
MPEG1的軟件解碼或轉(zhuǎn)化為其他格式使用下列命令:
mplayer -ao mpegpes -vo mpegpes -vop lavc yourfile.ext
mplayer -ao mpegpes -vo mpegpes -vop fame,expand yourfile.ext
注意到,DVB顯卡只支持高度為288或576的PAL格式或者240或480的NTSC格式。你必須對(duì)其它的高度進(jìn)行重新縮放,通過在-vop
選項(xiàng)中使用scale=width:height
指定你想要寬度和高度。DVB顯卡可以接受多種寬度,像720,704,640,512,480,352等等,而且在水平方向上可以硬件縮放,所以大多數(shù)情況下你不需要作水平縮放。例如對(duì)于512x384(寬高比4:3)的DivX使用下列命令:
mplayer -ao mpegpes -vo mpegpes -vop lavc,scale=512:576
如果你使用寬銀幕電影而你把它放大到整個(gè)屏幕的高度,你可以使用expand=w:h
插件來增加黑帶。為了看640x384分辨率的DivX,使用下列命令:
mplayer -ao mpegpes -vo mpegpes -vop lavc,expand=640:576 file.avi
如果你的CPU對(duì)于播放720x576的DivX太慢,嘗試橫向縮放:
mplayer -ao mpegpes -vo mpegpes -vop lavc,scale=352:576 file.avi
如果速度沒有提高,嘗試豎直縮放:
mplayer -ao mpegpes -vo mpegpes -vop lavc,scale=352:288 file.avi
因?yàn)镺SD和字幕使用OSD插件的擴(kuò)展特性。因此,不要使用expand=w:h
或者expand=w:h:x:y
,使用expand=w:h:x:y:1
(第5個(gè)參數(shù):1
將開啟OSD渲染)。你也許想要把圖象向上移動(dòng)一點(diǎn)來給字幕更大的黑色區(qū)域。如果你也想要移動(dòng)字幕,因?yàn)樗麄兛赡茉谀汶娨暺聊坏耐饷妫褂?code>-subpos <0-100>來調(diào)整它(-subpos 80
是個(gè)不錯(cuò)的選擇)。
為了在PAL電視上播放非25fps的電影或者因?yàn)镃PU太慢,加上-framedrop
選項(xiàng)。
為了保持DivX文件的寬高比并獲得最理想的縮放參數(shù)(硬件水平縮放和軟件垂直縮放并且保持正確寬高比),使用最新的dvbscale插件:
for 3:4 TV: -vop lavc,expand=-1:576:-1:-1:1,scale=-1:0,dvbscale
for 16:9 TV: -vop lavc,expand=-1:576:-1:-1:1,scale=-1:0,dvbscale=1024
將來
如果你有使用問題或想要了解特性通告或者參加這個(gè)問題的討論,加入我們的MPlayer-DVB的郵件列表。請(qǐng)記住列表的語言是英語。
在未來你可以期待使用DVB顯卡的自帶OSD特性顯示OSD和字幕,還有更流暢的非25fps電影播放和實(shí)時(shí)的MPEG2和MPEG4轉(zhuǎn)換(部分的解壓)。
MPlayer支持使用Creative DXR2卡的硬件加數(shù)功能
首先你要正確安裝DXR2的驅(qū)動(dòng)。你可以在DXR2資源中心這個(gè)站點(diǎn)找到驅(qū)動(dòng)和安裝方法。
用法
-vo dxr2
- 啟動(dòng)TV輸出
-vo dxr2:x11
或-vo dxr2:xv
- 啟動(dòng)X11的疊加輸出
-dxr2 <option1:option2:...>
- 這個(gè)選項(xiàng)用來控制DXR2驅(qū)動(dòng)
DXR2使用的疊加芯片質(zhì)量很差但它默認(rèn)的設(shè)置應(yīng)該對(duì)所有人都適用。OSD可能可以通過使用colorkey的繪制方法在疊加(不能用于TV)輸出中實(shí)現(xiàn)。使用默認(rèn)的colorkey設(shè)定你可能獲得各種效果,一般情況下你可能看到colorkey環(huán)繞在字符周圍或者其它可笑的效果。但只要你適當(dāng)?shù)恼{(diào)節(jié)colorkey的設(shè)定你應(yīng)該可以獲得可接受的效果。
默認(rèn)選項(xiàng)參見manpage。
MPlayer支持Creative DXR3和Sigma Designs Hollywood Plus卡的硬件加速播放。這些卡都使用SigmaDesigns的 em8300 MPEG解碼芯片
首先,你將需要正確地安裝DXR3/H+的驅(qū)動(dòng),版本至少0.12.0或者更新的。你能在DXR3 & Hollywood Plus for Linux的站點(diǎn)找到驅(qū)動(dòng)和安裝指導(dǎo)。Configure應(yīng)該自動(dòng)檢測(cè)到你的顯卡,編譯應(yīng)該沒有任何問題。
用法
-vo dxr3:prebuf:sync:norm=x:<device>
overlay
激活overlay而不是電視輸出。你必須有一個(gè)正確配置的的overlay設(shè)置來正常工作。最簡(jiǎn)單的配置overlay 的方法是先運(yùn)行autocal。然后運(yùn)行mplayer使用dxr3輸出而不打開overlay,運(yùn)行dxr3view。在dxr3view中你可以調(diào)整overlay設(shè)置并實(shí)時(shí)看到效果,可能這個(gè)特性在將來會(huì)被MPlayer的GUI支持。當(dāng)正確設(shè)置了overlay之后你就不再需要dxr3view了。
prebuf
打開預(yù)緩沖。預(yù)緩沖是em8300的一個(gè)特性,是它可以同時(shí)處理一幀以上的視頻。這表示當(dāng)你開啟預(yù)緩沖(默認(rèn)的)運(yùn)行時(shí),MPlayer將試圖保持視頻緩沖區(qū)里面總是填滿數(shù)據(jù)的。如果你是用的一臺(tái)比較慢的機(jī)器MPlayer 大概會(huì)占用接近100%的CPU。這在你播放純MPEG流(例如DVD,SVCD之類)的時(shí)候尤其明顯,因?yàn)镸Player不需要把它重新編碼成 MPEG所以他會(huì)以很高的速度填充緩沖區(qū)。
當(dāng)不用預(yù)緩沖運(yùn)行時(shí)em8300對(duì)CPU的占用率十分敏感,所以建議你打開MPlayer的-framedrop
選項(xiàng)來防止進(jìn)一步的不同步
sync
將打開新的同步機(jī)制。這個(gè)目前是一個(gè)試驗(yàn)性的特性。打開這個(gè)同步特性后em8300的內(nèi)部時(shí)鐘將時(shí)鐘被監(jiān)視,如果它開始偏離MPlayer的時(shí)鐘它將被重新設(shè)置從而導(dǎo)致丟掉任何滯后的幀。
norm=x
用來設(shè)置DXR3卡的電視制式而避免使用em8300setup之類的外部工具。可用的制式有5 = NTSC,4 = PAL-60, 3 = PAL。特別的制式是2(自動(dòng)選擇使用PAL/PAL-60)和1(自動(dòng)選擇使用PAL/NTSC)因?yàn)樗麄兺ㄟ^測(cè)試電影的幀速率來決定是哪個(gè)制式。 norm = 0(默認(rèn)的)不改變現(xiàn)在的制式。
<device>
= 使用的設(shè)備號(hào)如果你有超過一塊em8300顯卡。
任何這些選擇都可以被省略
:prebuf:sync
在播放DivX電影時(shí)似乎工作的很好。有人報(bào)告過在播放MPEG1/2文件時(shí)用prebuf
選項(xiàng)有問題。你可能會(huì)先嘗試不加任何參數(shù),如果你遇到同步的問題,或者DVD字幕的問題,試試:sync
。
-ao oss:/dev/em8300_ma-X
- 音頻輸出,在其中
X
是設(shè)備號(hào)(為0如果只有一塊顯卡)。
-aop list=resample:fout=xxxxx
- em8300不能工作在采樣率低于44100Hz的情況。如果采樣率在44100Hz之下,在44100Hz和48000Hz中選擇最接近的一個(gè)。例如對(duì)使用22050Hz的電影,因?yàn)?4100Hz/2 = 22050,所以使用44100Hz,如果是24000Hz就使用48000Hz,因?yàn)?8000Hz/2 = 24000如此等等。這對(duì)于數(shù)字音頻輸出不起作用(
-ac hwac3
)。
-vop lace/fame
- (自動(dòng)插入)要在em8300上觀看非MPEG的內(nèi)容(例如DivX或者RealVideo)你必須設(shè)置一個(gè)libavcodec(lavc)或者libfame(fame)之類的MPEG1視頻濾鏡目前l(fā)avc有更好的速度還有更高的圖像質(zhì)量,除非你使用時(shí)遇到問題,建議你使用他。
-vop lavc/fame
的進(jìn)一步的信息可以參考man page。
強(qiáng)烈推薦使用lavc。目前沒有辦法設(shè)置em8300的fps,這表示它將固定在29.97fps。因?yàn)檫@個(gè)強(qiáng)烈推薦你使用-vop lavc=<quality>:25
,特別是當(dāng)你使用prebuffering的時(shí)候。那么為什么是25而不是29.97?嗯,原因是當(dāng)使用29.97 的時(shí)候圖像有一些跳躍。目前我們還不知道原因。如果你把它設(shè)置成25到27之間的值是圖像就穩(wěn)定了。目前我們能做的就是接受這個(gè)事實(shí)。
-vop expand=-1:-1:-1:-1:1
- 盡管DXR3的驅(qū)動(dòng)能把一些OSD放到MPEG1/2/4的視頻上,它比MPlayer的傳統(tǒng)的OSD的質(zhì)量差的多,并且還有一些刷新的問題。上面的命令行將先把輸入的視頻轉(zhuǎn)換成MPEG4(這是必須的,對(duì)不起),然后使用一個(gè)擴(kuò)展濾鏡,不進(jìn)行任何縮放(-1:默認(rèn)值),只是把正常的OSD 放到圖像上(最后的那個(gè)"1"的作用)。
-ac hwac3
- em8300支持使用芯片的數(shù)字音量輸出來播放AC3音頻(環(huán)繞音效)。閱讀硬件AC3來了解AC3的更進(jìn)一步的信息
這是用于那些MJPEG視頻捕捉/播放卡(經(jīng)過DC10+和Buz的測(cè)試,對(duì)LML33,DC10應(yīng)該也能工作)的顯示驅(qū)動(dòng)(-vo zr
)。驅(qū)動(dòng)通過把每幀圖像編碼成為jpeg格式和然后把它發(fā)送到顯卡來工作。在jpeg編碼時(shí)要使用libavcodec,而且必須使用。
用特殊的
cinerama模式,你可以通過兩個(gè)投影儀和兩塊MJPEG卡用真正的寬銀幕方式觀看電影。根據(jù)分辨率和質(zhì)量的設(shè)置,這個(gè)驅(qū)動(dòng)可能要求極強(qiáng)的CPU處理能力,如果你的機(jī)器太慢的話記住使用
-framedrop
,注意:我的AMD K6-2 350MHz(加上
-framedrop
選項(xiàng))足夠看VCD尺寸的東西和經(jīng)過縮小的電影。
這個(gè)驅(qū)動(dòng)需要一個(gè)內(nèi)核驅(qū)動(dòng),可以在http://mjpeg.sourceforge.net找到,你必須先讓它工作。MJPEG卡的存在能被configure腳本自動(dòng)檢測(cè)到,如果自動(dòng)檢測(cè)失敗,用這個(gè)命令強(qiáng)制檢測(cè)
./configure --enable-zr
驅(qū)動(dòng)的輸出可以用一些選項(xiàng)設(shè)置,在man page里面可以找到一份長(zhǎng)長(zhǎng)的可用選項(xiàng)的描述,一個(gè)比較短的選項(xiàng)列表可以運(yùn)行這個(gè)命令獲得
mplayer -zrhelp
縮放和OSD (on screen display)這類功能這個(gè)驅(qū)動(dòng)不能處理,但可以用視頻濾鏡來完成,例如你有一個(gè)分辨率是512x272
的電影,而你希望用你的DC10+用全屏幕觀看,主要有三種可能的方法,你可以把電影寬度縮放到768
,384
,或者192
。考慮到運(yùn)行速度和質(zhì)量的原因,我會(huì)選擇使用快速二次線型軟件縮放濾鏡把電影縮放到384x204
。命令行是這樣的
mplayer -vo zr -sws 0 -vop scale=384:204 movie.avi
畫面的切割可以用crop
濾鏡也可以用驅(qū)動(dòng)自己完成。假設(shè)電影太寬了,在你的機(jī)器上顯示不了,那么你會(huì)想要用 -zrcrop
來切割電影的寬度,那么你應(yīng)該輸入下面的命令
mplayer -vo zr -zrcrop 720x320+80+0 benhur.avi
如果你想要使用
crop
濾鏡,你可以運(yùn)行
mplayer -vo zr -vop crop=720:320:80:0 benhur.avi
多個(gè)-zrcrop
就會(huì)調(diào)用cinerama模式,你可以把電影投射到幾個(gè)電視或者投影儀上來制造一個(gè)大銀幕,設(shè)想你有兩個(gè)投影儀,左邊那個(gè)連到你的機(jī)器的/dev/video1
而右邊那個(gè)連到你的機(jī)器的/dev/video0
上的DC10+上,電影的分辨率是704x288
,同時(shí)假設(shè)你希望右邊的投影儀顯示黑白效果而右邊的投影儀顯示的用質(zhì)量10
來顯示jpeg幀那么你需要使用下列命令:
mplayer -vo zr -zrdev /dev/video0 -zrcrop 352x288+352+0 -zrxdoff 0 -zrbw \
-zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10 movie.avi
你發(fā)現(xiàn)在第二個(gè)-zrcrop
之前出現(xiàn)的選項(xiàng)只作用于DC10+,而第二個(gè)-zrcrop
之后的選項(xiàng)作用于你的機(jī)器。在cinerama中能使用的MJPEG卡最多為4塊,所以你可以制作一片2x2
的視頻墻
最后還有一個(gè)重要的注意事項(xiàng):不要在播放期間在播放設(shè)備上啟動(dòng)或停止XawTV,它將導(dǎo)致你的計(jì)算機(jī)崩潰。然而,首先啟動(dòng)XawTV, 然后啟動(dòng)MPlayer,等MPlayer播放結(jié)束,然后停止XawTV是沒有問題的。
這個(gè)驅(qū)動(dòng)可以使用Blinkenlights UPD兼容協(xié)議播放。如果你不知道Blinkenlights是什么,你就不需要這個(gè)驅(qū)動(dòng)。
在Linux下你有2種方法使G400的電視輸出工作:
重要提示:對(duì)于Matrox G450/G550的電視輸出方法看下一節(jié)!
- XFree86:使用能在Matrox的站點(diǎn)獲得的驅(qū)動(dòng)和HAL模塊。這將在電視上實(shí)現(xiàn)X。
這種方法不給你加速播放,不像Windoze! 第二個(gè)輸出頭只有YUV幀緩沖,BES(Back End Scaler,在G200與G400與G450與 G550顯卡上的YUV縮放)無法用于它!windows的驅(qū)動(dòng)以某種方式解決了這個(gè)問題,有可能是通過使用3D引擎來縮放,并用YUV幀緩沖顯示圖像。如果你確實(shí)想要使用X,使用-vo x11 -fs -zoom
選項(xiàng),但這將十分緩慢,而且會(huì)開啟Macrovision版權(quán)保護(hù) (你能使用這個(gè)perl腳本繞過Macrovision。 - 幀緩沖:在2.4的內(nèi)核中可以使用matroxfb模塊而2.2的內(nèi)核中沒有電視輸出的特性,所以對(duì)它是沒有用的。你必須在編譯時(shí)開啟所有與matroxfb相關(guān)的特性(除了MultiHead之外),并且把他們?nèi)烤幾g成模塊! 你還需要開啟I2C功能。
- 進(jìn)入
TVout/matroxset
然后運(yùn)行make
。把matroxset
安裝到你的PATH中的某個(gè)地方。 - 如果你沒有裝
fbset
,進(jìn)入TVout/fbset
然后運(yùn)行make
。把fbset
安裝到你的PATH中的某個(gè)地方。 - 然后進(jìn)入到MPlayer源碼目錄中的
TVout/
子目錄,以root執(zhí)行./modules
。你的文本模式的控制臺(tái)將進(jìn)入到幀緩沖模式(沒有方法改回來!)。 - 下一步,修改并運(yùn)行
./matroxtv
腳本。這將給你提供一個(gè)十分簡(jiǎn)單的菜單。按2和ENTER。現(xiàn)在你的顯示器和電視上應(yīng)該有一樣的圖像。如果電視(默認(rèn)PAL)圖畫有些奇怪的條紋,腳本不能夠正確地設(shè)置分辨率(使用缺省的640x512)。試試菜單里的其他分辨率或者/和試試fbset。
Yoh。接著的任務(wù)是使tty1上的光標(biāo)(或者別的什么)消失,和關(guān)閉屏幕抑制顯示。執(zhí)行下列的命令:
echo -e '\033[?25l'
或者setterm -cursor off
setterm -blank 0
你可能想把上述內(nèi)容腳本,同時(shí)也清屏.. 讓光標(biāo)出現(xiàn)的命令是:
echo -e '\033[?25h'
或者setterm -cursor on
Yeah kewl。用mplayer -vo mga -fs -screenw 640 -screenh 512 <filename>
來播放電影
(如果你正在使用X,用CTRL-ALT-F1之類的快捷鍵換成matroxfb!)
分辨率換成640x512如果你用的不是這個(gè)分辨率。
享受超快超多特性的Matrox電視輸出(比Xv還要好)!
制作一個(gè)Matrox電視輸出線
G400的電纜線:CRTC2連接器的第4根針是復(fù)合視頻信號(hào). 基線是第6,第7和第8根針。(Bal醶s R醕z提供信息)
G400的電纜線:CRTC2連接器的第1根針是復(fù)合視頻信號(hào). 基線是第5,第6,第7和第15根針。(Bal醶s R醕z提供信息)
這些顯卡的電視輸出支持最近剛被引入,而且還沒有進(jìn)入內(nèi)核的主流。據(jù)我所知目前不能使用mga_vid 因?yàn)镚450/G550的驅(qū)動(dòng)只能工作在一種配置下面:第一個(gè)CRTC芯片(有更多特性)接第一個(gè)display(顯示器),第二個(gè) CRTC(沒有BES -- BES的解釋看上面G400的部分)接電視上,所以你目前只能使用MPlayer的 fbdev的輸出設(shè)備。
目前第一個(gè)CRTC不能傳送到第二個(gè)頭。內(nèi)核的matroxfb驅(qū)動(dòng)的作者 -- Petr Vandrovec -- 可能正在努力支持它,使用把第一個(gè)CRTC的輸出同時(shí)顯示在兩個(gè)頭上的方法,像目前G400推薦的一樣,看上面的部分。
需要的內(nèi)核補(bǔ)丁和howto的細(xì)節(jié)可以從http://www.bglug.ca/matrox_tvout/下載。
引言
ATI目前不想對(duì)他的任何一種電視輸出芯片提供Linux下的支持,由于他們授權(quán)的Macrovision技術(shù)。
ATI顯卡在Linux上電視輸出的支持情況
在其它顯卡上,只能使用VESA驅(qū)動(dòng),沒有VIDIX可用。但需要強(qiáng)大的CPU。
你唯一需要做的事情 -- 在啟動(dòng)你的電腦之前插上電視連接器的插頭因?yàn)橐曨lBIOS只在自舉期間初始化一次。
查閱這個(gè)網(wǎng)址。
首先,你必須從http://nvidia.com下載封閉源碼的驅(qū)動(dòng),我不會(huì)描述安裝和配置的過程因?yàn)樗粚儆谶@篇文檔的范圍。
當(dāng)XFree86, XVideo, 和3D加速都正常工作之后,根據(jù)下面的例子(改寫成適合你的顯卡/電視)編輯你的XF86Config
中你的顯卡的Device部分:
Section "Device"
Identifier "GeForce"
VendorName "ASUS"
BoardName "nVidia GeForce2/MX 400"
Driver "nvidia"
#Option "NvAGP" "1"
Option "NoLogo"
Option "CursorShadow" "on"
Option "TwinView"
Option "TwinViewOrientation" "Clone"
Option "MetaModes" "1024x768,640x480"
Option "ConnectedMonitor" "CRT, TV"
Option "TVStandard" "PAL-B"
Option "TVOutFormat" "Composite"
EndSection
出處:http://web.njit.edu/all_topics/Prog_Lang_Docs/html/mplayer/Chinese/video.html