]> git.vomp.tv Git - vompclient-marten.git/commitdiff
Fix rounding error in radio playback navigation
authorMark Calderbank <mark@vomp.tv>
Wed, 21 Mar 2007 23:08:38 +0000 (23:08 +0000)
committerMark Calderbank <mark@vomp.tv>
Wed, 21 Mar 2007 23:08:38 +0000 (23:08 +0000)
playerradio.cc
playerradio.h

index 448e4dd3ce773fff77c5967ec0691bf8fa74b8be..4cb36658fc9c6ae4331489f9f08a1785e17cbe5d 100644 (file)
@@ -246,7 +246,7 @@ void PlayerRadio::jumpToPercent(double percent)
   unLock();
 }
 
-void PlayerRadio::skipForward(int seconds)
+void PlayerRadio::skipForward(UINT seconds)
 {
   lock();
   logger->log("PlayerRadio", Log::DEBUG, "SKIP FORWARD %i SECONDS", seconds);
@@ -256,13 +256,13 @@ void PlayerRadio::skipForward(int seconds)
   if (currentSeconds == 0) { unLock(); return; } // div by zero
   if (currentPacket == 0) { unLock(); return; } // Current pos from demuxer is not valid
 
-  ULONG newPacket = demuxer->getPacketNum() / currentSeconds * (currentSeconds + seconds);
+  ULONG newPacket = currentPacket + (currentPacket * seconds / currentSeconds);
   if (newPacket > lengthPackets) { switchState(S_PLAY); unLock(); }
   else switchState(S_JUMP, newPacket);
   unLock();
 }
 
-void PlayerRadio::skipBackward(int seconds) // FIXME why are these signed?!
+void PlayerRadio::skipBackward(UINT seconds)
 {
   lock();
   logger->log("PlayerRadio", Log::DEBUG, "SKIP BACKWARD %i SECONDS", seconds);
@@ -277,7 +277,7 @@ void PlayerRadio::skipBackward(int seconds) // FIXME why are these signed?!
   if ((UINT)seconds > currentSeconds)
     newPacket = 0;
   else
-    newPacket = demuxer->getPacketNum() / currentSeconds * (currentSeconds - seconds);
+    newPacket = currentPacket - (currentPacket * seconds / currentSeconds);
 
   switchState(S_JUMP, newPacket);
   unLock();
index cb4802aef01956d750ec0a1aa268a92477c5e501..863ea912d8b219211715ec9ea08ee1ccf4ba7d36 100644 (file)
@@ -60,8 +60,8 @@ class PlayerRadio : public Thread_TYPE, public Callback
     void stop();
     void pause();
     void jumpToPercent(double percent);
-    void skipForward(int seconds);
-    void skipBackward(int seconds);
+    void skipForward(UINT seconds);
+    void skipBackward(UINT seconds);
 
     UCHAR getState() { return state; }
     ULONG getCurrentSeconds();