diff -urN mythtv-cvs/configure mythtv/configure
--- mythtv-cvs/configure	2005-01-08 11:48:12.000000000 -0500
+++ mythtv/configure	2005-02-21 22:23:11.547690868 -0500
@@ -187,7 +187,7 @@
 amr_wb="no"
 amr_nb_fixed="no"
 sunmlib="no"
-pthreads="no"
+pthreads="yes"
 gpl="yes"
 memalignhack="no"
 
@@ -1251,6 +1251,13 @@
      extralibs="$extralibs -lpthread"
   fi
 fi
+if test "$pthreads" = "yes" ; then
+  echo "HAVE_PTHREADS=yes" >> config.mak
+  echo "#define HAVE_PTHREADS 1" >> $TMPH
+  if test $targetos != FreeBSD; then
+     extralibs="$extralibs -lpthread"
+  fi
+fi
 if test "$sdl" = "yes" ; then
   echo "CONFIG_SDL=yes" >> config.mak
   echo "SDL_LIBS=`sdl-config --libs`" >> config.mak
diff -urN mythtv-cvs/libs/libavcodec/libavcodec.pro mythtv/libs/libavcodec/libavcodec.pro
--- mythtv-cvs/libs/libavcodec/libavcodec.pro	2005-02-08 02:44:01.000000000 -0500
+++ mythtv/libs/libavcodec/libavcodec.pro	2005-02-21 22:22:07.404184799 -0500
@@ -44,6 +44,10 @@
 
 LIBS += $$LOCAL_LIBDIR_X11
 
+contains( HAVE_PTHREADS, yes) {
+    SOURCES += pthread.c
+}
+
 contains( CONFIG_AC3, yes ) {
     SOURCES += a52dec.c
     !contains( CONFIG_A52BIN, yes ) {
diff -urN mythtv-cvs/libs/libmythtv/NuppelVideoRecorder.cpp mythtv/libs/libmythtv/NuppelVideoRecorder.cpp
--- mythtv-cvs/libs/libmythtv/NuppelVideoRecorder.cpp	2005-02-15 23:01:51.000000000 -0500
+++ mythtv/libs/libmythtv/NuppelVideoRecorder.cpp	2005-02-21 22:26:58.791326482 -0500
@@ -130,6 +130,7 @@
     qualdiff = 3;
     mp4opts = 0;
     mb_decision = FF_MB_DECISION_SIMPLE;
+    thread_count = 1;
 
     oldtc = 0;
     startnum = 0;
@@ -238,6 +239,8 @@
         minquality = value;
     else if (opt == "mpeg4qualdiff")
         qualdiff = value;
+    else if (opt == "mpeg4threadcount")
+        thread_count = value;
     else if (opt == "mpeg4optionvhq")
     {
         if (value)
@@ -314,6 +317,7 @@
         SetIntOption(profile, "mpeg4maxquality");
         SetIntOption(profile, "mpeg4minquality");
         SetIntOption(profile, "mpeg4qualdiff");
+        SetIntOption(profile, "mpeg4threadcount");
         SetIntOption(profile, "mpeg4optionvhq");
         SetIntOption(profile, "mpeg4option4mv");
     }
@@ -512,6 +516,10 @@
     if (codec.lower() == "huffyuv" || codec.lower() == "mjpeg")
         mpa_ctx->strict_std_compliance = -1;
 
+    if(thread_count > 1)
+        if(avcodec_thread_init(mpa_ctx, thread_count))
+	  VERBOSE(VB_IMPORTANT, QString("AVCodec thread init failed"));
+
     pthread_mutex_lock(&avcodeclock); 
     if (avcodec_open(mpa_ctx, mpa_codec) < 0)
     {
@@ -1584,6 +1592,9 @@
     pthread_join(audio_tid, NULL);
     if (vbimode)
         pthread_join(vbi_tid, NULL);
+
+    if(useavcodec && thread_count > 1)
+        avcodec_thread_free(mpa_ctx); 
 }
 
 void NuppelVideoRecorder::BufferIt(unsigned char *buf, int len)
diff -urN mythtv-cvs/libs/libmythtv/NuppelVideoRecorder.h mythtv/libs/libmythtv/NuppelVideoRecorder.h
--- mythtv-cvs/libs/libmythtv/NuppelVideoRecorder.h	2005-02-15 23:01:51.000000000 -0500
+++ mythtv/libs/libmythtv/NuppelVideoRecorder.h	2005-02-21 22:22:07.411184854 -0500
@@ -245,6 +245,7 @@
     int qualdiff;
     int mp4opts;
     int mb_decision;
+    int thread_count;
 
     QString videoFilterList;
     FilterChain *videoFilters;
diff -urN mythtv-cvs/libs/libmythtv/recordingprofile.cpp mythtv/libs/libmythtv/recordingprofile.cpp
--- mythtv-cvs/libs/libmythtv/recordingprofile.cpp	2005-02-15 12:07:28.000000000 -0500
+++ mythtv/libs/libmythtv/recordingprofile.cpp	2005-02-21 22:22:07.415184885 -0500
@@ -411,6 +411,20 @@
     };
 };
 
+class MPEG4ThreadCount: public CodecParam, public SliderSetting {
+public:
+    MPEG4ThreadCount(const RecordingProfile& parent):
+        CodecParam(parent, "mpeg4threadcount"),
+        SliderSetting(1,8,1) {
+
+        setLabel(QObject::tr("Threads"));
+        setValue(1);
+        setHelpText(QObject::tr("Threads to use for encoding, set greater "
+                    "than 1 for faster encoding with SMP or "
+                    "HyperThreading."));
+    };
+};
+
 class MPEG2bitrate: public CodecParam, public SliderSetting {
 public:
     MPEG2bitrate(const RecordingProfile& parent):
@@ -541,6 +555,7 @@
         params->addChild(new MPEG4MaxQuality(parent));
         params->addChild(new MPEG4MinQuality(parent));
         params->addChild(new MPEG4QualDiff(parent));
+        params->addChild(new MPEG4ThreadCount(parent));
         params->addChild(new MPEG4ScaleBitrate(parent));
 
         HorizontalConfigurationGroup *hq;
