From 43544435fa0083f2187f4388e442d87b3b954073 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Tue, 3 Apr 2018 08:00:12 +0200 Subject: [PATCH] Fixed sluggish setting of editing marks and a jumping progress display with very short recordings --- CONTRIBUTORS | 2 ++ HISTORY | 4 ++- menu.c | 70 ++++++++++++++++++++++------------------------------ menu.h | 3 +-- 4 files changed, 36 insertions(+), 43 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index b1ff906a..0aa8f74a 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -716,6 +716,8 @@ Oliver Endriss channels for fixing a possible stack overflow in cListBase::Sort() for reporting a crash when deleting a recording + for reporting a problem with sluggish setting of editing marks and a jumping progress + display with very short recordings Reinhard Walter Buchner for adding some satellites to 'sources.conf' diff --git a/HISTORY b/HISTORY index fbf0a4bd..8dc5e5d1 100644 --- a/HISTORY +++ b/HISTORY @@ -9317,7 +9317,7 @@ Video Disk Recorder Revision History - Modified cMenuTimers::Delete() to avoid a lengthy lock on the Timers list while prompting the user. -2018-04-02: Version 2.4.0 +2018-04-03: Version 2.4.0 - Updated the Ukrainian OSD texts (thanks to Yarema Aka Knedlyk). - Fixed processing SVDRP client responses in case the caller doesn't want the actual @@ -9335,3 +9335,5 @@ Video Disk Recorder Revision History broadcasters who transmit faulty EIT data. - Updated the Macedonian OSD texts (thanks to Dimitar Petrovski). - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). +- Fixed sluggish setting of editing marks and a jumping progress display with very + short recordings (reported by Oliver Endriss). diff --git a/menu.c b/menu.c index 22d27014..aba69566 100644 --- a/menu.c +++ b/menu.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 4.70 2018/03/24 11:43:40 kls Exp $ + * $Id: menu.c 4.71 2018/04/02 13:41:39 kls Exp $ */ #include "menu.h" @@ -5564,7 +5564,6 @@ cReplayControl::cReplayControl(bool PauseLive) lastPlay = lastForward = false; lastSpeed = -2; // an invalid value timeoutShow = 0; - lastProgressUpdate = 0; timeSearchActive = false; cRecording Recording(fileName); cStatus::MsgReplaying(this, Recording.Name(), Recording.FileName(), true); @@ -5728,43 +5727,36 @@ void cReplayControl::ShowMode(void) bool cReplayControl::ShowProgress(bool Initial) { int Current, Total; - if (Initial || lastSpeed != -1 || time(NULL) - lastProgressUpdate >= 1) { - if (GetFrameNumber(Current, Total) && Total > 0) { - if (!visible) { - displayReplay = Skins.Current()->DisplayReplay(modeOnly); - displayReplay->SetMarks(&marks); - SetNeedsFastResponse(true); - visible = true; - } - if (Initial) { - if (*fileName) { - LOCK_RECORDINGS_READ; - if (const cRecording *Recording = Recordings->GetByName(fileName)) - displayReplay->SetRecording(Recording); - } - lastCurrent = lastTotal = -1; - } - if (Current != lastCurrent || Total != lastTotal) { - time(&lastProgressUpdate); - if (Setup.ShowRemainingTime || Total != lastTotal) { - int Index = Total; - if (Setup.ShowRemainingTime) - Index = Current - Index; - displayReplay->SetTotal(IndexToHMSF(Index, false, FramesPerSecond())); - if (!Initial) - displayReplay->Flush(); - } - displayReplay->SetProgress(Current, Total); - if (!Initial) - displayReplay->Flush(); - displayReplay->SetCurrent(IndexToHMSF(Current, displayFrames, FramesPerSecond())); - displayReplay->Flush(); - lastCurrent = Current; - } - lastTotal = Total; - ShowMode(); - return true; + if (GetFrameNumber(Current, Total) && Total > 0) { + if (!visible) { + displayReplay = Skins.Current()->DisplayReplay(modeOnly); + displayReplay->SetMarks(&marks); + SetNeedsFastResponse(true); + visible = true; } + if (Initial) { + if (*fileName) { + LOCK_RECORDINGS_READ; + if (const cRecording *Recording = Recordings->GetByName(fileName)) + displayReplay->SetRecording(Recording); + } + lastCurrent = lastTotal = -1; + } + if (Current != lastCurrent || Total != lastTotal) { + if (Setup.ShowRemainingTime || Total != lastTotal) { + int Index = Total; + if (Setup.ShowRemainingTime) + Index = Current - Index; + displayReplay->SetTotal(IndexToHMSF(Index, false, FramesPerSecond())); + } + displayReplay->SetProgress(Current, Total); + displayReplay->SetCurrent(IndexToHMSF(Current, displayFrames, FramesPerSecond())); + displayReplay->Flush(); + lastCurrent = Current; + } + lastTotal = Total; + ShowMode(); + return true; } return false; } @@ -6007,8 +5999,6 @@ eOSState cReplayControl::ProcessKey(eKeys Key) return osEnd; if (Key == kNone && !marksModified) marks.Update(); - if (Key != kNone) - lastProgressUpdate = 0; if (visible) { if (timeoutShow && time(NULL) > timeoutShow) { Hide(); diff --git a/menu.h b/menu.h index 08c51f7a..b700e27d 100644 --- a/menu.h +++ b/menu.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.h 4.6 2018/02/01 15:35:48 kls Exp $ + * $Id: menu.h 4.7 2018/04/02 13:41:49 kls Exp $ */ #ifndef __MENU_H @@ -300,7 +300,6 @@ private: bool lastPlay, lastForward; int lastSpeed; time_t timeoutShow; - time_t lastProgressUpdate; bool timeSearchActive, timeSearchHide; int timeSearchTime, timeSearchPos; void TimeSearchDisplay(void);