Home‎ > ‎Tom's Ideas And Notes‎ > ‎

Hauppauge HDPVR in Linux

posted Apr 29, 2012, 12:13 PM by Tom Gutwin   [ updated Apr 30, 2012, 8:15 PM ]
hdpvr image
This is a HD video recorder that encodes component HD (or composite) signal to mp4.
I originally bought it to work with my MythTV setup but it was a bit to unreliable to use with MythTV.  That being said... It does work and works well, it just needed to be reset every time it gets used, so I use it to manually record HD from my Shaw Direct satellite box, my BluRay disc or other sources (like Hi8) that I want to transfer to disk.

It encodes x264 with A52(AC3) to an mp4 file!

In GNU Linux distributions you set it up with Video 4 Linux 2 (V4L2) - v4l2-ctl command that allows you to configure its video settings and encoding settings.  The MythTV Wiki page has all the details.
Here is how I tweaked the settings to get it running reliably.

1st off I updated it to the latest firmware - version 1.7.1 which fixed a major problem I was having. Follow these directions to upgrade firmware. Previously it would not handle the input signal switching its resolution.  Now it rides right through without exiting the recording!

I will now test it to see how reliable it is and then connect it back to the MythTV.
It has been working really well. It is finally stable. no more hanging or quiting recording mid-video.

The over saturation problem with the driver settings is still present, but its an easy fix with the last v4l2-ctl call (see below).

After it gets turned on I run an init script to get all the config settings the way I like them...

HDPVR init script

#!/bin/bash -v
# Gets the HDPVR setup with good settings
MPEG4_IN=/dev/hdpvr  # sym link to /dev/video1
sudo rmmod hdpvr
sleep 10s
sudo modprobe hdpvr
sleep 5s

# bitrate_mode   0=VBR, 1=CBR
sudo /usr/bin/v4l2-ctl --verbose -d $MPEG4_IN -c video_bitrate_mode=0
sudo /usr/bin/v4l2-ctl --verbose -d $MPEG4_IN -c video_bitrate=10000000
sudo /usr/bin/v4l2-ctl --verbose -d $MPEG4_IN -c video_peak_bitrate=16500000
#If you wish to see more verbose dmesg output, you can use the following module option:
#    hdpvr_debug=#
#  Where # = an integer between 1 and 7, increasing in level of verbosity.
#    video_nr=#
#  Sets the device node to /dev/video#
#    default_video_input=#
#  default video input: 0=component, 1=S-Video, 2=composite
#    default_audio_input=#
# default audio input: 0=RCA back, 1=RCA front, 2=S/PDIF.
# Audio IN 0=RCABack   1=RCAFront  2=SPDIFsudo /usr/bin/v4l2-ctl --verbose -d $MPEG4_IN --set-audio-input=0

# Video Input IN 0=component,  1=s-vid1(front)  2=composite1(front)
sudo /usr/bin/v4l2-ctl --verbose -d $MPEG4_IN --set-input=0

# For firmware 0xf, default audio input must apparently be set to 2 to enable spdif/optical recording.
# This does not change the encoding default (AAC) and does not up-convert to 5.1 if the spdif/optical input is stereo.
# Simply edit /etc/modprobe.d/hdpvr.conf to have this info (without quotes):
#     "options hdpvr default_audio_input=2".
# If this doesn't work for you or if you want to be able to easily change it on the fly, try this script
# https://github.com/davidstoll/HDPVR-config
# if using SPDIF the ctrl "audio_encoding" has to be 4 [3=AAC - 4=AC3]  or you get an empty file
# audio_encoding [3=AAC - 4=AC3]
# I found to use the SPDIF the STB has to also send AC3 or you get silence
sudo /usr/bin/v4l2-ctl --verbose -d $MPEG4_IN -c audio_encoding=4

# Patch for new firmware  BUG
sudo /usr/bin/v4l2-ctl --verbose -d $MPEG4_IN --set-ctrl brightness=0x80 --set-ctrl contrast=0x40 --set-ctrl hue=0xf --set-ctrl saturation=0x40 --set-ctrl sharpness=0x80