Multi tv card info
This is what I did to add a secondary tuner for recording, keeping the main tuner free for live tv viewing. Someone that knows Freevo better than I do should probably write this part, but something better than nothing right? 4 hours experience with Freevo and counting (version 1.5.2).
In the local_conf.py file there are to variables VCR_CMD and VCR_AUDIO that tells mencoder everything it needs to know about recording by pulling together several of the variables defined earlier in the file, or in freevo.conf.
It uses:
CONF.mencoder (freevo.conf) CONF.tv (freevo.conf) CONF.chanlist (freevo.conf) TV_DRIVER = 'v4l2' TV_DEVICE = '/dev/video0' TV_INPUT = '0' AUDIO_DEVICE = ='/dev/dsp'
What I did was create duplicates of these variables to reflect the hardware device I wanted to use for recording.
Added:
TV_DRIVER_2 = 'v4l2' TV_DEVICE_2 = '/dev/video1' TV_INPUT_2 = '0' AUDIO_DEVICE_2 = '/dev/dsp1'
The CONF.x variables I left alone, since they would be the same for each tuner.
After adding the variables, find the VCR_AUDIO variable and change AUDIO_DEVICE to AUDIO_DEVICE_2 to use the second sound source.
VCR_AUDIO = (':adevice=%s' % AUDIO_DEVICE_2 +
              ':audiorate=32000' +         # 44100 for better sound
              ':forceaudio:forcechan=1:' + # Forced mono for bug in my driver
              'buffersize=64')             # 64MB capture buffer, change?
Now modify the VCR_CMD variable to use the _2 variables instead of the main. For my card I had to add the normid=1 part to select NTSC. See the mencoder pages for more info.
VCR_CMD = (CONF.mencoder + ' ' +
            'tv:// ' +                      # New mplayer requires this.
            '-tv driver=%s:input=%d' % (TV_DRIVER_2, TV_INPUT_2) +
            ':norm=%s' % CONF.tv +
            ':normid=1' +                   # I had to add this to make it work for my card
            ':channel=%(channel)s' +        # Filled in by Freevo
            ':chanlist=%s' % CONF.chanlist +
            ':width=%d:height=%d' % (TV_REC_SIZE[0], TV_REC_SIZE[1]) +
            ':outfmt=%s' % TV_REC_OUTFMT +
            ':device=%s' % TV_DEVICE_2 +
            VCR_AUDIO +                     # set above
            ' -ovc lavc -lavcopts ' +       # Mencoder lavcodec video codec
            'vcodec=mpeg4' +                # lavcodec mpeg-4
            ':vbitrate=1200:' +             # Change lower/higher, bitrate
            'keyint=30 ' +                  # Keyframe every 10 secs, change?
            '-oac mp3lame -lameopts ' +     # Use Lame for MP3 encoding, must be enabled in mencoder!
            'br=128:cbr:mode=3 ' +          # MP3 const. bitrate, 128 kbit/s
            '-ffourcc divx ' +              # Force 'divx' ident, better compat.
            '-endpos %(seconds)s ' +        # only mencoder uses this so do it here.
            '-o %(filename)s')              # Filled in by Freevo
One catch to this is the need to adjust mixer levels on the second sound card manually. In my case this meant running
'alsamixer -c 1', setting the line-in volume up, muting it, and setting it for capture.
If it doesn't work for you, add a print line for the VCR_CMD "print VCR_CMD" to the end of local_conf.py for testing. Run freevo and make note of the output for VCR_CMD. Change '%(channel)s', %(seconds)s, and %(filename) to something appropriate(such as 3, 10, and test.avi) and try running the command manually to find the reason it isn't working.
Finally, the recordserver script puts a drop file to prevent live tv viewing / channel changes during record. I couldn't see a way to disable this with an option, so I did it by patching the recordserver.py file.
Locate the line:
tv_lock_file = config.FREEVO_CACHEDIR + '/record'
Change this line to:
tv_lock_file = config.FREEVO_CACHEDIR + '/record.tuner2'
If anyone else has a cleaner way to do this, for the love of god and all that is holy write it up and put it here!