Reply to comment

Hauppauge WinTV-Go on GNU/Linux

The Hauppauge WinTV-Go used here

I just configured my GNU/Linux system to work with a Hauppauge WinTV-Go TV tuner card. The installation is quite easy unless something goes wrong. I did and tested all these on Xubuntu 7.04.

What I have managed to do with the card:

  • Watch TV channels (of course!)
  • Obtain the audio by using the card's audio pass-through cable that connects to the sound card's line-in connector
  • Obtain the digital audio directly from the BT878(A) chip

I have not tried to configure the remote control yet. But it should be easy with LIRC [www.lirc.org] which supports many Hauppauge TV cards.

1. Installation and Configuration

On a Ubuntu system, once you have plugged in the card, it should be able to detect it correctly and load the appropriate kernel modules. (There are several variants of the Hauppauge WinTV-Go card. I am not sure if this works perfectly for all of them.) If you run tvtime, you should be able to watch the TV, but may not hear any sound from the TV yet.

If you use the audio pass-through cable to get the audio, tune your volume controller for your soundcard to playback the audio captured from the sound card's line-in connector. (Skip this paragraph if you do not use the cable.) Make sure that you have run tvtime to watch some channel when you try this. If you still can't get the audio, use the 'ultimate' alsamixer or kmix to tune. Make sure that you are controlling your sound card but NOT the "Brooktree Bt878" card, which is the audio device of the tuner card and is useful only when you want to get the digital audio directly.

To get the digital audio from the BT878(A) chip directly instead, first make sure that it is available for use. With digital audio capture, you do not need to use the audio pass-through cable and should get slightly better audio quality.

$ cat /proc/asound/cards
 0 [S16            ]: SB16 - Sound Blaster 16
                      Sound Blaster 16 at 0x220, irq 5, dma 1&5
 1 [Bt878          ]: Bt87x - Brooktree Bt878
                      Brooktree Bt878 at 0xee002000, irq 19
$ cat /proc/asound/devices 
  2:        : timer
  3:        : sequencer
  4: [ 1- 1]: digital audio capture
  5: [ 1- 0]: digital audio capture
  6: [ 1]   : control
  7: [ 0- 0]: hardware dependent
  8: [ 0- 0]: raw midi
  9: [ 0- 0]: digital audio playback
 10: [ 0- 0]: digital audio capture
 11: [ 0]   : control

If the device Bt878 is not in the list, check if you card can really support digital audio capture, and check if the kernel module snd_bt87x has been loaded properly:

$ lspci
...
00:0a.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11)
00:0a.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11)
...
$ sudo lspci -v
...
00:0a.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11)
        Subsystem: Hauppauge computer works Inc. WinTV Series
        Flags: bus master, medium devsel, latency 64, IRQ 19
        Memory at ee001000 (32-bit, prefetchable) [size=4K]
        Capabilities: [44] Vital Product Data
        Capabilities: [4c] Power Management version 2

00:0a.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11)
        Subsystem: Hauppauge computer works Inc. WinTV Series
        Flags: bus master, medium devsel, latency 64, IRQ 19
        Memory at ee002000 (32-bit, prefetchable) [size=4K]
        Capabilities: [44] Vital Product Data
        Capabilities: [4c] Power Management version 2
...
$ lsmod | grep bt
bt878                  11960  0
snd_bt87x              16292  2
snd_pcm                79876  6 snd_sb16,snd_sb16_dsp,snd_bt87x,snd_pcm_oss
bttv                  173684  2 bt878
...

There are two digital audio capture devices here ([1-0] and [1-1]). Many users report that the 'real' one for TV is [1-1]. Capture the sound from it directly and play it on your sound card:

$ arecord -D hw:1,1 -r 119466 -f S16_LE | aplay
Recording WAVE 'stdin' : Signed 16 bit Little Endian, Rate 119466 Hz, Mono
Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 119466 Hz, Mono

This asks arecord to direct the audio captured from the card (-D hw:1,1) at a specific sampling rate (-r 119466) in 16-bit little endian format (-f S16_LE) to aplay for outputting it to the sound card. You can try various sampling rate such as 32000 or 128000, and check the output. I got this sampling rate of 119,466Hz from the output, and it seems to be the 'native' one the device supports.

While the programs above are running, invoke the volume controls for both the sound card and the Bt878 audio capture device. Use alsamixer -c <card_number_or_identification> to choose the sound card you want to control. E.g., in our case, use alsamixer -c 1 to control the Bt878 audio capture device. For kmix, you can choose the 'Current mixer' from a drop down menu. You can also use your other favorite volume control programs, but they may not support some advanced options you may need to control. While at least I find out that alsamixer and kmix give you full control of your audio devices.

Some tips to make the audio to work:

  • For your sound card, turn on all capture devices and do not mute any volume of any device. Try different combinations of all options available. You do this because there are many types of sound cards in the world, and sometimes you may not know what can affect the audio captured from the TV card. Mute individual sources one by one only when you have gotten the audio from TV channels.
    • Some users report that they need to mute the IEC958 device of the sound card to be able to capture the audio.
  • For your Bt878 audio capture device, also try different combinations of all options available.
    • There is a lesson learned from my card. As shown in the screenshots below, I can configure to capture the audio from one and only one of the following three sources: "FM", "Mic/Line", or "TV Tuner". Surprisingly, the only correct option for capturing TV audio is by selecting "FM" instead of "TV Tuner"! Furthermore, there is NO FM tuner on this card! So, try everything, even though they do not seem to make sense.
The alsamixer interface for controlling the WinTV-GoThe kmix interface for controlling the WinTV-Go

Hope everything works now. If it still does not work, troubleshoot with dmesg to find out if the device has been properly detected, recognized, and configured. Refer to Section 3 below for some details.

2. Watching and Recording TV

TVTime [tvtime.sourceforge.net] is arguably the best TV viewing program in GNU/Linux thanks to its well-regarded realtime video deinterlacer. However, it does not support capturing the digital audio and playing it yet. You can use the following script to solve this problem:

#!/bin/bash
# Redirect the digital audio
arecord -D hw:1,1 -r 119466 -f S16_LE | aplay &
# Start TVTime
tvtime
# Quit... mute the audio too
kill %1

Do a man tvtime for a list of key controls. F1 or Tab shows the on-screen menu.

MPlayer [www.mplayerhq.hu] is also excellent for TV viewing too. Start it with something like:

$ mplayer tv:// -tv driver=v4l2

You may need to specify the TV norm (PAL, SECAM, NTSC, etc.) to get a proper output. Do a man mplayer and check the -tv option for details. Use h and k keys to change the channels, and n to change the TV norm.

You can use mencoder to make recording. A wonderful feature is that you can specify the ALSA device you want to record the audio from. Record it with something like:

$ mencoder tv://E7 -tv driver=v4l2:alsa:adevice=hw.1,1:forceaudio -srate 32000 -oac lavc -ovc lavc -o video.avi 

3. Some Technical Details

Here is the dmesg output for my card, with some important information highlighted:

$ dmesg
....
[   28.765259] Linux video capture interface: v2.00
[   29.007086] bttv: driver version 0.9.16 loaded
[   29.007103] bttv: using 8 buffers with 2080k (520 pages) each for capture
[   29.007113] bttv: Host bridge needs ETBF enabled.
[   29.007354] bttv: Bt8xx card found (0).
[   29.007421] ACPI: PCI Interrupt 0000:00:0a.0[A] -> GSI 18 (level, low) -> IRQ 19
[   29.007452] bttv0: Bt878 (rev 17) at 0000:00:0a.0, irq: 19, latency: 64, mmio: 0xee001000
[   29.007488] bttv0: detected: Hauppauge WinTV [card=10], PCI subsystem ID is 0070:13eb
[   29.007500] bttv0: using: Hauppauge (bt878) [card=10,autodetected]
[   29.007537] bttv0: enabling ETBF (430FX/VP3 compatibilty)
[   29.007584] bttv0: gpio: en=00000000, out=00000000 in=00ffffdb [init]
[   29.010081] bttv0: Hauppauge/Voodoo msp34xx: reset line init [5]
[   29.043887] tveeprom 1-0050: Hauppauge model 44904, rev D108, serial# 6133006
[   29.043902] tveeprom 1-0050: tuner model is Philips FI1216 MK2 (idx 8, type 5)
[   29.043916] tveeprom 1-0050: TV standards PAL(B/G) (eeprom 0x04)
[   29.043928] tveeprom 1-0050: audio processor is None (idx 0)
[   29.043938] tveeprom 1-0050: has radio
[   29.043947] bttv0: Hauppauge eeprom indicates model#44904
[   29.043957] bttv0: using tuner=5
[   29.043969] bttv0: i2c: checking for MSP34xx @ 0x80... not found
[   29.044764] bttv0: i2c: checking for TDA9875 @ 0xb0... not found
[   29.045556] bttv0: i2c: checking for TDA7432 @ 0x8a... not found
[   29.098989] bttv0: i2c: checking for TDA9887 @ 0x86... not found
[   29.147910] tuner 1-0061: chip found @ 0xc2 (bt878 #0 [sw])
[   29.148036] tuner 1-0061: type set to 5 (Philips PAL_BG (FI1216 and compatibles))
[   29.148052] tuner 1-0061: type set to 5 (Philips PAL_BG (FI1216 and compatibles))
[   29.159820] bttv0: registered device video0
[   29.159976] bttv0: registered device vbi0
[   29.160190] bttv0: registered device radio0
[   29.160228] bttv0: PLL: 28636363 => 35468950 .. ok
[   30.598432] bt878: AUDIO driver version 0.0.0 loaded
...

Note that the model (#44904) detected matches what you see from the card. (Refer to the first photo above.)

Reply

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions. (Case-insensitive)