Index: Slim/Player/Player.pm =================================================================== --- Slim/Player/Player.pm (revision 28741) +++ Slim/Player/Player.pm (working copy) @@ -903,7 +903,8 @@ return $prefs->client(shift)->get('packetLatency') / 1000; } -use constant JIFFIES_OFFSET_TRACKING_LIST_SIZE => 10; +use constant JIFFIES_OFFSET_TRACKING_LIST_SIZE => 50; # Must be this big for large forward jumps +use constant JIFFIES_OFFSET_TRACKING_LIST_MIN => 10; # Must be this big to use at all use constant JIFFIES_EPOCH_MIN_ADJUST => 0.001; use constant JIFFIES_EPOCH_MAX_ADJUST => 0.005; @@ -941,11 +942,13 @@ if (@{$jiffiesOffsetList} > JIFFIES_OFFSET_TRACKING_LIST_SIZE); if ( $diff > 0.001 - && (@{$jiffiesOffsetList} == JIFFIES_OFFSET_TRACKING_LIST_SIZE) + && (@{$jiffiesOffsetList} >= JIFFIES_OFFSET_TRACKING_LIST_MIN) ) { my $min_diff = Math::VecStat::min($jiffiesOffsetList); if ( $min_diff > JIFFIES_EPOCH_MIN_ADJUST ) { - if ( $min_diff > JIFFIES_EPOCH_MAX_ADJUST ) { + + # We only make jumps larger than JIFFIES_EPOCH_MAX_ADJUST if we have a full sequence of offsets. + if ( $min_diff > JIFFIES_EPOCH_MAX_ADJUST && @{$jiffiesOffsetList} < JIFFIES_OFFSET_TRACKING_LIST_SIZE ) { $min_diff = JIFFIES_EPOCH_MAX_ADJUST; } if ( main::DEBUGLOG && $synclog->is_debug ) {