Index: programs/mythfrontend/playbackbox.cpp =================================================================== --- programs/mythfrontend/playbackbox.cpp (revision 8969) +++ programs/mythfrontend/playbackbox.cpp (working copy) @@ -160,8 +160,9 @@ previewVideoPlaying(false), previewVideoThreadRunning(false), previewVideoKillState(kDone), // Preview Image Variables - previewPixmapEnabled(false), previewPixmap(NULL), - previewSuspend(false), previewChanid(""), + previewPixmapEnabled(false), previewPixmapDrawn(false), + previewPixmap(NULL), previewSuspend(false), + previewChanid(""), // Network Control Variables underNetworkControl(false) { @@ -660,9 +661,12 @@ { QMap infoMap; QPainter tmp(&pix); - + if (previewVideoPlaying) + { previewVideoState = kChanging; + previewPixmapDrawn = FALSE; + } LayerSet *container = NULL; if (type != Delete) @@ -809,21 +813,37 @@ void PlaybackBox::updateVideo(QPainter *p) { +// VERBOSE(VB_IMPORTANT, LOC + "previewPixmapDrawn is " + previewPixmapDrawn); + // If we're displaying group info don't update the video. if (inTitle && haveGroupInfoSet) return; - /* show a still frame if the user doesn't want a video preview or nvp + /* show a still frame if the user doesn't want a video preview or nvp * hasn't started playing the video preview yet */ if (curitem && !playingSomething && (!previewVideoEnabled || !previewVideoPlaying || - (previewVideoState == kStarting) || + (previewVideoState == kStarting) || (previewVideoState == kChanging))) { - QPixmap temp = getPixmap(curitem); - if (temp.width() > 0) - p->drawPixmap(drawVideoBounds.x(), drawVideoBounds.y(), temp); + + if (!previewPixmapDrawn) + { + if (previewVideoState == kStarting) + VERBOSE(VB_IMPORTANT, LOC + "State kStarting"); + else if (previewVideoState == kChanging) + VERBOSE(VB_IMPORTANT, LOC + "State kChanging"); + else if (!previewVideoPlaying) + VERBOSE(VB_IMPORTANT, LOC + "Preview Video playing"); + else + VERBOSE(VB_IMPORTANT, LOC + "Preview Video not enabled"); + VERBOSE(VB_IMPORTANT, LOC + "Drawing Preview Picture"); + previewPixmapDrawn = TRUE; + QPixmap temp = getPixmap(curitem); + if (temp.width() > 0) + p->drawPixmap(drawVideoBounds.x(), drawVideoBounds.y(), temp); + } } /* keep calling killPlayer() to handle nvp cleanup */ @@ -888,7 +908,11 @@ if (previewVideoNVP) { if (previewVideoNVP->IsPlaying()) + { previewVideoState = kPlaying; + VERBOSE(VB_IMPORTANT, LOC + "Playing Preview Video"); + previewPixmapDrawn = FALSE; + } } else { @@ -1668,12 +1692,14 @@ } return true; -} +} void PlaybackBox::startPlayer(ProgramInfo *rec) { previewVideoPlaying = true; + VERBOSE(VB_IMPORTANT, LOC + "Starting Preview Player"); + if (rec != NULL) { // Don't keep trying to open broken files when just sitting on entry @@ -1703,6 +1729,7 @@ } previewVideoBrokenRecId = 0; + VERBOSE(VB_IMPORTANT, LOC + "Creating new NVP preview player instance"); previewVideoNVP = new NuppelVideoPlayer("preview player"); previewVideoNVP->SetRingBuffer(previewVideoRingBuf); previewVideoNVP->SetAsPIP(); @@ -2813,6 +2840,7 @@ cancelPopup(); previewVideoState = kChanging; + previewPixmapDrawn = FALSE; previewVideoRefreshTimer->start(500); } @@ -2827,6 +2855,7 @@ stop(delitem); previewVideoState = kChanging; + previewPixmapDrawn = FALSE; previewVideoRefreshTimer->start(500); } @@ -2979,6 +3008,7 @@ cancelPopup(); previewVideoState = kChanging; + previewPixmapDrawn = FALSE; previewVideoRefreshTimer->start(500); } @@ -3025,6 +3055,7 @@ bool result = doRemove(delitem, false, false); previewVideoState = kChanging; + previewPixmapDrawn = FALSE; previewVideoRefreshTimer->start(500); @@ -3060,6 +3091,7 @@ doRemove(delitem, true, true); previewVideoState = kChanging; + previewPixmapDrawn = FALSE; previewVideoRefreshTimer->start(500); } @@ -3085,6 +3117,7 @@ bool result = doRemove(delitem, true, false); previewVideoState = kChanging; + previewPixmapDrawn = FALSE; previewVideoRefreshTimer->start(500); @@ -3162,6 +3195,7 @@ delitem = NULL; previewVideoState = kChanging; + previewPixmapDrawn = FALSE; update(drawListBounds); } @@ -3183,6 +3217,7 @@ delitem = NULL; previewVideoState = kChanging; + previewPixmapDrawn = FALSE; update(drawListBounds); } @@ -3195,6 +3230,7 @@ cancelPopup(); previewVideoState = kChanging; + previewPixmapDrawn = FALSE; } void PlaybackBox::toggleTitleView(void) @@ -3925,6 +3961,7 @@ delete iconhelp; previewVideoState = kChanging; + previewPixmapDrawn = FALSE; paintSkipUpdate = false; paintSkipCount = 2; @@ -3970,6 +4007,7 @@ paintSkipCount = 2; previewVideoState = kChanging; + previewPixmapDrawn = FALSE; setActiveWindow(); Index: programs/mythfrontend/playbackbox.h =================================================================== --- programs/mythfrontend/playbackbox.h (revision 8969) +++ programs/mythfrontend/playbackbox.h (working copy) @@ -389,6 +389,7 @@ // Preview Pixmap Variables /////////////////////////////////////////////// bool previewPixmapEnabled; + bool previewPixmapDrawn; QPixmap *previewPixmap; QDateTime previewLastModified; QDateTime previewFilets;