MT#61263 update legacy MOS code

Update to use fixed-point math and to use the same helper function as
the G.107 formula. No-op.

Change-Id: I18ce12f98cda79f2c086425811c599370761afe7
pull/1872/head^2
Richard Fuchs 7 months ago
parent 362bf64d55
commit 7ceacf9713

@ -78,7 +78,6 @@ static void ssrc_entry_put(void *ep) {
obj_put(&e->h);
}
#ifdef WITH_TRANSCODING
// returned as mos * 10 (i.e. 10 - 50 for 1.0 to 5.0)
static int64_t mos_from_rx(int64_t Rx) {
// Rx in e5
@ -106,6 +105,7 @@ static int64_t mos_from_rx(int64_t Rx) {
return intmos;
}
#ifdef WITH_TRANSCODING
static void mos_calc_nb(struct ssrc_stats_block *ssb) {
uint64_t rtt = ssb->rtt;
if (rtpe_config.mos == MOS_CQ && !rtt)
@ -142,23 +142,14 @@ static void mos_calc_legacy(struct ssrc_stats_block *ssb) {
// as per https://www.pingman.com/kb/article/how-is-mos-calculated-in-pingplotter-pro-50.html
int eff_rtt = ssb->rtt / 1000 + ssb->jitter * 2 + 10;
double r; // XXX can this be done with int math?
int64_t r; // e6
if (eff_rtt < 160)
r = 93.2 - eff_rtt / 40.0;
r = 93200000 - eff_rtt * 100000 / 4;
else
r = 93.2 - (eff_rtt - 120) / 10.0;
r = r - (ssb->packetloss * 2.5);
r = 93200000 - (eff_rtt * 100000 - 12000000);
r = r - (ssb->packetloss * 2500000);
int64_t intmos;
if (r < 0) {
intmos = 10;
} else {
double mos = 1.0 + (0.035) * r + (.000007) * r * (r-60) * (100-r);
intmos = mos * 10.0;
}
if (intmos < 10) // must be an invalid input
intmos = 0;
ssb->mos = intmos;
ssb->mos = mos_from_rx(r / 10); // e5
}
static void *find_ssrc(uint32_t ssrc, struct ssrc_hash *ht) {

Loading…
Cancel
Save