Fixed sluggish setting of editing marks and a jumping progress display with very short recordings

This commit is contained in:
Klaus Schmidinger 2018-04-03 08:00:12 +02:00
parent ac30924cdf
commit 43544435fa
4 changed files with 36 additions and 43 deletions

View File

@ -716,6 +716,8 @@ Oliver Endriss <o.endriss@gmx.de>
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 <rw.buchner@freenet.de>
for adding some satellites to 'sources.conf'

View File

@ -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).

70
menu.c
View File

@ -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();

3
menu.h
View File

@ -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);