Resume always from last iframe
authorMarten Richter <marten.richter@freenet.de>
Sat, 4 Apr 2015 13:34:31 +0000 (15:34 +0200)
committerMarten Richter <marten.richter@freenet.de>
Sat, 4 Apr 2015 13:34:31 +0000 (15:34 +0200)
player.cc

index e965a2ca5151cfa49e2efe7b2d7103a0678d260d..3811a765f36a9b63e45cdcd733e297d076e1d820 100644 (file)
--- a/player.cc
+++ b/player.cc
@@ -147,7 +147,20 @@ int Player::shutdown()
 
 void Player::setStartFrame(ULONG startFrame)
 {
-  currentFrameNumber = startFrame;
+       ULONG nextiframeNumber;
+       ULONG iframeLength;
+       ULONG iframeNumber;
+       ULLONG filePos;
+
+       // newFrame could be anywhere, go forwards to next I-Frame
+       if (!vdr->getNextIFrame(startFrame, 1, &filePos, &nextiframeNumber, &iframeLength)) return;
+
+       // Now step back a GOP. This ensures we go to the greatest I-Frame equal to or less than the requested frame
+       vdr->getNextIFrame(nextiframeNumber, 0, &filePos, &iframeNumber, &iframeLength);
+
+         logger->log("Player", Log::DEBUG, "setStartFrame %lu %lu %lu", startFrame, nextiframeNumber,iframeNumber);
+       currentFrameNumber = iframeNumber;
+
 }
 
 void Player::setLengthBytes(ULLONG length)