Index: libs/libmythtv/avformatdecoder.cpp
===================================================================
--- libs/libmythtv/avformatdecoder.cpp	(revision 16894)
+++ libs/libmythtv/avformatdecoder.cpp	(working copy)
@@ -4002,12 +4002,14 @@
             digInfo.sample_rate = 48000;
             digInfo.sample_size = 4;
         }
+#if 0
         if (audioOut.channels > (int) max_channels)
         {
             audioOut.channels = (int) max_channels;
             audioOut.sample_size = audioOut.channels * 2;
             codec_ctx->channels = audioOut.channels;
         }
+#endif
         VERBOSE(VB_AUDIO, LOC + "Audio format changed digital passthrough " +
                 QString("%1\n\t\t\tfrom %2 ; %3\n\t\t\tto   %4 ; %5")
                 .arg(digInfo.toString())
Index: libs/libmyth/audiooutputbase.h
===================================================================
--- libs/libmyth/audiooutputbase.h	(revision 16894)
+++ libs/libmyth/audiooutputbase.h	(working copy)
@@ -56,6 +56,7 @@
     virtual void Drain(void);
 
     virtual int GetAudiotime(void) const;
+    virtual int GetAudioBufferedTime(void) const;
 
     // Send output events showing current progress
     virtual void Status(void);
Index: libs/libmyth/audiooutputalsa.cpp
===================================================================
--- libs/libmyth/audiooutputalsa.cpp	(revision 16894)
+++ libs/libmyth/audiooutputalsa.cpp	(working copy)
@@ -80,9 +80,10 @@
     }
     else
     {
-        fragment_size = 6144; // nicely divisible by 2,4,6,8 channels @ 16-bits
-        buffer_time = 500000; // 500 ms
-        period_time = buffer_time / 4;  // 4 interrupts per buffer
+        fragment_size = 1536 * audio_channels * audio_bits / 8;
+        period_time = 25000;  // in usec, interrupt period time
+        // in usec, for driver buffer alloc (64k max)
+        buffer_time = period_time * 16;
     }
 
     if (audio_bits == 8)
Index: libs/libmyth/audiooutputbase.cpp
===================================================================
--- libs/libmyth/audiooutputbase.cpp	(revision 16894)
+++ libs/libmyth/audiooutputbase.cpp	(working copy)
@@ -683,6 +683,11 @@
     pthread_mutex_unlock(&audio_buflock);
 }
 
+int AudioOutputBase::GetAudioBufferedTime(void) const
+{
+     return audbuf_timecode - GetAudiotime();
+}
+
 bool AudioOutputBase::AddSamples(char *buffers[], int samples,
                                  long long timecode)
 {
@@ -704,7 +709,7 @@
         len += (pSoundStretch->numUnprocessedSamples() +
                 (int)(pSoundStretch->numSamples()/audio_stretchfactor))*abps;
 
-    if (((len > afree) || ((audbuf_timecode - GetAudiotime()) > 2000)) && !blocking)
+    if ((len > afree) && !blocking)
     {
         VERBOSE(VB_AUDIO|VB_TIMESTAMP, LOC + QString(
                 "AddSamples FAILED bytes=%1, used=%2, free=%3, timecode=%4")
@@ -773,7 +778,7 @@
                 (int)(pSoundStretch->numSamples()/audio_stretchfactor))*abps;
     }
 
-    if (((len > afree) || (audiotime && ((audbuf_timecode - GetAudiotime()) > 2000))) && !blocking)
+    if ((len > afree) && !blocking)
     {
         VERBOSE(VB_AUDIO|VB_TIMESTAMP, LOC + QString(
                 "AddSamples FAILED bytes=%1, used=%2, free=%3, timecode=%4")
Index: libs/libmyth/audiooutputdigitalencoder.cpp
===================================================================
--- libs/libmyth/audiooutputdigitalencoder.cpp	(revision 16894)
+++ libs/libmyth/audiooutputdigitalencoder.cpp	(working copy)
@@ -26,6 +26,7 @@
 #define MAX_AC3_FRAME_SIZE 6144
 
 AudioOutputDigitalEncoder::AudioOutputDigitalEncoder(void) :
+    audio_bytes_per_sample(0),
     av_context(NULL),
     outbuf(NULL),
     outbuf_size(0),
Index: libs/libmyth/audiooutput.h
===================================================================
--- libs/libmyth/audiooutput.h	(revision 16894)
+++ libs/libmyth/audiooutput.h	(working copy)
@@ -53,6 +53,9 @@
 
     virtual int GetAudiotime(void) const = 0;
 
+    /// report amount of audio buffered in milliseconds.
+    virtual int GetAudioBufferedTime(void) const { return 0; }
+
     virtual void SetSourceBitrate(int ) { }
 
     QString GetError(void)   const { return lastError; }
