]> source.dussan.org Git - tigervnc.git/commitdiff
Added the possibility to interrupt delay between the buffer updates.
authorgeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>
Thu, 3 Mar 2005 16:36:10 +0000 (16:36 +0000)
committergeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>
Thu, 3 Mar 2005 16:36:10 +0000 (16:36 +0000)
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

rfbplayer/FbsInputStream.cxx
rfbplayer/FbsInputStream.h
rfbplayer/RfbProto.h
rfbplayer/rfbSessionReader.h
rfbplayer/rfbplayer.cxx

index 4b5da6fe64b01bfc814f7190a57df500087a9440..a173beb3b79b62e7d6fdf13158f1bb687b04fce9 100644 (file)
@@ -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.
 //
index a072b7f3af89f64f76d08c28cb2063b3481fdf00..964927390f079e1145538549c926e831d9727439 100644 (file)
@@ -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;
 
index ca88738cb9f04958cc93dddc8ca8c1b34b861981..613d742fe733f1a0dcf49e0e4936434f0d5111e1 100644 (file)
@@ -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();
index acf91880b3563bad11803c22cad325510f2cafcf..115b1d35d9509ac75f911c41c1d81435e93cd397 100644 (file)
@@ -29,6 +29,7 @@ public:
   rfbSessionReader(RfbProto *_rfbSession) {
     rfbSession = _rfbSession;
     fStop = false;
+    rfbSession->interruptFrameDelay();
   };
   
   ~rfbSessionReader() {
index a8c4e380716b57642b9977236fbcaa82e24c7191..b2943bdcfd1162ce3c28f2cf1b2535c6c8b4f460 100644 (file)
@@ -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);