summaryrefslogtreecommitdiffstats
path: root/DOCS/zh/video.html
blob: 89f59e18c4fe04ed059c124ca6af0a917ae68328 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>

<HEAD>
  <TITLE>视频 -- MPlayer -- Linux下的电影播放器</TITLE>
  <LINK REL="stylesheet" TYPE="text/css" HREF="../default.css">
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gbk">
</HEAD>

<BODY>


<H3><A NAME="video">2.3.1 视频输出设备</A></H3>


<H4><A NAME="mtrr">2.3.1.1 MTRR的设置</A></H4>

<P>强烈建议你检查你的MTRR注册是否正确的设定了,因为他们能极大的提高性能。</P>

<P>运行'<CODE>cat /proc/mtrr</CODE>':</P>

<P><CODE>
  --($:~)-- cat /proc/mtrr<BR>
  reg00: base=0xe4000000 (3648MB), size=  16MB: write-combining, count=9<BR>
  reg01: base=0xd8000000 (3456MB), size= 128MB: write-combining, count=1</CODE></P>

<P>这是正确的,显示我的Matrox G400有16MB显存存。我从XFree 4.x.x得到这个,它会自动地设定MTRR注册。</P>

<P>如果没有什么自动工作,你将不得不手工做。首先,你必须找到基地址。你有3种方法找它:</P>

<UL>
  <LI>根据X11的启动信息,例如:
    <P><CODE>(--) SVGA: PCI: Matrox MGA G400 AGP rev 4, Memory @ 0xd8000000, 0xd4000000<BR>
    (--) SVGA: Linear framebuffer at 0xD8000000</CODE></P></LI>
  <LI>从/proc/pci(使用lspci -v命令):
    <P>
    <CODE>01:00.0 VGA compatible controller: Matrox Graphics, Inc.: Unknown device 0525</CODE>
    <CODE>Memory at d8000000 (32-bit, prefetchable)</CODE>
    </P></LI>
  <LI>根据mga_vid内核驱动的信息(使用dmesg):
    <P><CODE>mga_mem_base = d8000000</CODE></P></LI>
</UL>

<P>接着让我们来确定显存大小。这十分容易,只要把显存大小变为十六进制,或者使用这个表格:</P>

<TABLE BORDER=0>
  <TR><TD>&nbsp;&nbsp;</TD><TD>1 MB</TD><TD WIDTH="10%"></TD><TD>0x100000</TD></TR>
  <TR><TD></TD><TD>2 MB</TD><TD></TD><TD>0x200000</TD></TR>
  <TR><TD></TD><TD>4 MB</TD><TD></TD><TD>0x400000</TD></TR>
  <TR><TD></TD><TD>8 MB</TD><TD></TD><TD>0x800000</TD></TR>
  <TR><TD></TD><TD>16 MB</TD><TD></TD><TD>0x1000000</TD></TR>
  <TR><TD></TD><TD>32 MB</TD><TD></TD><TD>0x2000000</TD></TR>
</TABLE>


<P>你知道了基地址和显存大小,下面让我们进行MTRR注册!例如,对于上述32MB显存( size=0x2000000 )的Matrox显卡(base=0xd8000000)就运行:</P>


<P><CODE>&nbsp;&nbsp;echo "base=0xd8000000 size=0x2000000 type=write-combining" &gt;| /proc/mtrr</CODE></P>


<P>并非所有CPU都支持MTRR。比如较老的K6-2[266MHz左右,步进值0]不支持MTRR,但是步进值12的就
支持(用'<CODE>cat /proc/cpuinfo</CODE>'命令检查)。</P>

<H4><A NAME="normal">2.3.1.2 传统显卡的视频输出</A></H4>

<H4><A NAME="xv">2.3.1.2.1 Xv</A></H4>

<P>在XFree86 4.0.2或者更新的版本下,你能使用XVideo扩展来使用你的显卡的硬件YUV例程。这是就是'-vo xv'所使用的。同时,
这是支持调节亮度/对比度/色相/等等的驱动(除非你使用旧的,缓慢的DirectShow DivX解码器,什么驱动它都支持),参见man page。</P>

<P>为了使它工作,确信做如下检查:</P>

<UL>
  <LI>你必须使用XFree86 4.0.2或者更新的版本(以前的版本没有XVideo)</LI>
  <LI>你的显卡确实支持硬件加速(现在的显卡都支持)</LI>
  <LI>X加载了XVideo扩展,它是像这样的:

    <P><CODE>&nbsp;&nbsp;(II) Loading extension XVideo</CODE></P>

    <P>显示在/var/log/XFree86.0.log中</P>

    <P>注意: 这只是加载XFree86的扩展。在正常的安装中,这是总被加载的,这并不意味着<B>显卡的</B>XVideo支持被加载了!</P>
  </LI>
  <LI>你的显卡在Linux下有Xv支持。为了检查,运行'xvinfo',它是XFree86程序集的一部分。它应该显示一段很长的文字,类似于这样:
  <PRE>
	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...)
  </PRE>
    <P>它必须支持YUY2 packed和YV12 planar象素格式,MPlayer才能使用它。</P>
  </LI>
  <LI>最后,检查MPlayer是否编译了'xv'支持。./configure可以显示出来。</LI>
</UL>


<H4><A NAME="xv_3dfx">2.3.1.2.1.1 3dfx显卡</A></H4>

<P>老的的3dfx驱动存在XVideo加速的问题,它不支持YUY2或者YV12之类的格式。确定你的XFree86版本在4.2.0以上,
它在YV12和YUY2模式下工作很好。以前的版本,包括4.1.0,<B>会在YV12下崩溃</B>。如果你使用-vo xv时遇到奇怪的问题,
尝试使用SDL(它也有XVideo)看是否有帮助。细节请察看<A HREF="#sdl">SDL部分</A>。</P>

<P><B>或者</B>,试试新的-vo tdfxfb驱动! 参见<A HREF="#tdfxfb">tdfxfb</A>部分。</P>


<H4><A NAME="xv_s3">2.3.1.2.1.2 S3显卡</A></H4>

<P>S3 Savage3D应该能正常工作,不过对于Savage4,请使用XFree86 4.0.3或更新的版本(如果图象有问题,试试16bpp)。
至于S3 Virge,虽然有xv支持,但是这种显卡实在太慢,因此你最好卖了它。</P>

<P><B>注意</B>:目前不清楚Savage结构的那个部分缺少YV12支持,而是用驱动进行转换的(很慢)。如果你怀疑你的显卡,找一
个新的驱动,或者在mplayer-users的邮件列表上礼貌的询问支持MMX/3DNow的驱动。</P>


<H4><A NAME="xv_nvidia">2.3.1.2.1.3 nVidia显卡</A></H4>

<P>nVidia在Linux下不是很好的选择(nVidia认为,这<A HREF="users_against_developers.html#nvidia">并非真实情况</A>)..
你将不得不使用二进制的非开源的nVidia驱动,nVidia的网站可以找到。标准XFree86驱动没有这些显卡的XVideo支持,
因为nVidia没有公开源码/规格。</P>

<P>据我所知最新的XFree86驱动包含了GeForce2和3的XVideo支持。</P>

<P>Riva128显卡即使用nVidia的驱动也没有XVideo支持:(向nVidia抱怨去吧。</P>


<H4><A NAME="xv_ati">2.3.1.2.1.4 ATI显卡</A></H4>

<UL>
  <LI><A HREF="http://www.linuxvideo.org/gatos">GATOS驱动</A>(除非你有Rage128或者Radeon,否则你应该使用它)缺省打开VSYNC。
这意味着解码速度(!)与显示器的刷新率是同步的。如果觉得播放速度缓慢,以某种方式禁用VSYNC,或者把刷新率调到到n*(电影的fps)Hz。</LI>
  <LI>Radeon VE -- 目前只有XFree86的CVS里有这种显卡的驱动,4.1.0版没有。同时没有电视支持。当然,
使用MPlayer你能幸福地得到<B>加速</B>显示,有或没有<B>电视输出</B>,而且不需要任何库或者X。阅读<A HREF="#vidix">Vidix</A>一节。</LI>
</UL>


<H4><A NAME="xv_neomagic">2.3.1.2.1.5 NeoMagic显卡</A></H4>

<P>这些显卡能在许多笔记本电脑里找到。不幸的是,X 4.2.0的驱动不能使用Xv,但是我们为你准备了一个经过修改,能够使用Xv
的驱动。<A HREF="http://www.mplayerhq.hu/MPlayer/contrib/NeoMagic-driver/neomagic_drv.o.4.2.0.bz2">到这里下载</A>。
这个驱动是由Stefan Seyfried提供的。</P>

<P>像这样修改你的XF86Config使之能进行DVD大小的内容的播放:</P>

<P>Section "Device"<BR>
  &nbsp; &nbsp; <I>[...]</I><BR>
  &nbsp; &nbsp; Driver "neomagic"<BR>
  &nbsp; &nbsp; <B>Option "OverlayMem" "829440"</B><BR>
  &nbsp; &nbsp; <I>[...]</I><BR>
  EndSection</P>


<H4><A NAME="xv_trident">2.3.1.2.1.6 Trident显卡</A></H4>

<P>如果你想要在Trident显卡上使用xv,它在4.1.0下不工作,尝试XFree最新的CVS或者等候XFree 4.2.0。最新的CVS加入
了Cyberblade XP显卡的全屏Xv支持。</P>

<H4><A NAME="xv_powervr">2.3.1.2.1.7 Kyro/PowerVR cards</A></H4>

<P>如果你想在一块基于Kyro的显卡(例如Hercules Prophet 4000XT)上使用Xv,你应该从<A
 HREF="http://www.powervr.com/">PowerVR的网站</A>上下载驱动。</P>


<H4><A NAME="dga">2.3.1.2.2 DGA</A></H4>

<H4>引言</H4>

<P>这部分文档试图花些篇幅来解释DGA大概是什么以及MPlayer的DGA视频输出驱动能干什么(和不能干什么)。</P>


<H4>DGA是什么</H4>

<P>DGA是Direct Graphics Access的简称,是一种使程序绕过X-服务器直接修改帧缓冲显存的方法。从技术角度说
这是通过把帧缓冲显存映射到你的处理器的内存范围之内。只有你有超级用户权限的时候内核才允许这种操作。用root登录或者
给MPlayer的执行文件设置SUID位(推荐使用!)可以做到这一点。</P>

<P>DGA有两种版本: DGA1用于XFree 3.x.x和DGA2从XFree 4.0.1开始引入。</P>

<P>DGA1只提供了前述的帧缓冲直接操作功能。你不得不使用XVidMode扩展来切换视频信号的分辨率。</P>

<P>DGA2结合了XVidMode扩展的特性而且也允许切换显示的色彩深度。因此,虽然一般使用32位色X服务器,你也能切换到15位色深,反之亦然。</P>

<P>然而DGA也有一些弊端。它似乎有些依赖于你使用的图形芯片和X服务器中控制该芯片的视频驱动。因此,它并不是对所有的系统都起作用。</P>


<H4>为MPLAYER安装DGA支持</H4>

<P>首先确保X装载了DGA扩展,察看/var/log/XFree86.0.log:</P>

<P>&nbsp;&nbsp;&nbsp;&nbsp;<CODE>(II) Loading extension XFree86-DGA</CODE></P>

<P>可见,强烈推荐XFree86 4.0.x或更高版本,MPlayer的DGA驱动在./configure时会自动检测到,否则你可以用--enable-dga强行编译它。</P>

<P>如果你的驱动不能切换到一个较小的分辨率,尝试使用-vm(只用于X 3.3.x),-fs,-bpp,-zoom选项找一个适合你的电影的视频模式。目前没有转换功能:(</P>

<P>成为root。DGA需要root权限来直接写显存。如果你想用普通用户运行它,给MPlayer设置SUID root权限:</P>

<P><CODE>
  &nbsp;&nbsp;&nbsp;&nbsp;chown root /usr/local/bin/mplayer<BR>
  &nbsp;&nbsp;&nbsp;&nbsp;chmod 750 /usr/local/bin/mplayer<BR>
  &nbsp;&nbsp;&nbsp;&nbsp;chmod +s /usr/local/bin/mplayer</CODE></P>

<P>它现在也能被普通用户使用了。</P>

<BLOCKQUOTE>
  <B>警告:安全风险</B><BR>
  这是一个<B>很大的</B>安全风险!<B>永远</B>不要在除了你之外还有人可以使用的服务器上这样做,因为他们能通过SUID root的MPlayer获得root权限。
</BLOCKQUOTE>

<P>现在使用<CODE>-vo dga</CODE>选项,开始使用(如此希望:))!
  你也应该尝试看看<CODE>-vo sdl:dga</CODE>选项能否正常工作。它快得多。</P>


<H4><A NAME="dga_modelines">切换分辨率</A></H4>

<P>DGA驱动允许切换输出信号的分辨率。这样能避免使用(缓慢的)软件缩放同时又提供全屏图象。理想情况下,它将精确切换成视频数据
的分辨率(除了为了保持长宽比),但是X服务器仅允许切换到<CODE>/etc/X11/XF86Config</CODE>(XFree 4.0.X使
用<CODE>/etc/X11/XF86Config-4</CODE>用于区别)中预定义的分辨率。它们被所谓的modelines定义并且依赖于你的视频硬件的
能力。X服务器启动时扫描这个配制文件并且禁用那些不适用于你的硬件的modelines。你能通过X11的log文件找出哪些方式可用。它能
在这里找到:<CODE>/var/log/XFree86.0.log</CODE>。</P>

<P>下面的例子对于一块Riva128芯片工作良好,使用X server的驱动模块<CODE>nv.o</CODE>。</P>

<PRE>
  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
</PRE>


<H4>DGA &amp; MPLAYER</H4>

<P>MPlayer在有两种方法使用DGA:SDL驱动能使用它(-vo sdl:dga),DGA驱动(-vo dga)页使用它。上面说的内容对两者都有效;
在下列的几段中我将解释MPlayer中DGA驱动是如何工作的。</P>


<H4>特性</H4>

<P>DGA驱动通过命令行中的-vo dga选项调用。默认操作是转换成与原来的视频尽可能接近的分辨率。它将忽略-vm和-fs选项(开启视频模式切换和全屏方式)
-- 它总试图通过切换显示模式尽可能多的覆盖你的屏幕,这样阻碍你的CPU使用一个单一的附加的周期来放大图像。
如果你不喜欢它选择的模式你能强迫它选择最接近于你通过-x和-y选项规定的分辨率的模式。使用-v选项,DGA驱动将在一大堆别的东西中打印出你
当前XF86-Config文件支持的所有分辨率的列表。
如果是DGA2你也能通过使用-bpp选项强迫它使用一定的色彩深度。有效的色深是15,16,24和32。这取决于你的硬件对这些色深是否本地支持,
还是通过某种(有可能很慢)的转化来完成的。</P>

<P>如果你非常幸运,有足够显存的屏外缓冲区来存放整个图象,DGA驱动将使用双重缓冲,这能使电影播放更加平滑。它会告诉你双重缓冲是否被打开。</P>

<P>双重缓冲的意思是在你的视频的当前帧被显示时,下一帧在屏外缓冲区中被绘制。当下一帧准备完毕时,
图形芯片被告知下一帧在显存中的位置并且直接从那里将要显示的数据读出来。在此期间其它在记忆中的缓冲器将再一次被装满新的视频数据。</P>

<P>双重缓冲可以用-double选项开启也可以用-nodouble选项禁止。目前缺省选项是禁用双重缓冲。屏幕显示功能(OSD)在使用DGA驱动模式时必须打开双重缓冲功能。
然而,使用双重缓冲可能导致较大的速度下降(在我的K6-II+ 525上它多占用20%的CPU时间!),下降程度取决于DGA操作你的硬件的方法。</P>


<H4>速度问题</H4>

<P>一般来说,DGA帧缓冲至少应该跟X11驱动一样快同时还有全屏图象的附加好处。对MPlayer打印出的百分比速度的评价应该小心,
比如X11驱动它们并不包括X-服务器真正绘制所用的时间。开一个终端连到你的机器的串口上运行top命令看看你的机器真正在干什么...</P>

<P>一般来说,使用DGA相对“普通的”使用X11所产生的速度提高高度依赖于你的显卡,以及X-服务器中它的模块做了多少优化。</P>

<P>如果你的系统较慢,最好使用15或者16bit色深,因为他们仅仅要求32bit显示的显存带宽的一半。</P>

<P>即使你的显卡自身就支持32bit色深,使用24bit的色深也是个好主意,因为它被32/32方式少传输25%的数据。</P>

<P>我曾见过一些AVI文件能在Pentium MMX 266上播放。AMD K6-2 CPU在400 MHZ以上的应该可以工作。</P>


<H4>已知的BUG</H4>

<P>嗯,据一些XFree的开发者说,DGA像头野兽。他们告诉你不要使用它。并非对任何芯片的驱动它的操作都是没有瑕疵的。</P>

<UL>
  <LI>在XFree 4.0.3的nv.o有一个bug导致奇怪的颜色。</LI>
  <LI>ATI驱动在使用DGA完成之后要不只一次的切换显示模式。</LI>
  <LI>一些驱动无法切换会正常的分辨率(用Ctrl-Alt-小键盘+,-来手工切换)。</LI>
  <LI>一些驱动显示奇怪的颜色。</LI>
  <LI>一些驱动错误报告他们映射到处理器地址空间中的显存数量,这样vo-dga将无法使用双重缓冲(SIS?)。</LI>
  <LI>一些驱动好像根本找不到一个可用的模式。在这种情况下,DGA驱动将crash并报告100000x100000的无效模式之类的东西...</LI>
  <LI>OSD只能在双重缓冲开启的时候才正常工作(否则会闪烁)。</LI>
</UL>


<H4><A NAME="sdl">2.3.1.2.3 SDL</A></H4>

<P>SDL(Simple Directmedia Layer)基本上是一种统一的视频/音频接口。使用它的程序只要知道SDL,而不需要了解SDL实际上使用的视频或音频驱动。
例如使用SDL的Doom移植能在svgalib,aalib,X,fbdev,和其他东西上使用,你仅需要用环境变量SDL_VIDEODRIVER规定(例如)使用的视频驱
动。嗯,至少在理论上。</P>

<P>在MPlayer中,我们使用它的X11驱动的软件缩放功能,用于不支持XVideo的芯片/显卡,直到我们做出我们自己的(更快,更好)的软件缩放代码。
同时我们使用它的aalib输出,但是现在我们自己的更合适的了。它的DGA模式比我们的好,直到最近。现在明白了? :)</P>

<P>它对一些buggy的驱动/显卡也有帮助,例如视频跳跃(不是系统缓慢的问题),或者音频延迟。</P>

<P>SDL视频输出支持在电影下面,(如果出现)的黑条上显示字幕。</P>

<P><B>这里是一些关于SDL输出的控制选项:</B></P>

<DL>
  <DT><CODE>-vo sdl:name</CODE></DT>
  <DD>规定使用的sdl视频驱动(例如aalib,dga,x11)</DD>

  <DT><CODE>-ao sdl:name</CODE></DT>
  <DD>规定使用的sdl音频驱动(例如dsp,esd,arts)</DD>

  <DT><CODE>-noxv</CODE></DT>
  <DD>禁用XVideo硬件加速</DD>

  <DT><CODE>-forcexv</CODE></DT>
  <DD>尝试强制XVideo加速</DD>

</DL>

<TABLE BORDER=0>
  <TR><TD COLSPAN=4><P><B>SDL控制键:</B></P></TD></TR>
  <TR><TD></TD><TD><CODE>F</CODE></TD><TD></TD><TD>切换全屏/窗口方式</TD></TR>
  <TR><TD></TD><TD><CODE>C</CODE></TD><TD></TD><TD>循环切换可用的全屏方式</TD></TR>
  <TR><TD></TD><TD><CODE>W与S</CODE></TD><TD></TD><TD>*和/的映射(音量控制)</TD></TR>
</TABLE>

<H4>已知的BUG:</H4>

<UL>
  <LI>在sdl:aalib控制台驱动下按下的键将永远重复。(使用-vo aa!)它是SDL中的bug,我无法改变它(用SDL 1.2.1测试)。</LI>
  <LI>不要在GUI中使用SDL!它不会像预想的那样工作。</LI>
</UL>


<H4><A NAME="svgalib">2.3.1.2.4 SVGAlib</A></H4>

<H4>安装</H4>

<P>你必须安装svgalib和它的开发包来使MPlayer编译它的SVGAlib驱动(自动检测,但是也能强制使用),
别忘了编辑/etc/vga/libvga.config来配合你的显卡&amp;监视器。</P>

<H4>注意</H4>

<P>一定不要用-fs选项,因为它将导致使用软件缩放,速度会很慢,如果你确实需要,使用<CODE>-sws 4</CODE>选项,
质量会有点差,但是无论如何它更快。</P>

<H4>EGA(4BPP)支持</H4>

<P>SVGAlib结合了EGAlib,使得MPlayer有可能用16种颜色播放任何电影,下列的配制中可以使用:</P>

<UL>
  <LI>EGA显卡和EGA显示器: 320x200x4bpp,640x200x4bpp,640x350x4bpp</LI>
  <LI>EGA显卡和CGA显示器: 320x200x4bpp,640x200x4bpp</LI>
</UL>

<P>bpp(每象素比特数)的值必须手工设为4:<BR>
  &nbsp; &nbsp; <CODE>-bpp 4</CODE><BR>
  电影可能必须被按比例缩小到EGA适合的模式:<BR>
  &nbsp; &nbsp;<CODE>-vf scale=640:350</CODE>或者<BR>
  &nbsp; &nbsp;<CODE>-vf scale=320:200</CODE><BR>
  为做到这一点我们需要使用快速但低质量的例程:<BR>
  &nbsp; &nbsp;<CODE>-sws 4</CODE><BR>
  也许自动纠正长宽比的功能需要关闭:<BR>
  &nbsp; &nbsp;<CODE>-noaspect</CODE></P>
<P><B>注意:</B>根据我的经验用<CODE>-vf eq=-20:0</CODE>稍稍降低亮度可以在EGA屏幕上获得最好的图象质量。在我的
机器上我也要降低音频采样率,因为声音在44kHz时很差:<CODE>-srate 22050</CODE>.</P>

<P>你只有打开<CODE>expand</CODE>滤镜才能使用OSD和字幕。具体参数参见man page。</P>


<H4><A NAME="fbdev">2.3.1.2.5 帧缓冲输出(FBdev)</A></H4>

<P>是否编译FBdev目标是在./configure期间自动检测的。阅读内核源码中的帧缓冲的文档(Documentation/fb/*)来了解更多信息。</P>

<P>如果你的显卡不支持VBE 2.0标准(较旧的ISA与PCI显卡,诸如S3 Trio64),仅支持VBE 1.2(或者更老的?):
嗯,VESAfb仍然是可用的,但是你将必须在启动Linux之前装载SciTech Display Doctor(从前叫UniVBE )。
用DOS启动盘或随便什么。同时,别忘了注册你的UniVBE ;))</P>

<P>FBdev输出有些除了以前说过的参数外的附加参数:</P>

<DL>
  <DT><CODE>-fb</CODE></DT>
  <DD>规定使用的帧缓冲设备(/dev/fb0)</DD>

  <DT><CODE>-fbmode</CODE></DT>
  <DD>使用的模式名(按照/etc/fb.modes文件)</DD>

  <DT><CODE>-fbmodeconfig</CODE></DT>
  <DD>模式的配置文件方式(默认为/etc/fb.modes)</DD>

  <DT><CODE>-monitor_hfreq</CODE></DT>
  <DT><CODE>-monitor_vfreq</CODE></DT>
  <DT><CODE>-monitor_dotclock</CODE></DT>
  <DD><STRONG>重要的</STRONG>参数,参见<CODE>example.conf</CODE></DD>
</DL>

<P>如果你想要切换到某个具体模式,那么使用</P>

<P><CODE>&nbsp;&nbsp;&nbsp;&nbsp;mplayer -vm -fbmode (NameOfMode) filename</CODE></P>

<UL>
  <LI><B>-vm</B>单独使用将从/etc/fb.modes中选出最适合的模式。也可以与-x和-y选项一起使用。-flip选项只有当电影的像素格式
与视频模式的像素格式相同时才支持。注意bpp的值,fbdev驱动将尝试使用当前值,如果你设定-bpp选项,那么就是那个值。</LI>
  <LI><B>-zoom</B>选项不支持(软件定标太慢了)。-fs选项不支持。你不能使用8bpp(或者更少)的模式。</LI>
  <LI>你有可能想要关掉光标:<CODE>echo -e '\033[?25l'</CODE>或<CODE>setterm -cursor off</CODE><BR>
    和屏幕保护:<CODE>setterm -blank 0</CODE><BR>
    要重新开启光标:<CODE>echo -e '\033[?25h'</CODE>或<CODE>setterm -cursor on</CODE></LI>
</UL>

<P>注意:使用VESA 帧缓冲时FBdev视频方式不能改变,也不要要求这个功能,因为它不是由于MPlayer自身的限制。</P>


<H4><A NAME="mga_vid">2.3.1.2.6 Matrox帧缓冲(mga_vid)</A></H4>

<P>这一段是关于Matrox G200/G400/G450/G550 BES (Back-End Scaler)的支持,mga_vid内核驱动。它现在是由A'rpi开发,
它有三重缓冲的硬件VSYNC支持。它在帧缓冲控制台下和X下都可以工作。</P>

<P><B>警告</B>:在非Linux系统(在FreeBSD上测试过)上,要使用<A HREF="#vidix">VIDIX</A>实现mga_vid!</P>


<P><B>安装:</B></P>
<OL>
  <LI>为了使用它,你首先必须编译mga_vid.o:</P>
    <P><CODE>cd drivers<BR>
      make</CODE></P></LI>
  <LI>然后创建<CODE>/dev/mga_vid</CODE>设备:
    <P><CODE>mknod /dev/mga_vid c 178 0</CODE></P>
    <P>然后这样加载驱动</P>
    <P><CODE>insmod mga_vid.o</CODE></P></LI>
  <LI>你应该使用<CODE>dmesg</CODE>命令检查显存大小的检测结果。如果不对,那么使用mga_ram_size选项(先<CODE>rmmod
   mga_vid</CODE>),以MB为单位指定显卡的显存大小:
    <P><CODE>insmod mga_vid.o mga_ram_size=16</CODE></P></LI>
  <LI>为了使它在需要时自动地加载/卸载,首先在<CODE>/etc/modules.conf</CODE>的末尾加上下面这一行:
    <P><CODE>alias char-major-178 mga_vid</CODE></P>
    <P>然后把<CODE>mga_vid.o</CODE>模块复制到<CODE>/lib/modules/&lt;kernel version&gt;/somewhere</CODE>下的适当位置。</P>
    <P>然后运行</P>
    <P><CODE>depmod -a</CODE></P></LI>
  <LI>你现在需要(重新)编译MPlayer,<CODE>configure</CODE>将检测到<CODE>/dev/mg