HOWTO: Get An Avermedia DVB-T working under Linux
	   ______________________________________________

   Table of Contents
   Assumptions and Introduction
   The Avermedia DVB-T
   Getting the card going
   Receiving DVB-T in Australia
   Known Limitations
   Further Update

Assumptions and Introduction

   It  is assumed that the reader understands the basic structure
   of  the Linux Kernel DVB drivers and the general principles of
   Digital TV.

   One  significant difference between Digital TV and Analogue TV
   that  the  unwary  (like  myself)  should  consider  is  that,
   although  the  component  structure  of budget DVB-T cards are
   substantially  similar  to Analogue TV cards, they function in
   substantially different ways.

   The  purpose  of  an  Analogue TV is to receive and display an
   Analogue  Television  signal. An Analogue TV signal (otherwise
   known  as  composite  video)  is  an  analogue  encoding  of a
   sequence  of  image frames (25 per second) rasterised using an
   interlacing   technique.   Interlacing  takes  two  fields  to
   represent  one  frame.  Computers today are at their best when
   dealing  with  digital  signals,  not  analogue  signals and a
   composite  video signal is about as far removed from a digital
   data stream as you can get. Therefore, an Analogue TV card for
   a PC has the following purpose:

     * Tune the receiver to receive a broadcast signal
     * demodulate the broadcast signal
     * demultiplex  the  analogue video signal and analogue audio
       signal  (note some countries employ a digital audio signal
       embedded  within the modulated composite analogue signal -
       NICAM.)
     * digitize  the analogue video signal and make the resulting
       datastream available to the data bus.

   The  digital  datastream from an Analogue TV card is generated
   by  circuitry on the card and is often presented uncompressed.
   For  a PAL TV signal encoded at a resolution of 768x576 24-bit
   color pixels over 25 frames per second - a fair amount of data
   is  generated and must be processed by the PC before it can be
   displayed  on the video monitor screen. Some Analogue TV cards
   for  PCs  have  onboard  MPEG2  encoders  which permit the raw
   digital  data  stream  to be presented to the PC in an encoded
   and  compressed  form  -  similar  to the form that is used in
   Digital TV.

   The  purpose of a simple budget digital TV card (DVB-T,C or S)
   is to simply:

     * Tune the received to receive a broadcast signal.
     * Extract  the encoded digital datastream from the broadcast
       signal.
     * Make  the  encoded digital datastream (MPEG2) available to
       the data bus.

   The  significant  difference between the two is that the tuner
   on  the analogue TV card spits out an Analogue signal, whereas
   the  tuner  on  the  digital  TV  card  spits out a compressed
   encoded   digital   datastream.   As  the  signal  is  already
   digitised,  it  is  trivial  to pass this datastream to the PC
   databus  with  minimal  additional processing and then extract
   the  digital  video  and audio datastreams passing them to the
   appropriate software or hardware for decoding and viewing.
     _________________________________________________________

The Avermedia DVB-T

   The Avermedia DVB-T is a budget PCI DVB card. It has 3 inputs:

     * RF Tuner Input
     * Composite Video Input (RCA Jack)
     * SVIDEO Input (Mini-DIN)

   The  RF  Tuner  Input  is the input to the tuner module of the
   card.  The  Tuner  is  otherwise known as the "Frontend" . The
   Frontend of the Avermedia DVB-T is a Microtune 7202D. A timely
   post  to  the  linux-dvb  mailing  list  ascertained  that the
   Microtune  7202D  is  supported  by the sp887x driver which is
   found in the dvb-hw CVS module.

   The  DVB-T card is based around the BT878 chip which is a very
   common multimedia bridge and often found on Analogue TV cards.
   There is no on-board MPEG2 decoder, which means that all MPEG2
   decoding  must  be done in software, or if you have one, on an
   MPEG2 hardware decoding card or chipset.
     _________________________________________________________

Getting the card going

   In order to fire up the card, it is necessary to load a number
   of modules from the DVB driver set. Prior to this it will have
   been  necessary to download these drivers from the linuxtv CVS
   server and compile them successfully.

   Depending on the card's feature set, the Device Driver API for
   DVB under Linux will expose some of the following device files
   in the /dev tree:

     * /dev/dvb/adapter0/audio0
     * /dev/dvb/adapter0/ca0
     * /dev/dvb/adapter0/demux0
     * /dev/dvb/adapter0/dvr0
     * /dev/dvb/adapter0/frontend0
     * /dev/dvb/adapter0/net0
     * /dev/dvb/adapter0/osd0
     * /dev/dvb/adapter0/video0

   The  primary  device  nodes that we are interested in (at this
   stage) for the Avermedia DVB-T are:

     * /dev/dvb/adapter0/dvr0
     * /dev/dvb/adapter0/frontend0

   The dvr0 device node is used to read the MPEG2 Data Stream and
   the frontend0 node is used to tune the frontend tuner module.

   At  this  stage,  it  has  not  been  able  to  ascertain  the
   functionality  of the remaining device nodes in respect of the
   Avermedia  DVBT.  However,  full  functionality  in respect of
   tuning,  receiving  and  supplying  the  MPEG2  data stream is
   possible  with the currently available versions of the driver.
   It  may be possible that additional functionality is available
   from  the  card  (i.e.  viewing the additional analogue inputs
   that  the card presents), but this has not been tested yet. If
   I get around to this, I'll update the document with whatever I
   find.

   To  power  up  the  card,  load  the  following modules in the
   following order:

     * modprobe bttv (normally loaded automatically)
     * modprobe dvb-bt8xx (or place dvb-bt8xx in /etc/modules)

   Insertion  of  these  modules  into  the  running  kernel will
   activate the appropriate DVB device nodes. It is then possible
   to start accessing the card with utilities such as scan, tzap,
   dvbstream etc.

   The frontend module sp887x.o, requires an external   firmware.
   Please use  the  command "get_dvb_firmware sp887x" to download
   it. Then copy it to /usr/lib/hotplug/firmware or /lib/firmware/
   (depending on configuration of firmware hotplug).

Receiving DVB-T in Australia

   I  have  no  experience of DVB-T in other countries other than
   Australia,  so  I will attempt to explain how it works here in
   Melbourne  and how this affects the configuration of the DVB-T
   card.

   The  Digital  Broadcasting  Australia  website has a Reception
   locatortool which provides information on transponder channels
   and  frequencies.  My  local  transmitter  happens to be Mount
   Dandenong.

   The frequencies broadcast by Mount Dandenong are:

   Table 1. Transponder Frequencies Mount Dandenong, Vic, Aus.
   Broadcaster Channel Frequency
   ABC         VHF 12  226.5 MHz
   TEN         VHF 11  219.5 MHz
   NINE        VHF 8   191.625 MHz
   SEVEN       VHF 6   177.5 MHz
   SBS         UHF 29  536.5 MHz

   The Scan utility has a set of compiled-in defaults for various
   countries and regions, but if they do not suit, or if you have
   a pre-compiled scan binary, you can specify a data file on the
   command  line which contains the transponder frequencies. Here
   is a sample file for the above channel transponders:
# Data file for DVB scan program
#
# C Frequency SymbolRate FEC QAM
# S Frequency Polarisation SymbolRate FEC
# T Frequency Bandwidth FEC FEC2 QAM Mode Guard Hier
T 226500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE
T 191625000 7MHz 2/3 NONE QAM64 8k 1/8 NONE
T 219500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE
T 177500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE
T 536500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE

   The   defaults   for   the  transponder  frequency  and  other
   modulation parameters were obtained from www.dba.org.au.

   When  Scan  runs, it will output channels.conf information for
   any  channel's transponders which the card's frontend can lock
   onto.  (i.e.  any  whose  signal  is  strong  enough  at  your
   antenna).

   Here's my channels.conf file for anyone who's interested:
ABC HDTV:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64
:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:2307:0:560
ABC TV Melbourne:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_
4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:65
0:561
ABC TV 2:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64
:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:562
ABC TV 3:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64
:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:563
ABC TV 4:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64
:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:564
ABC DiG Radio:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:Q
AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:0:2311:56
6
TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM
_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:158
5
TEN Digital 1:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:Q
AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1
586
TEN Digital 2:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:Q
AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1
587
TEN Digital 3:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:Q
AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1
588
TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM
_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:158
9
TEN Digital 4:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:Q
AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1
590
TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM
_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:159
1
TEN HD:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:T
RANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:514:0:1592
TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM
_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:159
3
Nine Digital:191625000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QA
M_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:513:660:10
72
Nine Digital HD:191625000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2
:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:0:1
073
Nine Guide:191625000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_
64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:514:670:1074
7 Digital:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_6
4:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1328
7 Digital 1:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM
_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1329
7 Digital 2:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM
_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1330
7 Digital 3:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM
_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1331
7 HD Digital:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QA
M_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:833:834:133
2
7 Program Guide:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3
:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:865:866:
1334
SBS HD:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:T
RANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:102:103:784
SBS DIGITAL 1:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:Q
AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:161:81:785
SBS DIGITAL 2:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:Q
AM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:162:83:786
SBS EPG:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:
TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:163:85:787
SBS RADIO 1:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM
_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:201:798
SBS RADIO 2:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM
_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:202:799
     _________________________________________________________

Known Limitations

   At  present  I can say with confidence that the frontend tunes
   via /dev/dvb/adapter{x}/frontend0 and supplies an MPEG2 stream
   via   /dev/dvb/adapter{x}/dvr0.   I   have   not   tested  the
   functionality  of any other part of the card yet. I will do so
   over time and update this document.

   There  are some limitations in the i2c layer due to a returned
   error message inconsistency. Although this generates errors in
   dmesg  and  the  system logs, it does not appear to affect the
   ability of the frontend to function correctly.
     _________________________________________________________

Further Update

   dvbstream  and  VideoLAN  Client on windows works a treat with
   DVB,  in  fact  this  is  currently  serving as my main way of
   viewing  DVB-T  at  the  moment.  Additionally, VLC is happily
   decoding  HDTV  signals,  although  the PC is dropping the odd
   frame here and there - I assume due to processing capability -
   as all the decoding is being done under windows in software.

   Many  thanks to Nigel Pearson for the updates to this document
   since the recent revision of the driver.

   February 14th 2006
