
Intro
=====

people start bugging me about this with questions, looks like I
should write up some documentation for this beast.  That way I
don't have to answer that much mails I hope.  Yes, I'm lazy...


You might have noticed that the bt878 grabber cards have actually
_two_ PCI functions:

$ lspci
[ ... ]
00:0a.0 Multimedia video controller: Brooktree Corporation Bt878 (rev 02)
00:0a.1 Multimedia controller: Brooktree Corporation Bt878 (rev 02)
[ ... ]

The first does video, it is backward compatible to the bt848.  The second
does audio.  btaudio is a driver for the second function.  It's a sound
driver which can be used for recording sound (and _only_ recording, no
playback).  As most TV cards come with a short cable which can be plugged
into your sound card's line-in you probably don't need this driver if all
you want to do is just watching TV...


Driver Status
=============

Still somewhat experimental.  The driver should work stable, i.e. it
should'nt crash your box.  It might not work as expected, have bugs,
not being fully OSS API compilant, ...

Latest versions are available from http://bytesex.org/bttv/, the
driver is in the bttv tarball.  Kernel patches might be available too,
have a look at http://bytesex.org/bttv/listing.html.

The chip knows two different modes.  btaudio registers two dsp
devices, one for each mode.  They can not be used at the same time.


Digital audio mode
==================

The chip gives you 16 bit stereo sound.  The sample rate depends on
the external source which feeds the bt878 with digital sound via I2S
interface.  There is a insmod option (rate) to tell the driver which
sample rate the hardware uses (32000 is the default).

One possible source for digital sound is the msp34xx audio processor
chip which provides digital sound via I2S with 32 kHz sample rate.  My
Hauppauge board works this way.

The Osprey-200 reportly gives you digital sound with 44100 Hz sample
rate.  It is also possible that you get no sound at all.


analog mode (A/D)
=================

You can tell the driver to use this mode with the insmod option "analog=1".
The chip has three analog inputs.  Consequently you'll get a mixer device
to control these.

The analog mode supports mono only.  Both 8 + 16 bit.  Both are _signed_
int, which is uncommon for the 8 bit case.  Sample rate range is 119 kHz
to 448 kHz.  Yes, the number of digits is correct.  The driver supports
downsampling by powers of two, so you can ask for more usual sample rates
like 44 kHz too.

With my Hauppauge I get noisy sound on the second input (mapped to line2
by the mixer device).  Others get a useable signal on line1.


some examples
=============

* read audio data from btaudio (dsp2), send to es1730 (dsp,dsp1):
  $ sox -w -r 32000 -t ossdsp /dev/dsp2 -t ossdsp /dev/dsp

* read audio data from btaudio, send to esound daemon (which might be
  running on another host):
  $ sox -c 2 -w -r 32000 -t ossdsp /dev/dsp2 -t sw - | esdcat -r 32000
  $ sox -c 1 -w -r 32000 -t ossdsp /dev/dsp2 -t sw - | esdcat -m -r 32000


Have fun,

  Gerd

-- 
Gerd Knorr <kraxel@bytesex.org>
