IYONIX PCI TV Card Driver for RISC OS
PCITV

PCITV iconPCITV is a driver and TV viewing application for RISC OS, bringing television and frame capture to the desktop for under 30 pounds, the cost of the card. The driver is free and protected by the GPL, meaning that the source is also available. I hope this will encourage others to create drivers for other PCI cards.

PCITV is able to show TV images at full frame rate at the maximum possible resolution of the TV image. It is able to show full screen video by changing to a mode closely matching the original resolution of the TV picture. No burden is placed on the processor and the TV image does not skip or break up when the processor is put under heavy load.

Download

PCITV application 69KB 0.08d (beta) 28th August 2006 Required (includes source code). For usage instructions, see the help file within PCITV.
PCITVdiag 3KB 1.01 4th March 2004 Only required if you cannot get the tuner to function. In this case, please send me the output from this program.
Remote 12KB 0.01g 25th June 2004 Written by Robin Hounsome. Provides additional features that PCITV does not yet provide. Further documentation is available.

Before you report a bug, please check this document for a list of known bugs.

Supported cards

All cards with the Conexant BT848/849/878/879 chip are supported, though only 3.3V or universal voltage cards can be plugged into the PCI bus of the IYONIX. The Pinnacle PCTV Rave card is a suitable card. The Studio versions of these cards come with software MPEG capturing software for Windows, which is useless on RISC OS. The card costs as little as £29.99 and the RISC OS driver is provided free of charge.

The following cards contain a BT8xx chip, and thus should work with the driver. Older cards may contain a frame grabber chip not supported by this software. Newer versions are however compatible. Some boards specifically called the "PCTV Stereo" (not "Pro") may not contain a BT8xx chip, so be sure before you buy.

  • Pinnacle PCTV Rave
  • Pinnacle Studio PCTV Rave
  • Pinnacle PCTV Pro (stereo)
  • Pinnacle Studio PCTV Pro (stereo)
  • Zoltrix/Z-Cyber Genie TV
Features

The BT8xx chip contains a DMA controller which allows it to copy video data directly into the graphics display memory of the computer, bypassing the processor completely. This means that you can watch the TV in the desktop without putting any load on the processor. Some of the driver's features include:

Currently implemented:

  • Live video on the desktop (via primary surface drawing)
  • Full screen or windowed display
  • Resizeable video (maintaining aspect ratio)
  • Always-on-top TV viewer window
  • PAL/NTSC/SECAM support
  • TV tuner control and channel scanning
  • Composite and S-Video input
  • Mono and stereo sound, along with second audio channels (SAP)
  • Cropping (allowing window off-screen)
  • Frame capture and save (example, from the PAL output of my digital camera - note that this is some way off the full resolution of PAL)
  • Keyboard support (via cursor keys)
  • Picture controls (brightness, contrast, saturation, hue)

To be implemented:

  • Partially covered image (allowing TV window below the top of the window stack)
  • Overlay support (when I've figured out how to signal a frame change via interrupts)
  • Channel suite manager
Primary surface drawing

The BT8xx chip must be programmed with RISC instructions from its own instruction set. These instructions tell it where to place video data as it is received. Once programmed, the BT8xx stays in a loop, where it receives video data and copies the pixel data directly into video RAM. The bttv Linux kernel driver was useful in developing this software, hence the RISC OS driver will be released under the GPL.

One problem is that RISC OS uses a different RGB byte ordering to Windows in 32 bit colour modes. The BT8xx is able to reorder its bytes into an ABGR order (where A is the alpha channel, unused in this case). However, RISC OS needs a BGRA order. To get around this problem, the BT8xx is instructed to write all image bytes with an offset of +3 bytes, in order to align the BGR bytes. This means that the alpha components are offset by one pixel for the entire image, but this doesn't matter as the alpha values are not used at all (they are always zero).

RISC OS video memory:   BGRABGRABGRA
TV card pixel data:        ABGRABGRABGR
                            ^^^
TV tuner

The tuner on the TV card is controlled via I²C. A driver was written to perform I²C read/write operations via the BT8xx's on-board I²C master controller. By sending commands to the tuner via this bus, the frequency can be changed. Newer PCTV Rave cards use a multistandard PAL/NTSC tuner, PAL being the format used in Europe and NTSC in the USA. Luckily, I'm able to test PAL video with my TV card as my PC laptop is capable of producing both NTSC and PAL signals. :o)

Known problems

BT8xx TV card designs change quite regularly so the driver will need to be given knowledge of different board specifications. In some cases, code for the video overlay and tuner control will have to be rewritten to accommodate the changes.

Future enhancements

BT8xx cards are capable of video capture at high resolutions and frame rates, but are bounded by the speed at which the host computer can compress and save video to disc. If someone develops a high-speed video encoder, I see no reason why the driver could not be extended to allow video capture.

Digital TV cards are available that can pick up MPEG TV broadcasts for viewing. I am not sure if they are capable of video overlay or if the raw MPEG stream is sent to the host computer's processor for decoding. In the latter case, it should be possible to decode the video with an MPEG decoder, but it would be an added burden to the computer's processor.

Screenshot

Screenshot of scan in progress

Update (24th August 2006): Fixed bug where TV would sometimes not revert to old mode after full screen mode was quit. Improved frame capture quality and fixed other minor bugs.

Update (28th January 2005): Fixed channel country saving bug and updated MT2050 tuner code to more accurately tune to frequencies.

Update (22nd November 2004): Added Australia to list of countries, worked on stereo configuration, added screenblanker control, and fixed some bugs.

Update (7th July 2004): Update of PCITV with stereo driver, image cropping, SECAM support, picture controls and more! It's late, so I'll announce this update later!

Update (4th March 2004): First public release of PCITV software!

Update (30th January 2004): My TV card inexplicably broke, so I took the opportunity to buy the Pinnacle PCTV Pro, which is a stereo card. I've ported the Linux driver for the stereo chip, which works great!

Update (22nd January 2004): A driver for the MT2050 has now been written, thanks to Robin Hounsome's hard work. I am now extremely close to a release but I'm trying to track down a bug in the PAL/NTSC switching code.

Update (6th December 2003): PCITV now supports Temic/Philips tuners and channel scanning is fully integrated. I'm currently working on a channel manager, allowing channels to be added, deleted and named. I'm also still trying to source the datasheet for the MT2050 tuner. A public beta release will be very soon.

Archived updates