Using the driver
In /etc/X11/xorg.conf, in the Section "Device", change the driver to "openchrome". That is all. Now restart X. Then proceed to the Troubleshooting page.
From xorg-server-184.108.40.206 EXA work properly with the openChrome driver.
If you have earlier xorg-server, to make EXA work properly with the openChrome driver, you need the patch from Xorg bugzilla BUG #7639. Otherwise EXA will corrupt the offscreen memory management resulting (at best) in strange video and cursor rendering glitches.
Some more patches to Xorg that migth be needed for optimal performance: Xorg bugzilla BUG #6818 if your screen remains black at X server startup. This fix has been committed to Xorg, though, so you don't need it with recent versions of the X server. Xorg bugzilla BUG #7671 Makes EXA really usable on openChrome. No more slow window movements unless you have a huge amount of big windows.
The openChrome driver has a fairly new implementation of the EXA acceleration architecture. It should be considered development and not stable yet, but you are welcome to try it out and report bugs. To make most of it, you need the via DRM kernel version 2.7.3 or higher, which helps you transfer images to and from the screen using PCI DMA. Then add the following to the driver section in your /etc/X11/xorg.conf: [[!format txt """ Option "AccelMethod" "exa" """]] A good choice of other options: [[!format txt """ Option "ExaScratchSize" "8192" Option "MaxDRIMem" "16384" Option "MigrationHeuristic" "greedy" """]] And to enable the composite extension you need to add the following section: [[!format txt """ Section "Extensions" Option "Composite" "Enable" EndSection """]] Then restart your X server and you can go on using fancy applications. A good tutorial can be found here. The composite extension just got accelerated in the openChrome driver, which means that it is probably a little buggy. Please report bugs when you come across them. Translucent windows, window fading and shadows work reasonably fast, particularly in 16 bit mode. General render acceleration, like antialiazed fonts and such are actually faster in software, since it seems to be some overhead setting up the 3D engine for each character. Also, the core EXA implementation in the X server is probably not fully optimized yet.
OpenChrome EXA works both with and without DRI. Depending on the actual hardware, things may be slower or faster with DRI enabled. As a rule of thumb, rendering glyphs and small things are faster without DRI, but if EXA feels like copying a big area from screen to memory, the X server may hang for a second or so while this is happening, if DRI is not enabled.
YOU SHOULD REALLY HAVE 64 MB VIDEO MEMORY SET IN BIOS WHEN USING A COMPOSITE MANAGER!!! Consider yourself advised.
Currently I use xfce (a nice lean desktop) with the builtin composite manager in xfwm4, which is the window manager that comes with xfce. Gives you a really snappy nice-looking compositing desktop.
Note that combined with some window managers (like the one in KDE) there may be screen garbage left over when resizing windows, or when using shaped (not fully rectangular) windows, like oclock. This is not an openChrome bug but a bug in either the window- or the composite manager.
Some applications, like later versions of konqueror seem dead slow with EXA and composite acceleration. Consider EXA an evolving technology.
XvMC supported hardware and features
Although the chipsets are often capable of various level of acceleration, only VLD (aka slice decoding) is implemented.
Currently XvMC is supported and verified on CLE266,, CN400/PM800, CN700/VM800/P4M800Pro and . All chipsets except the are capable of streaming mpeg data using AGP DMA. In the case, this means that the driver manually has to poll the chip for decoding completion and this takes a lot of CPU power. Usually you're better off with Xv on the chipset unless you use Xine's unichrome_cpu_save option explained below.
The PM800 and CN400 supports HDTV mpeg decoding. On the other chips, the maximum mpeg frame size is 1024x1024.
Unsupported chipsets are :
- KM400 : Does have some acceleration capabilities, but it doesn't have VLD. Other levels are not implemented currently.
- CX700 : Slightly different engine than the previous versions. No documentation is available.
- VX800 : Same engine as CX700, but there's no DRM driver yet. No Documentation available.
- , , VX800, VX855 : No DRM driver. No Documentation available.
Acceleration capabilities per chipset
|VLD||IDCT||MoComp||MP@HL||ASP Level 5||GMC L0/L1||1/4-pixel MC||WMV9|
|CN400, PM800, PM880||X||X||X||X||X||X||X||-|
Enabling XvMC on the X server
This is done automatically if the chipset supports XvMC, and if DRI is enabled.
XvMC wrapper library
Different drivers use different XvMC libraries. The xserver now has a wrapper library integrated to make use of this various libraries, as told by the driver. This should be done automatically, but you can force the xserver to use a specific library in the /etc/X11/XvMCConfig file. This file contains the name of the library which is used for XvMC. This file is not mandatory.
Forand CN400/PM800 chipset family (VIA VT3259 and VT3364), the library is "libchromeXvMCPro.so.1". For other supported chipsets, this file is "libchromeXvMC.so.1".
Only some video players have support for the XvMC VLD level of acceleration :
xine-lib based players
Out of the box support, just make sure to use the xxmc output. For example : [[!format txt """ xine -V xxmc dvd:/ """]]
mplayer needs to be patched to work with OpenChrome hardware acceleration. We try to maintain a cumulative patch that works with BoB deinterlacing and that has fallback to other video out plugins if XvMC fails.
This patch by Ivor Hewitt and others enables VLD XvMC with optional deinterlacing and fallback to Xv if XvMC is not supported for the particular file format. The patch is a collection of three patches that have been floating around the unichrome and openChrome mailing lists.
First get and apply the latest mplayer patch :
* [attachment:mplayer-1.0-pre8-XvMC_VLD.diff mplayer-1.0-pre8] * [attachment:mplayer-1.0-rc1-XvMC_VLD.diff mplayer-1.0-rc1] * [attachment:mplayer-1.0-rc2-XvMC_VLD.diff mplayer-1.0-rc2] (svn revision 24967)
- Configuration Add the following configuration options: [[!format txt """ --enable-xvmc --with-xvmclib=XvMCW """]]
- Running To run, use the following mplayer command line options (or add them in the appropriate mplayer config file. It should work with both gmplayer (mplayers graphical gui) and mplayerplug-in. [[!format txt """ -vo xvmc,xv -vc ffmpeg12mc, """]] (Note the trailing comma to the -vc option)!
To make these options default with mplayer, the following lines should be present in ~/.mplayer/config [[!format txt """ vo=xvmc,xv vc=ffmpeg12mc, """]] To make these options default with mplayerplug-in, the above lines should be present in ~/.mplayer/mplayerplug-in.conf
And finally to make gmplayer (mplayer's graphical gui) use xvmc, make sure the following lines are present in ~.mplayer/gui.conf [[!format txt """ vo_driver = "xvmc,xv" v_vfm = "ffmpeg12mc," """]]
Out of the box support. FIXME: Describe the mythtv conf to take advantage of XvMC VLD.
Unsupported, no known patch.
You need to set some options in the device section of your xorg.conf: [[!format txt """ Option "TVType" "string" """]] Where string is one of the following TV standard: NTSC ; PAL ; 480P ; 576P ; 720P ; 1080I
and [[!format txt """ Option "TVOutput" "string" """]] Where string is one of the following TV connexion type: Composite ; S-Video ; RGB ; YCbCr ; SC
Then you need to use a supported mode for your TV encoder and the TVType you set in xorg.conf (See tables below).
Here's a minimal TV out configuration example: [[!format txt """ Section "Monitor" Identifier "Monitor0" HorizSync 30 - 50 VertRefresh 50.0 - 50.0 EndSection Section "Device" Identifier "Card0" Driver "openchrome" Option "ActiveDevice" "TV" Option "TVType" "PAL" Option "TVOutput" "S-Video" EndSection Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Modes "720x576" "720x576Noscale" EndSubSection EndSection """]] All TV output modes are currently hardcoded, you can't define your own. Also, there's currently no way to use a different resolution and refresh rate on TV and another output (CRT, Panel). If you need two outputs at the same type, the TV output will be limiting the other one to the same resolution and refresh rate.
Here's a dump of all supported modes for all supported encoders. Not all of them are guaranteed to work (for example Overscan modes). If you have the hardware, it would be nice to confirm which modes are working for you.
- NTSC: 640x480 640x480Over 800x600 800x600Over
- PAL: 640x480 640x480Over 800x600 800x600Over
- NTSC: 640x480 640x480Over 720x480Noscale 720x480 720x480Over 800x600 800x600Over 848x480 848x480Over 1024x768 1024x768Over
- PAL: 640x480Over 640x480 720x576Noscale 720x576Over 720x576 800x600Over 800x600 848x480Over 848x480 1024x768Over 1024x768
- NTSC: 640x480 640x480Over 720x480 720x480Over 800x600 800x600Over 848x480 848x480Over 720x480NoscaleOK 1024x768 1024x768Over
- PAL: 640x480 640x480Over 720x480pal 720x576OK 720x576NoscaleOK 720x576OverOK 800x600 800x600Over 848x480 848x480Over 1024x768 1024x768Over
- PAL: 640x480 720x576 720x576Over 800x600 1024x768
- NTSC: 640x480 720x480Under 720x480Fit 720x480Over
- 480P: 720x480Under 720x480Fit 720x480Over
- 720P: 1280x720
- 1080I: 1920x1080
- NTSC: 640x480 640x480Over 720x480 720x480Noscale 800x600 800x600Over 1024x768 1024x768Over
- PAL: 640x480 640x480Over 720x576 720x576Noscale 800x600 800x600Over 1024x768 1024x768Over
- NTSC: 640x480 640x480Over 800x600 800x600Over 1024x768 1024x768Over
- PAL: 640x480 640x480Over 800x600 800x600Over 1024x768 1024x768Over Check out Terry Barnaby's excellent unichrome tv-out guide here! All patches he mentions are already in the openChrome driver. His vt1622.c program does not currently work with TV-encoders sitting on I2C bus 3 (check your /var/log/Xorg.log.0), like VT1623 and VT1625, but it should be easy to modify the program to have it write to the correct I2C bus.: use the I2C code in the openChrome driver for reference. If tv-out doesn't look OK on your particular television set and following Terry's guide doesn't help, we're unfortunately unable to help you ATM, but patches and ports are always welcome. This project is about getting involved! Get your hands dirty!
Only the CX700 and VX800 integrated TMDS encoders are natively supported. You need to use Option "DVI for all other TMDS encoders. You may get it working by using the VBEModes option though." "DFP", as this is disabled by default. Here's a minimal DVI/HDMI out configuration example: [[!format txt """ Section "Device" Identifier "Card0" Driver "openchrome" Option "ActiveDevice" "DFP" EndSection """]] There's currently no native support for
Although the hardware supports dual head, it is currently not implemented. The only possibility is clone mode, but with the same resolution and refresh rate on the 2 outputs.
Randr support is currently worked on, but it's not ready yet.