Published on

ivtv on Fedora with 2.6.22 kernel

Authors

Upgrade to 2.6.22 seems to break everything in the ivtv suite. It all disappeared from the rpms, so we need to install from source.

  • ivtv

  • ivtv-fb

  • ivtv-xdriver

  • ivtvfbctl (now gone)

In particular, some web posts indicate that support for the PVR-350 has been eliminated somehow. This doesn't seem to be completely true - but maybe there's a problem with the hardware decoding from MythTV. By doing the following, the PVR-350 can be made to display X in framebuffer mode, and do the output via the framebuffer too...

If the hardware-based decoding (which can be overlaid on the X display) can be made to work then the Use PVR-350 output in MythTV can be enabled. Which also means that doing MythTV should result in very low processor load.

ivtv and ivtv-fb on Fedora 7 : 2.6.22

yum install kernel-devel kernel-headers

We don't need to build the ivtv stuff entirely from source : the ivtv driver has now been moved into the kernel. However, the ivtv-fb isn't in the kernel... So we need to compile that part afresh (the rest of ivtv is in the v4l-dvb / v4l tree, shown below).

This is the only part that needs to be done if you're upgrading between 2.6.22.xx versions.

/sbin/modprobe ivtv-fb # Should fail now
curl -O http://dl.ivtvdriver.org/ivtv/stable/ivtv-1.0.2.tar.gz
tar -xzf ivtv-1.0.2.tar.gz
cd ivtv-1.0.2/
cp v4l-cx2341x-init.mpg /lib/firmware/
make clean
make
make install # To create the ivtv-fb module
/sbin/modprobe ivtv-fb # Should work now

To install the firmware (may not be necessary now)

yum install ivtv-firmware

or

cp ivtv-1.0.2/v4l-cx2341x-init.mpg /lib/firmware/

For the v4l stuff - actually, may be better for ivtvfb

Do this only if the old FC6 v4l stuff is installed, since the control commands are expecting a different version of ivtv to be answering on the other end.

This includes the control suite necessary to change alpha and input/output channels on the card - so it's important to have this in sync with the ivtv version.

Go to http://linuxtv.org/ and then pick up the most recent tar from the link at the top of the page : http://linuxtv.org/hg/v4l-dvb

mkdir -p /root/MythTV/2.6.22-ivtv/
cd /root/MythTV/2.6.22-ivtv/
curl -O http://linuxtv.org/hg/v4l-dvb/archive/tip.tar.gz   # around 2.7Mb
tar -xzf tip.tar.gz
cd v4l-dvb-* # Adjust this directory name
make clean
make
make install

ivtv-fb (?) : Installing Firmware

Fedora 7 : The location where hotplug expects firmware to be loaded into (for example, firmware for Cardbus cards) has changed from /usr/lib/hotplug/firmware to /lib/firmware. Existing firmware files must be moved into the new directory.

Get the firmware from the main ivtv page : http://ivtvdriver.org/index.php/Main_Page.

References :

Fedora 7 xdriver

yum install video4linux
yum remove ivtv_xdriver  # This is the old fc6 version

Check whether it's there already :

ls -l /usr/lib/xorg/modules/drivers/ | grep ivtv

If there's no ivtvdev_drv.so we need to build it :

curl -O http://ivtvdriver.org/viewcvs/xdriver/trunk.tar.gz?view=tar
tar -xf trunk.tar.gz\?view\=tar
cd trunk
ls -l
more README
chmod 755 configure
./configure --prefix=/usr/
make clean
make
make install

Setting up the modprobe configuration

Into /etc/modprobe.conf put :

# load ivtv-fb for PVR-350 output
alias char-major-81 videodev
alias char-major-81-0 ivtv
options ivtv-fb osd_compat=1
install ivtv /sbin/modprobe --ignore-install ivtv; /sbin/modprobe ivtv-fb

Checking it all works

# ll /dev/video*
lrwxrwxrwx  1 root    root      6 2007-06-13 09:18 /dev/video -> video0
crw-------+ 1 yoshika root 81,  0 2007-06-13 09:18 /dev/video0
crw-------+ 1 yoshika root 81, 16 2007-06-13 09:18 /dev/video16
crw-------+ 1 yoshika root 81, 24 2007-06-13 09:18 /dev/video24
crw-------+ 1 yoshika root 81, 32 2007-06-13 09:18 /dev/video32
crw-------+ 1 yoshika root 81, 48 2007-06-13 09:18 /dev/video48

`

/bin/dmesg |grep Initialized

ivtv0: Initialized Hauppauge WinTV PVR-350, card #0 [drm] Initialized drm 1.1.0 20060810 [drm] Initialized i915 1.6.0 20060119 on minor 0

This shows that the framebuffer is on /dev/fb0 :

cat /proc/fb

0 cx23415 TV out

And, just to confirm :

ls -l /dev/fb*

lrwxrwxrwx 1 root root 3 2007-06-13 09:18 /dev/fb -> fb0 crw------- 1 yoshika root 29, 0 2007-06-13 09:18 /dev/fb0

To find the BusId of the PVR-350 (for the /etc/X11/xorg.conf file) :


/sbin/lspci | grep "Internext Compression"

01:05.0 Multimedia video controller: Internext Compression Inc iTVC15 MPEG-2 Encoder (rev 01)

## Testing the Devices Work



Set up the Inputs and Outputs to Composite (the RCA connectors) :

v4l2-ctl -i 2

v4l2-ctl -o 2

Test the input connection :

cat /dev/video0 > /tmp/test_capture.mpg

mplayer /tmp/test_capture.mpg

**NEW IN 2.6.22 : ivtvfbctl no longer working - must use v4l2 to control alpha**

Set the framebuffer to be hidden :

OLD VERSION : ivtvfbctl --device=/dev/fb0 --globalalpha=on --localalpha=on -v 0

v4l2-ctl --set-fmt-output-overlay=global_alpha=0

Get the video signal to passthrough :

ivtvctl -K 1

This should show a passthrough video/audio signal.
(or, as a one-liner :
`# v4l2-ctl -i 2; v4l2-ctl -o 2; ``
# OLD VERSION : ivtvfbctl --device=/dev/fb0 --globalalpha=on --localalpha=on -v 0
# v4l2-ctl --set-fmt-output-overlay=global_alpha=0
``
ivtvctl -K 1

)

Set the framebuffer to be entirely in front of MPEG decoder :

# OLD VERSION : ivtvfbctl --device=/dev/fb0 --globalalpha=on --localalpha=on -v 255
# v4l2-ctl --set-fmt-output-overlay=global_alpha=255


Set the framebuffer to be dimly in front of MPEG decoder :

# OLD VERSION : ivtvfbctl --device=/dev/fb0 --globalalpha=on --localalpha=on -v 100
# v4l2-ctl --set-fmt-output-overlay=global_alpha=100

Test whether the encode/decode cycle works :

# ivtvctl -K 0
# dd if=/dev/video0 of=/dev/video16 bs=64k

This may come in handy later :

# v4l2-ctl -d /dev/video0 --set-fmt-video=width=720,height=480