add code to calculate the diffusion multiplier based on the ending diffusion multiplier and the number of entries.

This commit is contained in:
Mike Brady
2020-06-10 20:04:03 +01:00
parent 0517a233c1
commit 92074c2b96
+22 -4
View File
@@ -547,6 +547,21 @@ void *rtp_timing_receiver(void *arg) {
conn->local_to_remote_time_gradient = 1.0; // initial value.
// calculate diffusion factor
// at the end of the array of time pings, the diffusion factor
// must be diffusion_expansion_factor
// this, at each step, the diffusion multiplication constant must
// be the nth root of diffusion_expansion_factor
// where n is the number of elements in the array
const double diffusion_expansion_factor = 10;
double log_of_multiplier = log10(diffusion_expansion_factor)/time_ping_history;
double multiplier = pow(10,log_of_multiplier);
uint64_t dispersion_factor = (uint64_t)(multiplier * 100);
debug(1,"dispersion factor is %" PRIu64 ".", dispersion_factor);
// uint64_t first_local_to_remote_time_difference_time;
// uint64_t l2rtd = 0;
int sequence_number = 0;
@@ -573,7 +588,7 @@ void *rtp_timing_receiver(void *arg) {
if (return_time < 300000000) { // must be less than 0.3 seconds
// debug(1,"Synchronisation ping return time is %" PRIu64 " nanoseconds.",return_time);
//debug(1,"Ping return time is %8.3f milliseconds.",0.000001*return_time);
// distant_receive_time =
// ((uint64_t)ntohl(*((uint32_t*)&packet[16])))<<32+ntohl(*((uint32_t*)&packet[20]));
@@ -621,8 +636,11 @@ void *rtp_timing_receiver(void *arg) {
// conn->time_pings[cc].dispersion =
// conn->time_pings[cc].dispersion * pow(2.14,
// 1.0/conn->time_ping_count);
conn->time_pings[cc].dispersion =
(conn->time_pings[cc].dispersion * 110) /
if (conn->time_pings[cc].dispersion > UINT64_MAX / dispersion_factor)
debug(1,"dispersion factor is too large at %" PRIu64 ".");
else
conn->time_pings[cc].dispersion =
(conn->time_pings[cc].dispersion * dispersion_factor) /
100; // make the dispersions 'age' by this rational factor
}
// these are used for doing a least squares calculation to get the drift
@@ -693,7 +711,7 @@ void *rtp_timing_receiver(void *arg) {
int sample_count = 0;
// approximate time in seconds to let the system settle down
const int settling_time = 30;
const int settling_time = 60;
// number of points to have for calculating a valid drift
const int sample_point_minimum = 8;
for (cc = 0; cc < conn->time_ping_count; cc++)