void Player::skipForward(int seconds)
{
- // skip forward 1 minute
logger->log("Player", Log::DEBUG, "SKIP FORWARD %i SECONDS", seconds);
if (paused) togglePause();
- ULLONG moveBy = seconds * 500000;
+ ULONG wantedFrameNumber = video->timecodeToFrameNumber(getPositionTS() + (seconds * 90000));
+ ULLONG newPosition = VDR::getInstance()->positionFromFrameNumber(wantedFrameNumber);
+ logger->log("Player", Log::DEBUG, "wantedframe %i feedpos %llu goto %llu", wantedFrameNumber, feedPosition, newPosition);
vfeed.stop();
afeed.stop();
audio->reset();
audio->doMuting(); // ???
demuxer.flush();
- feedPosition += moveBy;
+ feedPosition = newPosition;
vfeed.start();
afeed.start();
threadStart();
void Player::skipBackward(int seconds)
{
- // skip forward 1 minute
logger->log("Player", Log::DEBUG, "SKIP BACKWARD %i SECONDS", seconds);
if (paused) togglePause();
- ULLONG moveBy = seconds * 500000;
+ ULLONG newPosition = 0;
+
+ long long newTimeCode = getPositionTS() - (seconds * 90000);
+ if (newTimeCode > 0)
+ {
+ ULONG wantedFrameNumber = video->timecodeToFrameNumber((ULLONG)newTimeCode);
+ newPosition = VDR::getInstance()->positionFromFrameNumber(wantedFrameNumber);
+ logger->log("Player", Log::DEBUG, "wantedframe %i feedpos %llu goto %llu", wantedFrameNumber, feedPosition, newPosition);
+ }
vfeed.stop();
afeed.stop();
audio->reset();
audio->doMuting(); // ???
demuxer.flush();
- if (feedPosition > moveBy) feedPosition -= moveBy;
+ feedPosition = newPosition;
vfeed.start();
afeed.start();
threadStart();
void Player::test2()
{
logger->log("Player", Log::DEBUG, "PLAYER TEST 2");
-
- ULLONG currentTS = getPositionTS();
- ULONG currentFrameNumber = video->timecodeToFrameNumber(currentTS);
- logger->log("Player", Log::DEBUG, "Current frame number: %lu", currentFrameNumber);
-
- ULONG wantedFrameNumber = video->timecodeToFrameNumber(currentTS + (10 * 90000));
- logger->log("Player", Log::DEBUG, "Wanted frame number: %lu", wantedFrameNumber);
-
- ULLONG newPosition = VDR::getInstance()->positionFromFrameNumber(wantedFrameNumber);
- logger->log("Player", Log::DEBUG, "feedpos %llu goto %llu", feedPosition, newPosition);
}
#endif