Index: libs/libmythtv/NuppelVideoPlayer.h
===================================================================
--- libs/libmythtv/NuppelVideoPlayer.h	(revision 8701)
+++ libs/libmythtv/NuppelVideoPlayer.h	(working copy)
@@ -106,7 +106,7 @@
     void SetVideoParams(int w, int h, double fps, int keydist,
                         float a = 1.33333, FrameScanType scan = kScan_Ignore,
                         bool reinit = false);
-    void SetAudioParams(int bits, int channels, int samplerate);
+    void SetAudioParams(int bits, int channels, int samplerate, bool passthru);
     void SetEffDsp(int dsprate);
     void SetFileLength(int total, int frames);
     void Zoom(int direction);
@@ -487,6 +487,7 @@
     int      audio_bits;
     int      audio_samplerate;
     float    audio_stretchfactor;
+    bool     audio_passthru;
 
     // Picture-in-Picture
     NuppelVideoPlayer *pipplayer;
Index: libs/libmythtv/nuppeldecoder.cpp
===================================================================
--- libs/libmythtv/nuppeldecoder.cpp	(revision 8701)
+++ libs/libmythtv/nuppeldecoder.cpp	(working copy)
@@ -474,7 +474,7 @@
 #endif
         GetNVP()->SetAudioParams(extradata.audio_bits_per_sample,
                                  extradata.audio_channels, 
-                                 extradata.audio_sample_rate);
+                                 extradata.audio_sample_rate, 0);
         GetNVP()->ReinitAudio();
         foundit = 1;
     }
Index: libs/libmythtv/NuppelVideoPlayer.cpp
===================================================================
--- libs/libmythtv/NuppelVideoPlayer.cpp	(revision 8701)
+++ libs/libmythtv/NuppelVideoPlayer.cpp	(working copy)
@@ -488,7 +488,7 @@
         audioOutput = AudioOutput::OpenAudio(audiodevice, audio_bits,
                                              audio_channels, audio_samplerate, 
                                              AUDIOOUTPUT_VIDEO,
-                                             setVolume);
+                                             setVolume, audio_passthru);
         if (!audioOutput)
             errMsg = QObject::tr("Unable to create AudioOutput.");
         else
@@ -514,7 +514,7 @@
 
     if (audioOutput)
     {
-        audioOutput->Reconfigure(audio_bits, audio_channels, audio_samplerate);
+        audioOutput->Reconfigure(audio_bits, audio_channels, audio_samplerate, audio_passthru);
         errMsg = audioOutput->GetError();
         if (!errMsg.isEmpty())
             audioOutput->SetStretchFactor(audio_stretchfactor);
@@ -2527,11 +2527,12 @@
     }
 }
 
-void NuppelVideoPlayer::SetAudioParams(int bps, int channels, int samplerate)
+void NuppelVideoPlayer::SetAudioParams(int bps, int channels, int samplerate, bool passthru)
 {
     audio_bits = bps;
     audio_channels = channels;
     audio_samplerate = samplerate;
+    audio_passthru = passthru;
 }
 
 void NuppelVideoPlayer::SetEffDsp(int dsprate)
Index: libs/libmythtv/avformatdecoder.cpp
===================================================================
--- libs/libmythtv/avformatdecoder.cpp	(revision 8701)
+++ libs/libmythtv/avformatdecoder.cpp	(working copy)
@@ -1181,7 +1181,7 @@
     // waiting on audio.
     if (GetNVP()->HasAudioIn() && audioStreams.empty())
     {
-        GetNVP()->SetAudioParams(-1, -1, -1);
+        GetNVP()->SetAudioParams(-1, -1, -1, 0);
         GetNVP()->ReinitAudio();
     }
 
@@ -2733,7 +2733,8 @@
         GetNVP()->SetEffDsp(audioOut.sample_rate * 100);
 
     GetNVP()->SetAudioParams(audioOut.bps(), audioOut.channels,
-                             audioOut.sample_rate);
+                             audioOut.sample_rate,
+                             audioIn.do_passthru);
     GetNVP()->ReinitAudio();
 
     return true;
Index: libs/libmyth/audiooutputjack.h
===================================================================
--- libs/libmyth/audiooutputjack.h	(revision 8701)
+++ libs/libmyth/audiooutputjack.h	(working copy)
@@ -14,7 +14,8 @@
   public:
     AudioOutputJACK(QString audiodevice, int laudio_bits, 
                     int laudio_channels, int laudio_samplerate,
-                    AudioOutputSource source, bool set_initial_vol);
+                    AudioOutputSource source, bool set_initial_vol,
+                    bool laudio_passthru);
     virtual ~AudioOutputJACK();
    
     // Volume control
Index: libs/libmyth/audiooutputbase.h
===================================================================
--- libs/libmyth/audiooutputbase.h	(revision 8701)
+++ libs/libmyth/audiooutputbase.h	(working copy)
@@ -19,12 +19,13 @@
  public:
     AudioOutputBase(QString audiodevice, int laudio_bits,
                     int laudio_channels, int laudio_samplerate,
-                    AudioOutputSource source, bool set_initial_vol);
+                    AudioOutputSource source, bool set_initial_vol,
+                    bool laudio_passthru);
     virtual ~AudioOutputBase();
 
     // reconfigure sound out for new params
-    virtual void Reconfigure(int audio_bits, 
-                             int audio_channels, int audio_samplerate);
+    virtual void Reconfigure(int audio_bits, int audio_channels,
+                             int audio_samplerate, bool audio_passthru);
     
     // do AddSamples calls block?
     virtual void SetBlocking(bool blocking);
@@ -106,6 +107,8 @@
     long soundcard_buffer_size;
     QString audiodevice;
 
+    bool audio_passthru;
+
     float audio_stretchfactor;
     AudioOutputSource source;
 
Index: libs/libmyth/audiooutputalsa.cpp
===================================================================
--- libs/libmyth/audiooutputalsa.cpp	(revision 8701)
+++ libs/libmyth/audiooutputalsa.cpp	(working copy)
@@ -12,9 +12,11 @@
 
 AudioOutputALSA::AudioOutputALSA(QString audiodevice, int laudio_bits, 
                                  int laudio_channels, int laudio_samplerate,
-                                 AudioOutputSource source, bool set_initial_vol)
+                                 AudioOutputSource source, bool set_initial_vol,
+                                 bool laudio_passthru)
               : AudioOutputBase(audiodevice, laudio_bits,
-                              laudio_channels, laudio_samplerate, source, set_initial_vol)
+                              laudio_channels, laudio_samplerate, source, set_initial_vol,
+                              laudio_passthru)
 {
     // our initalisation
     pcm_handle = NULL;
@@ -22,7 +24,7 @@
     mixer_handle = NULL;
 
     // Set everything up
-    Reconfigure(laudio_bits, laudio_channels, laudio_samplerate);
+    Reconfigure(laudio_bits, laudio_channels, laudio_samplerate, laudio_passthru);
 }
 
 AudioOutputALSA::~AudioOutputALSA()
@@ -41,8 +43,12 @@
 
     pcm_handle = NULL;
     numbadioctls = 0;
+
+    QString real_device = QString(audiodevice);
+    if (audio_passthru)
+        real_device.append(":{ AES0 0x02 }");
     
-    err = snd_pcm_open(&pcm_handle, audiodevice,
+    err = snd_pcm_open(&pcm_handle, real_device,
           SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK); 
 
     if (err < 0)
Index: libs/libmyth/audiooutputca.cpp
===================================================================
--- libs/libmyth/audiooutputca.cpp	(revision 8701)
+++ libs/libmyth/audiooutputca.cpp	(working copy)
@@ -38,16 +38,17 @@
 
 AudioOutputCA::AudioOutputCA(QString audiodevice, int laudio_bits, 
                              int laudio_channels, int laudio_samplerate,
-                             AudioOutputSource source, bool set_initial_vol)
+                             AudioOutputSource source, bool set_initial_vol,
+                             bool laudio_passthru)
              : AudioOutputBase(audiodevice, laudio_bits,
                                laudio_channels, laudio_samplerate,
-                               source, set_initial_vol)
+                               source, set_initial_vol, laudio_passthru)
 {
     // Create private data
     coreaudio_data = new CoreAudioData();
     coreaudio_data->output_unit = NULL;
     
-    Reconfigure(laudio_bits, laudio_channels, laudio_samplerate);
+    Reconfigure(laudio_bits, laudio_channels, laudio_samplerate, laudio_passthru);
 }
 
 AudioOutputCA::~AudioOutputCA()
Index: libs/libmyth/audiooutputjack.cpp
===================================================================
--- libs/libmyth/audiooutputjack.cpp	(revision 8701)
+++ libs/libmyth/audiooutputjack.cpp	(working copy)
@@ -23,9 +23,11 @@
 
 AudioOutputJACK::AudioOutputJACK(QString audiodevice, int laudio_bits, 
                                  int laudio_channels, int laudio_samplerate,
-                                 AudioOutputSource source, bool set_initial_vol)
+                                 AudioOutputSource source, bool set_initial_vol,
+                                 bool laudio_passthru)
                : AudioOutputBase(audiodevice, laudio_bits, laudio_channels,
-                                 laudio_samplerate, source, set_initial_vol)
+                                 laudio_samplerate, source, set_initial_vol,
+                                 laudio_passthru)
 {
     // Initialise the Jack output layer
     JACK_Init();
@@ -34,7 +36,7 @@
     audioid = -1;
 
     // Set everything up
-    Reconfigure(laudio_bits, laudio_channels, laudio_samplerate);
+    Reconfigure(laudio_bits, laudio_channels, laudio_samplerate, laudio_passthru);
 }
 
 AudioOutputJACK::~AudioOutputJACK()
Index: libs/libmyth/audiooutputoss.h
===================================================================
--- libs/libmyth/audiooutputoss.h	(revision 8701)
+++ libs/libmyth/audiooutputoss.h	(working copy)
@@ -15,7 +15,8 @@
 public:
     AudioOutputOSS(QString audiodevice, int laudio_bits, 
                    int laudio_channels, int laudio_samplerate,
-                   AudioOutputSource source, bool set_initial_vol);
+                   AudioOutputSource source, bool set_initial_vol,
+                   bool laudio_passthru);
     virtual ~AudioOutputOSS();
 
     // Volume control
Index: libs/libmyth/audiooutputbase.cpp
===================================================================
--- libs/libmyth/audiooutputbase.cpp	(revision 8701)
+++ libs/libmyth/audiooutputbase.cpp	(working copy)
@@ -15,7 +15,8 @@
 
 AudioOutputBase::AudioOutputBase(QString audiodevice, int, 
                                  int, int,
-                                 AudioOutputSource source, bool set_initial_vol)
+                                 AudioOutputSource source, bool set_initial_vol,
+                                 bool)
 {
     pthread_mutex_init(&audio_buflock, NULL);
     pthread_mutex_init(&avsync_lock, NULL);
@@ -41,7 +42,7 @@
 
     // You need to call the next line from your concrete class.
     // Virtuals cause problems in the base class constructors
-    // Reconfigure(laudio_bits, laudio_channels, laudio_samplerate);
+    // Reconfigure(laudio_bits, laudio_channels, laudio_samplerate, laudio_passthru);
 }
 
 AudioOutputBase::~AudioOutputBase()
@@ -102,10 +103,11 @@
 }
 
 void AudioOutputBase::Reconfigure(int laudio_bits, int laudio_channels, 
-                                 int laudio_samplerate)
+                                 int laudio_samplerate, bool laudio_passthru)
 {
     if (laudio_bits == audio_bits && laudio_channels == audio_channels &&
-        laudio_samplerate == audio_samplerate && !need_resampler)
+        laudio_samplerate == audio_samplerate &&
+        laudio_passthru == audio_passthru && !need_resampler)
         return;
 
     KillAudio();
@@ -120,6 +122,7 @@
     audio_channels = laudio_channels;
     audio_bits = laudio_bits;
     audio_samplerate = laudio_samplerate;
+    audio_passthru = laudio_passthru;
     if (audio_bits != 8 && audio_bits != 16)
     {
         Error("AudioOutput only supports 8 or 16bit audio.");
Index: libs/libmyth/audiooutput.cpp
===================================================================
--- libs/libmyth/audiooutput.cpp	(revision 8701)
+++ libs/libmyth/audiooutput.cpp	(working copy)
@@ -28,13 +28,15 @@
 
 AudioOutput *AudioOutput::OpenAudio(QString audiodevice, int audio_bits, 
                                     int audio_channels, int audio_samplerate,
-                                    AudioOutputSource source, bool set_initial_vol)
+                                    AudioOutputSource source, bool set_initial_vol,
+                                    bool audio_passthru)
 {
     if (audiodevice.startsWith("ALSA:"))
     {
 #ifdef USE_ALSA
         return new AudioOutputALSA(audiodevice.remove(0, 5), audio_bits,
-                                   audio_channels, audio_samplerate, source, set_initial_vol);
+                                   audio_channels, audio_samplerate, source,
+                                   set_initial_vol, audio_passthru);
 #else
         VERBOSE(VB_IMPORTANT, "Audio output device is set to an ALSA device "
                               "but ALSA support is not compiled in!");
@@ -44,13 +46,15 @@
     else if (audiodevice.startsWith("NULL"))
     {
         return new AudioOutputNULL(audiodevice, audio_bits,
-                                   audio_channels, audio_samplerate, source, set_initial_vol);
+                                   audio_channels, audio_samplerate, source,
+                                   set_initial_vol, audio_passthru);
     }
     else if (audiodevice.startsWith("ARTS:"))
     {
 #ifdef USE_ARTS
         return new AudioOutputARTS(audiodevice.remove(0, 5), audio_bits,
-                                   audio_channels, audio_samplerate, source, set_initial_vol);
+                                   audio_channels, audio_samplerate, source,
+                                   set_initial_vol, audio_passthru);
 #else
         VERBOSE(VB_IMPORTANT, "Audio output device is set to an ARTS device "
                               "but ARTS support is not compiled in!");
@@ -71,15 +75,18 @@
 #if defined(USING_DIRECTX)
     else
         return new AudioOutputDX(audiodevice, audio_bits,
-                                  audio_channels, audio_samplerate, source, set_initial_vol);
+                                 audio_channels, audio_samplerate, source,
+                                 set_initial_vol, audio_passthru);
 #elif defined(USING_OSS)
     else
         return new AudioOutputOSS(audiodevice, audio_bits,
-                                  audio_channels, audio_samplerate, source, set_initial_vol);
+                                  audio_channels, audio_samplerate, source,
+                                  set_initial_vol, audio_passthru);
 #elif defined(CONFIG_DARWIN)
     else
         return new AudioOutputCA(audiodevice, audio_bits,
-                                 audio_channels, audio_samplerate, source, set_initial_vol);
+                                 audio_channels, audio_samplerate, source,
+                                 set_initial_vol, audio_passthru);
 #endif
 
     VERBOSE(VB_IMPORTANT, "No useable audio output driver found.");
Index: libs/libmyth/audiooutputca.h
===================================================================
--- libs/libmyth/audiooutputca.h	(revision 8701)
+++ libs/libmyth/audiooutputca.h	(working copy)
@@ -19,7 +19,8 @@
 public:
     AudioOutputCA(QString audiodevice, int laudio_bits, 
                   int laudio_channels, int laudio_samplerate,
-                  AudioOutputSource source, bool set_initial_vol);
+                  AudioOutputSource source, bool set_initial_vol,
+                  bool laudio_passthru);
     virtual ~AudioOutputCA();
     
     // callback for delivering audio to output device
Index: libs/libmyth/audiooutputoss.cpp
===================================================================
--- libs/libmyth/audiooutputoss.cpp	(revision 8701)
+++ libs/libmyth/audiooutputoss.cpp	(working copy)
@@ -27,9 +27,11 @@
 
 AudioOutputOSS::AudioOutputOSS(QString audiodevice, int laudio_bits, 
                                int laudio_channels, int laudio_samplerate,
-                               AudioOutputSource source, bool set_initial_vol)
+                               AudioOutputSource source, bool set_initial_vol,
+                               bool laudio_passthru)
               : AudioOutputBase(audiodevice, laudio_bits,
-                              laudio_channels, laudio_samplerate, source, set_initial_vol)
+                              laudio_channels, laudio_samplerate, source, set_initial_vol,
+                              laudio_passthru)
 {
     // our initalisation
     audiofd = -1;
@@ -37,7 +39,7 @@
     numbadioctls = 0;
 
     // Set everything up
-    Reconfigure(laudio_bits, laudio_channels, laudio_samplerate);
+    Reconfigure(laudio_bits, laudio_channels, laudio_samplerate, laudio_passthru);
 }
 
 AudioOutputOSS::~AudioOutputOSS()
Index: libs/libmyth/audiooutputarts.cpp
===================================================================
--- libs/libmyth/audiooutputarts.cpp	(revision 8701)
+++ libs/libmyth/audiooutputarts.cpp	(working copy)
@@ -9,15 +9,17 @@
 
 AudioOutputARTS::AudioOutputARTS(QString audiodevice, int audio_bits, 
                                  int audio_channels, int audio_samplerate,
-                                 AudioOutputSource source, bool set_initial_vol)
+                                 AudioOutputSource source, bool set_initial_vol,
+                                 bool audio_passthru)
               : AudioOutputBase(audiodevice, audio_bits, audio_channels,
-                                audio_samplerate, source, set_initial_vol)
+                                audio_samplerate, source, set_initial_vol,
+                                audio_passthru)
 {
     // our initalisation
     pcm_handle = NULL;
 
     // Set everything up
-    Reconfigure(audio_bits, audio_channels, audio_samplerate);
+    Reconfigure(audio_bits, audio_channels, audio_samplerate, audio_passthru);
 }
 
 AudioOutputARTS::~AudioOutputARTS()
Index: libs/libmyth/audiooutputdx.cpp
===================================================================
--- libs/libmyth/audiooutputdx.cpp	(revision 8701)
+++ libs/libmyth/audiooutputdx.cpp	(working copy)
@@ -97,7 +97,8 @@
 
 AudioOutputDX::AudioOutputDX(QString audiodevice, int audio_bits, 
                              int audio_channels, int audio_samplerate,
-                             AudioOutputSource source, bool set_initial_vol)
+                             AudioOutputSource source, bool set_initial_vol,
+                             bool audio_passthru)
 {
     this->audiodevice = audiodevice;
     
@@ -110,7 +111,7 @@
     
     InitDirectSound();
     
-    Reconfigure(audio_bits, audio_channels, audio_samplerate);
+    Reconfigure(audio_bits, audio_channels, audio_samplerate, audio_passthru);
 }
 
 void AudioOutputDX::SetBlocking(bool blocking)
@@ -118,8 +119,8 @@
     // FIXME: kedl: not sure what else could be required here?
 }
 
-void AudioOutputDX::Reconfigure(int audio_bits, 
-                                  int audio_channels, int audio_samplerate)
+void AudioOutputDX::Reconfigure(int audio_bits, int audio_channels,
+                                int audio_samplerate, int audio_passthru)
 {
     if (dsbuffer)
         DestroyDSBuffer();
@@ -132,6 +133,7 @@
     effdsp = audio_samplerate;
     this->audio_bits = audio_bits;
     this->audio_channels = audio_channels;
+    this->audio_passthru = audio_passthru;
 }
 
 AudioOutputDX::~AudioOutputDX()
Index: libs/libmyth/audiooutputnull.h
===================================================================
--- libs/libmyth/audiooutputnull.h	(revision 8701)
+++ libs/libmyth/audiooutputnull.h	(working copy)
@@ -26,7 +26,8 @@
 public:
     AudioOutputNULL(QString audiodevice, int laudio_bits, 
                    int laudio_channels, int laudio_samplerate,
-                   AudioOutputSource source, bool set_initial_vol);
+                   AudioOutputSource source, bool set_initial_vol,
+                   bool laudio_passthru);
     virtual ~AudioOutputNULL();
 
     virtual void Reset(void);
Index: libs/libmyth/audiooutput.h
===================================================================
--- libs/libmyth/audiooutput.h	(revision 8701)
+++ libs/libmyth/audiooutput.h	(working copy)
@@ -20,14 +20,15 @@
     // opens one of the concrete subclasses
     static AudioOutput *OpenAudio(QString audiodevice, int audio_bits, 
                                  int audio_channels, int audio_samplerate,
-                                 AudioOutputSource source, bool set_initial_vol);
+                                 AudioOutputSource source, bool set_initial_vol,
+                                 bool audio_passthru);
 
     AudioOutput() : VolumeBase(), OutputListeners() { lastError = QString::null; };
     virtual ~AudioOutput() { };
 
     // reconfigure sound out for new params
-    virtual void Reconfigure(int audio_bits, 
-                             int audio_channels, int audio_samplerate) = 0;
+    virtual void Reconfigure(int audio_bits, int audio_channels,
+                             int audio_samplerate, bool audio_passthru) = 0;
     
     virtual void SetStretchFactor(float factor);
 
Index: libs/libmyth/audiooutputnull.cpp
===================================================================
--- libs/libmyth/audiooutputnull.cpp	(revision 8701)
+++ libs/libmyth/audiooutputnull.cpp	(working copy)
@@ -18,14 +18,16 @@
 
 AudioOutputNULL::AudioOutputNULL(QString audiodevice, int laudio_bits, 
                                  int laudio_channels, int laudio_samplerate,
-                                 AudioOutputSource source, bool set_initial_vol)
+                                 AudioOutputSource source, bool set_initial_vol,
+                                 bool laudio_passthru)
                : AudioOutputBase(audiodevice, laudio_bits, laudio_channels,
-                                 laudio_samplerate, source, set_initial_vol)
+                                 laudio_samplerate, source, set_initial_vol,
+                                 laudio_passthru)
 {
     locked_audio_channels = laudio_channels;
     locked_audio_bits = laudio_bits;
     locked_audio_samplerate = laudio_samplerate;
-    Reconfigure(laudio_bits, laudio_channels, laudio_samplerate);
+    Reconfigure(laudio_bits, laudio_channels, laudio_samplerate, laudio_passthru);
     current_buffer_size = 0;
 }
 
Index: libs/libmyth/audiooutputarts.h
===================================================================
--- libs/libmyth/audiooutputarts.h	(revision 8701)
+++ libs/libmyth/audiooutputarts.h	(working copy)
@@ -16,7 +16,8 @@
   public:
      AudioOutputARTS(QString audiodevice, int audio_bits, 
                      int audio_channels, int audio_samplerate,
-                     AudioOutputSource source, bool set_initial_vol);
+                     AudioOutputSource source, bool set_initial_vol,
+                     bool laudio_passthru);
      virtual ~AudioOutputARTS();
 
     // Volume control
Index: libs/libmyth/audiooutputdx.h
===================================================================
--- libs/libmyth/audiooutputdx.h	(revision 8701)
+++ libs/libmyth/audiooutputdx.h	(working copy)
@@ -16,7 +16,8 @@
 public:
     AudioOutputDX(QString audiodevice, int audio_bits, 
                   int audio_channels, int audio_samplerate,
-                  AudioOutputSource source, bool set_initial_vol);
+                  AudioOutputSource source, bool set_initial_vol,
+                  bool laudio_passthru);
     virtual ~AudioOutputDX();
 
     virtual void Reset(void);
Index: libs/libmyth/audiooutputalsa.h
===================================================================
--- libs/libmyth/audiooutputalsa.h	(revision 8701)
+++ libs/libmyth/audiooutputalsa.h	(working copy)
@@ -18,7 +18,8 @@
   public:
     AudioOutputALSA(QString audiodevice, int laudio_bits, 
                    int laudio_channels, int laudio_samplerate,
-                   AudioOutputSource source, bool set_initial_vol);
+                   AudioOutputSource source, bool set_initial_vol,
+                   bool laudio_passthru);
     virtual ~AudioOutputALSA();
 
     // Volume control
Index: programs/mythtranscode/transcode.cpp
===================================================================
--- programs/mythtranscode/transcode.cpp	(revision 8701)
+++ programs/mythtranscode/transcode.cpp	(working copy)
@@ -34,7 +34,7 @@
     AudioReencodeBuffer(int audio_bits, int audio_channels)
     {
         Reset();
-        Reconfigure(audio_bits, audio_channels, 0);
+        Reconfigure(audio_bits, audio_channels, 0, 0);
         bufsize = 512000;
         audiobuffer = new unsigned char[bufsize];
     }
@@ -45,8 +45,8 @@
     }
 
     // reconfigure sound out for new params
-    virtual void Reconfigure(int audio_bits,
-                        int audio_channels, int audio_samplerate)
+    virtual void Reconfigure(int audio_bits, int audio_channels,
+                             int audio_samplerate, bool audio_passthru)
     {
         (void)audio_samplerate;
         bits = audio_bits;
