void Player::jumpToPercentInt(int percent)
{
logger->log("Player", Log::DEBUG, "JUMP TO %i%%", percent);
- ULLONG newTimeCode = (ULLONG)(getEndTS() * ((float)percent / 100));
- restartAt(newTimeCode);
+ ULONG newFrame = (ULONG)(((float)percent / 100) * lengthFrames);
+ restartAtFrame(newFrame);
}
fbwd = false;
}
+void Player::restartAtFrame(ULONG newFrame)
+{
+ if (paused) togglePauseInt();
+ if (ffwd) toggleFastForwardInt();
+
+ ULLONG newPosition = VDR::getInstance()->positionFromFrameNumber(newFrame);
+ if (!VDR::getInstance()->isConnected()) { doConnectionLost(); return; }
+ logger->log("Player", Log::DEBUG, "wantedframe %i feedpos %llu goto %llu", newFrame, feedPosition, newPosition);
+
+ vfeed.stop();
+ afeed.stop();
+ threadStop();
+ video->stop();
+ video->reset();
+ audio->reset();
+ demuxer->flush();
+ if (!isRadio) demuxer->seek();
+ feedPosition = newPosition;
+ videoStartup = true;
+ afeed.start();
+ vfeed.start();
+ threadStart();
+ audio->play();
+ video->sync();
+ audio->sync();
+ audio->systemMuteOff();
+ audio->doMuting();
+ fbwd = false;
+}
+
void Player::setStartTS(UINT dataInBuffer)
{
#ifndef NEW_DEMUXER
void setEndTS();
void doConnectionLost();
void restartAt(ULLONG timeCode);
+ void restartAtFrame(ULONG newFrame);
MessageQueue* commandMessageQueue;
Log* logger;