diff -Naur mythtv-15826-old/libs/libavformat/mpegts.c mythtv-15826-new/libs/libavformat/mpegts.c
--- mythtv-15826-old/libs/libavformat/mpegts.c	2008-02-08 08:40:53.000000000 +0000
+++ mythtv-15826-new/libs/libavformat/mpegts.c	2008-02-10 09:26:45.000000000 +0000
@@ -1609,10 +1609,12 @@
                     pkt->pts = pes->pts;
                     pkt->dts = pes->dts;
                     pkt->pos = pes->startpos;
-                    /* reset pts values */
-                    pes->pts = AV_NOPTS_VALUE;
-                    pes->dts = AV_NOPTS_VALUE;
-                    ts->stop_parse = 1;
+                    if (pes->st->codec->codec_id != CODEC_ID_H264) {
+                        /* reset pts values */
+                        pes->pts = AV_NOPTS_VALUE;
+                        pes->dts = AV_NOPTS_VALUE;
+                    }
+		    ts->stop_parse = 1;
                     return;
                 }
             }
diff -Naur mythtv-15826-old/libs/libmythtv/avformatdecoder.cpp mythtv-15826-new/libs/libmythtv/avformatdecoder.cpp
--- mythtv-15826-old/libs/libmythtv/avformatdecoder.cpp	2008-02-08 08:40:42.000000000 +0000
+++ mythtv-15826-new/libs/libmythtv/avformatdecoder.cpp	2008-02-10 09:23:32.000000000 +0000
@@ -1454,6 +1454,7 @@
                 {
                     avcodec_thread_init(enc, thread_count);
                     enc->thread_count = thread_count;
+                    enc->skip_loop_filter = AVDISCARD_ALL;
                 }
 
                 bool handled = false;
@@ -3084,8 +3085,13 @@
 
         AVStream *curstream = ic->streams[pkt->stream_index];
 
-        if (pkt->dts != (int64_t)AV_NOPTS_VALUE)
-            pts = (long long)(av_q2d(curstream->time_base) * pkt->dts * 1000);
+        if (curstream->codec->codec_id == CODEC_ID_H264) {
+            if (pkt->pts != (int64_t)AV_NOPTS_VALUE)
+                pts = (long long)(av_q2d(curstream->time_base) * pkt->pts * 1000);
+        } else {
+            if (pkt->dts != (int64_t)AV_NOPTS_VALUE)
+                pts = (long long)(av_q2d(curstream->time_base) * pkt->dts * 1000);
+        }
 
         if (ringBuffer->isDVD() && 
             curstream->codec->codec_type == CODEC_TYPE_VIDEO)
diff -Naur mythtv-15826-old/libs/libmythtv/nuppeldecoder.cpp mythtv-15826-new/libs/libmythtv/nuppeldecoder.cpp
--- mythtv-15826-old/libs/libmythtv/nuppeldecoder.cpp	2008-02-08 08:40:42.000000000 +0000
+++ mythtv-15826-new/libs/libmythtv/nuppeldecoder.cpp	2008-02-09 10:39:47.000000000 +0000
@@ -672,6 +672,14 @@
         return false;
     }
 
+    int thread_count = 2;
+    if (CODEC_ID_H264 == mpa_vidctx->codec_id && mpa_vidctx->thread_count != thread_count)
+    {
+        avcodec_thread_init(mpa_vidctx, thread_count);
+        mpa_vidctx->thread_count = thread_count;
+        mpa_vidctx->skip_loop_filter = AVDISCARD_ALL;
+    }
+
     return true;
 }
 
