Freevo

- User Documentation

# Hardware/G400

Site Index:

1. Changing contrast, color, etc
2. Matrox Millenium G400 TV/OUT Mini-HOWTO
3. Using DirectFB for G400 TV-Out
4. TV-out on the Matrox G450 (should work for the G550)

## Changing contrast, color, etc

If you've noticed that your G400 is a little too dark and seems to lack colour, there is an easy fix which will make the TV Out much sharper, with finer colour detail.

First, download this program: ftp://platan.vc.cvut.cz/pub/linux/matrox-latest/maven-prog.tgz

Build and install as normal, and then run the following commands as root:

-     matrox 0x1e 0xd0
      matrox 0x20 0xff
      matrox 0x22 0xff

This sets contrast, saturation, hue and brightness.

## Matrox Millenium G400 TV/OUT Mini-HOWTO

This document is a copy from the Dave/Dina project.

      The Matrox Millenium G400 TV/OUT Mini-HOWTO
      By Thomas Vander Stichele, thomas@apestaart.org
      v0.1, August 15th, 2001

      This document describes how to get TV/OUT working on this card.
      ______________________________________________________________________

      Table of Contents

      1. Introduction

         1.1 Copyright of this document
         1.2 Where to get this document
         1.3 Acknowledgments
         1.4 Disclaimer

      2. Overview
         2.1 What are your options ?

      3. Hardware

         3.1 Hardware Requirements
         3.2 Hardware Installation

      4. Framebuffer and mga driver combination

         4.1 Software Requirements
         4.2 Kernel Configuration
         4.3 Console Stuff
         4.4 X Configuration
         4.5 Fine-tuning
         4.6 Automating the process

      5. Matrox drivers

         5.1 Software Requirements
         5.2 Kernel Configuration
         5.3 X Configuration

      6. Applications

      1. Introduction

    There aren't that many consumer cards that handle TV output well.  One of
    the best is the Matrox Millenium G400, which regretfully seems to be
    discontinued in favour of the newer modules which do not work yet under
    Linux.

         1.1 Copyright of this document

    This HOWTO is copyrighted 2001 Thomas Vander Stichele.
    It hasn't been registered with the LDP yet.

         1.2 Where to get this document

    The latest version of this HOWTO can be retrieved from

         1.3 Acknowledgments

    * Geert Uytterhoeven, for writing the framebuffer drivers
    * Petr Vandrovec, for writing the matroxfb driver and for explaining some of
      the issues to me
    * the xine and vlc team, for making a pretty good open-source DVD [http://www.dotmoment.com/generic-prozac Generic Prozac] [http://www.dotmoment.com/generic-wellbutrin Generic Wellbutrin] [http://www.dotmoment.com/generic-zoloft Generic Zoloft] [http://www.dotmoment.com/generic-amoxicillin Generic Amoxicillin] app

         1.4 Disclaimer

    Use the information in this document at your own risk. I disavow any
    potential liability for the contents of this document. Use of the
    concepts, examples, and/or other content of this document is entirely
    at your own risk.

    All copyrights are owned by their owners, unless specifically noted
    otherwise.  Use of a term in this document should not be regarded as
    affecting the validity of any trademark or service mark.

    Naming of particular products or brands should not be seen as
    endorsements.  You are strongly recommended to take a backup of your
    system before major installation and backups at regular intervals.

      2. Overview

    The TV/Out capabilities of the card do not work out of the box.  You have
    to do some amount of tweaking to get them to work.

    Here are some basic things you should know before we begin :
      - TV/Out only works on the SECOND head of your dualhead card.  Figure out
        which is which.  That should be easy : connect a monitor to one of the
        heads and start your computer.  If you get output, that's the first head.
        The second head doesn't have output unless you turn it on in software.

      - The Matrox card is capable of doing either PAL, NTSC, or monitor.

      - Messing with modelines and fbset tunings might damage your monitor and/or
        your tv screen.  Monitors these days should have improved to the point
        where it's really hard to actually wreck them, but I cannot guarantee
        you'll be safe.  I've never heard of anyone actually blowing up a TV this
        way, but still... [http://www.dotmoment.com/generic-neurontin Generic Neurontin] [http://www.dotmoment.com/generic-synthroid Generic Synthroid] [http://www.dotmoment.com/generic-cialis Generic Cialis] [http://www.dotmoment.com/generic-levitra Generic Levitra] You have been warned.

         2.1 What are your options ?

    Basically, you have two options to get TV/out working.  Both require at least
    XFree 3.3 (FIXME: check this) and I recommend you get one of the newer
    versions (we used XFree 4.0.3).

         2.2 Using the matrox drivers

    The first option is to get the mga.o and mga_hal.o drivers from the matrox
    website (http://mga.matrox.com).  This will allow you to configure XFree in
    either dualhead, xinerama, or clone mode.  This will only work under X as it
    is the X driver that is responsible for setting up the second head.

    Furthermore, you are limited to a resolution of 640x480 (which is hardcoded in
    the closed-source mga_hal.o driver, according to a Matrox representative).
    The card will also output in MacroVision mode (a copy protection
    scrambling (FIXME: check right term and explanation) which prohibits you
    from recording the output to VCR).  When you hook up your PC through a
    VCR, the VCR will cause the TV to lose sync on a regular basis.  So you'll
    need to connect straight to the TV.

    The biggest drawback is that you will have overlaying and XVideo working, but
    ONLY on the first head.  The second head doesn't do acceleration.  (Actually,
    it's the second CRT, which is internal to the card, and routed by default to
    the second head, that doesn't do any acceleration).  It also does not seem to
    do overlaying.  Basically, this means that when you're watching TV with
    programs like XawTV, or when you want to watch DVD's, you will see what you
    want to be seeing on the first head, and a black area where the video should
    be on the TV.

    The advantage is that Matrox released a nice tool, called mgapdesk, which
    will set up your X Config file for you.

         2.3 Using the framebuffer device

    Framebuffer devices are an abstraction of your video hardware.
    From /usr/src/linux/Documentation/fb/framebuffer.txt :

    "The frame buffer device provides an abstraction for the graphics
    hardware. It represents the frame buffer of some video hardware and allows
    application software to access the graphics hardware through a
    well-defined interface, so the software doesn't need to know anything
    about the low-level (hardware register) stuff.

    The device is accessed through special device nodes, usually located in
    the /dev directory, i.e. /dev/fb*."

    Check this file for more information on the concept.

      3. Hardware

    This is pretty simple : you need one of the "working" Matrox cards, and a
    TV or like device to hook it up to.

         3.1 Hardware Requirements

    Video card :
     At the moment, this HOWTO is applicable for the Matrox Millenium
     G400 Dualhead ONLY.  It might work on other (older) cards, but at
     the moment it will NOT work on the G450 (it has another chipset).

    Connection :
     To connect the card to a TV, you need the extra cable that should
     have come with the G400.  It has both an RCA output and an
     S-Video type output with 7 pins.  (FIXME: check S-Video types)
     Both of these you can connect to your TV or VCR either directly or
     through a SCART cable.

    TV/VCR :
     Any relatively new TV or VCR will do.  You can hook up through
     either an RCA jack, an S-Video jack, or through a SCART cable.
     The card should be able to do both PAL and NTSC.

    Monitor :
     We still keep a computer monitor connected to the first head of
     the card, for testing and debugging.  Basically, it's still a lot
     easier to read text from the screen than from the TV.  Make sure
     you have a monitor that can withstand some of the frequency and
     mode changes we'll be doing later on.  Also, if you have a PAL tv,
     a monitor that can drop to as low as 50 Hz is nice.

         3.2 Hardware Installation

    Put the card in your computer.  You have a manual to help you if you don't
    know how to do this.  Put the matrox cable on the SECOND head.
    We used a SCART cable with six RCA jacks (2 audio in, 2 audio out, 1 video
    in, 1 video out) and connected the video out jack to the RCA jack on the
    cable.  Our VCR is hooked up to the TV using the coaxial output from the
    VCR.

    Better quality can be had by either connecting directly with the RCA
    jack to the TV, using an RCA output jack from the VCR to go to the TV, or
    use S-Video connections all the way.

      4. Framebuffer and mga driver combination

    We recommend using the framebuffer method.  It might be a little slower
    (though we haven't actually noticed that), but you'll get the best result
    in outputting to your TV and stuff will work the way you want it to.

         4.1 Software Requirements

    You need the following things :

    * fbset
     a program to manipulate framebuffer devices.  RPM's are available
     in the standard distributions.  The homepage is at
     http://home.tvd.be/cr26864/Linux/fbdev/
     The latest version at the time of writing is 2.1; this is the
     version we used.

    * matroxset
     matroxset is a program to manipulate the matrox card directly.
     It allows you to re-connect internal CRT devices to external
     heads, and set the output type of the CRT's. Homepage is
     http://knihovny.cvut.cz/~vana/matroxfb.html
     The latest version is 0.3

    * kernel sources
     You can get these from linux.kernel.org
     If you don't know how to configure/compile/install new kernels,
     you might want to read the Kernel-HOWTO.

         4.2 Kernel Configuration

    An overview of what should be done can be found in the kernel
    documentation (/usr/src/linux/Documentation/fb), but it's not all that
    clear.

    I also found a mail from Mike Hicks, outlining some of the kernel options :

    "Go to the Character Devices section and enable I2C support.  This can
    be a module if you want.  Also, be sure to enable I2C bit-banger(?!)
    support, as that is the type of interface that the I2C bus on the video
    card uses.  Next, enable the Matrox stuff in the Framebuffer seection
    under Console Drivers.  Now, cross your fingers and hope everything
    compiles ;-)"

    Here's a list of what should be enabled in a 2.4 kernel (These are tested
    on 2.4.5) :

    Code maturity level options > Prompt for development...

    Processor type and features > MTRR support
     (This speeds up image writing to your video card)

    Character Devices > I2C support > I2C support
    Character Devices > I2C support > I2C bit-banging interfaces
     (This will make sure you can select a few more options in Console
     drivers)

    Character Devices > I2C support > I2C device interface

    Character Devices > Matrox g200/g400
     (This will make the mga.o driver)

    Console drivers > Frame-buffer support > Support for frame buffer devices
    Console drivers > Frame-buffer support > Matrox acceleration
    Console drivers > Frame-buffer support > G100/G200/G400/G450 support
    Console drivers > Frame-buffer support > Matrox I2C support
    Console drivers > Frame-buffer support > G400 second head support

     (You do NOT need Multihead support, this badly-named option is for
      when you have multiple matrox cards in the machine)

    After this, you should exit, save, and run all of the standard commands to
    get you a new kernel.  Copy it to /boot, add a few lines to lilo.conf (if
    you use LILO), execute lilo and reboot with the new kernel.  You should
    get a penguin in the top left corner if the framebuffer is activated.

         4.3 Console Stuff

    If the previous step was successful, you can now configure the
    framebuffers using fbset and matroxset.  After booting up, the first head
    is connected to the first internal CRT, which is connected to the first
    framebuffer device (usually /dev/fb0).  The second framebuffer device is
    not connected at all.

    The matroxset program can re-route framebuffers to different outputs.
    Run matroxset -h to get a list of the possible options.
    To get TV/OUT working (for PAL), do this :
     matroxset -f /dev/fb1 -m 0 # this disconnects fb1 from outputs
     matroxset -f /dev/fb0 -m 3 # this connects fb0 to both outputs
     matroxset -f /dev/fb0 -o 1 1 # this sets fb0 to PAL output
    If you want NTSC, change the last 1 to 2.

    After this, you should get your console both on the TV and your monitor.

    You can also changing your resolution by using fbset.  You can use either
    the old interface (specifying options manually) or use the new interface
    (with fbset modes from /etc/fb.modes).

    I use the manual method and run
     fbset -fb /dev/fb0 -xres 800 -yres 600

         4.4 X Configuration

    Configuring X is a little trickier, but not by much.  I recommend getting
    the XFree 4.x series.  This series no longer uses different servers for
    different types of card, but has one server using driver plugins.

    Edit your /etc/X11/XF86Config-4 file.
    Make sure you have the following line in Section "Module" :
            Load  "v4l"             # Video4Linux

    In Section "Monitor", verify that your VertRefresh includes 50 (for
    PAL) or 60 (for NTSC).

    in Section "Device", you need to have the following lines :

            Driver      "mga"
            Option      "hw cursor" "off"
            Option "UseFBDev" "on"

    This will make sure you use the mga driver, but the mga driver will use
    the framebuffer device to actually display, so that you'll get X on both
    heads at the same time.  Turning the hardware cursor off will also help
    not mess up the display for some programs.

    In Section "Screen", make sure you use the right Device and Monitor.
    I chose an 800x600 mode in 16 bit color, so I have :

            DefaultDepth     16
            DefaultFbBPP     16
            SubSection "Display"
                    Depth     16
                    Modes    "800x600"
            EndSubSection

    You can of course change this to your liking.

    Now try to start X by running startx.
    Hopefully, you'll get the desktop on both your monitor and the TV screen.
    If not, you should check the output of X to see what has gone wrong.

    Possible causes of error are :
    * You do not have the mga module.  Get the latest X and make sure you have
      compiled the module as per the instructions in the kernel section.
    * Your monitor cannot handle the vertical refresh rate your framebuffer is
      set at.  Either change the vertical refresh (see below in
      Fine-tuning) or increase the limits in the Monitor section to include
      the refresh rate X wants to use.

    In X, you should know be able to have hardware overlaying and XVideo
    extensions working.

         4.5 Fine-tuning

    *WARNING* : this section indicates what worked for me.  Messing around
    with fbset too much might damage your monitor or TV screen and you do so
    at your own risk !

    You know should have X running on your TV.  You might notice that the
    desktop probably isn't centered and doesn't fill the screen properly.
    Normally, you would use xvidtune to fine-tune the modeline used.  In this
    case, that won't work, because by using the framebuffer device xvidtune
    doesn't like the modelines it's working with.

    You can run fbset and adjust all of the parameters until the display is
    centered nicely.  I had a black border on the left and right of the TV
    screen, and my desktop bleeded over the top edge of the TV as well.

    The easiest way to get the right fb settings is to start with one of the
    edges.  Start with fbset -left 10.  This will set the left border at ten
    pixels (internally), and will change the output on your TV.

    Now, a number of side effects might occur, due to sync issues on both the
    TV and the monitor.  Changing these settings could :
    * cause your monitor to loose sync slightly (for example, the top edge is
    skewed to the left or right, or parts of the display are shifted somewhat
    to the side) or totally.
    * cause your TV to loose sync slightly (in roughly the same ways).

    The important thing is that the monitor and TV seem to behave
    independently from each other in this regard, and increasing the value of
    the parameter by just one will change the situation totally.  So you could
    have a good view on both screens using 10, a bad monitor using 11, a bad
    TV using 12 while the monitor is OK, and so on.  So first take a value
    that aligns the border roughly to the border of your TV screen, and then
    increment or decrement that in small steps until both screen outputs are
    OK.  This is the setting you should use for that parameter.

    Once the left edge is ok, work on the right edge in the same way.

    If the top of your desktop bleeds over as well, you can adjust this by
    playing with the hslen parameter.  Work all of the edges until everything
    is ok.

    I use
     fbset -fb /dev/fb0 -left 54 -right 26 -lower 32 -upper 80 -hslen 40

    From fbset, you should also be able to get a modeline (using fbset -x)
    for X and use that in your X Config file, but I haven't put enough time
    into that yet.

         4.6 Automating the process

    Doing all of this manually is time consuming.  The process is more
    difficult since at times you'll have to type blind, because you just
    changed the framebuffer settings to something unusable.

    So I created a few simple scripts which you're welcome to use as well.
    mon is the first; it re-sets the framebuffer stuff to where it was after
    booting :

    matroxset -f /dev/fb0 -m 0
    matroxset -f /dev/fb1 -m 0
    matroxset -f /dev/fb0 -m 1
    matroxset -f /dev/fb0 -o 0 128
    fbset -fb /dev/fb0 640x480-60

    Put this somewhere convenient and learn to execute it by typing blindly ;)

    As for turning on tv/out and centering the display, I made a script called
    tvout and another called tvcenter.  tvout contains the steps outlined in 4.3,
    while tvcenter contains the stuff from 4.4

    You can also get (slightly more advanced versions of) these scripts from a
    .tar.gz of a project where I use all of this.  This .tar.gz also contains a
    kernel image I built, a RedHat "service" for starting the tv out at boot time,
    and some documentation.  It also triggers Gnome to run tvcenter when starting
    up gnome (as root), so that the display will end up centered.

    Download the tar.gz from
    The latest version as of writing this is 0.3.0
    The latest version as of writing this is 0.3.0

    You can change the scripts to your liking.  Let me know if you've
    changed something useful for others as well.

      5. Matrox drivers

    Installing the matrox drivers is pretty simple.  Basically, you download the
    drivers from the matrox site, install them, get mgapdesk as well, and run that
    (from X).

         5.1 Software Requirements

    * mga.o and mga_hal.o
     Get either binaries or source code, along with XFree source code,
     from the matrox site

    * mgapdesk
     This tool can also be gotten from the matrox site.  It's a handy
     program (which is run from X, so you have to get X running on your
     monitor first, but that's not a problem) which allows you to
     configure your matrox card.

         5.2 Kernel Configuration

    No special changes should be made to the kernel.

         5.3 X Configuration

    Get the two drivers for your version of X from the Matrox site
    (http://hal.matrox.com).

    Install them in your X drivers directory
    (make a backup copy of your existing mga.o).  In my setup, this is in
    /usr/X11R6/lib/modules/drivers.

    Start up X.  Then run mgapdesk.  Now you can choose the output type of your
    second head, and choose if you want to run in xinerama or clone mode.  I
    suggest clone mode; xinerama makes your X act like it has one big screen,
    consisting of your monitor on the left and your TV on the right.  This
    probably isn't what you want.  You can also set resolution, frequency, and
    other stuff.  The application speaks for itself, really.

    The only drawback here is that you have to restart X for the new settings to
    be used, and this can also be a time-consuming process.

      6. Applications

    You can use pretty much all of the applications you'd use on your regular
    desktop.  A few suggestions to try are :

    * DVD players :
     xine, xine.sourceforge.net
     vlc,  www.videolan.org

    * emulators
    * TV programs

    For a more general application, see my personal project at
    We use the Matrox G400 and try to integrate as much multimedia projects as
    We use the Matrox G400 and try to integrate as much multimedia projects as
    we can into a home-made entertainment centre.

    I'll be happy to list other applications here as well.

## Using DirectFB for G400 TV-Out

The alternative method to the mga_vid module is to use the driver from the DirectFB Project ( http://www.directfb.org/). It requires quite a lot of work to make it run nicely:

- Compilation of a kernel with patches from the DirectFB project

- Compilation of mplayer from cvs (or >0.90) or compilation of mplayer <=0.90 with a patch enhancing the dfbmga support

- Compilation/Installation of directfb >=0.9.18 (don't use 0.9.17! it has serious bugs! make sure that no directfb libs are installed before compilation!)

- Using a recent freevo runtime which has SDL compiled with directfb support

Especially the part with the kernel/mplayer compilation and patching is hard work for people with little or no knowledge about it. So why go through all this trouble? In most cases you want to stick to the classic method using the mga_vid module since it is so much easier and almost ready to go. However, the classic solution makes problems in some rare cases: diagonal lines probably resulting from wrong adjust framebuffer settings, framebuffer lock ups, picture quality. The DirectFB Output arguably has the better picture quality. Depending on the Television which is used, you may not even notice the difference. However, if you have such RGB-Lines in your picture or you don't want the framebuffer to behave in such an unstable way, you may want to give it a try. A pretty good and detailed description on how to make it run can be found here:

http://www.sci.fi/~syrjala/directfb/matrox-tv-out-howto

Note that this is also one of the methods to make the TV-Out of the later Matrox models (G450,G550) work.

You must recompile SDL with DirectFB Support.

## TV-out on the Matrox G450 (should work for the G550)

Check here:

If you have SUSE 9.0, there's information and RPMs available at http://www.funktronics.ca/dfbmga .

last edited 2004-12-31 13:19:20 by BHeremans
current version: http://freevo.sourceforge.net/cgi-bin/doc/Hardware/G400