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 4b5da6f..a173beb 100644
--- a/rfbplayer/FbsInputStream.cxx
+++ b/rfbplayer/FbsInputStream.cxx
@@ -36,6 +36,8 @@
seekBackwards = false;
paused = false;
+ interruptDelay = false;
+
fbsFile = fopen(FileName, "rb");
if (fbsFile == NULL) {
char *msg = new char[12 + sizeof(FileName)];
@@ -142,14 +144,15 @@
}
}
- 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::interruptFrameDelay() {
+ interruptDelay = true;
+}
+
//
// Methods providing additional functionality.
//
diff --git a/rfbplayer/FbsInputStream.h b/rfbplayer/FbsInputStream.h
index a072b7f..9649273 100644
--- a/rfbplayer/FbsInputStream.h
+++ b/rfbplayer/FbsInputStream.h
@@ -37,6 +37,7 @@
bool isPaused();
void pausePlayback();
void resumePlayback();
+ void interruptFrameDelay();
void close();
int pos();
@@ -49,6 +50,7 @@
double playbackSpeed;
bool seekBackwards;
bool paused;
+ bool interruptDelay;
FILE *fbsFile;
diff --git a/rfbplayer/RfbProto.h b/rfbplayer/RfbProto.h
index ca88738..613d742 100644
--- a/rfbplayer/RfbProto.h
+++ b/rfbplayer/RfbProto.h
@@ -35,6 +35,7 @@
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 acf9188..115b1d3 100644
--- a/rfbplayer/rfbSessionReader.h
+++ b/rfbplayer/rfbSessionReader.h
@@ -29,6 +29,7 @@
rfbSessionReader(RfbProto *_rfbSession) {
rfbSession = _rfbSession;
fStop = false;
+ rfbSession->interruptFrameDelay();
};
~rfbSessionReader() {
diff --git a/rfbplayer/rfbplayer.cxx b/rfbplayer/rfbplayer.cxx
index a8c4e38..b2943bd 100644
--- a/rfbplayer/rfbplayer.cxx
+++ b/rfbplayer/rfbplayer.cxx
@@ -1070,8 +1070,11 @@
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);