Experiences using digital video under Ubuntu, Redhat 8.0 + 9.0. Details the frustrations of getting cool stuff up and running in Linux.
Thursday, May 19, 2005
cat /proc/sndstat gives:Sound Driver:3.8.1a-980706 (ALSA v1.0.8 emulation code) Kernel: Linux ubuntu 22.214.171.124 #2 Wed May 18 14:21:23 EST 2005 i686 Config options: 0 Installed drivers: Type 10: ALSA emulation Card config: Brooktree Bt878 at 0xe2004000, irq 22 VIA 8235 with ALC650E at 0xc400, irq 19 Audio devices: 0: Bt87x Digital 1: VIA 8235 (DUPLEX) Synth devices: NOT ENABLED IN CONFIG Midi devices: NOT ENABLED IN CONFIG Timers: 7: system timer Mixers: 0: Bt87x 1: Realtek ALC650E
Of course we don't want that pesky Bt87x hogging /dev/dsp, since it's an input device, not output. A quick lsmod gives the sound drivers: snd_via82xx 28608 0 snd_ac97_codec 77624 1 snd_via82xx snd_pcm_oss 53728 0 snd_mixer_oss 20352 1 snd_pcm_oss snd_pcm 95688 4 snd_bt87x,snd_via82xx,snd_ac97_codec,snd_pcm_oss snd_timer 26436 1 snd_pcm snd_page_alloc 10052 3 snd_bt87x,snd_via82xx,snd_pcm gameport 4864 1 snd_via82xx snd_mpu401_uart 8256 1 snd_via82xx snd_rawmidi 25760 1 snd_mpu401_uart snd_seq_device 8780 1 snd_rawmidi snd 58404 10 snd_bt87x,snd_via82xx,snd_ac97_codec,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer,snd_mpu401_uart,snd_rawmidi,snd_seq_device soundcore 10592 1 snd
So we put these at the top of /etc/modules, reboot, and cat /dev/sndstat gives us:Sound Driver:3.8.1a-980706 (ALSA v1.0.8 emulation code) Kernel: Linux ubuntu 126.96.36.199 #2 Wed May 18 14:21:23 EST 2005 i686 Config options: 0 Installed drivers: Type 10: ALSA emulation Card config: VIA 8235 with ALC650E at 0xc400, irq 22 Brooktree Bt878 at 0xe2004000, irq 17 Audio devices: 0: VIA 8235 (DUPLEX) 1: Bt87x Digital Synth devices: NOT ENABLED IN CONFIG Midi devices: NOT ENABLED IN CONFIG Timers: 7: system timer Mixers: 0: Realtek ALC650E 1: Bt87x
Much better :)
Wednesday, May 18, 2005
OK, so after rebuilding the kernel, and remembering to do mkinitrd on the correct version... locking to the signal is much quicker - 1->2 seconds (possibly at the lower end of the limit for DVB-T?).
I'm running the 2.6.11-10
kernel from kernel.org with a fix for broken compilation of saa7134-dvb.c:
CC [M] drivers/media/video/saa7134/saa7134-dvb.o
drivers/media/video/saa7134/saa7134-dvb.c: In function `dvb_init':
drivers/media/video/saa7134/saa7134-dvb.c:56: error: too few arguments
to function `videobuf_dvb_register'
make: *** [drivers/media/video/saa7134/saa7134-dvb.o] Error 1
make: *** [drivers/media/video/saa7134] Error 2
make: *** [drivers/media/video] Error 2
make: *** [drivers/media] Error 2
make: *** [drivers] Error 2
make: Leaving directory `/usr/src/kernel-source-2.6.11'
make: *** [stamp-build] Error 2
- return videobuf_dvb_register(&dev->dvb);
+ return videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev);
Don't know if this fixes the module (don't really care) - but it does allow the build to complete.
Debian bug for this issue: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=302252
How to build a kernel image for ubuntu (for those who haven't done it before): http://www.ubuntulinux.org/wiki/KernelCompileHowto
Tuesday, May 17, 2005
The dvb card is so slow to lock to a channel. Typically I see:mythtv@ubuntu:~/mythtv$ tzap "ABC HDTV" using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0' tuning to 226500000 Hz video pid 0x0903, audio pid 0x0000 status 00 | signal a2a2 | snr e4e4 | ber 0001fffe | unc 00000000 | status 0c | signal a2a2 | snr 3838 | ber 00000000 | unc 00000000 | status 00 | signal a1a1 | snr 5757 | ber 00000000 | unc 00000000 | status 00 | signal a2a2 | snr c0c0 | ber 0001fffe | unc 00000000 | status 0c | signal a2a2 | snr 4141 | ber 00000000 | unc 00000000 | status 1f | signal a1a1 | snr fefe | ber 000014d0 | unc 00000000 | FE_HAS_LOCK status 1f | signal a2a2 | snr fefe | ber 0000137a | unc 00000000 | FE_HAS_LOCK status 1f | signal a2a2 | snr fefe | ber 000012f4 | unc 00000000 | FE_HAS_LOCK status 1f | signal a2a2 | snr fefe | ber 00001376 | unc 00000000 | FE_HAS_LOCK
Wouldn't be a problem if it wasn't for the 1 second gap between each line...
Bad antenna? (I think not, the signals look fine once locked)
Dodgy kernel drivers? (possibly - yikes, I may need to rebuild the kernel!!!)
Dodgy PCI bus/motherboard? (possibly again, but not much I will do about this...)
Of course, before hacking mythtv, you need to do a channel scan in mythtv-setup, or your card won't tune to anything, even with a default channel set :)
Getting the Hauppauge Nova-T budget PCI card to scan to a channel under MythTV is difficult to say the least. Backend log looked like this:2005-05-17 18:39:55.214 SIParser: Starting DVB Section Reader thread2005-05-17 18:39:55.660 DVB#0 Using DVB card 0, with frontend Philips TDA10045H DVB-T.2005-05-17 18:39:55.663 DVB#0 Trying to tune to channel .2005-05-17 18:39:55.667 DVB#0 ERROR - Could not find dvb tuning parameters for transport 02005-05-17 18:39:55.669 DVB#0 ERROR - Failed to get channel options for channel .2005-05-17 18:39:55.670 DVB#0 Recorder: Card opened successfully (using PS mode).2005-05-17 18:39:55.670 DVB#0 AutoPID for ServiceID=0, PCRPID=02005-05-17 18:39:55.672 DVB#0 AutoPID Complete - PAT/PMT Loaded for service2005-05-17 18:39:55.674 DVB#0 Service is FTA2005-05-17 18:39:55.674 DVB#0 ERROR - No PIDS set, please correct your channel setup.
For some reason, it's trying to tune to an empty channel.
Looking at the source, tracing back from these debugs (Trying to tune to channel .) in the function:bool DVBChannel::SetChannelByString(const QString &chan)
We eventually reach tv_rec.cpp, and in the ::init function we see the following call: GetDevices(m_capturecardnum, videodev, vbidev, audiodev, audiosamplerate, inputname, startchannel, cardtype, dvb_options, firewire_options, skip_btaudio);
GetDevices performs a query to the DB, that is selecting the startchan field from the cardinput table for the appropriate card. Trouble is, if this field is empty (as was my case), it returns an empty field, which is then passed relatively unchecked back to the SetChannelByString function, which then fails with the error message as per the backend log.
I have run mythtv-setup and set a start channel for the appropriate DV card, but it doesn't seem to be populated in the DB - hacking the GetDevices function to return a valid channel number for the DV input card seemed to kick the database into gear and fill in a valid start channel. Of course it would have been much quicker to do a modify on the cardinput table entry, but that would be too simple :)
Monday, May 16, 2005
Braindump: so I don't have to fsck around when I drop all analogue channels next time:
For the analogue tuner card, you must set up the channel number on both the first and second pages of the channel config - ie use the channel number as the channel frequency - as long as you have the default frequencies set to 'Australia' then things should just work.
From mysql: select * from channel;
If the freqid != channel number, then the channel frequency isn't set up correctly and mythtv won't tune to the appropriate channel. Also, don't use the funny 'official' channel ID's - just use the channel number.