From: george82 Date: Thu, 3 Mar 2005 16:36:10 +0000 (+0000) Subject: Added the possibility to interrupt delay between the buffer updates. X-Git-Tag: v0.0.90~384^2~601 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8edfb7ad00b0d2f24d60b91e1c90947523885bbf;p=tigervnc.git Added the possibility to interrupt delay between the buffer updates. It is useful when stop, close or quit is performing. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@234 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- diff --git a/rfbplayer/FbsInputStream.cxx b/rfbplayer/FbsInputStream.cxx index 4b5da6fe..a173beb3 100644 --- a/rfbplayer/FbsInputStream.cxx +++ b/rfbplayer/FbsInputStream.cxx @@ -36,6 +36,8 @@ FbsInputStream::FbsInputStream(char* FileName) { seekBackwards = false; paused = false; + interruptDelay = false; + fbsFile = fopen(FileName, "rb"); if (fbsFile == NULL) { char *msg = new char[12 + sizeof(FileName)]; @@ -142,14 +144,15 @@ int FbsInputStream::overrun(int itemSize, int nItems, bool wait=true) { } } - while (true) { + while (!interruptDelay) { long timeDiff = startTime + timeOffset - GetTickCount(); if (timeDiff <= 0) { break; } - Sleep(timeDiff); + Sleep(min(20, timeDiff)); waitWhilePaused(); } + interruptDelay = false; return nItems; } @@ -192,6 +195,10 @@ void FbsInputStream::waitWhilePaused() { } } +void FbsInputStream::interruptFrameDelay() { + interruptDelay = true; +} + // // Methods providing additional functionality. // diff --git a/rfbplayer/FbsInputStream.h b/rfbplayer/FbsInputStream.h index a072b7f3..96492739 100644 --- a/rfbplayer/FbsInputStream.h +++ b/rfbplayer/FbsInputStream.h @@ -37,6 +37,7 @@ class FbsInputStream : public InStream { bool isPaused(); void pausePlayback(); void resumePlayback(); + void interruptFrameDelay(); void close(); int pos(); @@ -49,6 +50,7 @@ class FbsInputStream : public InStream { double playbackSpeed; bool seekBackwards; bool paused; + bool interruptDelay; FILE *fbsFile; diff --git a/rfbplayer/RfbProto.h b/rfbplayer/RfbProto.h index ca88738c..613d742f 100644 --- a/rfbplayer/RfbProto.h +++ b/rfbplayer/RfbProto.h @@ -35,6 +35,7 @@ class RfbProto : public CMsgHandler { void newSession(char *filename); void initialiseProtocol(); + void interruptFrameDelay() { is->interruptFrameDelay(); }; const rdr::InStream* getInStream() { return is; } virtual void processMsg(); diff --git a/rfbplayer/rfbSessionReader.h b/rfbplayer/rfbSessionReader.h index acf91880..115b1d35 100644 --- a/rfbplayer/rfbSessionReader.h +++ b/rfbplayer/rfbSessionReader.h @@ -29,6 +29,7 @@ public: rfbSessionReader(RfbProto *_rfbSession) { rfbSession = _rfbSession; fStop = false; + rfbSession->interruptFrameDelay(); }; ~rfbSessionReader() { diff --git a/rfbplayer/rfbplayer.cxx b/rfbplayer/rfbplayer.cxx index a8c4e380..b2943bdc 100644 --- a/rfbplayer/rfbplayer.cxx +++ b/rfbplayer/rfbplayer.cxx @@ -1070,8 +1070,11 @@ void RfbPlayer::setPaused(bool paused) { void RfbPlayer::stopPlayback() { stopped = true; - if (is) is->pausePlayback(); setPos(0); + if (is) { + is->pausePlayback(); + is->interruptFrameDelay(); + } tb.checkButton(ID_STOP, true); tb.checkButton(ID_PLAY, false); tb.checkButton(ID_PAUSE, false);