User:Cowbutt

From MythTV Official Wiki
Revision as of 13:37, 7 July 2011 by Cowbutt (talk | contribs) (Comments)

Jump to: navigation, search

Contents

Cowbutt's MythTV Page

New system, post-January 2011

Based on my successful previous MythTV system I continued to use a combined frontend/backend, though I've since added frontends on my desktop PC and laptop for occasional use over my LAN and WLAN. My goals for my new system were to:

  • Add storage capacity
  • Use RAID for uptime, and some degree of availability
  • Add SATA, as PATA drives are now somewhat hard to buy, and unavailable in sizes over 500GB
  • Improve performance during DVD archiving
  • Improve recording and playback robustness from background tasks (e.g. mirroring, DVD archiving)
  • Provide for future HD capacity
  • Improve aesthetics (case, fan noise)

I don't have a HDTV, so I haven't yet invested in any HD sources (either a DVB-T2 card for FreeviewHD, or a BluRay drive).

I continued to base my configuration on Jarod C. Wilson's 'Fedora Myth(TV)ology' document.

Hardware Specification

  • Intel i5-760 4x2.80GHz CPU
  • 4GB RAM
  • Asus P7H55 Motherboard (iH55 Express)
  • 2xWestern Digital Caviar Black WD2001FASS 2TB discs
  • Sony Optiarc DDU1681S DVD-ROM (This drive is problematic with burnt DVD+Rs; I don't know if this is a problem with my specific drive, a firmware issue, or a hardware design issue. Back to Lite-On next time, I think!)
  • Sony Optiarc AD-7260S DVD+/-RW
  • Antec NSK-6582B case
  • 1*Hauppauge Nova-T DVB-T tuner
  • 1*Hauppauge Nova-T-500 dual DVB-T tuner with Hauppauge infra-red remote control (Note that the Nova-T-500 needs to be configured quite carefully for reliable operation! A configuration checklist is included.)
  • 1*D-Link quad-port NIC
  • Asus 7600GS Silent/HTD 256MB fanless VGA card (originally planned to use an Asus GT240 Silent/DI/1GB DDR3 card, but it can't output a 15kHz VGA signal. I'm using it elsewhere until I have a TV with DVI or HDMI input.)
  • home-built VGA-to-RGB SCART adaptor with integrated audio in/out and composite from SCART
  • 2*PADIX/Rockfire PX-205 PSX-USB Bridge with two Logic-7 Playstation dual-shock gamepads
  • Ruwido/Chicony KB-9820 infra-red PS/2 keyboard/mousepad
  • Panasonic TX-28DTX11 100Hz DVB-T 16:9 TV
  • SLx 4-way UHF amplifier
  • Yamaha RX-V361 AV Receiver/Surround Decoder, linked via 3m TOSlink fibre

Software Specification

  • Fedora 14 running 2.6.35.10-74.fc14.x86_64 kernel and standard video4linux drivers. This kernel revision appears to fully support the Nova-T-500, including the remote control, thus completely negating any reason to use out-of-tree v4l drivers from the mercurial repository. Note that previous Fedora kernels supported the Nova-T-500, but with no remote control support. The v4l drivers from the mercurial repository are reputed to be more stable with the Nova-T-500, but I experienced a couple of hard locks when running with a snapshot taken on 17 March 2008.
  • MythTV 0.24-fixes built as per RPMFusion's packages, but using a GIT snapshot dated January 12 2011.
  • pdnsd caching DNS server
  • privoxy ad-filtering HTTP proxy
  • DHCP daemon
  • netfilter/iptables firewall
  • NTP server
  • nVidia 256.53-1.fc14 drivers built using RPMFusion's src.rpm (later revisions are alleged to have serious problems, especially with VDPAU).
  • Xmame/Xmess 0.106, fceultra 0.98.13-0.7.pre.fc11, VisualBoyAdvance 1.7.2, zsnes 1.51-7, dgen-sdl 1.23
  • dvb-usb-dib0700-1.20.fw firmware for Nova-T-500 (may need symlinks in /lib/firmware named dvb-usb-dib0700-01.fw and dvb-usb-dib0700-1.10.fw)

OS Configuration

Partitioning

/dev/sda1       2GiB /boot       ext4 on md RAID1 with /dev/sdb1
/dev/sda2     430GiB             RAID1 with /dev/sdb2, LVM PVs for / (20GiB, ext4), /home (5GiB, ext4), /srv/myth/emulators (89GiB, ext4), /srv/myth/music (60GiB, ext4), /var (9.9GiB, ext3),
                                  /var/spool (2GiB, ext4)
/dev/sda3      16GiB swap        configured round-robin with /dev/sdb3
/dev/sda4          - extended
/dev/sda5     350GiB             LVM PV for /downloads (135GiB, ext4), /srv/myth/video-filler0 (210GiB, ext4)
/dev/sda6    1065GiB             RAID1 with /dev/sdb6, LVM PVs for /srv/myth/video-R1a, /srv/myth/video-R1b, /srv/myth/video-R1c, /srv/myth/video-R1d, /srv/myth/video-R1e (213GiB each, jfs)

/dev/sda1       2GiB /boot       ext4 on md RAID1 with /dev/sda1
/dev/sda2     430GiB             RAID1 with /dev/sda2, LVM PVs for /, /home, /srv/myth/emulators, /srv/myth/music, /var, /var/spool
/dev/sda3      16GiB swap        configured round-robin with /dev/sda3
/dev/sda4          - extended
/dev/sda5     350GiB             LVM PV for /srv/myth/videos (105GiB, ext4), /tmp (1008MiB, ext4), /var/cache (5GiB, ext4), /var/tmp (1008MiB, ext4), /srv/myth/video-filler1 (210GiB, ext4)
/dev/sda6    1065GiB             RAID1 with /dev/sda6, LVM PVs for /srv/myth/video-R1a, /srv/myth/video-R1b, /srv/myth/video-R1c, /srv/myth/video-R1d, /srv/myth/video-R1e (213GiB each, jfs)

My default storage group uses /srv/myth/video-R1[a-e]. I've created five 213GiB partitions as jfs filesystems cannot be resized to be smaller once they are created. If I need space elsewhere, I can migrate the recordings present in one of the video-R1[a-e] filesystems elsewhere (possibly /dev/null), remove it from the storage group, optionally re-mkfs, and repurpose it.

The /srv/myth/video-filler[0-1] filesystems are intended for filler recordings that I might watch (e.g. The Simpsons, Newsnight, Russia Today etc), but I don't really care if I lose them in the event of a disc failure. I bind these filesystems into a 'filler' storage group, which can be used on a case-by-case basis when setting up a recording rule.

/var is ext3 because that's where the MySQL database lives, and there are reports of performance issues when hosting the MySQL database on ext4 filesystems

If one wanted better reliability, putting swap on a md RAID1 array might be an improvement (if a disc fails, attempts to page in won't fail). I figure swap is rewritten often enough that the disc will reallocate if a sector or three fails. In my experience, my mains electricity fails more often than discs completely die.

/etc/php.ini

Configure PHP's date.timezone setting to match local timezone, or MythWeb will fail to generate preview thumbnails for recordings that were made whilst DST was in force if DST is not currently in force, and vice versa.

Example:

date.timezone = Europe/London

/etc/my.cnf

[mysqld]
key_buffer = 16M
table_cache = 128
sort_buffer_size = 2M
myisam_sort_buffer_size = 8M
query_cache_size = 16M

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

There's scope for increasing MySQL's various buffers still further.

/etc/grub.conf

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/WD2TB--R1SYSTEM-WD2TBroot
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=0
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.35.10-74.fc14.x86_64)
	root (hd0,0)
	kernel /vmlinuz-2.6.35.10-74.fc14.x86_64 ro root=/dev/mapper/WD2TB--R1SYSTEM-WD2TBroot rd_LVM_LV=WD2TB-R1SYSTEM/WD2TBroot rd_MD_UUID=7ebf6aa5:d19116e9:c02700aa:43184eaf rd_NO_LUKS rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYTABLE=uk rd_NO_PLYMOUTH nouveau.modeset=0 rdblacklist=nouveau usbcore.autosuspend=-1
	initrd /initramfs-2.6.35.10-74.fc14.x86_64.img
#title Fedora (2.6.35.10-74.fc14.x86_64)
#	root (hd0,0)
#	kernel /vmlinuz-2.6.35.10-74.fc14.x86_64 ro root=/dev/mapper/WD2TB--R1SYSTEM-WD2TBroot rd_LVM_LV=WD2TB-R1SYSTEM/WD2TBroot rd_MD_UUID=7ebf6aa5:d19116e9:c02700aa:43184eaf rd_NO_LUKS rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYTABLE=uk rhgb quiet nouveau.modeset=0 rdblacklist=nouveau
#	initrd /initramfs-2.6.35.10-74.fc14.x86_64.img

USB autosuspend is disabled, to ensure Nova-T-500 tuner availability.

/etc/udev/rules.d/70-persistent-cd.rules

# This file was automatically generated by the /lib/udev/write_cd_rules
# program, run by the cd-aliases-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and set the $GENERATED variable.

# DVD_RW_AD-7260S (pci-0000:00:1f.2-scsi-4:0:0:0)
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-4:0:0:0", SYMLINK+="cdrom1", ENV{GENERATED}="1"
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-4:0:0:0", SYMLINK+="cdrw", ENV{GENERATED}="1"
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-4:0:0:0", SYMLINK+="dvd1", ENV{GENERATED}="1"
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-4:0:0:0", SYMLINK+="dvdrw", ENV{GENERATED}="1"

# DVD-ROM_DDU1681S (pci-0000:00:1f.2-scsi-3:0:0:0)
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-3:0:0:0", SYMLINK+="cdrom", ENV{GENERATED}="1"
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-3:0:0:0", SYMLINK+="dvd", ENV{GENERATED}="1"

cron jobs

/etc/cron.daily/mythbackup.sh
#!/bin/sh
#Dumps the mythconverg database - daily backup
#Keeps the last 7 days
DAY=($(date +%u))
DUMPFILE="mythbe_"$DAY".sql"
#mysqldump -u mythtv -pmythtv mythconverg -c | gzip >/var/lib/mythtv/$DUMPFILE.gz
# add locking AJB 20060417
mysqldump --opt -u mythtv -pmythtv mythconverg -c | gzip >/var/lib/mythtv/$DUMPFILE.gz
exit 0
/etc/cron.daily/mythrecategorise.sh
#!/bin/sh
echo "update recorded set category='Film' where category='film';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Film' where category='Movie';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Arts/Culture' where category='arts and culture';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Arts/Culture' where category='Arts and culture';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Arts/Culture' where category='Music';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Arts/Culture' where category='music and arts';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='News and Current Affairs' where category='news and current affairs';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Animation' where category='animation';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Comedy' where category='comedy';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Debate' where category='discussion/debate';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Game show' where category='game show';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Documentary' where category='documentary';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Documentary' where category='factual';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Cookery' where category='food';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Sitcoms' where category='sitcom';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Science/Nature' where category='science';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Science/Nature' where category='Nature';" | mysql -u mythtv -pmythtv mythconverg
echo "update recorded set category='Science/Nature' where category='Science';" | mysql -u mythtv -pmythtv mythconverg


echo "update recordedprogram set category='Film' where category='film';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Film' where category='Movie';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Arts/Culture' where category='arts and culture';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Arts/Culture' where category='Arts and culture';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Arts/Culture' where category='Music';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Arts/Culture' where category='music and arts';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='News and Current Affairs' where category='news and current affairs';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Animation' where category='animation';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Comedy' where category='comedy';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Debate' where category='discussion/debate';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Game show' where category='game show';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Documentary' where category='documentary';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Documentary' where category='factual';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Cookery' where category='food';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Sitcoms' where category='sitcom';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Science/Nature' where category='science';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Science/Nature' where category='Nature';" | mysql -u mythtv -pmythtv mythconverg
echo "update recordedprogram set category='Science/Nature' where category='Science';" | mysql -u mythtv -pmythtv mythconverg

echo "update recordedprogram set category_type='movie' where category='Film';" | mysql -u mythtv -pmythtv mythconverg
exit 0

EIT (aka EPG) and Radio Times categories do not always match.

/etc/cron.daily/optimize_mythdb.pl
#!/usr/bin/perl -w
#
# Connects to the mythtv database and repairs/optimizes the tables that it
# finds.  Suggested use is to cron it to run once per day.
#
# @url       $URL$
# @date      $Date: 2007-08-04 11:25:32 +0200 (Sat, 04 Aug 2007) $
# @version   $Revision: 14140 $
# @author    $Author: xris $
# @license   GPL
#

# Includes
    use DBI;
    use MythTV;

# Connect to mythbackend
    my $Myth = new MythTV({'connect' => 0});

# Connect to the database
    $dbh = $Myth->{'dbh'};

# Repair and optimize each table
    foreach $table ($dbh->tables) {
        unless ($dbh->do("REPAIR TABLE $table")) {
            print "Skipped:  $table\n";
            next;
        };
        if ($dbh->do("OPTIMIZE TABLE $table")) {
            print "Repaired/Optimized: $table\n";
        }
        if ($dbh->do("ANALYZE TABLE $table")) {
            print "Analyzed: $table\n";
        }
    }

/etc/X11/xorg.conf


# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig:  version 1.0  (buildmeister@builder3)  Wed Dec 14 16:39:22 PST 2005
# XFree86 4 configuration created by pyxf86config

Section "ServerLayout"
	Identifier     "Default Layout"
	Screen      0  "Screen0" 0 0
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
#AJB20110305 try enabling gnome-screensaver
#	Option         "BlankTime" "0"
        Option         "StandbyTime" "0"
        Option         "SuspendTime" "0"
	Option         "OffTime" "0"
EndSection

Section "Extensions"
# AJB 20110128 enabled for flash
# disable if/when I start using VDPAU!
# See chapter 23 of 
# ftp://download.nvidia.com/XFree86/Linux-x86_64/256.53/README/README.txt
# and
# http://www.mythtv.org/wiki/VDPAU#Tearing.2FStuttering
        Option      "Composite" "Enable"
EndSection

Section "Files"

# RgbPath is the location of the RGB database.  Note, this is the name of the 
# file minus the extension (like ".txt" or ".db").  There is normally
# no need to change the default.
# Multiple FontPath entries are allowed (they are concatenated together)
# By default, Red Hat 6.0 and later now use a font server independent of
# the X server to render fonts.

#Add
# ModulePath "/usr/lib/xorg/modules/extensions/nvidia"
# ModulePath "/usr/lib/xorg/modules/extensions"
# ModulePath "/usr/lib/xorg/modules"
# to `Section "Files"' in the config file and remove/comment the dri module.


# 8776
#	ModulePath   "/usr/X11R6/lib/modules/extensions/nvidia"
#	ModulePath   "/usr/X11R6/lib/modules/extensions"
#	ModulePath   "/usr/X11R6/lib/modules"

#	ModulePath "/usr/lib/xorg/modules/extensions/nvidia"
#	ModulePath "/usr/lib/xorg/modules/extensions"
#	ModulePath "/usr/lib/xorg/modules"
#
#	ModulePath   "/usr/lib/xorg/modules/"

	ModulePath   "/usr/lib64/xorg/modules/extensions/nvidia"
	ModulePath   "/usr/lib64/xorg/modules"
EndSection

Section "ServerFlags"
	Option	    "AllowMouseOpenFail"
EndSection

Section "InputDevice"

# Specify which keyboard LEDs can be user-controlled (eg, with xset(1))
#	Option	"Xleds"		"1 2 3"
# To disable the XKEYBOARD extension, uncomment XkbDisable.
#	Option	"XkbDisable"
# To customise the XKB settings to suit your keyboard, modify the
# lines below (which are the defaults).  For example, for a non-U.S.
# keyboard, you will probably want to use:
#	Option	"XkbModel"	"pc102"
# If you have a US Microsoft Natural keyboard, you can use:
#	Option	"XkbModel"	"microsoft"
#
# Then to change the language, change the Layout setting.
# For example, a german layout can be obtained with:
#	Option	"XkbLayout"	"de"
# or:
#	Option	"XkbLayout"	"de"
#	Option	"XkbVariant"	"nodeadkeys"
#
# If you'd like to switch the positions of your capslock and
# control keys, use:
#	Option	"XkbOptions"	"ctrl:swapcaps"
# Or if you just want both to be control, use:
#	Option	"XkbOptions"	"ctrl:nocaps"
#
	Identifier  "Keyboard0"
	Driver      "kbd"
	Option	    "XkbModel" "pc105"
	Option	    "XkbLayout" "gb"
EndSection

Section "InputDevice"
	Identifier  "Mouse0"
	Driver      "mouse"
	Option	    "Protocol" "IMPS/2"
	Option	    "Device" "/dev/input/mice"
	Option	    "ZAxisMapping" "4 5"
	Option	    "Emulate3Buttons" "yes"
EndSection

Section "Monitor"

#    HorizSync       31.5 - 37.9
#    VertRefresh     50.0 - 70.0

# For 1024x576
	DisplaySize  260 146

# For 1280x576
#        DisplaySize  325 146

	Identifier   "Monitor0"
	VendorName   "Monitor Vendor"
	ModelName    "Unknown monitor"
	Option       "DPMS" "false"
	HorizSync    0.0 - 16.0
	VertRefresh  49.0 - 62.0
	ModeLine     "800x576pali" 15.4 800 823 895 984 576 580 583 625 -hsync -vsync interlace
	ModeLine     "800x288pal-half" 15.4 800 823 895 984 288 290 292 313 -hsync -vsync
#	ModeLine     "768x576pali" 14.8 768 789 858 944 576 581 586 625 -hsync -vsync interlace
# 768x576@14.75 is 15.625kHz horiz sync
	ModeLine     "768x576pali" 14.75 768 789 858 944 576 581 586 625 -hsync -vsync interlace
	ModeLine     "768x288pal-half" 14.8 768 792 856 944 288 290 292 313 -hsync -vsync
#	ModeLine     "720x576pali" 13.9 720 744 808 888 576 580 583 625 -hsync -vsync interlace

# dvb is normally 720x576, 4:3 analogue is normally 768x576
# previous best
# 720x576 w/ 13.5MHz dotclock is 50.0000Hz, 15.6250kHz, checked with hacked xvidtune
# and manually: 864 * 15625 = 13.5M
# Good, but a bit too far to the right - AJB 20071110
#	ModeLine     "720x576pali" 13.5 720 722 786 864 576 581 586 625 -hsync -vsync interlace

#	ModeLine     "720x576pali" 13.5 720 727 791 864 576 581 586 625 -hsync -vsync interlace
#	ModeLine     "720x576pali" 13.5 720 737 801 864 576 581 586 625 -hsync -vsync interlace

# AJB20110108 working, but too far to left and too overscanned
#	ModeLine     "720x576pali" 13.5 720 757 821 864 576 581 586 625 -hsync -vsync interlace
# If HTotal > 872, get flickering or shaking picture. HTotal other than 864 changes H & V sync freq
	ModeLine     "720x576pali" 13.5 720 725 789 864 576 581 586 625 -hsync -vsync interlace

# worth trying if 720x576@13.5 flickers:
# from http://www.avforums.com/forums/showthread.php?t=136811&page=33
# ModeLine "720x576" 15.125 720 762 834 968 576 579 607 625 -hsync -vsync interlace
# from http://www.avforums.com/forums/showthread.php?t=136811&page=27
ModeLine "1024x576" 19.750 1024 1056 1152 1264 576 581 586 625 -hsync -vsync interlace

#ModeLine "1280x576" 21.5625 1280 1320 1440 1380 576 581 586 625 -hsync -vsync interlace
#From http://campus.uab.es/~2106707/vga2tv/resoluc.htm
ModeLine "1280x576" 24.0 1280 1308 1422 1536 576 581 586 625 -hsync -vsync interlace

#	ModeLine     "720x288pal-half" 13.9 720 744 808 888 288 290 292 313 -hsync -vsync
# should be 13.875MHz for 15.625kHz horiz sync
	ModeLine     "720x288pal-half" 13.875 720 744 808 888 288 290 292 313 -hsync -vsync
# previously used for some oddball broadcasts
# 704x576 w/ 13.5MHz dotclock is 50.0000Hz, 15.6250kHz, checked with hacked xvidtune
	ModeLine     "704x576pali" 13.5 704 720 784 864 576 580 583 625 -hsync -vsync interlace
	ModeLine     "704x288pal-half" 13.5 704 720 784 864 288 290 292 313 -hsync -vsync

# appears to be closest to PAL spec, according to:
# http://www.gossamer-threads.com/lists/mythtv/users/191409?search_string=interlace;#191409
# http://www.gossamer-threads.com/lists/mythtv/users/100222?search_string=scart;#100222
# still flickers occasionally with 8776 drivers
# 720x576 w/ 13.875MHz dotclock is 49.98Hz according to xvidtune
#	ModeLine     "720x576pali" 13.875 720 744 808 888 576 581 586 625 -hsync -vsync interlace
#	ModeLine     "720x288pal-half" 13.875 720 744 808 888 288 290 293 313 -hsync -vsync
#	ModeLine     "704x576pali" 13.6 704 728 792 872 576 581 586 625 -hsync -vsync interlace
#	ModeLine     "704x288pal-half" 13.6 704 728 792 872 288 290 293 313 -hsync -vsync

# previously used for some oddball broadcasts
#	ModeLine     "704x576pali" 13.5 704 720 784 864 576 580 583 625 -hsync -vsync interlace
#	ModeLine     "704x288pal-half" 13.5 704 720 784 864 288 290 292 313 -hsync -vsync

	ModeLine     "648x576pali" 12.5 648 664 720 824 576 580 583 625 -hsync -vsync interlace
	ModeLine     "648x288pal-half" 12.5 648 664 720 824 288 290 292 313 -hsync -vsync
	ModeLine     "800x480ntsci" 15.1 800 808 879 960 480 484 487 525 -hsync -vsync interlace
	ModeLine     "800x240ntsc-half" 15.1 800 808 879 960 240 242 244 263 -hsync -vsync
	ModeLine     "720x480ntsci" 13.6 720 728 792 864 480 484 487 525 -hsync -vsync interlace
	ModeLine     "720x240ntsc-half" 13.6 720 728 792 864 240 242 244 263 -hsync -vsync
	ModeLine     "704x480ntsci" 13.3 704 712 776 848 480 484 487 525 -hsync -vsync interlace
	ModeLine     "704x240ntsc-half" 13.3 704 712 776 848 240 242 244 263 -hsync -vsync
	ModeLine     "657x480ntsci" 12.5 656 664 728 792 480 484 487 525 -hsync -vsync interlace
	ModeLine     "657x240ntsc-half" 12.5 656 664 728 792 240 242 244 263 -hsync -vsync
	ModeLine     "320x256pal" 10.9 320 352 368 400 256 261 264 269 -hsync -vsync doublescan
	ModeLine     "320x512pali" 5.5 320 352 368 400 512 523 527 539 -hsync -vsync interlace
	ModeLine     "320x200pal" 8.4 320 352 368 400 200 204 206 211 -hsync -vsync doublescan
	ModeLine     "320x400pali" 4.2 320 352 360 392 400 409 411 421 -hsync -vsync interlace
	ModeLine     "320x400ntsci" 5.1 320 352 368 400 400 409 411 421 -hsync -vsync interlace
	ModeLine     "320x200ntsc" 10.2 320 352 368 400 200 204 206 211 -hsync -vsync doublescan
	ModeLine     "352x288pald" 13.5 352 392 492 512 288 292 300 304 -hsync -vsync doublescan
	ModeLine     "352x288paldi" 13.5 352 392 492 512 288 292 300 304 -hsync -vsync interlace doublescan
	Option	    "dpms"
EndSection

Section "Device"

# next line might make XvMC work
# or fix NV WAIT problems
# ...maybe, but makes picture bounce - AJB 20060403
    Option         "NvAgp" "1"
    Option         "UseEvents" "True"

# for MythTV chromakey OSD
    Option         "XvmcUsesTextures" "false" 

# another thing that might help with NV WAIT - AJB 20060403
#    Option         "TVStandard" "PAL-I"
	Identifier  "Videocard0"
	Driver      "nvidia"
	VendorName  "Videocard vendor"
	BoardName   "NVIDIA GeForce 4 (generic)"
	Option	    "RenderAccel" "off"
#    Option         "TVOutFormat" "COMPOSITE"
	Option	    "ConnectedMonitor" "CRT"
	Option      "UseEdidDpi" "false"
        Option      "UseEdidFreqs" "false"
        Option      "ModeValidation" "NoEdidModes"
	Option      "ModeDebug" "true"
# attempt to fix occasional judders
	Option	    "UseEvents"	"true"

# AJB 20110128 for flash
	Option      "AddARGBGLXVisuals" "true"
#	Option      "RandRRotation "true"
	Option      "UseCompositeWrapper" "true"
        Option      "TripleBuffer" "true"

EndSection

Section "Screen"
	Identifier "Screen0"
	Device     "Videocard0"
	Monitor    "Monitor0"
	DefaultDepth     24
	SubSection "Display"
		Viewport   0 0
		Depth     16
		Modes    "1024x576" "720x576pali" "720x288pal-half" "704x576pali" "704x288pal-half" "648x576pali" "648x288pal-half"
#		Modes    "720x576pali" "720x288pal-half" "704x576pali" "704x288pal-half" "648x576pali" "648x288pal-half"
#		Modes    "704x576pali" "704x288pal-half" "648x576pali" "648x288pal-half"
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     24
		Modes    "1024x576" "720x576pali" "720x288pal-half" "704x576pali" "704x288pal-half" "648x576pali" "648x288pal-half"
#		Modes    "720x576pali" "720x288pal-half" "704x576pali" "704x288pal-half" "648x576pali" "648x288pal-half"
#		Modes    "704x576pali" "704x288pal-half" "648x576pali" "648x288pal-half"
	EndSubSection
EndSection

/etc/rc.d/rc.local

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

#AJB 20101231 WD 2TB drives spin down too freequently
/sbin/hdparm -B 254 /dev/sda
/sbin/hdparm -B 254 /dev/sdb

#AJB 20110104 eth0:0 doesn't get started automatically anymore?!?
#/sbin/ifup eth0:0

# below this point copied from old mythtv setup 20110107

# mtd needs mysqld to be up, so moved to mythbackend initscript
# AJB 20071106
#/usr/bin/mtd --daemon
setkeycodes e01e 120

# PCI latency for PATA controllers
#/sbin/setpci -s 00:1f.1 latency_timer=b0 # Intel
#/sbin/setpci -s 02:0c.0 latency_timer=b0 # Promise RAID

# nvidia recommended setting as per <http://www.nvnews.net/vbulletin/showpost.php?p=854678&postcount=5>
# - AJB 20060403
/sbin/setpci -s 01:00.0 latency_timer=80

# attempt to fix router disappearing - AJB 20060423
# 10M doesn't seem to fix it entirely, but it seems to recover
# glitches regularly
# disabled after switching eth0 and eth1 roles around
#/sbin/mii-tool -A 10baseT-HD eth0 # advertise only 10baseT-HD
#/sbin/mii-tool -F 10baseT-HD eth0 # force 10baseT-HD

# attempt to fix router disappearing - AJB 20060424
# this seems worse than 10M-HD
# sometimes doesn't recover
#/sbin/mii-tool -A 100baseTx-HD eth0 # advertise only 10baseT-HD
#/sbin/mii-tool -F 100baseTx-HD eth0 # force 10baseT-HD

# this seems to be ignored in /etc/sysconfig/harddiskhdg AJB 20060622
# 240*5s=20m
#hdparm -S 240 /dev/sdb
# AJB 20071105 - 2*30m=60m
# disabled 20071224 after configuring InstantMirror
# hdparm -S 242 /dev/sdb
lsmod >/tmp/lsmod-rc.local-pre.txt 2>&1
#modprobe dvb_usb_dib0700
#lsmod >/tmp/lsmod-rc.local-post.txt 2>&1

# Attempt to fix judder AJB 20071114
blockdev --setra 2048 /dev/sda
blockdev --setra 2048 /dev/sdb

# Disable DVB LNB powerdown, since module option seems to be ignored AJB 20080318
echo 0 >/sys/module/dvb_core/parameters/dvb_powerdown_on_sleep

# Fix USB power to on AJB 20110119
#for i in `find /sys -name 'level' | grep usb`; do echo "on" >$i; done
# AJB20110120 power/level deprecated in favour of power/control
for i in `find /sys -name 'control' | grep usb`; do echo "on" >$i; done
for i in `find /sys -name 'control' | grep i2c` ; do echo "on" >$i; done

Fixing USB power to 'on' seems to be important for maintaining availability of both Nova-T-500 tuners. Failing to do so results in the kernel sometimes suspending either the tuners themselves, or the VIA USB bridge they sit behind, and being unable to reset and recover them without a power cycle.

/etc/modprobe.d/nova-t-500-buggy_sfn_workaround.conf

#UK Freeview doesn't use Single Frequency Network, so leaving workaround disabled probably results in more robust decoding AJB20110120
#options dib3000mc buggy_sfn_workaround=1 debug=1
#options dib7000p buggy_sfn_workaround=1 debug=1

/etc/modprobe.d/nova-t-500-dib3000-dib7000-debug.conf

options dib3000mc debug=1
options dib7000p debug=1

/etc/modprobe.d/nova-t-500-disable-ir.conf

#options dvb_usb disable_rc_polling=1
options dvb_usb disable_rc_polling=1 debug=127

The Nova-T-500 IR receiver has been implicated in tuner instability, and I only use the Nova-T's IR receiver, so I disable the Nova-T-500's.

/etc/modprobe.d/nova-t-500-force-lna.conf

#options dvb-usb-dib0700 force_lna_activation=1
#options dvb-usb-dib0700 force_lna_activation=1 debug=7
options dvb-usb-dib0700 adapter_nr=1,2 force_lna_activation=1 debug=7

This enables the Low Noise Amplifier on the Nova-T-500, and forces its tuners to take up slots 1 and 2, regardless of whether the driver for it or the Nova-T is loaded first.

/etc/modprobe.d/nova-t-500-mt2060-debug.conf

options mt2060 debug=1

/etc/modprobe.d/nova-t-adapter_nr.conf

options cx88-dvb adapter_nr=0

This forces the Nova-T's tuner to take up slot 0, regardless of whether the driver for it, or the Nova-T-500's tuners is loaded first.

/etc/X11/XvMCConfig

This file appears to be deprecated and no longer needed.

Add to /etc/security/limits.conf

# increased from 50 to 99 20080315: attempt to fix judder - AJB
## Automatically appended by jack-audio-connection-kit
@jackuser - rtprio 20
@jackuser - memlock 4194304

*               -       rtprio     0
*               -       nice       0
@video          -       rtprio     50
@video          -       nice       0


#@mythtv          -       rtprio     50
@mythtv          -       rtprio     99
@mythtv          -       nice       0

$HOME/.Xclients

#! /bin/bash

# Created by Red Hat Desktop Switcher

#echo >>/tmp/xstartup "in .Xclients at `date` with params $*"

if [ -e "$HOME/.Xclients-$HOSTNAME$DISPLAY" ]; then
    exec $HOME/.Xclients-$HOSTNAME$DISPLAY
else
    exec $HOME/.Xclients-default
fi

/etc/X11/xinit/Xclients.gnome-session.sh

#!/bin/sh

echo >>/tmp/xstartup "in 00-mythfrontend.sh at `date` as `whoami` with params $*"

if [ "$USER" = "mythtv" ]; then
	#AJB20110115 getting tearing not noticed previously w/F14/0.24/nv256.53
	#before we had working Xclients
	#Re-enabled; XvMC combined with GL, Xv VSync appears to be perfect
	## Load nVidia driver custom settings
	nvidia-settings --load-config-only &
	# Restore audio settings
	/usr/sbin/alsactl restore
	# Launch irexec for myth power button stop/start
	IREXECPID=`ps uaxwww | grep irexec$ | awk '{print $2}'`
	if [ "$IREXECPID" = "" ]; then
		irexec &
	fi	
	# Disable dynamic power management (screen blanking)
	/usr/bin/xset -dpms

#AJB20110305 try enabling gnome-screensaver
#AJB20110305 Note that gnome-screensaver's --poke functionality got ripped out
#so must use xscreensaver
#	# Disable screen saver
#	/usr/bin/xset s off


	# Try adding xscreensaver 20080322
	# Works fine, apart from when screensaver kicks in during paused video
	# playback, which causes a crash when resuming with nVidia driver 96.43.01
	# 20080323
	# Works fine with F14/nVidia driver 256.53 20110707
	 /usr/bin/xscreensaver -nosplash&
	#AJB20110305 sleep a bit so xscreensaver/mythfrontend don't race to get keyboard focus
#	 sleep 5s
	# get rid of blue line at bottom of picture
	/usr/bin/xvattr -a XV_COLORKEY -v 66048
	# Launch myth frontend
	#mythfrontend &
	# try to fix problems with MythArchive mythtranscode sometimes failing
	rm -f ~mythtv/.ICEauthority
	
	# add ionice -c 2 -n 0 AJB20110120
	ionice -c 2 -n 0 /usr/bin/mythfrontend >/dev/null 2>&1 &
#	sleep 5s
	gnome-session
# AJB20110305 FIXME - gnome-session steals keyboard focus from mythfrontend
else
	# from /etc/X11/xinit/Xsession AJB20110115
	    # lack of SSH_AGENT is intentional, see #441123.  though
	    # the whole thing should really happen in xinitrc.d anyway.
	    exec -l $SHELL -c gnome-session
	    exec /bin/sh -c "exec -l $SHELL -c \"gnome-session\"" 
fi

Hauppauge Infra-Red Remote

The sensor for the remote is connected to the Nova-T. No sensor is connected to the Nova-T-500. When I was using two Nova-Ts, sometimes the /dev nodes would swap around after a reboot or kernel upgrade. Using the by-path /dev/ entries is a bit more stable.

/etc/sysconfig/lirc
# Note: in addition to these parameters, you need to have working    -*- sh -*-
# configuration file for lircd (and lircmd if enabled).

# Options to lircd(8).  Typically, this will be empty, as which driver to use
# should be specified using the LIRC_DRIVER variable below.
#AJB 20110108 path to ir input device node moves around, so use a shell wildcard
LIRCD_OPTIONS="-d /dev/input/by-path/pci-0000:04:02.?-event-ir"

# The infrared receiver (and/or transmitter) driver to be used by lircd(8),
# similar to passing "-H driver" to lircd(8).
# Run "/usr/sbin/lircd -H help" to get a listing of supported drivers.
LIRC_DRIVER="devinput"
#LIRC_DRIVER=""

# Which lirc device will be used by lircd(8).
# This is the same as passing "-d device" to lircd.
# An empty value will use the default /dev/lirc0 device.
#LIRC_DEVICE="/dev/input/by-path/pci-0000:04:02.?-event-ir"
#LIRC_DEVICE=""

# If "yes", the init script will try to start lircmd(8) too.
ENABLE_LIRCMD="no"

# Options to lircmd(8).
LIRCMD_OPTIONS=""
/etc/lircd.conf

# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.8.7(devinput) on Sat Jan  8 14:43:26 2011
#
# contributed by 
#
# brand:                       /root/irrecord-201101081438.txt
# model no. of remote control: 
# devices being controlled by this remote:
#

begin remote

  name  /root/irrecord-201101081438.txt
  bits            8
  eps            30
  aeps          100

  one             0     0
  zero            0     0
  pre_data_bits   56
  pre_data       0x4000400001E
  gap          111995
  toggle_bit_mask 0x0

      begin codes
          Go                       0x3B
          Power                    0x3D
          TV                       0x1C
          Videos                   0x18
          Music                    0x19
          Pictures                 0x1A
          Guide                    0x1B
          Radio                    0x0C
          UP                       0x14
          LEFT                     0x16
          RIGHT                    0x17
          DOWN                     0x15
          OK                       0x25
          Back                     0x1F
          Menu                     0x0D
          VolumeUp                 0x10
          VolumeDown               0x11
          Prev-Ch                  0x12
          ChannelUp                0x20
          ChannelDown              0x21
          Mute                     0x0F
          Record                   0x37
          Stop                     0x36
          Replay                   0x32
          Play                     0x35
          Skip                     0x34
          PreviousTrack            0x24
          Pause                    0x30
          NextTrack                0x1E
          1                        0x01
          2                        0x02
          3                        0x03
          4                        0x04
          5                        0x05
          6                        0x06
          7                        0x07
          8                        0x08
          9                        0x09
          Asterisk                 0x0A
          0                        0x00
          Hash                     0x0E
          Red                      0x0B
          Green                    0x2E
          Yellow                   0x38
          Blue                     0x29
      end codes

end remote

Due to changes in the IR remote code in the kernel between Fedora 8 and Fedora 14, I needed to regenerate this file using irrecord -H devinput -d /dev/input/by-path/pci-[...]-event-ir $HOME/lircd.conf. I also needed to configure HAL to ignore the IR device nodes.

/usr/share/hal/fdi/preprobe/20thirdparty/10-ignore-cx88-ir.fdi

<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
  <match key="info.product" contains_ncase="cx88 ir">
     <merge key="info.ignore" type="bool">true</merge>
  </match>
</device>
</deviceinfo>

/usr/share/hal/fdi/preprobe/20thirdparty/10-ignore-dvbusb-ir.fdi

<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
  <match key="info.product" contains_ncase="IR-receiver">
     <merge key="info.ignore" type="bool">true</merge>
  </match>
</device>
</deviceinfo>
$HOME/.lircrc
# Power Button
begin
prog = irexec
#button = OFF
button = Power
#button = POWER # (for my RS15-2116 remote)
repeat = 0
config = /usr/local/bin/mythpowerbutton.sh
end

# ~/.mythtv/lircrc#
# MythTV native LIRC config file for
# the Hauppauge PVR 150 silver remote
#
# Modified from Jarod Wilson's which came from Jeff Campbell's
# and Brad Templeton's
# Modified still further by Robert Jones
# Here we have the jump point commands.  They only work if you have
# defined function keys for these jump points.  For me the most
# common command is the menu of recordings, so I put that on "videos"
# even though that's counter-intuitive

begin
prog = mythtv
button = TV
repeat = 3
config = F1
end

begin
prog = mythtv
button = Videos
repeat = 3
config = F2
end

# Not yet defined
begin
prog = mythtv
button = Music
repeat = 3
config = F3
end

begin
prog = mythtv
button = Pictures
repeat = 3
config = F4
end

begin
prog = mythtv
button = Guide
repeat = 3
config = F5
end

begin
prog = mythtv
button = Radio
repeat = 3
config = F6
end

begin
prog = mythtv
button = UP
repeat = 3
config = Up
end

begin
prog = mythtv
button = DOWN
repeat = 3
config = Down
end

begin
prog = mythtv
button = LEFT
repeat = 3
config = Left
end

begin
prog = mythtv
button = RIGHT
repeat = 3
config = Right
end

# Channel Up
begin
prog = mythtv
button = ChannelUp
repeat = 3
config = Up
end

# Channel Down
begin
prog = mythtv
button = ChannelDown
repeat = 3
config = Down
end

# OK/Select
begin
prog = mythtv
button = OK
config = Space
end

# Play
begin
prog = mythtv
button = Play
config = Return
end

# Stop
begin
prog = mythtv
button = Stop
config = I
end

# Escape/Exit/Back
begin
prog = mythtv
button = Back
config = Esc
end

# clashes with irexec definition - AJB 20060401
## Power Off/Exit
#begin
#prog = mythtv
#button = Power
#config = Esc
#end


# Pause
begin
prog = mythtv
button = Pause
repeat = 3
config = P
end

# Mute
begin
prog = mythtv
button = Mute
repeat = 3
config = |
end

# Fast forward (30 sec default)
begin
prog = mythtv
button = Skip
repeat = 3
config = >
end

# Rewind (10 sec default)
begin
prog = mythtv
button = Replay
repeat = 3
config = <
end

# Skip forward (10 min default)
begin
prog = mythtv
button = NextTrack
repeat = 3
config = End
end

# Skip backward (10 min default)
begin
prog = mythtv
button = PreviousTrack 
repeat = 3
config = Home
end

# Record
begin
prog = mythtv
button = Record
repeat = 3
config = R
end

# Delete
begin
prog = mythtv
button = Red
repeat = 3
config = D
end

# Decrease play speed
begin
prog = mythtv
button = Green
repeat = 3
config = J
end

# Display EPG while in live TV,
# View selected show while in EPG
begin
prog = mythtv
button = Menu
repeat = 3
config = M
end

begin
prog = mythtv
button = VolumeUp
repeat = 3
config = )
end

begin
prog = mythtv
button = VolumeDown
repeat = 3
config = (
end

# Bring up OSD info
begin
prog = mythtv
button = Go
repeat = 3
config = I
end

# Change display aspect ratio
begin
prog = mythtv
button = Prev-Ch
repeat = 3
config = W
end

# was J -double speed watch
# changed to i 20100918 - info
begin
prog = mythtv
button = Yellow
repeat = 3
config = i
end

# change tuners
begin
prog = mythtv
button = Hash
repeat = 3
config = Y
end

# Bring up Time stretch
begin
prog = mythtv
button = Blue
repeat = 3
config = A
end

# Numbers 0-9

begin
prog = mythtv
button = 0
repeat = 3
config = 0
end

begin
prog = mythtv
button = 1
repeat = 3
config = 1
end

begin
prog = mythtv
button = 2
repeat = 3
config = 2
end

begin
prog = mythtv
button = 3
repeat = 3
config = 3
end

begin
prog = mythtv
button = 4
repeat = 3
config = 4
end

begin
prog = mythtv
button = 5
repeat = 3
config = 5
end

begin
prog = mythtv
button = 6
repeat = 3
config = 6
end

begin
prog = mythtv
button = 7
repeat = 3
config = 7
end

begin
prog = mythtv
button = 8
repeat = 3
config = 8
end

begin
prog = mythtv
button = 9
repeat = 3
config = 9
end


### MPlayer lirc setup



# Show OSD
begin
prog = mplayer
button = Menu
repeat = 3
config = osd
end

# Pause playback
begin
prog = mplayer
button = Pause
repeat = 3
config = pause
end

# Skip ahead a minute if playing
# If paused, resume playing
begin
prog = mplayer
button = Play
repeat = 3
config = seek +1
end

# Stop playback and exit
begin
prog = mplayer
button = Stop
repeat = 3
config = quit
end

# Mute
begin
prog = mplayer
button = Mute
repeat = 3
config = mute
end

begin
button = ChannelUp
prog = mplayer
config = seek_chapter +1
end

begin
button = ChannelDown
prog = mplayer
config = seek_chapter -1
end

# Seek back 10 seconds
begin
prog = mplayer
button = Replay
repeat = 3
config = seek -10
end

# Seek forward 30 seconds
begin
prog = mplayer
button = Skip 
repeat = 3
config = seek +30
end

# Quit
begin
prog = mplayer
button = Back
repeat = 3
config = quit
end

# Seek forward 10 minutes
begin
prog = mplayer
button = NextTrack
repeat = 3
config = seek +600
end

# Seek backward 10 minutes
begin
prog = mplayer
button = PreviousTrack 
repeat = 3
config = seek -600
end

# Toggle full-screen
begin
prog = mplayer
button = Red
repeat = 3
config = vo_fullscreen
end

begin
     button = Volumeup
     prog = mplayer
     config = volume 1
     repeat = 1
end

begin
    button = VolumeDown
    prog = mplayer
    config = volume -1
    repeat = 1
end

begin
     button = ChannelUp
     prog = mplayer
     config = pt_step 1
end
begin
     button = ChannelDown
     prog = mplayer
     config = pt_step -1
end

begin
     button = Yellow
     prog = mplayer
     config = audio_delay +0.1
end
begin
     button = Green
     prog = mplayer
     config = audio_delay -0.1
end

begin
	button=Subtitles
	prog=mplayer
	config = sub_visibility
end

begin
	button=Text
	prog=mplayer
	config=sub_select
end

begin
        button=Blue
        prog=mplayer
        config=switch_audio
end

begin
button = up
prog = mplayer
config = dvdnav 1
end

begin
button = left
prog = mplayer
config = dvdnav 3
end

begin
button = ok
prog = mplayer
config = dvdnav 6
end

begin
button = right
prog = mplayer
config = dvdnav4
end

begin
button = down
prog = mplayer
config = dvdnav 2
end



### Xine lirc setup

begin
prog = xine
button = Play
repeat = 3
config = Play
end

begin
prog = xine
button = Stop
repeat = 3
config = Stop
end

begin
prog = xine
button = Power
repeat = 3
config = Quit
end

begin
prog = xine
button = Pause
repeat = 3
config = Pause
end

begin
prog = xine
button = ChannelUp
repeat = 3
config = EventUp
end

begin
prog = xine
button = ChannelDown
repeat = 3
config = EventDown
end

begin
prog = xine
button = VolumeDown
repeat = 3
config = EventLeft
end

begin
prog = xine
button = VolumeUp
repeat = 3
config = EventRight
end

begin
prog = xine
button = OK
repeat = 3
config = EventSelect
end

begin
prog = xine
button = Back
repeat = 3
config = Menu
end

begin
prog = xine
button = Skip
repeat = 3
#config = SpeedFaster
config = SeekRelative+60
end

begin
prog = xine
button = Replay
repeat = 3
#config = SpeedSlower
config = SeekRelative-60
end

begin
prog = xine
button = VolumeUp
repeat = 3
config = Volume+
end

begin
prog = xine
button = VolumeDown
repeat = 3
config = Volume-
end

begin
prog = xine
button = Mute
repeat = 3
config = Mute
end

begin
prog = xine
button = Menu
repeat = 3
config = RootMenu
end

begin
prog = xine
button = NextTrack
repeat = 3
config = EventNext
end

begin
prog = xine
button = PreviousTrack
repeat = 3
config = EventPrior
end

begin
prog = xine
button = Go
repeat = 3
config = OSDStreamInfos
end

begin
prog = xine
button = Red
repeat = 3
config = Quit
end

I no longer have a symlink from $HOME/.mythtv/lircrc to this file.

/usr/local/bin/mythpowerbutton.sh
#!/bin/bash
PROG=mythfrontend
#PROG=gnome-session
STATUS=`ps -e | grep $PROG | grep -v grep | wc -l | awk '{print $1}'`

if [ `echo $DISPLAY | grep -c ":0"` -ge 1 ]
then
    if [ $STATUS -eq 0 ]
    then
        echo "use mythconverg; update cardinput set startchan=1;" | mysql -u root --password=root    
#	xrandr -s 768x576
	xrandr -s 1024x576 # AJB 20071104
#	xrandr -s 1280x576 # AJB 20071231 - doesn't really work out!
        #( $PROG & )
	# add ionice -c 2 -n 0 AJB20110120
        ( ionice -c 2 -n 0 $PROG >/dev/null 2>&1 & )
    else
        killall $PROG
        echo "use mythconverg; update cardinput set startchan=1;" | mysql -u root --password=root
    fi
fi
exit 0
# try to fix problems with MythArchive mythtranscode sometimes failing
rm -f ~mythtv/.ICEauthority

Sound

/home/mythtv/.asoundrc
# Do not use this directly--it requires specific rate, channels, and format
pcm.dmix-digital {
  type dmix
  ipc_key 1235
  slave {
    pcm "digital-hw"
    period_time 0
    period_size 1024
    buffer_size 4096
    rate 48000
  }
}

# Control device (mixer, etc.) for the card
ctl.dmix-digital {
  type hw
  card 0
}

pcm.!default {
  type plug
  slave {
    pcm multi
    rate 48000
  }
  hint {
    show on
    description "Multiple Output - Use analog and digital outputs simultaneously"
  }
  ttable.0.0 1.0
  ttable.1.1 1.0
  ttable.0.2 1.0
  ttable.1.3 1.0
}

pcm.ajb {
  type plug
  slave {
    pcm multi
    rate 48000
  }
  hint {
    show on
    description "AJB Multiple Output - Use analog and digital outputs simultaneously"
  }
  ttable.0.0 1.0
  ttable.1.1 1.0
  ttable.0.2 1.0
  ttable.1.3 1.0
}

pcm.stereo {
  type plug
  slave {
    pcm multi
    rate 48000
  }
  hint {
    show on
    description "Multiple Stereo Output - Use analog and digital outputs simultaneously"
  }
  ttable.0.0 1.0
  ttable.1.1 1.0
  ttable.0.2 1.0
  ttable.1.3 1.0
}

ctl.stereo {
  type hw
  card 0
}

pcm.multi {
  type multi
  slaves.a.pcm "analog-hw"
  slaves.a.channels 2
  slaves.b.pcm "digital-hw"
  slaves.b.channels 2
  bindings.0.slave a
  bindings.0.channel 0
  bindings.1.slave a
  bindings.1.channel 1
  bindings.2.slave b
  bindings.2.channel 0
  bindings.3.slave b
  bindings.3.channel 1
  hint {
    show on
    description "Multiple Output - Use analog and digital outputs simultaneously"
  }
}

ctl.multi {
  type hw
  card 0
}
MythTV configuration
AudioOutputDevice = ALSA:ajb # IMPORTANT - makes MythTV output simultaneously to front (analog) and S/PDIF (digital) outputs, albeit in Stereo only.
MusicAudioDevice = ALSA:ajb
PassThruOutputDevice = ALSA:iec958:AES0=6 # digital output
PassThruDeviceOverride = 1 # Separate digital output = enabled
AC3PassThru = 0 # Dolby Digital = disabled
DTSPassThru = 0 # DTS = disabled
MixerDevice = ALSA:default
MixerControl = PCM
MasterMixerVolume = 100
PCMMixerVolume = 94
AudioDefaultUpmix = 0 # Upconvert stereo to 5.1 surround = disabled
AudioUpmixType = 0 # Upmix quality?
Audio48kOverride = 0 # Force audio device output to 48kHz = disabled
AdvancedAudioSettings = 1 # Advanced Audio Configuration = enabled
DecodeExtraAudio = 1
SRCQualityOverride = 0 # Override SRC quality = disabled
SRCQuality = 1
Speaker

Note that if MythTV only has a single audio path. A side effect of this is that it cannot be configured both to pass through multi-channel (e.g. 5.1) digital audio and to output stereo analogue audio simultaneously. If you try, you will end up hearing ugly compressed digital noise through your analogue output.

Configured like this, I get stereo audio on both the analogue and digital S/PDIF outputs. I usually watch MythTV recordings with only my TV's speakers enabled, but if I mute my TV and switch on my AV receiver, this is adequate. I have a cheap DVD player if I want to hear a 5.1 DVD. If more UK Freeview broadcasts were > 2.0 audio, I might reconsider this configuration.

MythTV configuration

MythTV Playback Settings

  • Enable realtime priority threads
  • Extra audio buffering
  • Custom Video Playback Profile: Decoder=Standard (ffmpeg), Max CPUs=1, Deblocking filter=enabled, Video renderer=xv-blit, OSD renderer=chromakey, OSD fade=disabled, Primary deinterlacer=Bob (2x), Fallback deinterlacer=None
  • OpenGL vsync setting is no longer present
  • Enable SyncToVBlank=1, XVideoTextureSyncToVBlank=1, XVideoBlitterSyncToVBlank=1 and XVideoSyncToDisplay=1 in $HOME/.nvidia-settings-rc
  • Use 1024x576 for UI, 720x576pali for playback

The bug that resulted in XVideo regions displayed on interlaced displays being scandoubled appears to no longer be present with the combination of 7600GS/GT hardware, nVidia driver version 256.53 and MythTV 0.24-fixes. Output is full vertical resolution, jitter free and scrolling credits are smooth.

For belt-and-braces, I use ionice to run mythfrontend and mythbackend with the highest priority (0) in the best-effort (class=2) IO scheduling class. The MySQL daemon is run with priority slightly lower at 1 (still within the 'best-effort' IO scheduling class). IO-intensive background processes (e.g. mirroring using rsync, certain elements of MythArchive) are run only within the idle (class=3) IO scheduling class. Generally, the only playback disruption I experience is coincident with the flurry of database activity at the start and end of recording. There is scope for running mythfrontend within the realtime (class=1) IO scheduling class, but I have not yet experimented with this.

Wrap mythfilldatabase

#!/bin/sh
echo "mythfilldatabase started `date`" >>/var/lib/mythtv/mythfilldatabase.log
echo "Parameters:" >>/var/lib/mythtv/mythfilldatabase.log
for i in $*
do
	/bin/echo -n "<$i> " >>/var/lib/mythtv/mythfilldatabase.log
done
echo "User: `whoami`" >>/var/lib/mythtv/mythfilldatabase.log
echo "Groups: `groups`" >>/var/lib/mythtv/mythfilldatabase.log
echo "PWD: `pwd`" >>/var/lib/mythtv/mythfilldatabase.log
echo "Environment: " >>/var/lib/mythtv/mythfilldatabase.log
#export XMLTV_SUPPLEMENT="http://supplement.xmltv.org"
export XMLTV_SUPPLEMENT="/etc/mythtv/.xmltv/supplement/"
export XMLTV_SUPPLEMENT_VERBOSE=1
export >>/var/lib/mythtv/mythfilldatabase.log
#rm -rf $HOME/.xmltv/supplement/tv_grab_uk_rt/*
cd $HOME/.xmltv/supplement/tv_grab_uk_rt/
wget -N -nv http://supplement.xmltv.org/tv_grab_uk_rt/channel_ids
wget -N -nv http://supplement.xmltv.org/tv_grab_uk_rt/prog_titles_to_process
wget -N -nv http://supplement.xmltv.org/tv_grab_uk_rt/utf8_fixups
cd $HOME
#echo "waiting 10s"
#sleep 10s

su -c "ionice -c 3 nice /usr/bin/mythfilldatabase $*" mythtv

This script sets xmltv to use updated (aka supplement) channel data files, downloading them automatically if they have changed. It also runs mythfilldatabase in the 'idle' IO scheduling class. Configure MythTV to use this script using mythtv-setup.

Wrap /usr/bin/mythcommflag

mv /usr/bin/mythcommflag /usr/bin/mythcommflag.fedora, then put this script in its place:

#!/bin/bash


# edit/tune these #
# Allow ad breaks to be upto 400s long by coalescing non-silence
MAXCOMMBREAKSECS=400
# mytharchivehelper isn't frame-accurate, and mythcommflag won't add final cut pair if the end of the cut is greater
# than the actual final frame, so subtract $ENDFUDGEFRAMES from the value mytharchivehelper returns
ENDFUDGEFRAMES=75
# -70dB and minimum of 0.15s to be considered 'silent'
MP3SPLT_OPTS="th=-70,min=0.15"
# Log file
LOGFILE="/var/log/mythtv/mythcommflag-wrapper"
# Copy commercial skiplist to cutlist automatically? 1=Enabled
COPYTOCUTLIST=1

MYTHCFG=""
# mythbackend in Fedora packages has $HOME=/etc/mythtv
if [ -e $HOME/mysql.txt ]; then
	MYTHCFG="$HOME/mysql.txt"
fi


if [ -e $HOME/.mythtv/mysql.txt ]; then
	MYTHCFG="$HOME/.mythtv/mysql.txt"
fi
if [ "$MYTHCFG" = "" ]; then
	echo >>$LOGFILE "No mysql.txt found in $HOME or $HOME/.mythtv - exiting!"
	exit 1
fi

MAH=`which mytharchivehelper`
if [ "$MAH" = "" ]; then
	echo "mytharchivehelper not found in $PATH - exiting!"
	exit 1
fi
		
# DB username and password
MYTHHOST=`grep DBHostName <$MYTHCFG | awk -F= '{print $2}'`
MYTHUSER=`grep DBUserName <$MYTHCFG | awk -F= '{print $2}'`
MYTHPASS=`grep DBPassword <$MYTHCFG | awk -F= '{print $2}'`
MYTHDB=`grep DBName <$MYTHCFG | awk -F= '{print $2}'`
#echo >>$LOGFILE "[$MYTHHOST] [$MYTHUSER] [$MYTHPASS] [$MYTHDB]"

# root of MythTV recordings
RECORDINGSROOT=`mysql -h${MYTHHOST} -u${MYTHUSER} -p${MYTHPASS} -e "select dirname from storagegroup;" $MYTHDB | tail -n +2 | sort | uniq | tr '\n' ' '`


echo >>$LOGFILE "$0 run with [$*] at `date` by `whoami`"
echo >>$LOGFILE "RECORDINGSROOT=$RECORDINGSROOT"
#export >>$LOGFILE

#/usr/bin/mythcommflag run with [-j 584 -V 8213] at Sat Jan 29 17:26:58 GMT 2011 by root
#select recorded.basename from recorded join jobqueue where jobqueue.id=584 and jobqueue.chanid=recorded.chanid and jobqueue.starttime=recorded.starttime;

silence_detect() {
		local filename=$1
		
		TMPDIR=`mktemp -d /tmp/mythcommflag.XXXXXX` || exit 1		
		
		# get frame count, less 3 seconds (75 frames) fudge factor
		let FRAMES=`mytharchivehelper -i $filename $TMPDIR/streaminfo.xml 1 2>&1 | grep " frames = " | awk -F"= " '{print $2}'`-${ENDFUDGEFRAMES}
		echo >>$LOGFILE "total frames = $FRAMES (+/- 75)"		

		# From <http://www.mythtv.org/wiki/Silence-detect.sh>

# AJB20110129 Have already checked for pre-existing cutlist, and this check doesn't work properly after --clearcutlist anyway
#		[[ "Cutlist: "  == `mythcommflag.fedora --getcutlist -f $filename  |grep Cutlist` ]] \
#		    || { echo already has cutlist && exit 1; }

		cd $TMPDIR
		touch `basename $filename`.touch
		ionice -c3 nice ffmpeg -i $filename -acodec copy sound.mp3
		ionice -c3 nice mp3splt -s -p $MP3SPLT_OPTS sound.mp3

		#AJB20110129 add '$FRAMES' because mythcommflag now requires *pairs* of frames
		CUTLIST=`tail --lines=+3 mp3splt.log|sort -g |\
		       awk 'BEGIN{start=0;ORS=","}{if($2-start<'$MAXCOMMBREAKSECS')
		       {finish=$2} else {print int(start*25+1)"-"int(finish*25-25);
		       start=$1; finish=$2;}}END{print int(start*25+1)"-"'$FRAMES'}'`
		echo >>$LOGFILE "silence-detect has generated cutlist: $CUTLIST"

		echo >>$LOGFILE "silence-detect(): CHANID=$CHANID, STARTTIME=$STARTTIME, FRAMES=$FRAMES"		
		CUTLIST=`tail --lines=+3 mp3splt.log|sort -g |\
		awk 'BEGIN{start=0;ORS="\n"}{if($2-start<'$MAXCOMMBREAKSECS') {finish=$2} else {print "INSERT INTO recordedmarkup (chanid,starttime,mark,type) VALUES ('$CHANID',\"'"$STARTTIME"'\","int(start*25+1)",4);\nINSERT INTO recordedmarkup (chanid,starttime,mark,type) VALUES ('$CHANID',\"'"$STARTTIME"'\","int(finish*25-25)",5);"; start=$1; finish=$2;}}END{print "INSERT INTO recordedmarkup (chanid,starttime,mark,type) VALUES ('$CHANID',\"'"$STARTTIME"'\","int(start*25+1)",4);\nINSERT INTO recordedmarkup (chanid,starttime,mark,type) VALUES ('$CHANID',\"'"$STARTTIME"'\",'$FRAMES',5);"}' | sed 's/\"/'\''/g'`
		RC=$?
#		echo >>$LOGFILE "silence-detect SQLgen returned with $RC, generated SQL skipist: $CUTLIST"		

#		CUTLIST="USE $MYTHDB; $CUTLIST"

		rm -rf $TMPDIR
}		


if [ $# -eq 0 ]; then
	# run with no parameters, flag every unflagged recording
	exec mythcommflag.fedora
	exit $?
else
	if [ $# -eq 4 -a "$1" = "-j" -a "$3" = "-V" ]; then
		# this is a manual flag job
		# TODO AJB20110129 generate a filelist from recorded table where commflagged=0 and cutlist=0
		# then run silence_detect over each filename
		JOB=$2
	else
		# we're being used in some other way, run the real mythcommmflag
		echo >>$LOGFILE "running mythcommflag.fedora $*"
		exec mythcommflag.fedora $*
		exit $?
	fi
	echo >>$LOGFILE "running job $JOB"
	HASCUTLIST=`mysql -h${MYTHHOST} -u${MYTHUSER} -p${MYTHPASS} -e "select recorded.cutlist from recorded join jobqueue where jobqueue.id=$JOB and jobqueue.chanid=recorded.chanid and jobqueue.starttime=recorded.starttime;" $MYTHDB | tail -n +2`	
	if [ "$HASCUTLIST" = "1" ]; then
		echo >>$LOGFILE "program already has (manual?) cutlist, exiting"
		exit 0
	fi
	CALLSIGN=`mysql -h${MYTHHOST} -u${MYTHUSER} -p${MYTHPASS} -e "select channel.callsign from channel join jobqueue where jobqueue.id=$JOB and jobqueue.chanid=channel.chanid;" $MYTHDB | tail -n +2`
	CHANID=`mysql -h${MYTHHOST} -u${MYTHUSER} -p${MYTHPASS} -e "select chanid from jobqueue where jobqueue.id=$JOB;" $MYTHDB | tail -n +2`	
	STARTTIME=`mysql -h${MYTHHOST} -u${MYTHUSER} -p${MYTHPASS} -e "select starttime from jobqueue where jobqueue.id=$JOB;" $MYTHDB | tail -n +2`
	echo >>$LOGFILE "channel callsign is $CALLSIGN"
	echo >>$LOGFILE "chanid=$CHANID STARTTIME=$STARTTIME"
	BASENAME=`mysql -h${MYTHHOST} -u${MYTHUSER} -p${MYTHPASS} -e "select recorded.basename from recorded join jobqueue where jobqueue.id=$JOB and jobqueue.chanid=recorded.chanid and jobqueue.starttime=recorded.starttime;" $MYTHDB | tail -n +2`	
	echo >>$LOGFILE "basename is $BASENAME"
	FILENAME=`ionice -c3 nice find ${RECORDINGSROOT} -name $BASENAME`
	echo >>$LOGFILE "filename is $FILENAME"	

#safe list
#	if [ "$CALLSIGN" = "Film4" -o "$CALLSIGN" = "ITV1" -o "$CALLSIGN" = "ITV1 +1" -o "$CALLSIGN" = "ITV2" -o "$CALLSIGN" = "ITV2 +1" -o "$CALLSIGN" = "ITV3" -o "$CALLSIGN" = "ITV4" -o "$CALLSIGN" = "Dave" -o "$CALLSIGN" = "Dave ja vu" ]; then
# Channel 4 channels seem to work too, but sometimes last cut is too long?
#	if [ "$CALLSIGN" = "Channel 4" -o "$CALLSIGN" = "Channel 4+1" -o "$CALLSIGN" = "More 4" -o "$CALLSIGN" = "E4" -o "$CALLSIGN" = "E4+1" -o "$CALLSIGN" = "Film4" -o "$CALLSIGN" = "ITV1" -o "$CALLSIGN" = "ITV1 +1" -o "$CALLSIGN" = "ITV2" -o "$CALLSIGN" = "ITV2 +1" -o "$CALLSIGN" = "ITV3" -o "$CALLSIGN" = "ITV4" -o "$CALLSIGN" = "Dave" -o "$CALLSIGN" = "Dave ja vu" ]; then
#	if [ "$CALLSIGN" = "FIVE USA" -o "$CALLSIGN" = "FIVER" -o "$CALLSIGN" = "FIVE" -o "$CALLSIGN" = "Channel 4" -o "$CALLSIGN" = "Channel 4+1" -o "$CALLSIGN" = "More 4" -o "$CALLSIGN" = "E4" -o "$CALLSIGN" = "E4+1" -o "$CALLSIGN" = "Film4" -o "$CALLSIGN" = "ITV1" -o "$CALLSIGN" = "ITV1 +1" -o "$CALLSIGN" = "ITV2" -o "$CALLSIGN" = "ITV2 +1" -o "$CALLSIGN" = "ITV3" -o "$CALLSIGN" = "ITV4" -o "$CALLSIGN" = "Dave" -o "$CALLSIGN" = "Dave ja vu" ]; then	
# Fails on FIVER and cuts almost entire recording. Works for other FIVE channels with caveat that they include news bulletins which are't cut
	if [ "$CALLSIGN" = "QUEST" -o "$CALLSIGN" = "FIVE USA" -o "$CALLSIGN" = "FIVE" -o "$CALLSIGN" = "Channel 4" -o "$CALLSIGN" = "Channel 4+1" -o "$CALLSIGN" = "More 4" -o "$CALLSIGN" = "E4" -o "$CALLSIGN" = "E4+1" -o "$CALLSIGN" = "Film4" -o "$CALLSIGN" = "ITV1" -o "$CALLSIGN" = "ITV1 +1" -o "$CALLSIGN" = "ITV2" -o "$CALLSIGN" = "ITV2 +1" -o "$CALLSIGN" = "ITV3" -o "$CALLSIGN" = "ITV4" -o "$CALLSIGN" = "Dave" -o "$CALLSIGN" = "Dave ja vu" ]; then	
		echo >>$LOGFILE "Callsign in whitelist - will run silence_detect"		
		mysql -h${MYTHHOST} -u${MYTHUSER} -p${MYTHPASS} -e "update recorded set commflagged=2 where chanid=$CHANID and starttime='${STARTTIME}';" $MYTHDB
		CUTLIST=""
		echo >>$LOGFILE "silence_detect $FILENAME"
		silence_detect $FILENAME
		echo >>$LOGFILE "silect_detect() set CUTLIST to $CUTLIST"
		let BREAKS=`echo "$CUTLIST"|wc -l`/2
		echo >>$LOGFILE "$BREAKS break(s) found."
#		mythcommflag --setcutlist $CUTLIST -f $FILENAME
		mysql -h${MYTHHOST} -u${MYTHUSER} -p${MYTHPASS} -e "$CUTLIST" $MYTHDB
		RC=$?
#		echo "mythcommflag --setcutlist returned $RC"
		echo >>$LOGFILE "mysql setskiplist returned $RC"
		if [ $RC -eq 0 ]; then
			mysql -h${MYTHHOST} -u${MYTHUSER} -p${MYTHPASS} -e "update recorded set commflagged=1 where chanid=$CHANID and starttime='${STARTTIME}';" ${MYTHDB}
			mysql -h${MYTHHOST} -u${MYTHUSER} -p${MYTHPASS} -e "update jobqueue set status=272, comment='Finished, $BREAKS break(s) found.' where id=$JOB;" ${MYTHDB}			
			if [ $COPYTOCUTLIST -eq 1 ]; then
				mythcommflag --gencutlist -f $FILENAME
				RC=$?
				if [ $RC -eq 0 ]; then
					echo >>$LOGFILE "mythcommflag --gencutlist successfully copied skip list to cut list"
				else
					echo >>$LOGFILE "mythcommflag --gencutlist failed, returned $RC"		
				fi
			fi			
		else
			echo >>$LOGFILE "mythcommflag failed; returned $RC"
			mysql -h${MYTHHOST} -u${MYTHUSER} -p${MYTHPASS} -e "update recorded set commflagged=0 where chanid=$CHANID and starttime='${STARTTIME}';" ${MYTHDB}
		fi		
	else
		# Not a whitelisted channel for silence_detect
		echo >>$LOGFILE "won't run silence-detect, running mythcommflag.fedora $*"
		exec mythcommflag.fedora $*
		exit $?
	fi		
fi
echo >>$LOGFILE

The maintained version of this script can be found at [1]. It uses silence detection to perform commflagging, which works quite well for certain UK stations.

Patch MythArchive's mythburn.py script

--- /usr/share/mythtv/mytharchive.fedora-0.24-ajb3.fc14-20110126/scripts/mythburn.py	2011-01-12 23:34:28.000000000 +0000
+++ /usr/share/mythtv/mytharchive/scripts/mythburn.py	2011-02-12 19:56:44.000000000 +0000
@@ -54,7 +54,8 @@
 debug_secondrunthrough = False
 
 # default encoding profile to use
-defaultEncodingProfile = "SP"
+# defaultEncodingProfile = "SP"
+defaultEncodingProfile = "NONE"
 
 # add audio sync offset when re-muxing
 useSyncOffset = True
@@ -485,19 +486,22 @@
 
     totalframes=int(musiclength * framespersecond)
 
-    command = path_jpeg2yuv[0] + " -n %s -v0 -I p -f %s -j '%s' | %s -b 5000 -a %s -v 1 -f 8 -o '%s'" \
+    command = "ionice -c3 nice "
+    command += path_jpeg2yuv[0] + " -n %s -v0 -I p -f %s -j '%s' | %s -b 5000 -a %s -v 1 -f 8 -o '%s'" \
               % (totalframes, framespersecond, background, path_mpeg2enc[0], aspectratio, tempvideo)
     result = runCommand(command)
     if result<>0:
         fatalError("Failed while running jpeg2yuv - %s" % command)
 
-    command = path_mplex[0] + " -f 8 -v 0 -o '%s' '%s' '%s'" % (tempmovie, tempvideo, music)
+    command = "ionice -c3 nice "
+    command += path_mplex[0] + " -f 8 -v 0 -o '%s' '%s' '%s'" % (tempmovie, tempvideo, music)
     result = runCommand(command)
     if result<>0:
         fatalError("Failed while running mplex - %s" % command)
 
     if xmlfile != "":
-        command = path_spumux[0] + " -m dvd -s 0 '%s' < '%s' > '%s'" % (xmlfile, tempmovie, finaloutput)
+        command = "ionice -c3 nice "
+        command += path_spumux[0] + " -m dvd -s 0 '%s' < '%s' > '%s'" % (xmlfile, tempmovie, finaloutput)
         result = runCommand(command)
         if result<>0:
             fatalError("Failed while running spumux - %s" % command)
@@ -1877,7 +1881,8 @@
         result=os.spawnlp(mode, path_mplex[0], path_mplex[1],
                     '-M',
                     '-f', '8',
-                    '-v', '0',
+                    '-v', '1',
+                    '-b', '500', '-r', '16000',
                     '--sync-offset', '%sms' % syncOffset,
                     '-o', destination,
                     video,
@@ -1887,7 +1892,8 @@
         result=os.spawnlp(mode, path_mplex[0], path_mplex[1],
                     '-M',
                     '-f', '8',
-                    '-v', '0',
+                    '-v', '1',
+                    '-b', '500', '-r', '16000',
                     '--sync-offset', '%sms' % syncOffset,
                     '-o', destination,
                     video,
@@ -1910,7 +1916,8 @@
             fatalError("Failed while running testsubtitlepngs.sh - %s" % command)
 
         write("Running spumux to add subtitles")
-        command = path_spumux[0] + " -P %s/stream.d/spumux.xml <%s >%s" % (os.path.dirname(destination), destination, os.path.splitext(destination)[0] + "-sub.mpg")
+        command = "ionice -c3 nice "        
+        command += path_spumux[0] + " -P %s/stream.d/spumux.xml <%s >%s" % (os.path.dirname(destination), destination, os.path.splitext(destination)[0] + "-sub.mpg")
         result = runCommand(command)
         if result<>0:
             nonfatalError("Failed while running spumux.\n"
@@ -1929,7 +1936,8 @@
 def getStreamInformation(filename, xmlFilename, lenMethod):
     """create a stream.xml file for filename"""
     filename = quoteFilename(filename)
-    command = "mytharchivehelper -i %s %s %d" % (filename, xmlFilename, lenMethod)
+    command = "ionice -c3 nice "    
+    command += "mytharchivehelper -i %s %s %d" % (filename, xmlFilename, lenMethod)
 
     result = runCommand(command)
 
@@ -1972,15 +1980,16 @@
 
     if localfile != "":
         localfile = quoteFilename(localfile)
-        if usecutlist == True:
-            command = "mythtranscode --mpeg2 --honorcutlist -i %s -o %s" % (localfile, destination)
+        command = "ionice -c3 nice "        
+        if usecutlist == True:        
+            command += "mythtranscode --mpeg2 --honorcutlist -i %s -o %s" % (localfile, destination)
         else:
-            command = "mythtranscode --mpeg2 -i %s -o %s" % (localfile, destination)
+            command += "mythtranscode --mpeg2 -i %s -o %s" % (localfile, destination)
     else:
         if usecutlist == True:
-            command = "mythtranscode --mpeg2 --honorcutlist -c %s -s %s -o %s" % (chanid, starttime, destination)
+            command += "mythtranscode --mpeg2 --honorcutlist -c %s -s %s -o %s" % (chanid, starttime, destination)
         else:
-            command = "mythtranscode --mpeg2 -c %s -s %s -o %s" % (chanid, starttime, destination)
+            command += "mythtranscode --mpeg2 -c %s -s %s -o %s" % (chanid, starttime, destination)
 
     result = runCommand(command)
 
@@ -1995,7 +2004,7 @@
 #############################################################
 # Create a projectX cut list for a recording
 
-def generateProjectXCutlist(chanid, starttime, folder):
+def originalgenerateProjectXCutlist(chanid, starttime, folder):
     """generate cutlist_x.txt for ProjectX"""
 
     sqlstatement  = """SELECT mark FROM recordedmarkup 
@@ -2031,6 +2040,59 @@
 
     return True
 
+# AJB modified using
+# http://code.mythtv.org/trac/raw-attachment/ticket/9389/cutlisttrans.txt
+# for 0.24-fixes
+def generateProjectXCutlist(chanid, starttime, folder):
+    """generate cutlist_x.txt for ProjectX"""
+
+    sqlstatement  = """SELECT mark FROM recordedmarkup 
+                    WHERE chanid = '%s' AND starttime = '%s' 
+                    AND type IN (0,1) ORDER BY mark""" % (chanid, starttime)
+
+    db = getDatabaseConnection()
+    cursor = db.cursor()
+    cursor.execute(sqlstatement)
+    result = cursor.fetchall()
+    numrows = int(cursor.rowcount)
+
+    #We must have at least one row returned for this recording
+    if numrows==0:
+        write("No cutlist in the DB for chanid %s, starttime %s" % chanid, starttime)
+        db.close()
+        del db
+        del cursor
+        return False   
+
+    sqlstatement  = """SELECT mark FROM recordedmarkup 
+                    WHERE chanid = '%s' AND starttime = '%s' 
+                    AND type=1 ORDER BY mark LIMIT 1 """ % (chanid, starttime)
+
+    cursor.execute(sqlstatement)
+    firstcut = cursor.fetchall()   
+
+    sqlstatement  = """SELECT mark FROM recordedmarkup 
+                    WHERE chanid = '%s' AND starttime = '%s' 
+                    AND type IN (0,1) ORDER BY mark LIMIT 1 """ % (chanid, starttime)
+
+    cursor.execute(sqlstatement)
+    firstedit = cursor.fetchall()
+
+    cutlist_f=open(os.path.join(folder, "cutlist_x.txt"), 'w')
+    cutlist_f.write("CollectionPanel.CutMode=2\n")
+
+    if firstcut == firstedit:
+         cutlist_f.write("0\n")
+
+    # iterate through resultset
+    for i in range(len(result)):
+        if result[i][0] != "" and result[i][0] <> 0:
+            cutlist_f.write("%d\n" % result[i])
+
+    cutlist_f.close()
+
+    return True
+
 
 #############################################################
 # Use Project-X to cut commercials and/or demux an mpeg2 file
@@ -2055,7 +2117,8 @@
     qfile = quoteFilename(file)
     qcutlist = os.path.join(folder, "cutlist_x.txt")
 
-    command = path_projectx[0] + " -id %s" % getStreamList(folder)
+    command = "ionice -c3 nice "
+    command += path_projectx[0] + " -id %s" % getStreamList(folder)
     if usecutlist == True:
         command += " -cut %s -out %s -name %s %s" % (qcutlist, qdestdir, qpxbasename, qfile)
     else:
@@ -2080,7 +2143,8 @@
         if (os.path.exists(os.path.join(folder, "stream.sup")) and
             os.path.exists(os.path.join(folder, "stream.sup.IFO"))):
             write("Found DVB subtitles converting to DVD subtitles")
-            command = "mytharchivehelper --sup2dast "
+            command = "ionice -c3 nice "
+            command += "mytharchivehelper --sup2dast "
             command += " %s %s 0" % (os.path.join(folder, "stream.sup"), os.path.join(folder, "stream.sup.IFO"))
 
             result = runCommand(command)
@@ -2289,7 +2353,8 @@
 
         source = quoteFilename(source)
 
-        command = "mytharchivehelper -t  %s '%s' %s" % (source, seconds, destination)
+        command = "ionice -c3 nice "
+        command += "mytharchivehelper -t  %s '%s' %s" % (source, seconds, destination)
         result = runCommand(command)
         if result <> 0:
             fatalError("Failed while running mytharchivehelper to get thumbnails.\n"
@@ -2314,7 +2379,8 @@
 
     source = quoteFilename(source)
 
-    command = "mytharchivehelper -v important -t %s '%s' %s" % (source, thumbList, destination)
+    command = "ionice -c3 nice "
+    command += "mytharchivehelper -v important -t %s '%s' %s" % (source, thumbList, destination)
     result = runCommand(command)
     if result <> 0:
         fatalError("Failed while running mytharchivehelper to get thumbnails")
@@ -2329,7 +2395,8 @@
 
     passes = int(getText(profileNode.getElementsByTagName("passes")[0]))
 
-    command = path_ffmpeg[0]
+    command = "ionice -c3 nice "
+    command += path_ffmpeg[0]
 
     if cpuCount > 1:
         command += " -threads %d" % cpuCount
@@ -2515,7 +2582,8 @@
     samplerate, channels = getAudioParams(folder)
     videores, fps, aspectratio = getVideoParams(folder)
 
-    command =  path_ffmpeg[0] + " -y "
+    command = "ionice -c3 nice "
+    command +=  path_ffmpeg[0] + " -y "
 
     if cpuCount > 1:
         command += "-threads %d " % cpuCount
@@ -2567,7 +2635,8 @@
 def CreateDVDISO(title):
     write("Creating ISO image")
     checkCancelFlag()
-    command = path_mkisofs[0] + ' -dvd-video '
+    command = "ionice -c3 nice "
+    command += path_mkisofs[0] + ' -dvd-video '
     command += ' -V ' + quoteFilename(title)
     command += ' -o ' + os.path.join(getTempPath(), 'mythburn.iso')
     command += " " + os.path.join(getTempPath(),'dvd')
@@ -2669,7 +2738,8 @@
 def deMultiplexMPEG2File(folder, mediafile, video, audio1, audio2):
 
     if getFileType(folder) == "mpegts":
-        command = "mythreplex --demux --fix_sync -t TS -o %s " % (folder + "/stream")
+        command = "ionice -c3 nice "    
+        command += "mythreplex --demux --fix_sync -t TS -o %s " % (folder + "/stream")
         command += "-v %d " % (video[VIDEO_ID])
 
         if audio1[AUDIO_ID] != -1: 
@@ -2689,7 +2759,8 @@
                 command += "-c %d " % (audio2[AUDIO_ID])
 
     else:
-        command = "mythreplex --demux --fix_sync -o %s " % (folder + "/stream")
+        command = "ionice -c3 nice "    
+        command += "mythreplex --demux --fix_sync -o %s " % (folder + "/stream")
         command += "-v %d " % (video[VIDEO_ID] & 255)
 
         if audio1[AUDIO_ID] != -1: 
@@ -2726,7 +2797,8 @@
     M2Vsize0 = os.path.getsize(source)
     write("Initial M2Vsize is %.2f Mb , target is %.2f Mb" % ( (float(M2Vsize0)/mega), (float(M2Vsize0)/(factor*mega)) ))
 
-    command = path_M2VRequantiser[0]   
+    command = "ionice -c3 nice "
+    command += path_M2VRequantiser[0]   
     command += " %.5f "  % factor
     command += " %s "  % M2Vsize0
     command += " <  %s " % source
@@ -3501,7 +3573,8 @@
                 height = getScaledAttribute(node, "h")
                 frames = int(secondsToFrames(menulength))
 
-                command = "mytharchivehelper -t  %s '%s' '%s' %d" % (inputfile, starttime, outputfile, frames)
+                command = "ionice -c3 nice "
+                command += "mytharchivehelper -t  %s '%s' '%s' %d" % (inputfile, starttime, outputfile, frames)
                 result = runCommand(command)
                 if (result != 0):
                     write( "mytharchivehelper failed with code %d. Command = %s" % (result, command) )

These changes fix some bugs in the MythArchive script as shipped with the snapshot of 0.24-fixes that I use, and runs IO intensive processes in the idle IO scheduling class so as not to disrupt recording or playback.

Patch default Theme

diff -ur /usr/share/mythtv/themes/default.fedora-0.24-20110125/browser-ui.xml /usr/share/mythtv/themes/default/browser-ui.xml
--- /usr/share/mythtv/themes/default.fedora-0.24-20110125/browser-ui.xml	2011-01-12 23:34:28.000000000 +0000
+++ /usr/share/mythtv/themes/default/browser-ui.xml	2011-02-12 12:27:58.000000000 +0000
@@ -53,9 +53,8 @@
             <statetype name="buttonitem">
                 <area>0,0,180,40</area>
                 <state name="active">
-                    <imagetype name="buttonbackground">
-                        <filename>horiz_selector.png</filename>
-                    </imagetype>
+                    <area>0,0,180,40</area>
+                    <shape name="background" from="basewidgetshape" />
                     <textarea name="buttontext" from="basetextarea">
                         <area>0,0,180,40</area>
                         <font>basesmall</font>
@@ -63,14 +62,12 @@
                     </textarea>
                 </state>
                 <state name="selectedactive" from="active">
-                    <imagetype name="buttonbackground">
-                        <filename>horiz_selector_selected.png</filename>
-                    </imagetype>
+                    <shape name="background" from="baseselectedwidgetshape" />
                 </state>
                 <state name="selectedinactive" from="active">
-                    <imagetype name="buttonbackground">
-                        <filename>horiz_selector_inactive.png</filename>
-                    </imagetype>
+                   <textarea name="buttontext">
+                        <font>basesmallgrey</font>
+                    </textarea>
                 </state>
             </statetype>
             <statetype name="downscrollarrow">

These changes fix the bookmark highlighting in MythBrowser in the snapshot of 0.24-fixes that I use. These changes have been applied upstream, and are no longer necessary in later versions.

Patch default-wide theme

diff -ur /usr/share/mythtv/themes/default-wide.fedora-0.24-20110125/browser-ui.xml /usr/share/mythtv/themes/default-wide/browser-ui.xml
--- /usr/share/mythtv/themes/default-wide.fedora-0.24-20110125/browser-ui.xml	2011-01-12 23:34:28.000000000 +0000
+++ /usr/share/mythtv/themes/default-wide/browser-ui.xml	2011-02-12 12:27:58.000000000 +0000
@@ -61,9 +61,8 @@
             <statetype name="buttonitem">
                 <area>0,0,180,40</area>
                 <state name="active">
-                    <imagetype name="buttonbackground">
-                        <filename>horiz_selector.png</filename>
-                    </imagetype>
+                    <area>0,0,180,40</area>
+                    <shape name="background" from="basewidgetshape" />
                     <textarea name="buttontext" from="basetextarea">
                         <area>0,0,180,40</area>
                         <font>basesmall</font>
@@ -73,14 +72,12 @@
                     </textarea>
                 </state>
                 <state name="selectedactive" from="active">
-                    <imagetype name="buttonbackground">
-                        <filename>horiz_selector_selected.png</filename>
-                    </imagetype>
+                    <shape name="background" from="baseselectedwidgetshape" />
                 </state>
                 <state name="selectedinactive" from="active">
-                    <imagetype name="buttonbackground">
-                        <filename>horiz_selector_inactive.png</filename>
-                    </imagetype>
+                   <textarea name="buttontext">
+                        <font>basesmallgrey</font>
+                    </textarea>
                 </state>
             </statetype>
             <statetype name="downscrollarrow">

As above, but for the default-wide theme, and themes dependent upon it.

Create tweaked MythCenter-wide theme

copy /usr/share/mythtv/themes/MythCenter-wide to /usr/share/mythtv/themes/ajb-MythCenter-wide, then apply this patch for smaller fonts and better contrast for text, so that the UI is usable on a 28" widescreen CRT at 6' or so.

diff -ur MythCenter-wide.fedora/base.xml ajb-MythCenter-wide/base.xml
--- MythCenter-wide.fedora/base.xml	2011-01-12 23:34:29.000000000 +0000
+++ ajb-MythCenter-wide/base.xml	2011-01-16 20:23:35.000000000 +0000
@@ -4,13 +4,13 @@
 
     <!-- Base Font Definitions -->
     <fontdef name="basesmall" face="Droid Sans">
-        <pixelsize>22</pixelsize>
+        <pixelsize>20</pixelsize> <!-- AJB 20110116 originally 22 -->
         <color>#EEEEEE</color>
         <weight>bold</weight>
     </fontdef>
 
     <fontdef name="basesmaller" from="basesmall">
-        <pixelsize>18</pixelsize>
+        <pixelsize>16</pixelsize>
     </fontdef>
 
     <fontdef name="basesmallbold" from="basesmall">
@@ -24,16 +24,16 @@
     </fontdef>
 
     <fontdef name="basemedium" from="basesmall" face="Liberation Sans">
-        <pixelsize>26</pixelsize>
+        <pixelsize>23</pixelsize>
     </fontdef>
 
     <fontdef name="basemediumbold" from="basemedium">
-        <pixelsize>26</pixelsize>
+        <pixelsize>23</pixelsize>
         <weight>bold</weight>
     </fontdef>
 
     <fontdef name="baselarge" from="basemedium">
-        <pixelsize>30</pixelsize>
+        <pixelsize>26</pixelsize>
         <shadowcolor>#000000</shadowcolor>
         <shadowoffset>4,4</shadowoffset>
         <shadowalpha>64</shadowalpha>
@@ -45,7 +45,7 @@
     </fontdef>
 
     <fontdef name="baseextralarge" from="baselarge">
-        <pixelsize>34</pixelsize>
+        <pixelsize>28</pixelsize>
         <shadowcolor>#000000</shadowcolor>
         <shadowoffset>4,4</shadowoffset>
         <shadowalpha>64</shadowalpha>
@@ -57,10 +57,10 @@
         <color>#FFFFFF</color>
     </fontdef>
     <fontdef name="basesmall_normal" from="basesmall">
-        <color>#9999cc</color>
+        <color>#ccccff</color>
     </fontdef>
     <fontdef name="basesmall_normal_inactive" from="basesmall">
-        <color>#666666</color>
+        <color>#888888</color>
     </fontdef>
     <fontdef name="basesmall_warning_selected" from="basesmallbold">
         <color>#dddd44</color>
@@ -75,7 +75,7 @@
         <color>#bbbb33</color>
     </fontdef>
     <fontdef name="basesmall_favourite_unavailable" from="basesmall">
-        <color>#9999cc</color>
+        <color>#ccccff</color>
     </fontdef>
     <fontdef name="basesmall_error_selected" from="basesmallbold">
         <color>#900800</color>
@@ -84,10 +84,10 @@
         <color>#700700</color>
     </fontdef>
     <fontdef name="basesmall_disabled_selected" from="basesmallbold">
-        <color>#888888</color>
+        <color>#aaaaaa</color>
     </fontdef>
     <fontdef name="basesmall_disabled" from="basesmall">
-        <color>#666666</color>
+        <color>#888888</color>
     </fontdef>
     <fontdef name="basesmall_running_selected" from="basesmallbold">
         <color>#00FF00</color>
@@ -105,17 +105,17 @@
         <color>#FFFFFF</color>
     </fontdef>
     <fontdef name="basesmall_disabled_button" from="basesmallbold">
-        <color>#9999cc</color>
+        <color>#ccccff</color>
     </fontdef>
     <!-- State variations on medium font -->
     <fontdef name="basemedium_normal" from="basemediumbold">
-        <color>#9999cc</color>
+        <color>#ccccff</color>
     </fontdef>
     <fontdef name="basemedium_normal_selected" from="basemedium">
         <color>#FFFFFF</color>
     </fontdef>
     <fontdef name="basemedium_disabled" from="basemedium">
-        <color>#666666</color>
+        <color>#888888</color>
     </fontdef>
     <fontdef name="basemedium_highlight" from="basemediumbold">
         <color>#FFFF33</color>
@@ -127,17 +127,17 @@
         <color>#FFFFFF</color>
     </fontdef>
     <fontdef name="basemedium_disabled_button" from="basemediumbold">
-        <color>#9999cc</color>
+        <color>#ccccff</color>
     </fontdef>
 
     <!-- Fonts for specific screens -->
     <fontdef name="deleterecordings_filesize_font" from="basemedium">
-        <pixelsize>40</pixelsize>
+        <pixelsize>34</pixelsize>
         <color>#bbbb33</color>
         <weight>bold</weight>
     </fontdef>
     <fontdef name="baseguide" from="basesmall">
-        <pixelsize>20</pixelsize>
+        <pixelsize>18</pixelsize>
         <weight>normal</weight>
     </fontdef>
 
@@ -1063,7 +1063,7 @@
                     <shape name="background">
                         <area>0,0,166,106</area>
                         <fill style="gradient">
-                            <gradient start="#999999" end="#666666" alpha="220" />
+                            <gradient start="#999999" end="#888888" alpha="220" />
                         </fill>
                     </shape>
                 </state>
@@ -1126,19 +1126,19 @@
 
         <fontdef name="medium" face="Droid Sans">
             <color>#FFFFFF</color>
-            <pixelsize>26</pixelsize>
+            <pixelsize>23</pixelsize>
             <weight>bold</weight>
         </fontdef>
 
         <fontdef name="large" face="Liberation Sans">
              <color>#FFFFFF</color>
-             <pixelsize>28</pixelsize>
+             <pixelsize>25</pixelsize>
              <weight>bold</weight>
         </fontdef>
 
         <fontdef name="clock" face="Liberation Sans">
              <color>#FFFFFF</color>
-             <pixelsize>26</pixelsize>
+             <pixelsize>23</pixelsize>
              <weight>bold</weight>
         </fontdef>
     </window>
diff -ur MythCenter-wide.fedora/menu-ui.xml ajb-MythCenter-wide/menu-ui.xml
--- MythCenter-wide.fedora/menu-ui.xml	2011-01-12 23:35:27.000000000 +0000
+++ ajb-MythCenter-wide/menu-ui.xml	2011-01-16 20:15:46.000000000 +0000
@@ -7,7 +7,7 @@
 
         <fontdef name="menufont" face="Liberation Sans">
             <color>#FFFFFF</color>
-            <pixelsize>30</pixelsize>
+            <pixelsize>26</pixelsize>
             <weight>bold</weight>
             <shadowcolor>#000000</shadowcolor>
             <shadowoffset>2,2</shadowoffset>
@@ -15,7 +15,7 @@
         </fontdef>
 
         <fontdef name="clock" from="small">
-            <pixelsize>28</pixelsize>
+            <pixelsize>25</pixelsize>
         </fontdef>
 
         <clock name="clock">
diff -ur MythCenter-wide.fedora/osd.xml ajb-MythCenter-wide/osd.xml
--- MythCenter-wide.fedora/osd.xml	2011-01-12 23:34:29.000000000 +0000
+++ ajb-MythCenter-wide/osd.xml	2011-01-16 20:15:46.000000000 +0000
@@ -5,14 +5,14 @@
 
     <window name="program_info">
         <fontdef name="small" face="Droid Sans">
-            <pixelsize>22</pixelsize>
+            <pixelsize>20</pixelsize>
             <color>#EEEEEE</color>
         </fontdef>
         <fontdef name="medium" from="small">
-            <pixelsize>28</pixelsize>
+            <pixelsize>25</pixelsize>
         </fontdef>
         <fontdef name="large" from="small">
-            <pixelsize>34</pixelsize>
+            <pixelsize>28</pixelsize>
             <weight>bold</weight>
         </fontdef>
         <area>50,0,1180,720</area>
@@ -130,7 +130,7 @@
 
     <window name="osd_status">
         <fontdef name="medium" face="Droid Sans">
-            <pixelsize>28</pixelsize>
+            <pixelsize>25</pixelsize>
             <color>#EEEEEE</color>
             <weight>bold</weight>
         </fontdef>
@@ -177,15 +177,15 @@
 
     <window name="browse_info">
         <fontdef name="small" face="Droid Sans">
-            <pixelsize>22</pixelsize>
+            <pixelsize>20</pixelsize>
             <color>#EEEEEE</color>
         </fontdef>
         <fontdef name="medium" from="small">
-            <pixelsize>28</pixelsize>
+            <pixelsize>25</pixelsize>
             <weight>bold</weight>
         </fontdef>
         <fontdef name="large" from="medium">
-            <pixelsize>34</pixelsize>
+            <pixelsize>28</pixelsize>
         </fontdef>
         <area>50,520,1180,100</area>
         <imagetype name="background1">
@@ -226,7 +226,7 @@
 
     <window name="osd_input">
         <fontdef name="medium" face="Droid Sans">
-            <pixelsize>28</pixelsize>
+            <pixelsize>25</pixelsize>
             <color>#EEEEEE</color>
             <weight>bold</weight>
         </fontdef>
@@ -244,7 +244,7 @@
 
     <window name="osd_message">
         <fontdef name="medium" face="Droid Sans">
-            <pixelsize>28</pixelsize>
+            <pixelsize>25</pixelsize>
             <color>#EEEEEE</color>
             <weight>bold</weight>
         </fontdef>
@@ -262,7 +262,7 @@
 
     <window name="MythPopupBox">
         <fontdef name="basesmall" face="Droid Sans">
-            <pixelsize>22</pixelsize>
+            <pixelsize>20</pixelsize>
             <color>#EEEEEE</color>
             <weight>bold</weight>
         </fontdef>
@@ -384,7 +384,7 @@
 
     <window name="osd_program_editor">
         <fontdef name="medium" face="Droid Sans">
-            <pixelsize>28</pixelsize>
+            <pixelsize>25</pixelsize>
             <color>#EEEEEE</color>
             <weight>bold</weight>
         </fontdef>
@@ -450,7 +450,7 @@
 
     <window name="ChannelEditor">
         <fontdef name="basesmall" face="Droid Sans">
-            <pixelsize>22</pixelsize>
+            <pixelsize>20</pixelsize>
             <color>#EEEEEE</color>
             <weight>bold</weight>
         </fontdef>
diff -ur MythCenter-wide.fedora/themeinfo.xml ajb-MythCenter-wide/themeinfo.xml
--- MythCenter-wide.fedora/themeinfo.xml	2011-01-12 23:34:29.000000000 +0000
+++ ajb-MythCenter-wide/themeinfo.xml	2011-01-16 20:15:46.000000000 +0000
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <themeinfo>
     <!-- The Theme Name (Required) -->
-    <name>MythCenter-wide</name>
+    <name>ajb-MythCenter-wide</name>
 
     <!-- The Theme Types (Required) -->
     <types>
diff -ur MythCenter-wide.fedora/welcome-ui.xml ajb-MythCenter-wide/welcome-ui.xml
--- MythCenter-wide.fedora/welcome-ui.xml	2011-01-12 23:34:29.000000000 +0000
+++ ajb-MythCenter-wide/welcome-ui.xml	2011-01-16 20:15:46.000000000 +0000
@@ -9,7 +9,7 @@
         -->
         <fontdef name="title" from="baselarge">
             <color>#ffff00</color>
-            <pixelsize>34</pixelsize>
+            <pixelsize>28</pixelsize>
             <shadowcolor>#000000</shadowcolor>
             <shadowoffset>2,2</shadowoffset>
             <weight>bold</weight>
@@ -17,13 +17,13 @@
 
         <fontdef name="time" from="basesmall">
             <color>#9999cc</color>
-            <pixelsize>20</pixelsize>
+            <pixelsize>18</pixelsize>
             <weight>bold</weight>
         </fontdef>
 
         <fontdef name="label" from="basesmall">
             <color>#ffff00</color>
-            <pixelsize>26</pixelsize>
+            <pixelsize>23</pixelsize>
             <shadowcolor>#000000</shadowcolor>
             <shadowoffset>2,2</shadowoffset>
             <weight>bold</weight>
@@ -31,13 +31,13 @@
 
         <fontdef name="info" from="basesmall">
             <color>#ffffff</color>
-            <pixelsize>22</pixelsize>
+            <pixelsize>20</pixelsize>
             <weight>bold</weight>
         </fontdef>
 
         <fontdef name="warning" from="basesmall">
             <color>#ff0000</color>
-            <pixelsize>22</pixelsize>
+            <pixelsize>20</pixelsize>
             <shadowcolor>#000000</shadowcolor>
             <shadowoffset>2,2</shadowoffset>
             <weight>bold</weight>
@@ -45,7 +45,7 @@
 
         <fontdef name="buttons" from="basesmall">
             <color>#ffff00</color>
-            <pixelsize>20</pixelsize>
+            <pixelsize>18</pixelsize>
             <weight>bold</weight>
         </fontdef>
 
diff -ur MythCenter-wide.fedora/zoneminder-ui.xml ajb-MythCenter-wide/zoneminder-ui.xml
--- MythCenter-wide.fedora/zoneminder-ui.xml	2011-01-12 23:35:27.000000000 +0000
+++ ajb-MythCenter-wide/zoneminder-ui.xml	2011-01-16 20:15:46.000000000 +0000
@@ -56,7 +56,7 @@
 
         <fontdef name="running" from="basesmall">
             <color>#00ff00</color>
-            <size>16</size>
+            <size>17</size>
         </fontdef>
 
         <fontdef name="stopped" from="running">
@@ -65,7 +65,7 @@
 
         <fontdef name="footer" from="basesmall">
             <color>#ffffff</color>
-            <size>16</size>
+            <size>17</size>
         </fontdef>
 
         <fontdef name="info" from="basesmall">
@@ -249,19 +249,19 @@
 
         <fontdef name="active" from="basesmall">
             <color>#ffffff</color>
-            <size>18</size>
+            <size>17</size>
             <weight>bold</weight>
         </fontdef>
 
         <fontdef name="inactive" from="basesmall">
             <color>#9999cc</color>
-            <size>18</size>
+            <size>17</size>
             <weight>bold</weight>
         </fontdef>
 
         <fontdef name="selected" from="basesmall">
             <color>#00ff00</color>
-            <size>18</size>
+            <size>17</size>
             <weight>bold</weight>
         </fontdef>
 
@@ -272,12 +272,12 @@
 
         <fontdef name="description" from="basesmall">
             <color>#ffffff</color>
-            <size>18</size>
+            <size>17</size>
         </fontdef>
 
         <fontdef name="label" from="basesmall">
             <color>#ffff00</color>
-            <size>16</size>
+            <size>17</size>
             <weight>bold</weight>
         </fontdef>
 
@@ -654,7 +654,7 @@
 
         <font name="label" from="basesmall">
             <color>#ffff00</color>
-            <size>16</size>
+            <size>17</size>
             <weight>bold</weight>
         </font>
 
@@ -776,22 +776,22 @@
 
         <fontdef name="monitor" from="basesmall">
             <color>#ffff00</color>
-            <size>16</size>
+            <size>17</size>
         </fontdef>
 
         <fontdef name="idle" from="basesmall">
             <color>#ffff00</color>
-            <size>16</size>
+            <size>17</size>
         </fontdef>
 
         <fontdef name="alarm" from="basesmall">
             <color>#ff0000</color>
-            <size>16</size>
+            <size>17</size>
         </fontdef>
 
         <fontdef name="alert" from="basesmall">
             <color>#ffa500</color>
-            <size>16</size>
+            <size>17</size>
         </fontdef>
 
         <textarea name="pagetitle" from="basetextarea">

Hauppauge Nova-T-500 checklist

1) Boot kernel with usbcore.autosuspend=-1 to disable suspending of USB devices (i.e. the two USB tuners behind the VIA USB/PCI bridge on the Nova-T-500 PCI card)

2) Load the dvb_usb kernel module with disable_rc_polling=1 to disable the IR port on the Nova-T-500. I only use the IR port on the Nova-T, so I can live with this.

3) Load the dvb-usb-dib0700 module with force_lna_activation=1 to have the LNA permanently enabled.

4) In /etc/rc.d/rc.local:

echo 0 >/sys/module/dvb_core/parameters/dvb_powerdown_on_sleep

and

#for i in `find /sys -name 'level' | grep usb`; do echo "on" >$i; done
# AJB20110120 power/level deprecated in favour of power/control
for i in `find /sys -name 'control' | grep usb`; do echo "on" >$i; done
for i in `find /sys -name 'control' | grep i2c` ; do echo "on" >$i; done

as belt-and-braces to prevent the Nova-T-500 sub-devices being suspended.

5) Use the 1.20 firmware (MD5: f42f86e2971fd994003186a055813237) file and ensure it's being properly loaded. I've also tried the 1.10 firmware (MD5: 5878ebfcba2d8deb90b9120eb89b02da) with no apparent improvement.

6) Ensure that the machine is cold-booted (thereby forcing a firmware load onto the Nova-T-500) every time due to reports of warm boots being problematic.

7) Disable EIT scanning by MythTV on both of the two Nova-T-500 tuners. Only leave it enabled on the Nova-T card.

8) MythTV is configured to open all the tuner devices when mythbackend starts and keep them open until mythbackend terminates (i.e. dvb_on_demand=0), rather than repeated opening and closing of the tuner devices which has also been reported as problematic for some.

9) MythTV signal_timeout=500, channel_timeout=3000, dvb_tuning_delay=0 (defaults), but I've tried increasing those to 3000, 4000 and 400 respectively, as per <http://www.knoppmythwiki.org/index.php?page=NovaT500> with no apparent improvement.

10) MythTV multirec enabled, configured with 2 virtual tuners per physical tuner.

11) I briefly experimented with setting buggy_sfn_workaround=1 when loading the dib3000mc and dib7000p modules with no apparent improvement. As far as I can see, though, UK DVB-T broadcasting isn't a single frequency network, so a) this is not relevant here and b) it will impair performace. As a result, I'm NOT using the buggy_sfn_workaround.

I've got debug=1 set for the mt2060, dib3000mc and dib7000p modules, debug=127 for dvb_usb and debug=7 for dvb-usb-dib0700, but I'm not seeing anything obviously bad in my kernel syslog. I've got mythbackend running with "-v important,record" but all that seems to report is no progress on failed recordings after "TVRec(_): Successfully set up DVB table monitoring." (where _ is the cardid of the failed tuner).

(From my post to the video-input-infrastructure mailing list)

Note that MythTV's channel scanner tries to fill in certain fields of the dtv_multiplex table automatically, which doesn't work well with the Nova-T-500 (the main symptom is loss of one or more of its tuners). My dtv_multiplex table for the uk-Mendip transmitter, as of 7 July 2011, contains:

+---------+----------+-------------+-----------+-----------+-----------+------------+------+----------+------------+-----------+--------------+-------------------+----------------+---------+---------------+-----------+--------------+-----------+---------+------------+----------------+---------------------+-------------------+
| mplexid | sourceid | transportid | networkid | frequency | inversion | symbolrate | fec  | polarity | modulation | bandwidth | lp_code_rate | transmission_mode | guard_interval | visible | constellation | hierarchy | hp_code_rate | mod_sys   | rolloff | sistandard | serviceversion | updatetimestamp     | default_authority |
+---------+----------+-------------+-----------+-----------+-----------+------------+------+----------+------------+-----------+--------------+-------------------+----------------+---------+---------------+-----------+--------------+-----------+---------+------------+----------------+---------------------+-------------------+
|      15 |        1 |        4161 |      9018 | 794000000 | a         |          0 | auto | v        | qam_64     | 8         | 1/2          | 8                 | 1/32           |       0 | qam_64        | n         | 2/3          | UNDEFINED | 0.35    | dvb        |             33 | 2011-01-24 00:41:50 |                   |
|      16 |        1 |        8204 |      9018 | 738000000 | a         |          0 | auto | v        | qam_64     | 8         | 1/2          | 8                 | 1/32           |       0 | qam_64        | n         | 2/3          | UNDEFINED | 0.35    | dvb        |             33 | 2011-01-18 01:22:19 |                   |
|      17 |        1 |       12290 |      9018 | 802166670 | a         |          0 | auto | v        | qam_64     | 8         | 1/2          | 2                 | 1/32           |       0 | qam_64        | n         | 2/3          | UNDEFINED | 0.35    | dvb        |             33 | 2011-01-18 01:22:19 |                   |
|      18 |        1 |       20480 |      9018 | 754166670 | a         |          0 | auto | v        | qam_16     | 8         | 3/4          | 2                 | 1/32           |       0 | qam_16        | n         | 3/4          | UNDEFINED | 0.35    | dvb        |             33 | 2011-01-18 01:22:19 |                   |
|      19 |        1 |       24640 |      9018 | 842000000 | a         |          0 | auto | v        | qam_64     | 8         | 1/2          | 8                 | 1/32           |       0 | qam_64        | n         | 2/3          | UNDEFINED | 0.35    | dvb        |             33 | 2011-01-24 00:41:50 |                   |
+---------+----------+-------------+-----------+-----------+-----------+------------+------+----------+------------+-----------+--------------+-------------------+----------------+---------+---------------+-----------+--------------+-----------+---------+------------+----------------+---------------------+-------------------+

The dtv_multiplex table will need to be changed again on 28 September 2011 and 28 March 2012 to deal with changes to the frequencies and DVB parameters. Details can be found at http://www.digitaluk.co.uk/postcodechecker/ (tick the "I am in the aerial installation trade" checkbox), with contributory information from http://www.ukfree.tv/. Channel frequencies can be determined by using queries like http://www.ukfree.tv/mapsofsignal.php?c=52&a=1 (e.g. for Channel 52).

Comments

  • The Hauppauge Nova-T-500 needs to be handled quite carefully to ensure that it is reliable. Most significant is to ensure that the kernel does not suspend USB devices, and that the machine is always cold-booted.
  • CPU usage when recording three channels simultaneously is about [unknown]% plus [unknown] system time.
  • Both the Hauppauge Nova-T and Nova-T-500 cards support multirec in MythTV 0.21. CPU usage when recording from six channels simultaneously is about [unknown]% plus about [unknown]% system time.
  • I currently have configured 4 multirec virtual tuners per physical tuner, giving a total of 12 virtual tuners. Recording and playback are reliable.
  • CPU usage when playing back a recording is about [unknown]%.
  • Commercial Flagging doesn't really work on UK DVB-T broadcasts, apart from the aforementioned silence detection technique.
  • MythWeather doesn't work in 0.20.2. It works again in 0.21 using the BBC grabber.
  • Many emulators need to be run with SDL_AUDIODRIVER=esd in order to work with FC8's default PulseAudio configuration. Xmame needs to be run under padsp and use the -dp oss option.

Old System, pre-January 2011

With an eye on power consumption, I went for a combined frontend/backend implementation. I tried a quick run through with a scratch machine that I was no longer using. Once I'd determined, it'd probably be up for the job, I bought components specially. I mainly used Jarod C. Wilson's 'Fedora Myth(TV)ology' document to configure it, but had to discover some things myself by trial-and-error.

Hardware Specification

  • Intel Pentium 4 2.53GHz CPU (was Intel Celeron 1.7GHz when CPU usage stats were gathered; the P4 is about 50-100% faster)
  • 768MB RAM (originally 256MB)
  • Gigabyte GA-8PE667 Ultra Motherboard (i845PE)
  • Seagate ST3500630A PATA 500GB disc (OS, database, recordings)
  • Seagate ST3300622A PATA 300GB disc (originally only disc; now music, emulator ROMs)
  • LiteOn/JLMS XJ-HD165H DVD-ROM
  • NEC ND-4570A DVD+/-RW
  • Codegen ATX-9001 case
  • 1*Hauppauge Nova-T DVB-T tuner (originally 2)
  • 1*Hauppauge Nova-T-500 dual DVB-T tuner with Hauppauge infra-red remote control
  • 1*Pace Bt878 Analogue NICAM/FM tuner (not currently used)
  • 1*D-Link quad-port NIC
  • GeForce4 MX 440 AGP 128MB fanless VGA card (bought used to replace failing cheaper nVidia card)
  • home-built VGA-to-RGB SCART adaptor with integrated audio in/out and composite from SCART
  • 2*PADIX/Rockfire PX-205 PSX-USB Bridge with two Logic-7 Playstation dual-shock gamepads
  • Ruwido/Chicony KB-9820 infra-red PS/2 keyboard/mousepad
  • Panasonic TX-28DTX11 100Hz DVB-T 16:9 TV
  • SLx 4-way UHF amplifier
  • Yamaha RX-V361 AV Receiver/Surround Decoder, linked via 3m coax

Software Specification

  • Fedora Core 8 running 2.6.23.9-85.fc8 kernel (reverted from 2.6.24.3-12.fc8 after problems with 'mt2060 failed to read/write' errors and inability to tune) and standard video4linux drivers. This kernel revision appears to fully support the Nova-T-500, including the remote control, thus completely negating any reason to use out-of-tree v4l drivers from the mercurial repository. Note that previous FC8 kernels supported the Nova-T-500, but with no remote control support. The v4l drivers from the mercurial repository are reputed to be more stable with the Nova-T-500, but I experienced a couple of hard locks when running with a snapshot taken on 17 March 2008.
  • MythTV 21 from ATrpms
  • pdnsd caching DNS server
  • privoxy ad-filtering HTTP proxy
  • DHCP daemon
  • netfilter/iptables firewall
  • NTP server
  • nVidia 96.43.01 drivers from ATrpms
  • Xmame/Xmess 0.106, fceultra 0.98.12, VisualBoyAdvance 1.7.2, zsnes 1.52, dgen-sdl 1.23
  • dvb-usb-dib0700-1.20.fw firmware for Nova-T-500 (may need symlinks in /lib/firmware named dvb-usb-dib0700-01.fw and dvb-usb-dib0700-1.10.fw)

OS Configuration

Partitioning

/dev/sda1    2668MiB /           ext3
/dev/sda2    2668MiB spare
/dev/sda3    2691MiB swap
/dev/sda4          - extended
/dev/sda5  410089MiB /myth/video jfs
/dev/sda6   23847MiB /tmp        ext2
/dev/sda7    9547MiB /var        ext3
/dev/sda8   19086MiB /usr        ext3
/dev/sda9    6346MiB /home       ext3

/dev/sdb1    2668MiB spare
/dev/sdb2    2668MiB spare
/dev/sdb3    2691MiB spare
/dev/sdb4          - extended
/dev/sdb5   74395MiB spare
/dev/sdb6    9547MiB spare
/dev/sdb7    1914MiB spare
/dev/sdb8   14316MiB spare
/dev/sdb9   76301MiB /myth/music     ext2
/dev/sdb10 101670MiB /myth/emulators ext2

/etc/php.ini

Configure PHP's date.timezone setting to match local timezone, or MythWeb will fail to generate preview thumbnails for recordings that were made whilst DST was in force if DST is not currently in force, and vice versa.

Example:

date.timezone = Europe/London

/etc/my.cnf

[mysqld]
key_buffer = 16M
table_cache = 128
sort_buffer_size = 2M
myisam_sort_buffer_size = 8M
query_cache_size = 16M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

/etc/X11/xorg.conf


# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig:  version 1.0  (buildmeister@builder3)  Wed Dec 14 16:39:22 PST 2005
# XFree86 4 configuration created by pyxf86config

Section "ServerLayout"
	Identifier     "Default Layout"
	Screen      0  "Screen0" 0 0
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

# This, combined with disabling syncing in ~/.nvidia-settings-rc makes OpenGL vsync work
# properly
Section "Extensions"
        Option      "Composite" "Disable"
EndSection

Section "Files"

# RgbPath is the location of the RGB database.  Note, this is the name of the 
# file minus the extension (like ".txt" or ".db").  There is normally
# no need to change the default.
# Multiple FontPath entries are allowed (they are concatenated together)
# By default, Red Hat 6.0 and later now use a font server independent of
# the X server to render fonts.
	RgbPath      "/usr/X11R6/lib/X11/rgb"
	ModulePath   "/usr/lib/xorg/modules/extensions/nvidia"
	ModulePath   "/usr/lib/xorg/modules/extensions"
	ModulePath   "/usr/lib/xorg/modules"
	ModulePath   "/usr/lib/xorg/modules/"
EndSection

Section "ServerFlags"
	Option	    "AllowMouseOpenFail"
EndSection

Section "InputDevice"

# Specify which keyboard LEDs can be user-controlled (eg, with xset(1))
#	Option	"Xleds"		"1 2 3"
# To disable the XKEYBOARD extension, uncomment XkbDisable.
#	Option	"XkbDisable"
# To customise the XKB settings to suit your keyboard, modify the
# lines below (which are the defaults).  For example, for a non-U.S.
# keyboard, you will probably want to use:
#	Option	"XkbModel"	"pc102"
# If you have a US Microsoft Natural keyboard, you can use:
#	Option	"XkbModel"	"microsoft"
#
# Then to change the language, change the Layout setting.
# For example, a german layout can be obtained with:
#	Option	"XkbLayout"	"de"
# or:
#	Option	"XkbLayout"	"de"
#	Option	"XkbVariant"	"nodeadkeys"
#
# If you'd like to switch the positions of your capslock and
# control keys, use:
#	Option	"XkbOptions"	"ctrl:swapcaps"
# Or if you just want both to be control, use:
#	Option	"XkbOptions"	"ctrl:nocaps"
#
	Identifier  "Keyboard0"
	Driver      "kbd"
	Option	    "XkbModel" "pc105"
	Option	    "XkbLayout" "gb"
EndSection

Section "InputDevice"
	Identifier  "Mouse0"
	Driver      "mouse"
	Option	    "Protocol" "IMPS/2"
	Option	    "Device" "/dev/input/mice"
	Option	    "ZAxisMapping" "4 5"
	Option	    "Emulate3Buttons" "yes"
EndSection

Section "Monitor"

#    HorizSync       31.5 - 37.9
#    VertRefresh     50.0 - 70.0
	Identifier   "Monitor0"
	VendorName   "Monitor Vendor"
	ModelName    "Unknown monitor"
	HorizSync    0.0 - 16.0
	VertRefresh  49.0 - 62.0
	ModeLine     "800x576pali" 15.4 800 823 895 984 576 580 583 625 -hsync -vsync interlace
	ModeLine     "800x288pal-half" 15.4 800 823 895 984 288 290 292 313 -hsync -vsync
#	ModeLine     "768x576pali" 14.8 768 789 858 944 576 581 586 625 -hsync -vsync interlace
# 768x576@14.75 is 15.625kHz horiz sync
	ModeLine     "768x576pali" 14.75 768 789 858 944 576 581 586 625 -hsync -vsync interlace
	ModeLine     "768x288pal-half" 14.8 768 792 856 944 288 290 292 313 -hsync -vsync
#	ModeLine     "720x576pali" 13.9 720 744 808 888 576 580 583 625 -hsync -vsync interlace

# dvb is normally 720x576, 4:3 analogue is normally 768x576
# previous best
# 720x576 w/ 13.5MHz dotclock is 50.0000Hz, 15.6250kHz, checked with hacked xvidtune
# and manually: 864 * 15625 = 13.5M
# Good, but a bit too far to the right - AJB 20071110
#	ModeLine     "720x576pali" 13.5 720 722 786 864 576 581 586 625 -hsync -vsync interlace

#	ModeLine     "720x576pali" 13.5 720 727 791 864 576 581 586 625 -hsync -vsync interlace
#	ModeLine     "720x576pali" 13.5 720 737 801 864 576 581 586 625 -hsync -vsync interlace
	ModeLine     "720x576pali" 13.5 720 757 821 864 576 581 586 625 -hsync -vsync interlace

# worth trying if 720x576@13.5 flickers:
# from http://www.avforums.com/forums/showthread.php?t=136811&page=33
# ModeLine "720x576" 15.125 720 762 834 968 576 579 607 625 -hsync -vsync interlace
# from http://www.avforums.com/forums/showthread.php?t=136811&page=27
ModeLine "1024x576" 19.750 1024 1056 1152 1264 576 581 586 625 -hsync -vsync interlace

#	ModeLine     "720x288pal-half" 13.9 720 744 808 888 288 290 292 313 -hsync -vsync
# should be 13.875MHz for 15.625kHz horiz sync
	ModeLine     "720x288pal-half" 13.875 720 744 808 888 288 290 292 313 -hsync -vsync
# previously used for some oddball broadcasts
# 704x576 w/ 13.5MHz dotclock is 50.0000Hz, 15.6250kHz, checked with hacked xvidtune
	ModeLine     "704x576pali" 13.5 704 720 784 864 576 580 583 625 -hsync -vsync interlace
	ModeLine     "704x288pal-half" 13.5 704 720 784 864 288 290 292 313 -hsync -vsync

# appears to be closest to PAL spec, according to:
# http://www.gossamer-threads.com/lists/mythtv/users/191409?search_string=interlace;#191409
# http://www.gossamer-threads.com/lists/mythtv/users/100222?search_string=scart;#100222
# still flickers occasionally with 8776 drivers
# 720x576 w/ 13.875MHz dotclock is 49.98Hz according to xvidtune
#	ModeLine     "720x576pali" 13.875 720 744 808 888 576 581 586 625 -hsync -vsync interlace
#	ModeLine     "720x288pal-half" 13.875 720 744 808 888 288 290 293 313 -hsync -vsync
#	ModeLine     "704x576pali" 13.6 704 728 792 872 576 581 586 625 -hsync -vsync interlace
#	ModeLine     "704x288pal-half" 13.6 704 728 792 872 288 290 293 313 -hsync -vsync

# previously used for some oddball broadcasts
#	ModeLine     "704x576pali" 13.5 704 720 784 864 576 580 583 625 -hsync -vsync interlace
#	ModeLine     "704x288pal-half" 13.5 704 720 784 864 288 290 292 313 -hsync -vsync

	ModeLine     "648x576pali" 12.5 648 664 720 824 576 580 583 625 -hsync -vsync interlace
	ModeLine     "648x288pal-half" 12.5 648 664 720 824 288 290 292 313 -hsync -vsync
	ModeLine     "800x480ntsci" 15.1 800 808 879 960 480 484 487 525 -hsync -vsync interlace
	ModeLine     "800x240ntsc-half" 15.1 800 808 879 960 240 242 244 263 -hsync -vsync
	ModeLine     "720x480ntsci" 13.6 720 728 792 864 480 484 487 525 -hsync -vsync interlace
	ModeLine     "720x240ntsc-half" 13.6 720 728 792 864 240 242 244 263 -hsync -vsync
	ModeLine     "704x480ntsci" 13.3 704 712 776 848 480 484 487 525 -hsync -vsync interlace
	ModeLine     "704x240ntsc-half" 13.3 704 712 776 848 240 242 244 263 -hsync -vsync
	ModeLine     "657x480ntsci" 12.5 656 664 728 792 480 484 487 525 -hsync -vsync interlace
	ModeLine     "657x240ntsc-half" 12.5 656 664 728 792 240 242 244 263 -hsync -vsync
	ModeLine     "320x256pal" 10.9 320 352 368 400 256 261 264 269 -hsync -vsync doublescan
	ModeLine     "320x512pali" 5.5 320 352 368 400 512 523 527 539 -hsync -vsync interlace
	ModeLine     "320x200pal" 8.4 320 352 368 400 200 204 206 211 -hsync -vsync doublescan
	ModeLine     "320x400pali" 4.2 320 352 360 392 400 409 411 421 -hsync -vsync interlace
	ModeLine     "320x400ntsci" 5.1 320 352 368 400 400 409 411 421 -hsync -vsync interlace
	ModeLine     "320x200ntsc" 10.2 320 352 368 400 200 204 206 211 -hsync -vsync doublescan
	ModeLine     "352x288pald" 13.5 352 392 492 512 288 292 300 304 -hsync -vsync doublescan
	ModeLine     "352x288paldi" 13.5 352 392 492 512 288 292 300 304 -hsync -vsync interlace doublescan
	Option	    "dpms"
EndSection

Section "Device"

# next line might make XvMC work
# or fix NV WAIT problems
# ...maybe, but makes picture bounce - AJB 20060403
    Option         "NvAgp" "1"
    Option         "UseEvents" "True"
# another thing that might help with NV WAIT - AJB 20060403
#    Option         "TVStandard" "PAL-I"
	Identifier  "Videocard0"
	Driver      "nvidia"
	VendorName  "Videocard vendor"
	BoardName   "NVIDIA GeForce 4 (generic)"
	Option	    "RenderAccel" "off"
#    Option         "TVOutFormat" "COMPOSITE"
	Option	    "ConnectedMonitor" "CRT"
# attempt to fix occasional judders
        Option      "UseEvents" "true"
EndSection

Section "Screen"
	Identifier "Screen0"
	Device     "Videocard0"
	Monitor    "Monitor0"
	DefaultDepth     24
	SubSection "Display"
		Viewport   0 0
		Depth     16
		Modes    "1024x576" "720x576pali" "720x288pal-half" "704x576pali" "704x288pal-half" "648x576pali" "648x288pal-half"
#		Modes    "720x576pali" "720x288pal-half" "704x576pali" "704x288pal-half" "648x576pali" "648x288pal-half"
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     24
		Modes    "1024x576" "720x576pali" "720x288pal-half" "704x576pali" "704x288pal-half" "648x576pali" "648x288pal-half"
#		Modes    "720x576pali" "720x288pal-half" "704x576pali" "704x288pal-half" "648x576pali" "648x288pal-half"
	EndSubSection
EndSection

/etc/rc.d/rc.local

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
# mtd needs mysqld to be up, so moved to mythbackend initscript
# AJB 20071106
#/usr/bin/mtd --daemon
setkeycodes e01e 120
/sbin/setpci -s 00:1f.1 latency_timer=b0
/sbin/setpci -s 02:0c.0 latency_timer=b0

# nvidia recommended setting as per <http://www.nvnews.net/vbulletin/showpost.php?p=854678&postcount=5>
# - AJB 20060403
/sbin/setpci -s 01:00.0 latency_timer=80

# attempt to fix router disappearing - AJB 20060423
# 10M doesn't seem to fix it entirely, but it seems to recover
# glitches regularly
# disabled after switching eth0 and eth1 roles around
#/sbin/mii-tool -A 10baseT-HD eth0 # advertise only 10baseT-HD
#/sbin/mii-tool -F 10baseT-HD eth0 # force 10baseT-HD

# attempt to fix router disappearing - AJB 20060424
# this seems worse than 10M-HD
# sometimes doesn't recover
#/sbin/mii-tool -A 100baseTx-HD eth0 # advertise only 10baseT-HD
#/sbin/mii-tool -F 100baseTx-HD eth0 # force 10baseT-HD

# this seems to be ignored in /etc/sysconfig/harddiskhdg AJB 20060622
# 240*5s=20m
#hdparm -S 240 /dev/sdb
# AJB 20071105 - 2*30m=60m
# disabled 20071224 after configuring InstantMirror
# hdparm -S 242 /dev/sdb
lsmod >/tmp/lsmod-rc.local-pre.txt 2>&1
#modprobe dvb_usb_dib0700
#lsmod >/tmp/lsmod-rc.local-post.txt 2>&1

# Attempt to fix judder AJB 20071114
blockdev --setra 2048 /dev/sda

# Disable DVB LNB powerdown, since module option seems to be ignored AJB 20080318
echo 0 >/sys/module/dvb_core/parameters/dvb_powerdown_on_sleep

# Fix USB power to on AJB 20081207
for i in /sys/devices/pci*/*/usb*/power/level /sys/devices/pci*/*/*/usb*/power/level /sys/devices/pci*/*/*/usb*/*/power/level;
        do echo "on" >$i
done


/etc/modprobe.d/options

options dvb-usb-dib0700 force_lna_activation=1

# disable IR remote input on Nova-T-500 (and any other USB DVB devices)
options dvb_usb disable_rc_polling=1

# may not work, so may need to echo to /sys/... in rc.local
options dvb_core dvb_powerdown_on_sleep=0
options dvb-core dvb_powerdown_on_sleep=0

options snd-intel8x0 index=0
install snd-intel8x0 /sbin/modprobe --ignore-install snd-intel8x0 && /usr/sbin/alsactl restore 0 >/dev/null 2>&1 || :

# I2C module options
alias char-major-89 i2c-dev

/etc/X11/XvMCConfig

libXvMCNVIDIA_dynamic.so.1

Add to /etc/security/limits.conf

*               -       rtprio     0
*               -       nice       0
@video          -       rtprio     50
@video          -       nice       0
@mythtv          -       rtprio     50
@mythtv          -       nice       0

$HOME/.Xclients

#!/bin/sh
# Load nVidia driver custom settings
nvidia-settings --load-config-only &
# Restore audio settings
/usr/sbin/alsactl restore
# Launch irexec for myth power button stop/start
IREXECPID=`ps uaxwww | grep irexec$ | awk '{print $2}'`
if [ "$IREXECPID" = "" ]; then
        irexec &
fi
# Disable dynamic power management (screen blanking)
/usr/X11R6/bin/xset -dpms
# Disable screen saver
/usr/X11R6/bin/xset s off
# get rid of blue line at bottom of picture
/usr/bin/xvattr -a XV_COLORKEY -v 66048
# Launch myth frontend
#mythfrontend &
mythfrontend >/dev/null 2>&1 &
gnome-session

Hauppauge Infra-Red Remote

The sensor for the remote is connected to the Nova-T. No sensor is connected to the Nova-T-500. When I was using two Nova-Ts, sometimes the /dev nodes would swap around after a reboot or kernel upgrade. Using the by-path /dev/ entries is a bit more stable.

/etc/sysconfig/lircd
# Options to lircd
#LIRCD_OPTIONS="-H dev/input -d /dev/input/by-path/pci-0000:02:03.2--event-ir"
# path to the device node for the Nova-T sometimes changes between .2 and .0,
# so use a wildcard to match, as long as there's only ever one Nova-T present!
LIRCD_OPTIONS="-H dev/input -d /dev/input/by-path/pci-0000:02:03.?--event-ir"
/etc/lircd.conf

# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.8.0(userspace) on Sun Mar  5 23:39:07 2006
#
# contributed by Alex Butcher
#
# brand: Hauppage Nova-T 909               myconfig.conf
# model no. of remote control: 
# devices being controlled by this remote:
#

begin remote

  name  myconfig.conf
  bits           16
  eps            30
  aeps          100

  one             0     0
  zero            0     0
  pre_data_bits   16
  pre_data       0x8001
  gap          135678
  toggle_bit      0


      begin codes
          Go                       0x0161
          Power                    0x0074
          TV                       0x0179
          Videos                   0x0189
          Music                    0x0188
          Pictures                 0x016F
          Guide                    0x016D
          Radio                    0x0181
          UP                       0x0067
          LEFT                     0x0069
          RIGHT                    0x006A
          DOWN                     0x006C
          OK                       0x001C
          Back                     0x00AE
          Menu                     0x008B
          VolumeUp                 0x0073
          VolumeDown               0x0072
          Prev-Ch                   0x019C
          ChannelUp                0x0192
          ChannelDown              0x0193
          Mute                     0x0071
          Record                   0x00A7
          Stop                     0x0080
          Replay                   0x00A8
          Play                     0x00CF
          Skip                     0x00D0
          PreviousTrack            0x00A5
          Pause                    0x0077
          NextTrack                0x00A3
          1                        0x0002
          2                        0x0003
          3                        0x0004
          4                        0x0005
          5                        0x0006
          6                        0x0007
          7                        0x0008
          8                        0x0009
          9                        0x000a
          Asterisk                 0x0184
          0                        0x000b
          Hash                     0x0172
          Red                      0x018E
          Green                    0x018F
          Yellow                   0x0190
          Blue                     0x0191
      end codes

end remote
$HOME/.mythtv/lircrc

Symlinked to $HOME/.mythtv/.lircrc which contains:

# Power Button
begin
prog = irexec
#button = OFF
button = Power
#button = POWER # (for my RS15-2116 remote)
repeat = 0
config = /usr/local/bin/mythpowerbutton.sh
end

# ~/.mythtv/lircrc#
# MythTV native LIRC config file for
# the Hauppauge PVR 150 silver remote
#
# Modified from Jarod Wilson's which came from Jeff Campbell's
# and Brad Templeton's
# Modified still further by Robert Jones
# Here we have the jump point commands.  They only work if you have
# defined function keys for these jump points.  For me the most
# common command is the menu of recordings, so I put that on "videos"
# even though that's counter-intuitive

begin
prog = mythtv
button = TV
repeat = 3
config = F1
end

begin
prog = mythtv
button = Videos
repeat = 3
config = F2
end

# Not yet defined
begin
prog = mythtv
button = Music
repeat = 3
config = F3
end

begin
prog = mythtv
button = Pictures
repeat = 3
config = F4
end

begin
prog = mythtv
button = Guide
repeat = 3
config = F5
end

begin
prog = mythtv
button = Radio
repeat = 3
config = F6
end

begin
prog = mythtv
button = UP
repeat = 3
config = Up
end

begin
prog = mythtv
button = DOWN
repeat = 3
config = Down
end

begin
prog = mythtv
button = LEFT
repeat = 3
config = Left
end

begin
prog = mythtv
button = RIGHT
repeat = 3
config = Right
end

# Channel Up
begin
prog = mythtv
button = ChannelUp
repeat = 3
config = Up
end

# Channel Down
begin
prog = mythtv
button = ChannelDown
repeat = 3
config = Down
end

# OK/Select
begin
prog = mythtv
button = OK
config = Space
end

# Play
begin
prog = mythtv
button = Play
config = Return
end

# Stop
begin
prog = mythtv
button = Stop
config = I
end

# Escape/Exit/Back
begin
prog = mythtv
button = Back
config = Esc
end

# clashes with irexec definition - AJB 20060401
## Power Off/Exit
#begin
#prog = mythtv
#button = Power
#config = Esc
#end


# Pause
begin
prog = mythtv
button = Pause
repeat = 3
config = P
end

# Mute
begin
prog = mythtv
button = Mute
repeat = 3
config = |
end

# Fast forward (30 sec default)
begin
prog = mythtv
button = Skip
repeat = 3
config = >
end

# Rewind (10 sec default)
begin
prog = mythtv
button = Replay
repeat = 3
config = <
end

# Skip forward (10 min default)
begin
prog = mythtv
button = NextTrack
repeat = 3
config = End
end

# Skip backward (10 min default)
begin
prog = mythtv
button = PreviousTrack 
repeat = 3
config = Home
end

# Record
begin
prog = mythtv
button = Record
repeat = 3
config = R
end

# Delete
begin
prog = mythtv
button = Red
repeat = 3
config = D
end

# Decrease play speed
begin
prog = mythtv
button = Green
repeat = 3
config = J
end

# Display EPG while in live TV,
# View selected show while in EPG
begin
prog = mythtv
button = Menu
repeat = 3
config = M
end

begin
prog = mythtv
button = VolumeUp
repeat = 3
config = )
end

begin
prog = mythtv
button = VolumeDown
repeat = 3
config = (
end

# Bring up OSD info
begin
prog = mythtv
button = Go
repeat = 3
config = I
end

# Change display aspect ratio
begin
prog = mythtv
button = Prev-Ch
repeat = 3
config = W
end

# double speed watch
begin
prog = mythtv
button = Yellow
repeat = 3
config = J
end

# change tuners
begin
prog = mythtv
button = Hash
repeat = 3
config = Y
end

# Bring up Time stretch
begin
prog = mythtv
button = Blue
repeat = 3
config = A
end

# Numbers 0-9

begin
prog = mythtv
button = 0
repeat = 3
config = 0
end

begin
prog = mythtv
button = 1
repeat = 3
config = 1
end

begin
prog = mythtv
button = 2
repeat = 3
config = 2
end

begin
prog = mythtv
button = 3
repeat = 3
config = 3
end

begin
prog = mythtv
button = 4
repeat = 3
config = 4
end

begin
prog = mythtv
button = 5
repeat = 3
config = 5
end

begin
prog = mythtv
button = 6
repeat = 3
config = 6
end

begin
prog = mythtv
button = 7
repeat = 3
config = 7
end

begin
prog = mythtv
button = 8
repeat = 3
config = 8
end

begin
prog = mythtv
button = 9
repeat = 3
config = 9
end


### MPlayer lirc setup

# Show OSD
begin
prog = mplayer
button = Menu
repeat = 3
config = osd
end

# Pause playback
begin
prog = mplayer
button = Pause
repeat = 3
config = pause
end

# Skip ahead a minute if playing
# If paused, resume playing
begin
prog = mplayer
button = Play
repeat = 3
config = seek +1
end

# Stop playback and exit
begin
prog = mplayer
button = Stop
repeat = 3
config = quit
end

# Mute
begin
prog = mplayer
button = Mute
repeat = 3
config = mute
end

# Seek back 10 seconds
begin
prog = mplayer
button = Replay
repeat = 3
config = seek -10
end

# Seek forward 30 seconds
begin
prog = mplayer
button = Skip 
repeat = 3
config = seek +30
end

# Quit
begin
prog = mplayer
button = Back
repeat = 3
config = quit
end

# Seek forward 10 minutes
begin
prog = mplayer
button = NextTrack
repeat = 3
config = seek +600
end

# Seek backward 10 minutes
begin
prog = mplayer
button = PreviousTrack 
repeat = 3
config = seek -600
end

# Toggle full-screen
begin
prog = mplayer
button = Red
repeat = 3
config = vo_fullscreen
end

begin
     button = Volumeup
     prog = mplayer
     config = volume 1
     repeat = 1
end

begin
    button = VolumeDown
    prog = mplayer
    config = volume -1
    repeat = 1
end

begin
     button = ChannelUp
     prog = mplayer
     config = pt_step 1
end
begin
     button = ChannelDown
     prog = mplayer
     config = pt_step -1
end

begin
     button = Yellow
     prog = mplayer
     config = audio_delay +0.1
end
begin
     button = Green
     prog = mplayer
     config = audio_delay -0.1
end

begin
	button=Subtitles
	prog=mplayer
	config = sub_visibility
end

begin
	button=Text
	prog=mplayer
	config=sub_select
end

begin
        button=Blue
        prog=mplayer
        config=switch_audio
end

### Xine lirc setup

begin
prog = xine
button = Play
repeat = 3
config = Play
end

begin
prog = xine
button = Stop
repeat = 3
config = Stop
end

begin
prog = xine
button = Power
repeat = 3
config = Quit
end

begin
prog = xine
button = Pause
repeat = 3
config = Pause
end

begin
prog = xine
button = ChannelUp
repeat = 3
config = EventUp
end

begin
prog = xine
button = ChannelDown
repeat = 3
config = EventDown
end

begin
prog = xine
button = VolumeDown
repeat = 3
config = EventLeft
end

begin
prog = xine
button = VolumeUp
repeat = 3
config = EventRight
end

begin
prog = xine
button = OK
repeat = 3
config = EventSelect
end

begin
prog = xine
button = Back
repeat = 3
config = Menu
end

begin
prog = xine
button = Skip
repeat = 3
#config = SpeedFaster
config = SeekRelative+60
end

begin
prog = xine
button = Replay
repeat = 3
#config = SpeedSlower
config = SeekRelative-60
end

begin
prog = xine
button = VolumeUp
repeat = 3
config = Volume+
end

begin
prog = xine
button = VolumeDown
repeat = 3
config = Volume-
end

begin
prog = xine
button = Mute
repeat = 3
config = Mute
end

begin
prog = xine
button = Menu
repeat = 3
config = RootMenu
end

begin
prog = xine
button = NextTrack
repeat = 3
config = EventNext
end

begin
prog = xine
button = PreviousTrack
repeat = 3
config = EventPrior
end

begin
prog = xine
button = Go
repeat = 3
config = OSDStreamInfos
end

begin
prog = xine
button = Red
repeat = 3
config = Quit
end
/usr/local/bin/mythpowerbutton.sh
#!/bin/bash
PROG=mythfrontend
#PROG=gnome-session
STATUS=`ps -e | grep $PROG | grep -v grep | wc -l | awk '{print $1}'`

if [ `echo $DISPLAY | grep -c ":0"` -ge 1 ]
then
    if [ $STATUS -eq 0 ]
    then
        echo "use mythconverg; update cardinput set startchan=1;" | mysql -u root --password=xxx
#       xrandr -s 768x576
        xrandr -s 1024x576 # AJB 20071104
        #( $PROG & )
        ( $PROG >/dev/null 2>&1 & )# ~/.asoundrc or /etc/asound.conf


    else
        killall $PROG
        echo "use mythconverg; update cardinput set startchan=1;" | mysql -u root --password=xxx
    fi
fi
exit 0

Sound

/home/mythtv/.asoundrc
# ALSA configuration file

##### USAGE #####
# Save this file as "~/.asoundrc" (for user-specific sound configuration) or
# "/etc/asound.conf" (for system-wide sound configuration) and specify ALSA
# device names ad described in the next section.


##### DEVICE NAMES #####
# This configuration file defines four devices for use by the user.  Those
# devices are "analog", "mixed-analog", "digital", and "mixed-digital".  The
# user may also re-define "default" to be identical to one of the above-named
# devices (i.e. to send all sound output to the digital output unless otherwise
# specified).  Use the device names as described below:
#  - "analog" outputs to the analog output directly and (at least on software
#  sound cards) blocks other audio output.  After playback completes, "queued"
#  sounds are output in sequence.
#  - "mixed-analog" mixes audio output from multiple programs into the analog
#  output (so you can hear beeps, alerts, and other noises while playing back
#  an audio stream).
#  - "digital" outputs to the digital output directly.  Since most (all?)
#  digital outputs expect 48kHz PCM audio, this may not work for some playback
#  (i.e. CD's--which are 44.1kHz PCM audio--or 32kHz audio streams from TV
#  recordings, etc.).
#  - "mixed-digital"

# All other devices created within this file are used only by the configuration
# file itself and should /not/ be used directly.  In other words, do not use
# the devices "analog-hw", "dmix-analog", "digital-hw", or "dmix-digital".


##### IMPORTANT #####
# To make this ALSA configuration file work with your sound card, you will need
# to define the appropriate card and device information for the "analog-hw" and
# "digital-hw" devices below.  You can find the card and device information
# using "aplay -l".


##### Configuration File #####

# Override the default output used by ALSA.  If you do not override the
# default, your default device is identical to the (unmixed) "analog" device
# shown below.  If you prefer mixed and/or digital output, uncomment the
# appropriate four lines below (only one slave.pcm line).
#
# Note, also, that as of ALSA 1.0.9, "software" sound cards have been modified
# such that their default "default" device is identical to the "mixed-analog"
# device.  Whether using an ALSA version before or after 1.0.9, it does no harm
# and has no affect on performance to redefine the device (even if the
# redefinition does not change anything).  Also, by using this ALSA
# configuration file, you once again have access to unmixed analog output using
# the "analog" device.
pcm.!default {
  type plug
## Uncomment the following to use (unmixed) "analog" by default
#  slave.pcm "analog-hw"
## Uncomment the following to use "mixed-analog" by default
  slave.pcm "dmix-analog"
## Uncomment the following to use (unmixed) "digital" by default
#  slave.pcm "digital-hw"
## Uncomment the following to use "mixed-digital" by default
#  slave.pcm "dmix-digital"
}

# Control device (mixer, etc.) for the card
ctl.!default {
  type hw
  card 0
}

# Alias for (converted) analog output on the card
# - This is identical to the device named "default"--which always exists and
# refers to hw:0,0 (unless overridden)
# - Therefore, we can specify "hw:0,0", "default", or "analog" to access analog
# output on the card
# - Note that as of ALSA 1.0.9, "software" sound card definitions redefine
# "default" to do mixing, meaning this device is different from "default" and
# allows playback while blocking other sound sources (until playback
# completes).
pcm.analog {
  type plug
  slave.pcm "analog-hw"
}

# Control device (mixer, etc.) for the card
ctl.analog {
  type hw
  card 0
}

# Alias for (converted) mixed analog output on the card
# - This will accept audio input--regardless of rate--and convert to the rate
# required for the dmix plugin (in this case 48000Hz)
# - Note that as of ALSA 1.0.9, "software" sound card definitions redefine
# "default" to do mixing, meaning this device is identical to "default" for
# "software" sound cards.
pcm.mixed-analog {
  type plug
  slave.pcm "dmix-analog"
}

# Control device (mixer, etc.) for the card
ctl.mixed-analog {
  type hw
  card 0
}

# Alias for (converted) digital (S/PDIF) output on the card
# - This will accept audio input--regardless of rate--and convert to the rate
# required for the S/PDIF hardware (in this case 48000Hz)

#AJB
# original
#pcm.digital {
#  type plug
#  slave.pcm "digital-hw"
#}

#pcm.digital {
#  type plug
#  slave.pcm "dmix-digital"
#}

pcm.digital {
  type plug
  slave.pcm "digital-hw"
}


# Control device (mixer, etc.) for the card
ctl.digital {
  type hw
  card 0
}

# Alias for mixed (converted) digital (S/PDIF) output on the card
#  - This will accept audio input--regardless of rate--and convert to the rate
#  required for the S/PDIF hardware (in this case 48000Hz)
pcm.mixed-digital {
  type plug
  slave.pcm "dmix-digital"
}

# Control device (mixer, etc.) for the card
ctl.mixed-digital {
  type hw
  card 0
}

# The following devices are not useful by themselves.  They require specific
# rates, channels, and formats.  Therefore, you probably do not want to use
# them directly.  Instead use of of the devices defined above.

# Alias for analog output on the card
# Do not use this directly--it requires specific rate, channels, and format
pcm.analog-hw {
  type hw
  card 0
  # The default value for device is 0, so no need to specify
#  - Uncomment one of the below or create a new "device N" line as appropriate
#    for your sound card or 
#  device 1
#  device 4
}

# Control device (mixer, etc.) for the card
ctl.analog-hw {
  type hw
  card 0
}

# Alias for digital (S/PDIF) output on the card
# Do not use this directly--it requires specific rate, channels, and format
pcm.digital-hw {
  type hw
  card 0
#  device 1
#  - Comment out "device 1" above and uncomment one of the below or create a
#    new "device N" line as appropriate for your sound card or 
#  device 2
#  device 4

# AJB
   device 4
}

# Control device (mixer, etc.) for the card
ctl.digital-hw {
  type hw
  card 0
}

# Direct software mixing plugin for analog output on the card
# Do not use this directly--it requires specific rate, channels, and format
pcm.dmix-analog {
  type dmix
  ipc_key 1234
  slave {
    pcm "analog-hw"
    period_time 0
    period_size 1024
    buffer_size 4096
    rate 48000
  } 
}

# Control device (mixer, etc.) for the card
ctl.dmix-analog {
  type hw
  card 0
}

# Direct software mixing plugin for digital (S/PDIF) output on the card
# Do not use this directly--it requires specific rate, channels, and format
pcm.dmix-digital {
  type dmix
  ipc_key 1235
  slave {
    pcm "digital-hw"
    period_time 0
    period_size 1024
    buffer_size 4096
    rate 48000
  } 
}

# Control device (mixer, etc.) for the card
ctl.dmix-digital {
  type hw
  card 0
}

pcm.!default {
type plug
slave {
pcm multi
rate 48000
}
ttable.0.0 1.0
ttable.1.1 1.0
ttable.0.2 1.0
ttable.1.3 1.0
}

pcm.stereo {
type plug
slave {
pcm multi
rate 48000
}
ttable.0.0 1.0
ttable.1.1 1.0
ttable.0.2 1.0
ttable.1.3 1.0
}

ctl.stereo {
type hw
card 0
}

pcm.multi {
type multi
slaves.a.pcm "analog-hw"
slaves.a.channels 2

#AJB
# originally "digital-hw"
slaves.b.pcm "digital-hw"
#slaves.b.pcm "dmix-digital"

slaves.b.channels 2
bindings.0.slave a
bindings.0.channel 0
bindings.1.slave a
bindings.1.channel 1
bindings.2.slave b
bindings.2.channel 0
bindings.3.slave b
bindings.3.channel 1
}

ctl.multi {
type hw
card 0
}
MythTV configuration
AudioOutputDevice = ALSA:default # IMPORTANT - makes MythTV output simultaneously to front (analog) and S/PDIF (digital) outputs
PassThruOutputDevice = ALSA:iec958:{ AES0 0x02 }
AC3PassThru = Enabled
DTSPassThru = Enabled
MixerDevice = Default
MixerControl = Master
MasterMixerVolume = 100

MythTV configuration

MythTV Playback Settings

  • Deinterlace, Linear Blend (interlaced output sometimes gets out-of-sync with TV)
  • Disable OpenGL vsync
  • Enable SyncToVBlank=1, XVideoTextureSyncToVBlank=1 and XVideoBlitterSyncToVBlank=1 in $HOME/.nvidia-settings-rc
  • Use 1024x576 for UI, 720x576pali for playback

- or -

  • Deinterlace, Linear Blend (best shapes), but experiment with Bob 2x and no deinterlacing
  • Enable OpenGL vsync
  • Use 1024x576 for UI, 720x576pali for playback
  • enable SyncToVBlank=0, XVideoTextureSyncToVBlank=0 and XVideoBlitterSyncToVBlank=0 in $HOME/.nvidia-settings-rc

- or -

  • Disable deinterlacing, run mythfrontend with NO_XV=1 environment variable set (or use the opengl or Xshm output targets). Best quality, but burns CPU (~80% usage)

Note that due to an apparent bug in the current nVidia legacy drivers (9143, maybe other versions too), Xvideo regions displayed on interlaced displays appear to be scandoubled. Switching to an ATI Radeon 7500 appears to fix this but introduces other problems to make it an unacceptable alternative to me.

Edit MythTV Titivillus OSD Theme

Edit /usr/share/mythtv/themes/Titivillus-OSD/osd.xml to centre correctly:

<mythosdtheme>
  <timeformat>FROMSETTINGS</timeformat>
  <fadeaway>45</fadeaway>

  <font name="titlefont" face="Arial">
    <color>255</color>
    <size>19</size>
    <size:small>13</size:small>
    <size:big>21</size:big>
    <shadow>3,3</shadow>
  </font>


  <font name="infofont" face="Arial">
    <color>255</color>
    <size>14</size>
    <size:small>13</size:small>
    <size:big>16</size:big>
    <outline>yes</outline>
  </font>

  <font name="smallinfofont" face="Arial">
    <color>255</color>
    <size>13</size>
    <size:small>12</size:small>
    <size:big>15</size:big>
    <outline>yes</outline>
  </font>

  <font name="kindasmallinfofont" face="Arial">
    <color>255</color>
    <size>14</size>
    <size:small>12</size:small>
    <size:big>16</size:big>
    <shadow>1,1</shadow>
  </font>


  <font name="infofontnool" face="Arial">
    <color>255</color>
    <size>14</size>
    <size:small>12</size:small>
    <size:big>16</size:big>
    <outline>no</outline>
  </font>

  <font name="infofontblack" face="Arial">
    <color>0</color>
    <size>14</size>
    <size:small>12</size:small>
    <size:big>16</size:big>
    <outline>no</outline>
  </font>

  <font name="infofont2" face="Arial">
    <color>255</color>
    <size>13</size>
    <size:small>12</size:small>
    <size:big>14</size:big>
    <shadow>1,1</shadow>
  </font>

  <font name="largeinfofont" face="Arial">
    <color>255</color>
    <size>20</size>
    <size:small>18</size:small>
    <size:big>22</size:big>
    <shadow>3,3</shadow>
  </font>


  <font name="mediuminfofont" face="Arial">
    <color>255</color>
    <size>15</size>
    <size:small>13</size:small>
    <size:big>17</size:big>
    <outline>yes</outline>
  </font>

  <font name="infofontgray" face="Arial">
    <color>200</color>
    <size>14</size>
    <size:small>12</size:small>
    <size:big>16</size:big>
    <shadow>1,1</shadow>
  </font>

  <font name="infofontgrayol"  face="Arial">
    <color>128</color>
    <size>14</size>
    <size:small>12</size:small>
    <size:big>17</size:big>
    <outline>yes</outline>
  </font>

  <font name="channelfont"  face="Arial">
    <color normal="#00FF00">255</color>
    <size>28</size>
    <size:small>20</size:small>
    <size:big>30</size:big>
    <outline>yes</outline>
  </font>

  <font name="settings" face="Arial">
    <color>255</color>
    <size>18</size>
    <size:small>16</size:small>
    <size:big>20</size:big>
    <outline>yes</outline>
  </font>

  <font name="position" face="Arial">
    <color>255</color>
    <size>12</size>
    <size:small>10</size:small>
    <size:big>14</size:big>
    <outline>yes</outline>
  </font>

  <font name="position2" face="Arial">
    <color>255</color>
    <size>16</size>
    <outline>yes</outline>
  </font>

  <font name="notifyfont" face="Arial">
    <color>255</color>
    <size>13</size>
    <size:small>12</size:small>
    <size:big>15</size:big>
    <outline>yes</outline>
  </font>


  <container name="program_info" fademovement="0,-6">
    <image name="background">
      <filename>osd-bigger.png</filename>
      <position>15,20</position>
    </image>
    <textarea name="title">
      <area>62,26,450,27</area>
      <font>titlefont</font>
    </textarea>
    <textarea name="subtitle">
      <area>70,50,435,27</area>
      <font>smallinfofont</font>
    </textarea>
    <textarea name="description">
      <multiline>yes</multiline>
      <area>37,106,576,240</area>
      <font>infofont2</font>
      <value>%LONGREPEAT%%STARS%%DESCRIPTION%</value>
      <linespacing>2</linespacing>
    </textarea>

     <!-- here to see which one I like better -->
     <textarea name="length">
	 <multiline>no</multiline>
	 <area>37,71,350,30</area>
	 <font>smallinfofont</font>
       <value>%STARTTIME%-%ENDTIME% (%LENMINS%)</value>
      </textarea>

    <image name="channelicon"> <!-- set internally, doesn't need a filename -->
      <position>37,26</position>
      <staticsize>25,25</staticsize> <!-- resize the image to these dimensions -->
    </image>
    <!-- removed and replaced by chan_number at the end of this file
    <textarea name="channel" align="center">
       <area>526,30,90,30</area>
       <font>channelfont</font>
       <value>%CHANNUM%</value>
    </textarea>
    -->
    <textarea name="callsign" align="center">
       <area>460,70,130,30</area>
       <font>mediuminfofont</font>
    </textarea>
    <textarea name="time" align="right">
       <area>352,70,120,30</area>
       <font>mediuminfofont</font>
    </textarea>
  </container>

  <container name="channel_editor">
    <image name="background">
      <filename>osd-channel-edit.png</filename>
      <position>102,99</position>
    </image>
    <textarea name="dialog_label" align="center">
      <area>105,106,450,40</area>
      <font>infofont</font>
      <value>Channel Editor</value>
    </textarea>
    <textarea name="callsign_label" align="right">
      <area>120,151,155,40</area>
      <font>infofont</font>
      <value>Callsign</value>
    </textarea>
    <textarea name="callsign" entry="0">
      <area>310,151,220,40</area>
      <font>infofontgray</font>
      <altfont>infofont</altfont>
      <value></value>
    </textarea>
    <textarea name="channum_label" align="right">
      <area>120,200,155,40</area>
      <font>infofont</font>
      <value>Channel #</value>
    </textarea>
    <textarea name="channum" entry="1">
      <area>310,200,220,40</area>
      <font>infofontgray</font>
      <altfont>infofont</altfont>
      <value></value>
    </textarea>
    <textarea name="channame_label" align="right">
      <area>120,246,155,40</area>
      <font>infofont</font>
      <value>Channel Name</value>
    </textarea>
    <textarea name="channame" entry="2">
      <area>310,246,220,40</area>
      <font>infofontgray</font>
      <altfont>infofont</altfont>
      <value></value>
    </textarea>
    <textarea name="XMLTV_label" align="right">
      <area>120,295,155,40</area>
      <font>infofont</font>
      <value>XMLTV ID</value>
    </textarea>
    <textarea name="XMLTV" entry="3">
      <area>310,295,220,40</area>
      <font>infofontgray</font>
      <altfont>infofont</altfont>
      <value></value>
    </textarea>
    <textarea name="probe_all" entry="4" button="yes" align="center">
      <area>120,342,185,40</area>
      <font>infofontgray</font>
      <altfont>infofont</altfont>
      <value>[P]robe</value>
    </textarea>
    <textarea name="ok" entry="5" button="yes" align="center">
      <area>330,342,185,40</area>
      <font>infofontgray</font>
      <altfont>infofont</altfont>
      <value>[O]k</value>
    </textarea>
  </container>

  <container name="browse_info" fademovement="0,-6">
    <image name="background">
      <filename>osd-bigger.png</filename>
      <position>15,20</position>
    </image>
       <textarea name="browsing">
          <area>480,1,200,200</area>
          <font>smallinfofont</font>
         <value>Browsing</value>
     </textarea>
     <textarea name="title">
      <area>62,26,450,27</area>
      <font>titlefont</font>
    </textarea>
    <textarea name="subtitle">
      <area>70,50,435,27</area>
      <font>smallinfofont</font>
    </textarea>

    <textarea name="length">
      <multiline>yes</multiline>
      <area>37,71,350,30</area>
      <font>smallinfofont</font>
      <value>%STARTTIME%-%ENDTIME% (%LENMINS%)</value>
    </textarea>

    <textarea name="description">
      <multiline>yes</multiline>
      <area>37,106,559,240</area>
      <font>infofont2</font>
      <value>%LONGREPEAT%%STARS%%DESCRIPTION%</value>
    </textarea>

        <image name="channelicon"> <!-- set internally, doesn't need a filename -->
      <position>37,26</position>
      <staticsize>25,25</staticsize> <!-- resize the image to these dimensions -->
    </image>
    
    <textarea name="channel" align="center">
       <area>526,30,90,30</area>
       <font>channelfont</font>
       <value>%CHANNUM%</value>
    </textarea>
   
    <textarea name="callsign" align="center">
       <area>460,70,130,30</area>
       <font>mediuminfofont</font>
    </textarea>
    <textarea name="time" align="right">
       <area>352,70,120,30</area>
       <font>mediuminfofont</font>
    </textarea>
  </container>

  <container name="status" priority="10" fademovement="0,-6">
    <image name="background">
      <filename>osd-small.png</filename>
      <position>15,360</position>
    </image>
    <textarea name="status" align="left">
      <area>35,375,300,100</area>
      <font>largeinfofont</font>
    </textarea>
    <slider name="statusslider" type="fill">
      <area>60,425,442,22</area>
      <filename>fill-blue.png</filename>
    </slider>
    <textarea name="slidertext" align="center">
      <area>355,368,250,65</area>
      <font>position2</font>
    </textarea>
  </container>

  <container name="editmode">
    <image name="background">
      <filename>edit_background.png</filename>
      <position>31,325</position>
    </image>
    <slider name="editslider" type="edit">
      <area>160,407,410,65</area>
      <filename>fill-blue.png</filename>
      <altfilename>red.png</altfilename>
    </slider>
    <slider name="editposition" type="position">
      <area>160,400,410,60</area>
      <filename>position-indicator.png</filename>
    </slider>
    <textarea name="timedisplay" align="center">
      <area>337,358,350,30</area>
      <font>position2</font>
    </textarea>
    <textarea name="cutindicator" align="left">
      <area>58,402,100,30</area>
      <font>position</font>
    </textarea>
    <textarea name="seekamount" align="left">
      <area>40,430,200,30</area>
      <font>infofont</font>
    </textarea>
    <editarrow name="left">
      <filename>cut-end.png</filename>
      <area>160,405,410,25</area>
    </editarrow>
    <editarrow name="right">
      <filename>cut-start.png</filename>
      <area>160,405,410,25</area>
    </editarrow>
  </container>

  <container name="settings">
    <textarea name="settings">
      <area>50,50,350,32</area>
      <font>settings</font>
    </textarea>
  </container>

  <container name="basedialog" priority="0"> <!-- must be named this -->
    <image name="background">
      <filename>popup.png</filename>
      <position>0,0</position>
    </image>
    <!-- Uncomment to mask out background	  
    <box name="background">
      <area>80,60,480,360</area>
    </box>
    -->
    <textarea name="message">
      <area>85,110,470,253</area>
      <font>mediuminfofont</font>
      <multiline>yes</multiline>
    </textarea>
    <textarea name="option1">
      <area>110,253,470,30</area>
      <font>infofont2</font>
      <altfont>infofontgray</altfont>
    </textarea>
    <textarea name="option2">
      <area>110,283,470,30</area>
      <font>infofont2</font>
      <altfont>infofontgray</altfont>
    </textarea>
    <textarea name="option3">
      <area>110,313,470,30</area>
      <font>infofont2</font>
      <altfont>infofontgray</altfont>
    </textarea>
    <textarea name="option4">
      <area>110,343,470,30</area>
      <font>infofont2</font>
      <altfont>infofontgray</altfont>
    </textarea>

    <positionrects name="selector"> <!-- draws a white rectangle at these 
                                         coords indicating the current 
                                         selection -->
      <area>105,246,460,30</area>
      <area>105,276,460,30</area>
      <area>105,306,460,30</area>
      <area>105,336,460,30</area>
    </positionrects>
<!-- Alternatively, this form will show an image (instead of the drawn white 
     rectangle) at the given positions to indicate the current selection 
    <positionimage name="selector">
      <filename>cut-start.png</filename>
      <position>60,296</position>
      <position>60,326</position>
      <position>60,356</position>
      <position>60,386</position>
    </positionimage>
-->
  </container>

  <container name="notify_cid_info" priority="10" fademovement="0,6">
    <image name="background">
      <filename>osd-callerid.png</filename>
      <position>20,200</position>
    </image>
    <textarea name="notify_cid_name">
      <area>45,208,285,30</area>
      <font>notifyfont</font>
      <multiline>no</multiline>
    </textarea>
    <textarea name="notify_cid_num">
      <area>45,235,250,30</area>
      <font>notifyfont</font>
      <multiline>no</multiline>
    </textarea>
    <textarea name="notify_cid_dt">
      <area>45,262,285,30</area>
      <font>notifyfont</font>
      <multiline>no</multiline>
    </textarea>
  </container>

  <container name="notify_alert_text" priority="10" fademovement="0,6">
    <image name="background">
      <filename>osd-alert.png</filename>
      <position>8,10</position>
    </image>

    <textarea name="notify_text">
      <area>20,17,590,80</area>
      <font>notifyfont</font>
      <multiline>yes</multiline>
    </textarea>
  </container>

  <container name="news_scroller" priority="20">
    <box name="background">
      <area>0,434,640,40</area>
    </box>
    <textarea name="text_scroll">
      <area>0,440,640,40</area>
      <font>settings</font>
      <scroller>yes</scroller>
      <scrollmovement>-3,0</scrollmovement> <!-- only x movement for now -->
    </textarea>
  </container>

  <container name="menu">
    <listtreemenu name="menu">
      <area>40,50,620,300</area>
      <listsize>0,0,274,260</listsize>
      <leveloffset>10</leveloffset>
      <gradient type="unselected" start="#505050" end="#000000" alpha="100">
      </gradient>
      <gradient type="selected" start="#5238CA" end="#343898" alpha="255">
      </gradient>
      <fcnfont name="infofont" function="active"></fcnfont>
      <fcnfont name="infofontgray" function="inactive"></fcnfont>
    </listtreemenu>
  </container>


<!--  This replaces the description channel_number
 -->
<container name="channel_number" priority="0">
    <textarea name="channum"  align="center">
      <area>526,30,90,30</area>
      <font>channelfont</font>
    </textarea>
</container> 
</mythosdtheme>

/usr/share/mythtv/themes/Titivillus-OSD/osd-bigger.png

http://www.mythtv.org/wiki/images/d/d8/Osd-bigger.png

Edit MythTV glass-wide osd.xml

<mythosdtheme>
  <!--Mythtv OSD "ProjectGrayhem-OSD" by Justin Hornsby -->
  <!-- borrows heavily from other OSD themes -->
  <!-- if timeformat is set to 'FROMSETTINGS', it will use the time format
       specified in the general mythtv settings -->
  <timeformat>FROMSETTINGS</timeformat>
  <fadeaway>30</fadeaway>
 
  <font name="channelfont">
	  <color>125</color>
	  <!-- <filename>VeraBd.ttf</filename> --> 
	  <size>22</size>
	  <size:small>18</size:small>
	  <shadow>2,2</shadow>
  </font>
  
  <font name="callsignfont">
	<color>200</color>
	<!-- <filename>Vera.ttf</filename> -->
	<size>7</size>
	<size:small>6</size:small>
        <size:big>8</size:big>
  </font>

  <font name="infofont">
	<color>255</color>
	<!-- <filename>Vera.ttf</filename> -->
	<size>12</size>
	<size:small>10</size:small>
        <size:big>14</size:big>
  </font>
  <font name="notify">
	  <color>255</color>
	  <!-- <filename>Vera.ttf</filename> -->
	  <size>14</size>
	  <size:small>12</size:small>
  </font>
  <font name="infofontgray">
	<color>128</color>
	<!-- <filename>Vera.ttf</filename> -->
	<size>15</size>
	<size:small>13</size:small>
  </font>
  <font name="smallfont">
	  <color>255</color>
	  <!-- <filename>Vera.ttf</filename> -->
	  <size>12</size>
	  <size:small>12</size:small>
  </font>
  
  <font name="titlefont" face="Vera">
	<color normal="#FFFFFF">255</color>
	<!-- <filename>VeraBd.ttf</filename> --> 
	<size>16</size>
	<size:small>14</size:small>
  </font>
  
  <font name="grayfont">
    	<color>175</color>
    	<!-- <filename>Vera.ttf</filename> -->
    	<size>10</size>
    	<size:small>10</size:small>
        <size:big>12</size:big>
    	<outline>yes</outline>
  </font>
 
  <font name="timefont">
    	<color>255</color>
    	<!-- <filename>Vera.ttf</filename> -->
    	<size>14</size>
    	<size:small>12</size:small>
  </font>

  <font name="settings">
	<color>255</color>
    	<!-- <filename>Vera.ttf</filename> -->
    	<size>16</size>
    	<size:small>14</size:small>
  </font>
 
  <container name="program_info" fademovement="0,10">
	  <image name="background">
		  <filename>osd/osd_mid.png</filename>
		  <position>0,320</position>
	  </image>
	  <textarea name="title">
		  <area>100,335,400,30</area>
		  <font>titlefont</font>
	  </textarea>
	  <textarea name="description">
		  <multiline>yes</multiline>
		  <area>100,398,500,74</area>
		  <font>infofont</font>
		  <value>%SUBTITLE|"|" %%DESCRIPTION%</value>
	  </textarea>
	  <textarea name="starttime">
		  <area>100,374,440,20</area>
		  <font>grayfont</font>
		  <value>(%STARTTIME% - %ENDTIME%)  %LENMINS%</value>
	  </textarea> 
	  <image name="channelicon">
		  <position>32,344</position>
		  <staticsize>25,25</staticsize>
	  </image>
	  <textarea name="time" align="right">
		  <area>500,337,100,40</area>
		  <font>timefont</font>
	  </textarea>
	  <textarea name="channum" align="center">
		  <area>32,400,60,30</area>
		  <font>channelfont</font>
		  <value>%CHANNUM%</value>
	  </textarea>
  </container>

  <container name="channel_number" fademovement="0,10">
	  <textarea name="channum" align="center">
		  <area>32,400,60,30</area>
		  <font>channelfont</font>
		  <value>%CHANNUM%</value>
	  </textarea>
	  <textarea name="callsign" align="center">
		  <multiline>no</multiline>
		  <area>32,435,60,30</area>
		  <font>callsignfont</font>
		  <value>%CALLSIGN%</value>
	  </textarea>
  </container> 

  <container name="browse_info" fademovement="0,10">
	<image name="background">
		<filename>osd/osd_mid.png</filename>
		<position>0,320</position>
	</image>
	<textarea name="title">
		<area>100,335,400,30</area>
		<font>titlefont</font>
	</textarea>
	<textarea name="description">
		<multiline>yes</multiline>
		<area>100,390,500,74</area>
		<font>infofont</font>
		<value>%SUBTITLE|"|" %%DESCRIPTION%</value>
	</textarea>
	<textarea name="starttime">
		<area>100,374,440,20</area>
		<font>grayfont</font>
		<value>(%STARTTIME% - %ENDTIME%)  %LENMINS%</value>
	</textarea> 
	<image name="channelicon">
		<position>32,344</position>
		<staticsize>25,25</staticsize>
	</image>
	<textarea name="time" align="right">
		<area>500,337,100,40</area>
		<font>timefont</font>
	</textarea>
	<textarea name="channum" align="center">
		<area>32,400,60,30</area>
		<font>channelfont</font>
		<value>%CHANNUM%</value>
    	</textarea>
	<textarea name="callsign" align="center">
		<multiline>no</multiline>
		<area>32,435,60,30</area>
		<font>callsignfont</font>
		<value>%CALLSIGN%</value>
	</textarea> 
  </container>
   
  <container name="status" priority="10" fademovement="0,10">
    <image name="background">
      <filename>osd/osd_mid.png</filename>
      <position>0,320</position>
    </image>
    <image name="sliderframe">
      <filename>osd/paused_frame.png</filename>
      <position>70,395</position>
      <staticsize>500,22</staticsize>
    </image>
    <textarea name="status">
      <area>70,335,400,30</area>
      <font>titlefont</font>
    </textarea>
    <slider name="statusslider" type="fill">
      <area>80,398,480,16</area>
      <filename>osd/fill_green.png</filename>
    </slider>
    <textarea name="slidertext">
      <area>135,380,350,45</area>
      <font>smallfont</font>
      <multiline>no</multiline>
    </textarea>
    <textarea name="time" align="right">
        <area>414,335,90,40</area>
        <font>timefont</font>
     </textarea>
  </container>

  <container name="notify_cid_info" priority="10" fademovement="0,10">
    <image name="background">
	<filename>osd/osd_mid.png</filename>
	<position>0,320</position>
    </image>
    <image name="watermark">
      <filename>osd/phone.png</filename>
      <position>70,354</position>
    </image>
    <textarea name="notify_cid_name">
      <area>276,376,400,20</area>
      <font>infofont</font>
      <multiline>no</multiline>
    </textarea>
    <textarea name="notify_cid_num">
      <area>276,396,400,20</area>
      <font>infofont</font>
      <multiline>no</multiline>
    </textarea>
    <textarea name="notify_cid_dt">
      <area>276,416,400,20</area>
      <font>infofont</font>
      <multiline>no</multiline>
    </textarea>
  </container>

  <container name="notify_alert_text" priority="10" fademovement="0,10">
    <image name="background">
      <filename>osd/osd_mid.png</filename>
      <position>0,320</position>
    </image>
    <textarea name="notify_text">
      <area>60,370,580,60</area>
      <font>infofont</font>
      <multiline>yes</multiline>
    </textarea>
  </container>

  <container name="editmode" fademovement="0,6">
    <image name="background">
      <filename>osd/edit.png</filename>
      <position>0,320</position>
    </image>
    <textarea name="edit">
      <area>30,335,100,27</area>
      <font>titlefont</font>
      <value>Edit</value>
    </textarea>
    <slider name="editslider" type="edit">
      <area>30,408,579,16</area>
      <filename>osd/fill_green.png</filename>
      <altfilename>osd/fill_red.png</altfilename>
    </slider>
    <slider name="editposition" type="position">
	<area>30,404,580,16</area>
      	<filename>osd/position_marker.png</filename>
    </slider>
    <editarrow name="left">
      <filename>osd/cut_end.png</filename>
      <area>35,404,580,65</area>
    </editarrow>
    <editarrow name="right">
      <filename>osd/cut_start.png</filename>
      <area>30,404,580,65</area>
    </editarrow>
    <textarea name="timedisplay">
      <area>30,380,100,60</area>
      <font>smallfont</font>
    </textarea>
    <textarea name="cutindicator" align="center">
	<area>0,380,640,19</area>
     	<font>settings</font>
    </textarea>
    <textarea name="seekamount" align="right">
      <area>480,335,125,40</area>
      <font>timefont</font>
    </textarea>
  </container>

  <container name="settings">
      <image name="background"> 
	<filename>osd/osd_mid.png</filename> 
	<position>0,320</position> 
      </image> 
    <textarea name="settings">
      <area>50,335,350,32</area>
      <font>settings</font>
    </textarea>
  </container>

 <container name="basedialog" priority="0" fademovement="0,0"> <!-- must be named this --> 
   <image name="background"> 
     <filename>osd/popup.png</filename> 
     <position>100,74</position> 
   </image> 
   <positionimage name="selector"> 
     <filename>osd/select.png</filename> 
      <position>114,263</position> 
      <position>114,293</position> 
      <position>114,323</position> 
      <position>114,353</position> 
    </positionimage> 
    <textarea name="message"> 455
      <area>120,94,394,220</area> 
      <font>settings</font> 
      <multiline>yes</multiline> 
   </textarea> 
   <textarea name="option1"> 
      <area>120,269,455,30</area> 
      <font>notify</font> 
      <altfont>grayfont</altfont> 
   </textarea> 
   <textarea name="option2"> 
      <area>120,299,455,30</area> 
      <font>notify</font> 
      <altfont>grayfont</altfont> 
   </textarea> 
   <textarea name="option3"> 
      <area>120,329,455,30</area> 
      <font>notify</font> 
      <altfont>grayfont</altfont> 
   </textarea> 
   <textarea name="option4"> 
      <area>120,359,455,30</area> 
      <font>notify</font> 
      <altfont>grayfont</altfont> 
   </textarea> 
 </container> 
 

  <container name="news_scroller" priority="20">
    <image name="background">
      <filename>osd/scroll.png</filename>
      <position>0,350</position>
    </image>
    <textarea name="text_scroll">
      <area>0,360,640,40</area>
      <font>settings</font>
      <scroller>yes</scroller>
      <scrollmovement>-3,0</scrollmovement> <!-- only x movement for now -->
    </textarea>
  </container>

  <container name="menu">
    <listtreemenu name="menu">
      <area>40,50,640,310</area>
      <listsize>0,0,274,260</listsize>
      <leveloffset>10</leveloffset>
      <gradient type="unselected" start="#505050" end="#000000" alpha="150">
      </gradient>
      <gradient type="selected" start="#52CA38" end="#349838" alpha="255">
      </gradient>
      <fcnfont name="infofont" function="active"></fcnfont>
      <fcnfont name="infofontgray" function="inactive"></fcnfont>
    </listtreemenu>
  </container>
    
  <container name="channel_editor">
    <image name="background">
      <filename>osd/osd-channel-edit.png</filename>
      <position>102,99</position>
    </image>
    <textarea name="dialog_label" align="center">
      <area>105,106,450,40</area>
      <font>infofont</font>
      <value>Channel Editor</value>
    </textarea>
    <textarea name="callsign_label" align="right">
      <area>120,151,155,40</area>
      <font>infofont</font>
      <value>Callsign</value>
    </textarea>
    <textarea name="callsign" entry="0">
      <area>310,151,220,40</area>
      <font>infofontgray</font>
      <altfont>infofont</altfont>
      <value></value>
    </textarea>
    <textarea name="channum_label" align="right">
      <area>120,200,155,40</area>
      <font>infofont</font>
      <value>Channel #</value>
    </textarea>
    <textarea name="channum" entry="1">
      <area>310,200,220,40</area>
      <font>infofontgray</font>
      <altfont>infofont</altfont>
      <value></value>
    </textarea>
    <textarea name="channame_label" align="right">
      <area>120,246,155,40</area>
      <font>infofont</font>
      <value>Channel Name</value>
    </textarea>
    <textarea name="channame" entry="2">
      <area>310,246,220,40</area>
      <font>infofontgray</font>
      <altfont>infofont</altfont>
      <value></value>
    </textarea>
    <textarea name="XMLTV_label" align="right">
      <area>120,295,155,40</area>
      <font>infofont</font>
      <value>XMLTV ID</value>
    </textarea>
    <textarea name="XMLTV" entry="3">
      <area>310,295,220,40</area>
      <font>infofontgray</font>
      <altfont>infofont</altfont>
      <value></value>
    </textarea>
    <textarea name="probe_all" entry="4" button="yes" align="center">
      <area>120,342,185,40</area>
      <font>infofontgray</font>
      <altfont>infofont</altfont>
      <value>[P]robe</value>
    </textarea>
    <textarea name="ok" entry="5" button="yes" align="center">
      <area>330,342,185,40</area>
      <font>infofontgray</font>
      <altfont>infofont</altfont>
      <value>[O]k</value>
    </textarea>
  </container>
    
</mythosdtheme>

Edit MythTV glass-wide theme.xml

<myththeme>
    <font name="active" face="Bitstream Vera Sans">
      <color>#ffffff</color>
      <size>15</size>
      <size:small>15</size:small>
      <size:big>17</size:big>
      <bold>no</bold>
    </font>

    <font name="selected" face="Bitstream Vera Sans">
      <color>#ffffff</color>
      <size>15</size>
      <size:small>15</size:small>
      <size:big>17</size:big>
      <bold>yes</bold>
    </font>

    <font name="inactive" face="Bitstream Vera Sans">
      <color>#bbbbbb</color>
      <size>15</size>
      <size:small>15</size:small>
      <size:big>17</size:big>
      <bold>no</bold>
    </font>

   <font name="title" face="Bitstream Vera Sans">
      <color>#FFFFFF</color>
      <size>24</size>
      <size:small>16</size:small>
      <size:big>24</size:big>
      <bold>yes</bold>
      <dropcolor>#111111</dropcolor>
      <shadow>2,2</shadow>
    </font>

    <font name="info" face="Bitstream Vera Sans">
      <color>#FFFFFF</color>
      <size>18</size>
      <size:small>14</size:small>
      <size:big>20</size:big>
      <bold>no</bold>
      <dropcolor>#111111</dropcolor>
      <shadow>2,2</shadow>
    </font>

    <font name="infosmall" face="Bitstream Vera Sans">
      <color>#FFFFFF</color>
      <size>16</size>
      <size:small>12</size:small>
      <size:big>18</size:big>
      <bold>no</bold>
      <dropcolor>#111111</dropcolor>
      <shadow>2,2</shadow>
    </font>

    <font name="tagged" face="Bitstream Vera Sans">
      <color>#dddd33</color>
      <size>16</size>
      <size:small>14</size:small>
      <size:big>18</size:big>
      <bold>no</bold>
      <dropcolor>#111111</dropcolor>
      <shadow>2,2</shadow>
    </font>

    <font name="desc2" face="Bitstream Vera Sans">
      <color>#FFFFFF</color>
      <size>18</size>
      <size:small>16</size:small>
      <size:big>20</size:big>
      <bold>no</bold>
      <dropcolor>#111111</dropcolor>
      <shadow>2,2</shadow>
    </font>
    
    <font name="desc" face="Bitstream Vera Sans">
      <color>#ffffff</color>
      <size>20</size>
      <size:small>13</size:small>
      <size:big>20</size:big>
      <bold>yes</bold>
      <dropcolor>#111111</dropcolor>
      <shadow>2,2</shadow>
    </font>

    <font name="chaninfo" face="Bitstream Vera Sans">
      <color>#ffffff</color>
      <size>14</size>
      <size:small>12</size:small>
      <size:big>17</size:big>
      <bold>no</bold>
      <dropcolor>#111111</dropcolor>
      <shadow>2,2</shadow>
    </font>

    <font name="recstatus" face="Bitstream Vera Sans">
      <color>#cccccc</color>
      <size>15</size>
      <size:small>12</size:small>
      <size:big>17</size:big>
      <bold>no</bold>
      <dropcolor>#111111</dropcolor>
      <shadow>2,2</shadow>
    </font>

    <font name="recording" face="Bitstream Vera Sans">
      <color>#cc5555</color>
      <size>15</size>
      <size:small>12</size:small>
      <size:big>17</size:big>
      <bold>yes</bold>
      <dropcolor>#ffffff</dropcolor>
      <shadow>2,2</shadow>
    </font>

    <font name="record" face="Bitstream Vera Sans">
      <color>#00cc00</color>
      <size>15</size>
      <size:small>12</size:small>
      <size:big>17</size:big>
      <bold>no</bold>
      <dropcolor>#ffffff</dropcolor>
      <shadow>2,2</shadow>
    </font>

    <font name="conflict" face="Bitstream Vera Sans">
      <color>#ff3333</color>
      <size>15</size>
      <size:small>12</size:small>
      <bold>yes</bold>
    </font>

    <font name="small" face="Bitstream Vera Sans">
      <color>#FFFFFF</color>
      <size>16</size>
      <size:small>10</size:small>
      <size:big>18</size:big>
      <dropcolor>#111111</dropcolor>
      <shadow>2,2</shadow>
    </font>

  <background style="normal">
    <image>background.png</image>
    <buttonarea>100,100,1057,520</buttonarea>
    <buttonspread>no</buttonspread>
    <visiblerowlimit>8</visiblerowlimit>
    <columns>1</columns>
  </background>

<titles>
      <position>650,25</position>
      <image mode="MAIN">title/title_main.png</image>
      <image mode="INFO">title/title_info_center.png</image>
      <image mode="OPTICAL_DISK">title/title_optical_disks.png</image>
      <image mode="UTIL">title/title_util.png</image>
      <image mode="SCHEDULE">title/title_schedule.png</image>
      <image mode="LIBRARY">title/title_library.png</image>
      <image mode="MUSIC">title/title_music.png</image>
      <image mode="GALLERY">title/title_gallery.png</image>
      <image mode="MANAGE_RECORDINGS">title/title_manage_recordings.png</image>
      <image mode="SETUP">title/title_setup.png</image>
      <image mode="TVSETUP">title/title_setup.png</image>
      <image mode="SETUP_TVRECPRIORITIES">title/title_priorities.png</image>
      <image mode="MEDIA_SETUP">title/title_setup.png</image>
      <image mode="INFO_SETUP">title/title_setup.png</image>
      <image mode="DVD_SETTINGS">title/title_setup.png</image>
      <image mode="MUSIC_SETTINGS">title/title_setup.png</image>
      <image mode="VIDEO_SETTINGS">title/title_setup.png</image>
      <image mode="GAME_SETTINGS">title/title_setup.png</image>
      <image mode="NETFLIX">title/title_netflix.png</image>
      <image mode="ARCHIVE">title/title_archive.png</image>
      <image mode="ARCHIVEFORMAT">title/title_archive.png</image>
      <image mode="ARCHIVEUTILS">title/title_archive.png</image>
      <image mode="ARCHIVESELECT">title/title_archive.png</image>
      <image mode="SEARCH">title/title_search.png</image>
      <image mode="WORDS">title/title_search.png</image>
      <image mode="LISTS">title/title_search.png</image>
</titles>

  <genericbutton>
   <watermarkposition>820,180</watermarkposition>
    <normal>button_off.png</normal>
    <active>button_on.png</active>
    <text>
      <area>30,25,0,0</area>
      <color>white</color>
      <shadow>
          <color>#111111</color>
          <offset>2,2</offset>
          <alpha>255</alpha>
      </shadow>
      <fontname>Bitstream Vera Sans</fontname>
      <fontsize>21</fontsize>
      <bold>no</bold>
      <italics>no</italics>
      <centered>no</centered>
    </text>
  </genericbutton>

  <uparrow>
    <image>shared/uparrow.png</image>
    <position>90,100</position>
  </uparrow>

  <downarrow>
    <image>shared/downarrow.png</image>
    <position>90,590</position>
  </downarrow>


<!-- ################################################################ -->
<!-- ########  Below are all the buttons that's in the menus ######## -->
<!-- ################################################################ -->

<!-- ####################################-->
<!-- ########  dvd_settings.xml  ########-->
<!-- ####################################-->

  <buttondef name="DVD_SETTINGS_GENERAL">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/doovde.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="DVD_SETTINGS_PLAY">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/doovde.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="DVD_SETTINGS_RIP">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/import.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>


  <buttondef name="EJECT">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/eject.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>


<!-- ###############################-->
<!-- ########  dvdmenu.xml  ########-->
<!-- ###############################-->

  <buttondef name="DVD_PLAY">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/doovde.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="VCD_PLAY">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/doovde.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="DVD_RIP">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/import.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="EJECT">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/eject.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

<!-- #####################################-->
<!-- ########  game_settings.xml  ########-->
<!-- #####################################-->

  <buttondef name="GAME_SETTINGS_GENERAL">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/game.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="GAME_SCAN">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/game.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

<!-- ################################-->
<!-- ########  mainmenu.xml  ########-->
<!-- ################################-->

  <buttondef name="TV">
    <image>text-blank.png</image>
   <watermarkimage>watermarks/tv.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="MUSIC">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/music.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="VIDEO">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/films.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="DVD">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/doovde.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="FM">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/blank.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="IMAGES">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/camera.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="GAME">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/game.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="WEATHER">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/weather.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="NEWS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/rss.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="WEBPAGE">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/www.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETUP">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/setup.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SHUTDOWN">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/power.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

 <buttondef name="RECIPE">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/blank.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

<!-- #####################################-->
<!-- ########  main_settings.xml  ########-->
<!-- #####################################-->

  <buttondef name="SETTINGS_GENERAL">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/setup.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_APPEARANCE">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/appearance.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_TV">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/tv.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_MUSIC">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/music.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_VIDEO">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/films.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_DVD">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/doovde.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_FM">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/blank.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_IMAGES">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/camera.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_GAME">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/game.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_WEATHER">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/weather.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_NEWS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/rss.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_WEBPAGE">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/www.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_XBOX">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/setup.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_RECIPE">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/blank.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

<!-- ######################################-->
<!-- ########     MythPhone        ########-->
<!-- ######################################-->

  <buttondef name="PHONE">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/phone.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>


<!-- ######################################-->
<!-- ########  music_settings.xml  ########-->
<!-- ######################################-->

  <buttondef name="MUSIC_SETTINGS_GENERAL">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/music.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="MUSIC_SETTINGS_PLAYER">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/music.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="MUSIC_SETTINGS_RIP">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/import.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

<!-- #################################-->
<!-- ########  musicmenu.xml  ########-->
<!-- #################################-->

  <buttondef name="MUSIC_PLAY">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/music.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="MUSIC_PLAYLIST">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/music.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="MUSIC_RIP">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/import.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="MUSIC_SCAN">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/search.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

<!-- ##############################################-->
<!-- ########  recpriorities_settings.xml  ########-->
<!-- ##############################################-->

  <buttondef name="TV_RECPRIORITIES_SETTINGS_GENERAL">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/priorities.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_RECPRIORITIES_CHANNEL">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/priorities.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

<!-- #############################-->
<!-- ########  setup.xml  ########-->
<!-- #############################-->

  <buttondef name="SETUP_GENERAL">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/setup.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETUP_CAPTURE_CARDS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/tuner.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETUP_VIDEO_SOURCES">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/setup.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETUP_INPUT_CONNECTIONS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/setup.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETUP_CHANNEL_EDITOR">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/setup.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETUP_KEYS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/controls.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

<!-- ###################################-->
<!-- ########  tv_schedule.xml  ########-->
<!-- ###################################-->

  <buttondef name="TV_PROGRAM_GUIDE">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/calendar.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_PROGFIND">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/finder.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_SEARCH_WORDS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/search.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_SEARCH_LISTS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/search.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_CUSTOM_RECORD">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/rec.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_MANUAL_SCHEDULE">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/rec.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_RECPRIORITIES">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/priorities.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_CONFLICTS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/priorities.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

<!-- #################################-->
<!-- ########  tv_search.xml  ########-->
<!-- #################################-->

  <buttondef name="TV_SEARCH_TITLES">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/search.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_SEARCH_KEYWORDS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/search.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_SEARCH_PEOPLE">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/people.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_SEARCH_POWER">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/lightbulb.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

<!-- ################################-->
<!-- ########  tv_lists.xml  ########-->
<!-- ################################-->

  <buttondef name="TV_SEARCH_NEW_TITLES">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/search.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_SEARCH_MOVIES">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/films.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_SEARCH_CATEGORIES">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/categories.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_SEARCH_CHANNELS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/search.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_SEARCH_TIMES">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/clock.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

    <buttondef name="TV_SEARCH_DESCRIPTIONS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/search.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

    <buttondef name="TV_SEARCH_LISTINGS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/search.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>


<!-- ###################################-->
<!-- ########  tv_settings.xml  ########-->
<!-- ###################################-->

  <buttondef name="TV_SETTINGS_GENERAL">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/tv.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_SETTINGS_PROGRAM_GUIDE">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/calendar.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_SETTINGS_PLAYBACK">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/setup.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_SETTINGS_RECORDING_PROFILES">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/setup.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_SETTINGS_RECPRIORITIES">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/priorities.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_SETTINGS_PLAYBACK_GROUPS">
    <image>ui/button_off.png</image>
   <watermarkimage>watermarks/setup.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

<!-- ##############################-->
<!-- ########  tvmenu.xml  ########-->
<!-- ##############################-->

  <buttondef name="TV_WATCH_TV">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/tv.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_SCHEDULE_RECORDINGS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/calendar.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_WATCH_RECORDINGS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/recordings.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_DELETE">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/delete.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_PREVIOUS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/previous.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="TV_STATUS">
    <image>text-blank.png</image>
   <watermarkimage>watermarks/status.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

<!-- ######################################-->
<!-- ########  video_settings.xml  ########-->
<!-- ######################################-->

  <buttondef name="VIDEO_SETTINGS_GENERAL">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/films.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="VIDEO_SETTINGS_PLAYER">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/films.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="VIDEO_FILE_TYPES">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/films.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

<!-- #################################-->
<!-- ########  videomenu.xml  ########-->
<!-- #################################-->

  <buttondef name="VIDEO_BROWSER">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/films.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="VIDEO_LIST">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/films.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="VIDEO_MANAGER">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/films.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

<!-- ###########################################-->
<!-- ########  AltMenus Specific Icons  ########-->
<!-- ###########################################-->

  <buttondef name="TV_UPCOMING_RECORDINGS">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/previous.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_MEDIA">
    <image>text-blank.png</image>
   <watermarkimage>watermarks/library.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_INFO_CENTER">
    <image>text-blank.png</image>
   <watermarkimage>watermarks/info.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="MENU_MEDIA_LIBRARY">
    <image>text-blank.png</image>
     <watermarkimage>watermarks/library.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="MENU_MANAGE_RECORDINGS">
    <image>text-blank.png</image>
   <watermarkimage>watermarks/tvguide.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="MENU_INFO_CENTER">
    <image>text-blank.png</image>
   <watermarkimage>watermarks/info.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="MENU_OPTICAL_DISKS">
    <image>text-blank.png</image>
   <watermarkimage>watermarks/doovde.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="MENU_UTILITIES_SETUP">
    <image>text-blank.png</image>
   <watermarkimage>watermarks/setup.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETUP_FRONTEND">
    <image>text-blank.png</image>
   <watermarkimage>watermarks/setup.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETUP_BACKEND">
    <image>text-blank.png</image>
   <watermarkimage>watermarks/setup.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETUP_MENU">
    <image>text-blank.png</image>
   <watermarkimage>watermarks/setup.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="NETFLIX">
    <image>text-blank.png</image>
   <watermarkimage>watermarks/films.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

  <buttondef name="SETTINGS_NETFLIX">
    <image>text-blank.png</image>
   <watermarkimage>watermarks/films.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

<!-- MYTHARCHIVE -->

  <buttondef name="ARCHIVE">
    <image>text-blank.png</image>
    <watermarkimage>watermarks/export.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>

 <buttondef name="SETTINGS_ARCHIVE">
    <image>text-blank.png</image>
   <watermarkimage>watermarks/export.png</watermarkimage>
    <offset>0,0</offset>
  </buttondef>
 
 <buttondef name="ARCHIVE_FINDER">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/search.png</watermarkimage>
   <offset>0,0</offset>
 </buttondef>

 <buttondef name="ARCHIVE_EXPORT_VIDEO">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/export.png</watermarkimage>
   <offset>0,0</offset>
 </buttondef>

 <buttondef name="ARCHIVE_IMPORT_VIDEO">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/import.png</watermarkimage>
   <offset>0,0</offset>
 </buttondef>

 <buttondef name="ARCHIVE_SELECT_RECORDINGS">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/recordings.png</watermarkimage>
   <offset>0,0</offset>
 </buttondef>

 <buttondef name="ARCHIVE_SELECT_VIDEOS">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/export.png</watermarkimage>
   <offset>0,0</offset>
 </buttondef>

 <buttondef name="ARCHIVE_SELECT_FILES">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/export.png</watermarkimage>
   <offset>0,0</offset>
 </buttondef>

 <buttondef name="ARCHIVE_CREATE_DVD">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/export.png</watermarkimage>
   <offset>0,0</offset>
 </buttondef>

 <buttondef name="ARCHIVE_CREATE_ARCHIVE">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/export.png</watermarkimage>
   <offset>0,0</offset>
 </buttondef>

 <buttondef name="ARCHIVE_ENCODE_VIDEO">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/export.png</watermarkimage>
   <offset>0,0</offset>
 </buttondef>

<!-- ZONEMINDER -->

<buttondef name="ZONEMINDER">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/blank.png</watermarkimage>
   <offset>0,0</offset>
 </buttondef>

 <buttondef name="SETTINGS_ZONEMINDER">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/blank.png</watermarkimage>
   <offset>0,0</offset>
 </buttondef>

<!-- MINIMYTH -->

<buttondef name="MINIMYTH_GAME_SAVE">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/game.png</watermarkimage>
   <offset>0,0</offset>
</buttondef>

<buttondef name="MINIMYTH_GAME_RESTORE">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/game.png</watermarkimage>
   <offset>0,0</offset>
</buttondef>

<buttondef name="MINIMYTH_THEMECACHE_SAVE">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/appearance.png</watermarkimage>
   <offset>0,0</offset>
</buttondef>

<buttondef name="MINIMYTH_CODECS_SAVE">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/setup.png</watermarkimage>
   <offset>0,0</offset>
</buttondef>

<buttondef name="MOVIETIMES">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/films.png</watermarkimage>
   <offset>0,0</offset>
</buttondef>

<buttondef name="SETTINGS_MOVIETIMES">
   <image>text-blank.png</image>
  <watermarkimage>watermarks/films.png</watermarkimage>
   <offset>0,0</offset>
</buttondef>

</myththeme>

/usr/share/mythtv/themes/glass-wide/background.png

I modified the original glass-wide background to be a bit darker to improve readability of text superimposed upon it.

http://www.mythtv.org/wiki/images/d/d2/Modified_glass-wide_Background.png

Comments

  • CPU usage when recording three channels simultaneously is about 7% plus [unknown] system time.
  • Both the Hauppauge Nova-T and Nova-T-500 cards support multirec in MythTV 0.21. CPU usage when recording from six channels simultaneously is about 15-20% plus about 8% system time.
  • CPU usage when playing back a recording is about 30-40%.
  • Sometimes recordings are corrupt and unwatchable. I suspect my signal is very variable, but it might also be http://www.mythtv.org/wiki/index.php/Troubleshooting:Mythfilldatabase_IO_bottleneck
  • Commercial Flagging doesn't really work on UK DVB-T broadcasts.
  • MythWeather doesn't work in 0.20.2. It works again in 0.21 using the BBC grabber.
  • I had a quick go at getting the Bt878 analogue tuner card working in order to help convert some VHS tapes to DVD, but never really got it working properly.
  • Hopefully future nVidia drivers will improve their handling of sync interrupts, so interlaced output doesn't get out-of-sync with the TV display. At this point, the deinterlace option can be disabled.
  • Many emulators need to be run with SDL_AUDIODRIVER=esd in order to work with FC8's default PulseAudio configuration. Xmame needs to be run under padsp and use the -dp oss option.
  • With the upgrade to FC8 and 0.20.2 of MythTV more RAM and/or CPU power might be a good idea. Menu navigation is sometimes a bit slow
  • Sometimes S/PDIF audio output halts when the host is under load. Playback of DTS soundtracks of DVDs is particularly prone to this, but I've experienced it within MythMusic too.
  • I'm now using the MythCenter-wide theme after the glass-wide theme ( http://www.mythtvthemes.co.uk/glasswide.shtml ) stopped working with MythArchive.