[mythtv-users] nVidia and XvMC

Patrick Wagstrom wagspat at iit.edu
Tue Nov 15 14:35:16 EST 2005


> > When I try to fire up watching live TV with XvMC hardware
> acceleration
> > enabled, I get an X11 BadAlloc error with my nVidia 6200 TC and XOrg
> > 6.8.2.
> > I'm running a subversion branch with 0.18 fixes, and my system is
> > configured
> > with 2 HD-3000s and the latest NVIDIA x86-64 drivers.  The processor
> is an
> > AMD Athlon 64 3200+, and I have 1 GB of ram in it.  When I disable
> the
> > XvMC
> 
> Has anyone ever gotten XvMC working on a 64 bit native AMD64 machine?
> I
> was under the impression that it just didn't work yet.

I have gotten XvMC working on my Athlon 64 with an nVidia 6600LE.
However, it wasn't easy, basically, I do a brute force hack to beat it
into submission whenever I start up my X Session.

First, when compiling Myth, force it to compile against libXVMCNVIDIA,
I've had nothing but trouble with libXVMCW.  This requires modifying the
"if" statement around line 1699 of configure (talking v0.18.1 here).
You might need to do "ln
-s /usr/X11R6/lib/libXvMCNVIDIA.so.1 /usr/lib/libXvMCNVIDIA.so" for this
to work properly.

Recompile MythTV, go into TV Options and select the option to use XVMC.
Playback a video and prepare to be disappointed (at least I was).

Why is this?  Because it couldn't open up the video properly.
Apparently it gets some access denied issue (I'm at work so I can't get
the exact output right now).  Here's what I did to fix it.

Create a two frame mpeg movie using mencoder.  It's important that it
have more than one frame.  Two seems to work quite well.  Then, I made
sure that my version of mplayer had xvmc support with it.  I had to
recompile it for that (using Ubuntu Breezy).  Then, I had my startup
script for mythfrontend execute the following script:

#!/bin/sh
# bang away on XVMC until it works
ROUNDS=0
for x in $(seq 1 100); do
        LINE=$(~/bin/mplayer -vo xvmc -vc ffmpeg12mc ~/bin/fix.mpg -ao none 2>&1 | grep "End of file")
        if [ "x$LINE" == "xExiting... (End of file)" ]; then
                echo "Took ${ROUNDS} tries to succeed"
                exit
        fi
        ROUNDS=$x
done
echo "Unable to initialize xvmc"

Where fix.mpg is the name my little two frame mpeg file.  This
essentially tries to run Mplayer 100 times on the little file.  The
first time it actually succeeds and plays it, it stops.  The reason is
because I notice that once I actually had XVMC working, it would just
keep working for that session.  Thus, by beating XVMC into submission
when I first start, I'm good for XvMC on MythTV.  Usually it takes about
3 or 4 tries.  Once it took 15, but that's the most.  This script
automates all that, and makes it transparent.

That being said, XVMC is not a be all end all here.  It still seems far
from perfect.  Occassionally I see a frame that looks out of place, I've
been told that this is a sign that XVMC isn't working 100% properly on
my system [1].  But XVMC is working.  I now have a grayscale display
that gets really choppy when the UI is up, but requires basically 0
overhead on my XOrg server instance.

This is good enough for me to watch and pause live 720p programs with no
difficulty.  Overall CPU load will hover around 20% there with
ocassional I/O related hiccups.  However, I still have some problems
with 1080i programs stuttering, probably I/O related issues.  I think
there is something funky with my motherboard and linux support (I get
the nasty digital static on my pcHDTV card too, but HDTV from the cable
box works fine).  So, if anyone knows ways to make those better, I'd
love to hear them.  Otherwise I'm gonna have to buy a new motherboard,
which is a shame because this one has gazillions of bells and
whistles(the pcHDTV records just fine on my Athlon 700, that just can't
play it back).

FWIW, here's the specs on the system I'm working with:
AMD 3200+ (clocked at 2400), 1GB generic ram, MSI k8n-neo4 platinum,
400GB LVM DMA 100/133 drives (2 x 200, hdparm -tT gives a read rate of
about 50MB/s on the drive), WinTV PVR-250, XFX GeForce 6600LE 256MB,
firewire to DCT6200 comcast box, pcHDTV 3000 (which gets staticy if
there is any other substantial disk I/O at the same time, don't blame
the OC either, it barfs at 2GHz too).

--Patrick

[1] http://gentoo-wiki.com/HOWTO_Setup_MythTV



More information about the mythtv-users mailing list