What is it | The Problem | The Solution | How to use | Download | Tips | Technobabble | Support

NOTE: RECENT VERSIONS OF WINTV STORE THEIR INFORMATION DIFFERENTLY. FREQCOPY WILL NOT WORK.

FreqCopy - override frequencies for Hauppauge TV Cards

What is FreqCopy?
This is a small tool for users of the Hauppauge PVR 250 and 350 TV cards who have problems getting reception when using GB-PVR, MCE, myHTPC, SageTV, SnapStream's BeyondTV or other TV software.
The Problem
Apparently in some parts of the world (United States) TV operators (cable companies, TV aerial broadcasters) use fixed channels to broadcast. If you turn on your TV, you will find some company broadcast on Channel 1, another one on Channel 2, etc. TV cards are built for that system. In Europe, however, you find channels scattered around the spectrum:

You see that 1. your channels are not in the order you may want (channels 1-4 are even empty), and 2. channels do not have fixed frequencies (48+, 34-, etc.).

The Solution
Microsoft put a "back door" in its Windows DirectX drivers. A table in which you can put your channels in the right order, after which TV cards can address them as "channel 1", "channel 2", etc. as usual.

This table is based on the megahertz frequencies (i.e. 175.25, 182.25, etc.). Although it is not difficult to program these tables yourself, you may mess up your Windows registry, and be in a lot of trouble.

How to use FreqCopy
Step 1:
If you have a Hauppauge TV card, like the PVR250 or PVR350, you also have the WinTV software that comes with it. First you enter all channels in WinTV in your preferred order. Do not use the "fixed channel" system, because these may be overridden by the DirectX back door. Only enter MHz frequencies, which you can find in tables from your cable company or aerial broadcaster.

Example:

Do not use "fixed channels"...
...but tune using MHz frequencies

Step 2:
Finetune your channels. Make sure that where "stereo" is expected, your TV card picks up the broadcast in stereo. I replaced lots of my existing coax connectors with "professional" coax connectors, and that really improved reception. They are not too expensive (you can find them in the local market, or DIY market), and can make a lot of difference.

Step 3:
Run FreqCopy. You see the following screen:

The "Source location" and "Destination location" are only there for reference. You only need to set the "Country" and the "Type of connection". You'll probably know your country code from your telephone operator: Netherlands is 31, UK is 44, Germany is 49, etc. But, the system works quite well if you set it to "0", as long as your TV software accepts this. If you use MCE, and it expects a real country code (like 31), use that. Choose the appropriate type of connection (note: sometimes you have to choose the other one to make it work, don't ask me why). Choose "Ok" to make FreqCopy copy the frequencies from WinTV to the override table.

There is no problem if you let FreqCopy copy the WinTV frequencies for countries "0", ánd "31", ánd "cable", ánd "antenna".

Download
Click here to download the most recent version.

This tool is "hey-man"-ware. If you think "hey man, you saved me a lot of time there", please donate 2 Euro (or more) with PayPal. You are free to copy it, and have it on your website. If you host it, check out regularly for new versions. Hey man, I put a bit of time in this to save you time.

Tips
RecordCommand1 = c:\progra~1\wintvcap\Wintvcap.exe -board: -c -startr:_###.mpg -limit: -profile:DVD
This command uses a -c(hannel) reference instead of -p(reset)s. (do not forget to make sure that the StopRecordCommand1 matches WinTVCap) (did you notice you can select the above text and press Ctrl-C to copy it to the Clipboard?)

Technobabble
This tool programs the Microsoft DirectX "frequency overrides". It takes information from tables constructed by Hauppauge's WinTV software and automatically builds the "TVAutoTune" table (as specified by Microsoft).

How is Hauppauge information stored in the registry?

        { Hauppauge's coding:
          * Byte $0E (start counting with 0): if this is 00, then a Mhz
            frequency is available. If it is 01, then it is a channel. The
            tool will leave room for this channel, but will not be able to
            allocate the unknown Mhz-value
          * If there is a channel then:
              - Byte $17 contains the number of bytes of the description of
                the channel. If it is $00 or $FF then there is no description.
              - If there is a description that follows immediately after
              - After that is the number of bytes of the channel name
              - And the bytes of the channel name
          * If there is a Mhz-value then:
              - if the byte $0F is $02 then
                > Bytes $0F-$11 contain the megahertz-value * 100
              - but if the byte $0F is $03 then
                > Bytes $10-$12 contain the megahertz-value * 100 ... (why?)
              - After that there is a "01" byte, unknown function
              - And then multiplied by 16 is the frequency offset (f.e. $04->0.25)
          * The third byte from the end is the channel number. The tool will
            use this to re-arrange the channels.
          }

Support
If you find out new clever use and/or extensions to the tool, and if they are not too complicated, I may make new versions. Feel free to contact me. Do never expect major programming work. It is supposed to be a small tool, not a grand suite.

Joost Smits, jsmits@prize.nl

Updated: 25 October 2008

All rights reserved.