New cards and analog support for cx88

Jason Harmening jason.harmening at gmail.com
Sat Sep 6 18:49:57 UTC 2008


I have a new snapshot of the cx88 driver here:

ftp://corona.homeunix.net/cx88_20080824.tar.gz

The big news is preliminary analog video and audio support, along with added 
HDTV support for several cards.

For digital video, Konstantin Dimitrov has contributed bugfixes and support 
for the following cards:

DViCO FusionHDTV 5 Gold (ATSC)
Hauppauge WinTV-HVR-1100 (DVB-T)
Hauppauge WinTV-HVR-1100 LP (DVB-T)
Leadtek WinFast DTV2000H (DVB-T)
Hauppauge WinTV-HVR-1300 (DVB-T)
Hauppauge WinTV-HVR-3000 (DVB-T)
Hauppauge WinTV-HVR-4000 (DVB-T)

This is a massive improvement for the driver, as it previously only supported 
the following:

pcHDTV HD-3000 (ATSC)
pcHDTV HD-5500 (ATSC)
Hauppauge WinTV Nova-T (DVB-T)

Konstantin is also working on adding DVB-S, DVB-S2, analog audio input, and FM 
radio support for the Hauppauge WinTV-HVR-4000.

That brings me to the next part of the announcement, which is that analog 
video and audio support has been added.  Kernel driver sources are in the 
video/ and audio/ subfolders, respectively, and running the top-level 'make' 
command will generate cx88video.ko and cx88audio.ko kernel modules.

The analog video driver has only been tested with NTSC video on the two pcHDTV 
cards.  It supports scaling, cropping, and both packed and planar pixel 
formats.  VBI capture *seems* to work, but I don't have a VBI parsing tool to 
tell me for sure.  As with the cx88mpeg driver, it can capture to both user- 
and kernel-allocated buffers.  PAL and SECAM support are present but 
untested.

The biggest limitation for analog video is that I don't have a good capture 
app right now.  There are test apps in the tests/ directory for the pcHDTV 
cards that will grab a sequence of frames and dump them to .ppm files.  I 
will work to integrate analog capture support into the cx88 capture app, but 
I also would like to work on a more universal solution, such as V4BSD, for 
both digital and analog capture.

Capture isn't nearly as much of an issue with the audio driver--it interfaces 
with the FreeBSD pcm subsystem, so all that is needed is a very simple app 
that sets the broadcast audio format and the tuner frequency (see 
tests/cx88_audio_client.cpp for an example).  The capture itself can be done 
by any app that can talk to /dev/dsp* devices.  You can even do something as 
simple as 'cat /dev/dspX > /dev/dspY', where X corresponds to your cx88 audio 
device and Y is your soundcard.  A "plain" capture like this won't give very 
good sound quality, however, as the default bitrate settings for dsp devices 
are low.  Most actual capture apps are capable of setting the bitrates to 
something better.

The analog audio driver has been tested with BTSC audio and FM radio on the 
pcHDTV cards.  Unless your card has a dedicated FM radio tuner (which the 
pcHDTV cards don't), FM reception will be spotty and of poor quality.  
Support for other broadcast standards (NICAM/A2/EIA-J) is present but 
untested.

The biggest limitation for audio is that it requires PCI function 1 to be 
enabled on the CX2388x.  Many cards, especially older ones, will not have 
this function enabled and will instead require the user to run a patch cable 
from the card to their soundcard's line-in jack.  My drivers don't currently 
support this "passthrough" audio capture, as there are some cx88 hardware 
bugs with it that would require hacks to work around.

If your card doesn't have PCI function 1 enabled, you may be able to enable it 
by flipping a bit in your card's EEPROM.  I've written a very simple app 
(utils/cx88_audio_enable.cpp) that does this.   Compile and run as follows:

g++ -Wall -O2 -I../ -I../libtuner -L../libtuner -ltuner -o audioenable 
cx88_audio_client.cpp

./audioenable /dev/cx88videoX,  where X is the node number for the video 
device on the card where you want to enable audio.

You'll need cx88video.ko loaded, as the app will go through the video device 
to access the EEPROM.  If it detects the audio function isn't already 
enabled, it will flip the necessary bit and then wait for the internal EEPROM 
programming cycle to complete.  You will need to power-cycle your computer 
before you can use the audio function.  This works for the pcHDTV HD-3000, 
but it may not work for other cards since some card vendors write-protect the 
EEPROM.

With analog mostly working, here's what I'd like to do in the coming months:

1)  Make libtuner and the cx88 driver stack into ports, with manpages and 
README docs.
2)  Work on cx88 analog capture solution
3)  Work on broader capture solution, possibly V4BSD
4)  Research adding support for cx23885/6/7-based PCI-Express capture cards

If you have a problem using the drivers or if you'd like to make a 
contribution, please let me know.  I'll be glad to help wherever I can.

Thanks,
Jason


More information about the freebsd-multimedia mailing list