Index: programs/mythfrontend/playbackbox.cpp
===================================================================
--- programs/mythfrontend/playbackbox.cpp	(revision 15720)
+++ programs/mythfrontend/playbackbox.cpp	(working copy)
@@ -4563,6 +4563,7 @@
     {
         if (previewPixmap)
         {
+            VERBOSE(VB_IMPORTANT, "previewReady: deleting previewPixmap");
             delete previewPixmap;
             previewPixmap = NULL;
         }
@@ -4584,6 +4585,37 @@
     return true;
 }
 
+static QSize calc_preview_size(const QSize &bounds, const QSize &imageSize)
+{
+    if ((bounds.width() == imageSize.width()) && (imageSize.height() <= bounds.height()))
+        return imageSize;
+
+    float blackholeaspect = ((float)bounds.width()) / ((float)bounds.height());
+    float videoaspect     = ((float)imageSize.width()) / ((float)imageSize.height());
+    float scaleratio      = 1.0f;
+    int   previewwidth    = bounds.width();
+    int   previewheight   = bounds.height();
+
+    // Calculate new height or width according to relative aspect ratio
+    if ((int)((blackholeaspect + 0.05f) * 10) > (int)((videoaspect + 0.05f) * 10))
+    {
+        scaleratio   = (videoaspect / blackholeaspect);
+        previewwidth = (int)(previewwidth * scaleratio);
+    }
+    else if ((int)((blackholeaspect + 0.05f) * 10) < (int)((videoaspect + 0.05f) * 10))
+    {
+        scaleratio    = (blackholeaspect / videoaspect);
+        previewheight = (int)(previewheight * scaleratio);
+    }
+
+    // Ensure preview width/height are multiples of 8 to match
+    // the preview video
+    //previewwidth = ((previewwidth + 7) / 8) * 8;
+    //previewheight = ((previewheight + 7) / 8) * 8;
+
+    return QSize(previewwidth, previewheight);
+}
+
 QPixmap PlaybackBox::getPixmap(ProgramInfo *pginfo)
 {
     QPixmap retpixmap;
@@ -4675,9 +4707,14 @@
     previewPixmap = gContext->LoadScalePixmap(filename, true /*fromcache*/);
     if (previewPixmap)
     {
+        VERBOSE(VB_IMPORTANT, "previewPixmap 1");
         previewStartts = pginfo->recstartts;
         previewChanid = pginfo->chanid;
         previewFilets = previewLastModified;
+        QSize previewSize = calc_preview_size(
+            blackholeBounds.size(), previewPixmap->size());
+        if (previewSize != previewPixmap->size())
+            previewPixmap->resize(previewSize);
         retpixmap = *previewPixmap;
         return retpixmap;
     }
@@ -4714,45 +4751,25 @@
     {
         previewPixmap = new QPixmap();
 
-        if (blackholeBounds.width() != image->width())
+        QSize previewSize = calc_preview_size(
+            blackholeBounds.size(), image->size());
+
+        if (previewSize == previewPixmap->size())
         {
-            float blackholeaspect = ((float)blackholeBounds.width())
-                                    / ((float)blackholeBounds.height());
-            float videoaspect = ((float)image->width())
-                                    / ((float)image->height());
-
-            float scaleratio = 1;
-            int previewwidth = blackholeBounds.width();
-            int previewheight = blackholeBounds.height();
-
-            // Calculate new height or width according to relative aspect ratio
-            if ((int)((blackholeaspect + 0.05) * 10) > (int)((videoaspect + 0.05) * 10))
-            {
-                scaleratio = (videoaspect / blackholeaspect);
-                previewwidth = (int)(previewwidth * scaleratio);
-            }
-            else if ((int)((blackholeaspect + 0.05) * 10) < (int)((videoaspect + 0.05) * 10))
-            {
-                scaleratio = (blackholeaspect / videoaspect);
-                previewheight = (int)(previewheight * scaleratio);
-            }
-
-            // Ensure preview width/height are multiples of 8 to match
-            // the preview video
-            //previewwidth = ((previewwidth + 7) / 8) * 8;
-            //previewheight = ((previewheight + 7) / 8) * 8;
-
-            QImage tmp2 = image->smoothScale(previewwidth, previewheight);
-            previewPixmap->convertFromImage(tmp2);
+            VERBOSE(VB_IMPORTANT, "previewPixmap 3");
+            previewPixmap->convertFromImage(*image);
         }
         else
         {
-            previewPixmap->convertFromImage(*image);
+            QImage tmp2 = image->smoothScale(previewSize);
+            VERBOSE(VB_IMPORTANT, "previewPixmap 2");
+            previewPixmap->convertFromImage(tmp2);
         }
     }
 
     if (!previewPixmap)
     {
+        VERBOSE(VB_IMPORTANT, "previewPixmap 4");
         previewPixmap = new QPixmap((int)(blackholeBounds.width()),
                                     (int)(blackholeBounds.height()));
         previewPixmap->fill(black);
