File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -2655,9 +2655,11 @@ namespace DTSC{
26552655 for (int i = 0 ; i < 8 ; ++i){
26562656 trueTime[i] = 0 ;
26572657 packTime[i] = 0 ;
2658+ peaks[i] = 0 ;
26582659 }
2659- maxJitter = 200 ;
2660+ maxJitter = 120 ;
26602661 lastTime = 0 ;
2662+ curJitter = 0 ;
26612663 x = 0 ;
26622664 }
26632665
@@ -2676,18 +2678,27 @@ namespace DTSC{
26762678 lastTime = t;
26772679 curJitter = 0 ;
26782680 }
2679- if (t > lastTime + 2500 ){
2680- if ((x % 4 ) == 0 ){
2681- if (maxJitter > 50 && curJitter < maxJitter - 50 ){
2682- MEDIUM_MSG (" Jitter lowered from %" PRIu64 " to %" PRIu64 " ms" , maxJitter, curJitter);
2683- maxJitter = curJitter;
2684- }
2685- curJitter = maxJitter*0.90 ;
2686- }
2681+ if (t >= lastTime + 2500 ) {
26872682 ++x;
26882683 trueTime[x % 8 ] = curMs;
26892684 packTime[x % 8 ] = t;
2685+ peaks[x % 8 ] = curJitter;
26902686 lastTime = t;
2687+ curJitter = 0 ;
2688+
2689+ uint64_t totJitter = 0 ;
2690+ uint64_t maxPeak = 0 ;
2691+ for (int i = 0 ; i < 8 ; ++i) {
2692+ totJitter += peaks[i];
2693+ if (peaks[i] > maxPeak) { maxPeak = peaks[i]; }
2694+ }
2695+ uint64_t weighted = (totJitter / 8 + maxPeak * 2 ) / 3 + 1 ;
2696+ // Limit lowering to max 250ms per step (10% of measurement window size)
2697+ if (maxJitter > weighted + 500 ) { weighted = maxJitter - 500 ; }
2698+ maxJitter = (maxJitter + weighted) / 2 ;
2699+ INFO_MSG (" Average peak %" PRIu64 " ms, highest peak %" PRIu64 " ms, weighted %" PRIu64 " ms. New jitter %" PRIu64
2700+ " ms" ,
2701+ totJitter / 8 , maxPeak, weighted, maxJitter);
26912702 }
26922703 uint64_t realTime = (curMs - trueTime[(x + 1 ) % 8 ]);
26932704 uint64_t arriTime = (t - packTime[(x + 1 ) % 8 ]);
Original file line number Diff line number Diff line change @@ -303,12 +303,13 @@ namespace DTSC{
303303
304304 class jitterTimer {
305305 public:
306- uint64_t trueTime[8 ]; // Array of bootMS-based measurement points
307- uint64_t packTime[8 ]; // Array of corresponding packet times
308- uint64_t curJitter; // Maximum jitter measurement in past 10 seconds
309- unsigned int x; // Current indice within above two arrays
310- uint64_t maxJitter; // Highest jitter ever observed by this jitterTimer
311- uint64_t lastTime; // Last packet used for a measurement point
306+ uint64_t trueTime[8 ]; // /< Array of bootMS-based measurement points
307+ uint64_t packTime[8 ]; // /< Array of corresponding packet times
308+ uint64_t curJitter; // /< Maximum jitter measurement in the current time window so far
309+ unsigned int x; // /< Current indice within above two arrays
310+ uint64_t peaks[8 ]; // /< Highest jitter observed in each time window
311+ uint64_t maxJitter; // /< Highest jitter ever observed by this jitterTimer
312+ uint64_t lastTime; // /< Last packet used for a measurement point
312313 jitterTimer ();
313314 uint64_t addPack (uint64_t t);
314315 };
You can’t perform that action at this time.
0 commit comments