Changeset 1943 for pjproject/trunk/pjmedia/src/pjmedia/rtcp_xr.c
- Timestamp:
- Apr 29, 2008 5:15:41 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia/rtcp_xr.c
r1942 r1943 87 87 pj_bzero(session, sizeof(pjmedia_rtcp_xr_session)); 88 88 89 session->name = parent_session->name; 89 90 session->rtcp_session = parent_session; 90 91 pj_memcpy(&session->pkt.common, &session->rtcp_session->rtcp_sr_pkt.common, … … 93 94 94 95 /* Init config */ 95 session->stat. tx.voip_mtc.gmin = (pj_uint8_t)(gmin? gmin : DEFAULT_GMIN);96 session->stat.rx.voip_mtc.gmin = (pj_uint8_t)(gmin? gmin : DEFAULT_GMIN); 96 97 session->ptime = session->rtcp_session->pkt_size * 1000 / 97 98 session->rtcp_session->clock_rate; … … 99 100 100 101 /* Init Statistics Summary fields which have non-zero default */ 101 session->stat. tx.stat_sum.jitter.min = (unsigned) -1;102 session->stat. tx.stat_sum.toh.min = (unsigned) -1;102 session->stat.rx.stat_sum.jitter.min = (unsigned) -1; 103 session->stat.rx.stat_sum.toh.min = (unsigned) -1; 103 104 104 105 /* Init VoIP Metrics fields which have non-zero default */ 106 session->stat.rx.voip_mtc.signal_lvl = 127; 107 session->stat.rx.voip_mtc.noise_lvl = 127; 108 session->stat.rx.voip_mtc.rerl = 127; 109 session->stat.rx.voip_mtc.r_factor = 127; 110 session->stat.rx.voip_mtc.ext_r_factor = 127; 111 session->stat.rx.voip_mtc.mos_lq = 127; 112 session->stat.rx.voip_mtc.mos_cq = 127; 113 105 114 session->stat.tx.voip_mtc.signal_lvl = 127; 106 115 session->stat.tx.voip_mtc.noise_lvl = 127; … … 190 199 /* Build this block if we have received packets since last build */ 191 200 if ((rpt_types == 0 || (rpt_types & PJMEDIA_RTCP_XR_STATS)) && 192 sess->stat. tx.stat_sum.count > 0)201 sess->stat.rx.stat_sum.count > 0) 193 202 { 194 203 pjmedia_rtcp_xr_rb_stats *r; … … 199 208 200 209 /* Init block header */ 201 specific |= sess->stat. tx.stat_sum.l ? (1 << 7) : 0;202 specific |= sess->stat. tx.stat_sum.d ? (1 << 6) : 0;203 specific |= sess->stat. tx.stat_sum.j ? (1 << 5) : 0;204 specific |= (sess->stat. tx.stat_sum.t & 3) << 3;210 specific |= sess->stat.rx.stat_sum.l ? (1 << 7) : 0; 211 specific |= sess->stat.rx.stat_sum.d ? (1 << 6) : 0; 212 specific |= sess->stat.rx.stat_sum.j ? (1 << 5) : 0; 213 specific |= (sess->stat.rx.stat_sum.t & 3) << 3; 205 214 r->header.bt = BT_STATS; 206 215 r->header.specific = specific; … … 210 219 r->ssrc = pj_htonl(sess->rtcp_session->peer_ssrc); 211 220 r->begin_seq = pj_htons((pj_uint16_t) 212 (sess->stat. tx.stat_sum.begin_seq & 0xFFFF));221 (sess->stat.rx.stat_sum.begin_seq & 0xFFFF)); 213 222 r->end_seq = pj_htons((pj_uint16_t) 214 (sess->stat. tx.stat_sum.end_seq & 0xFFFF));215 if (sess->stat. tx.stat_sum.l) {216 r->lost = pj_htonl(sess->stat. tx.stat_sum.lost);217 } 218 if (sess->stat. tx.stat_sum.d) {219 r->dup = pj_htonl(sess->stat. tx.stat_sum.dup);220 } 221 if (sess->stat. tx.stat_sum.j) {222 r->jitter_min = pj_htonl(sess->stat. tx.stat_sum.jitter.min);223 r->jitter_max = pj_htonl(sess->stat. tx.stat_sum.jitter.max);224 r->jitter_mean = pj_htonl(sess->stat. tx.stat_sum.jitter.mean);225 sess->stat. tx.stat_sum.jitter.dev =226 my_isqrt(sess->stat. tx.stat_sum.jitter.dev);227 r->jitter_dev = pj_htonl(sess->stat. tx.stat_sum.jitter.dev);228 } 229 if (sess->stat. tx.stat_sum.t) {230 r->toh_min = sess->stat. tx.stat_sum.toh.min;231 r->toh_max = sess->stat. tx.stat_sum.toh.max;232 r->toh_mean = sess->stat. tx.stat_sum.toh.mean;233 sess->stat. tx.stat_sum.toh.dev =234 my_isqrt(sess->stat. tx.stat_sum.toh.dev);235 r->toh_dev = sess->stat. tx.stat_sum.toh.dev;223 (sess->stat.rx.stat_sum.end_seq & 0xFFFF)); 224 if (sess->stat.rx.stat_sum.l) { 225 r->lost = pj_htonl(sess->stat.rx.stat_sum.lost); 226 } 227 if (sess->stat.rx.stat_sum.d) { 228 r->dup = pj_htonl(sess->stat.rx.stat_sum.dup); 229 } 230 if (sess->stat.rx.stat_sum.j) { 231 r->jitter_min = pj_htonl(sess->stat.rx.stat_sum.jitter.min); 232 r->jitter_max = pj_htonl(sess->stat.rx.stat_sum.jitter.max); 233 r->jitter_mean = pj_htonl(sess->stat.rx.stat_sum.jitter.mean); 234 sess->stat.rx.stat_sum.jitter.dev = 235 my_isqrt(sess->stat.rx.stat_sum.jitter.dev); 236 r->jitter_dev = pj_htonl(sess->stat.rx.stat_sum.jitter.dev); 237 } 238 if (sess->stat.rx.stat_sum.t) { 239 r->toh_min = sess->stat.rx.stat_sum.toh.min; 240 r->toh_max = sess->stat.rx.stat_sum.toh.max; 241 r->toh_mean = sess->stat.rx.stat_sum.toh.mean; 242 sess->stat.rx.stat_sum.toh.dev = 243 my_isqrt(sess->stat.rx.stat_sum.toh.dev); 244 r->toh_dev = sess->stat.rx.stat_sum.toh.dev; 236 245 } 237 246 238 247 /* Reset TX statistics summary each time built */ 239 pj_bzero(&sess->stat. tx.stat_sum, sizeof(sess->stat.tx.stat_sum));240 sess->stat. tx.stat_sum.jitter.min = (unsigned) -1;241 sess->stat. tx.stat_sum.toh.min = (unsigned) -1;248 pj_bzero(&sess->stat.rx.stat_sum, sizeof(sess->stat.rx.stat_sum)); 249 sess->stat.rx.stat_sum.jitter.min = (unsigned) -1; 250 sess->stat.rx.stat_sum.toh.min = (unsigned) -1; 242 251 243 252 /* Finally */ 244 253 size += sizeof(pjmedia_rtcp_xr_rb_stats); 254 pj_gettimeofday(&sess->stat.rx.stat_sum.update); 245 255 } 246 256 … … 289 299 p23 = 1 - c22/(c22 + c23); 290 300 } 291 sess->stat. tx.voip_mtc.burst_den = (pj_uint8_t)(256*p23/(p23 + p32));292 sess->stat. tx.voip_mtc.gap_den = (pj_uint8_t)(256*c14/(c11 + c14));301 sess->stat.rx.voip_mtc.burst_den = (pj_uint8_t)(256*p23/(p23 + p32)); 302 sess->stat.rx.voip_mtc.gap_den = (pj_uint8_t)(256*c14/(c11 + c14)); 293 303 294 304 /* Calculate burst and gap durations in ms */ 295 sess->stat. tx.voip_mtc.gap_dur = (pj_uint16_t)((c11+c14+c13)*m/c13);296 sess->stat. tx.voip_mtc.burst_dur = (pj_uint16_t)(ctotal*m/c13 -297 sess->stat. tx.voip_mtc.gap_dur);305 sess->stat.rx.voip_mtc.gap_dur = (pj_uint16_t)((c11+c14+c13)*m/c13); 306 sess->stat.rx.voip_mtc.burst_dur = (pj_uint16_t)(ctotal*m/c13 - 307 sess->stat.rx.voip_mtc.gap_dur); 298 308 } else { 299 309 /* No burst occurred yet until this time? 300 310 * Just report full gap. 301 311 */ 302 ctotal = sess->rtcp_session->stat.rx.pkt; 303 304 sess->stat.tx.voip_mtc.burst_den = 0; 305 sess->stat.tx.voip_mtc.gap_den = (pj_uint8_t)(256 * 312 ctotal = sess->rtcp_session->stat.rx.pkt + 313 sess->voip_mtc_stat.loss_count + 314 sess->voip_mtc_stat.discard_count; 315 316 sess->stat.rx.voip_mtc.burst_den = 0; 317 sess->stat.rx.voip_mtc.gap_den = (pj_uint8_t)(256 * 306 318 (sess->voip_mtc_stat.loss_count + 307 319 sess->voip_mtc_stat.discard_count) / … … 309 321 310 322 /* Calculate burst and gap durations in ms */ 311 sess->stat. tx.voip_mtc.gap_dur = (pj_uint16_t)((m*ctotal) < 0xFFFF?323 sess->stat.rx.voip_mtc.gap_dur = (pj_uint16_t)((m*ctotal) < 0xFFFF? 312 324 (m*ctotal) : 0xFFFF); 313 sess->stat. tx.voip_mtc.burst_dur = 0;325 sess->stat.rx.voip_mtc.burst_dur = 0; 314 326 } 315 327 316 328 /* Calculate loss and discard rates */ 317 sess->stat. tx.voip_mtc.loss_rate = (pj_uint8_t)329 sess->stat.rx.voip_mtc.loss_rate = (pj_uint8_t) 318 330 (256 * sess->voip_mtc_stat.loss_count / ctotal); 319 sess->stat. tx.voip_mtc.discard_rate = (pj_uint8_t)331 sess->stat.rx.voip_mtc.discard_rate = (pj_uint8_t) 320 332 (256 * sess->voip_mtc_stat.discard_count / ctotal); 321 333 … … 324 336 */ 325 337 if (sess->stat.rtt.last) 326 sess->stat. tx.voip_mtc.rnd_trip_delay = (pj_uint16_t)338 sess->stat.rx.voip_mtc.rnd_trip_delay = (pj_uint16_t) 327 339 (sess->stat.rtt.last / 1000); 328 340 else if (sess->rtcp_session->stat.rtt.last) 329 sess->stat. tx.voip_mtc.rnd_trip_delay = (pj_uint16_t)341 sess->stat.rx.voip_mtc.rnd_trip_delay = (pj_uint16_t) 330 342 (sess->rtcp_session->stat.rtt.last / 1000); 331 343 … … 337 349 * is taken to be totally around 50 ms. 338 350 */ 339 sess->stat. tx.voip_mtc.end_sys_delay = (pj_uint16_t)340 (sess->stat. tx.voip_mtc.rnd_trip_delay / 2 +341 sess->stat. tx.voip_mtc.jb_nom + 50);351 sess->stat.rx.voip_mtc.end_sys_delay = (pj_uint16_t) 352 (sess->stat.rx.voip_mtc.rnd_trip_delay / 2 + 353 sess->stat.rx.voip_mtc.jb_nom + 50); 342 354 343 355 /* Generate block contents */ 344 356 r->ssrc = pj_htonl(sess->rtcp_session->peer_ssrc); 345 r->loss_rate = sess->stat.tx.voip_mtc.loss_rate; 346 r->discard_rate = sess->stat.tx.voip_mtc.discard_rate; 347 r->burst_den = sess->stat.tx.voip_mtc.burst_den; 348 r->gap_den = sess->stat.tx.voip_mtc.gap_den; 349 r->burst_dur = pj_htons(sess->stat.tx.voip_mtc.burst_dur); 350 r->gap_dur = pj_htons(sess->stat.tx.voip_mtc.gap_dur); 351 r->rnd_trip_delay = pj_htons(sess->stat.tx.voip_mtc.rnd_trip_delay); 352 r->end_sys_delay = pj_htons(sess->stat.tx.voip_mtc.end_sys_delay); 353 r->signal_lvl = sess->stat.tx.voip_mtc.signal_lvl; 354 r->noise_lvl = sess->stat.tx.voip_mtc.noise_lvl; 355 r->rerl = sess->stat.tx.voip_mtc.rerl; 356 r->gmin = sess->stat.tx.voip_mtc.gmin; 357 r->r_factor = sess->stat.tx.voip_mtc.r_factor; 358 r->ext_r_factor = sess->stat.tx.voip_mtc.ext_r_factor; 359 r->mos_lq = sess->stat.tx.voip_mtc.mos_lq; 360 r->mos_cq = sess->stat.tx.voip_mtc.mos_cq; 361 r->rx_config = sess->stat.tx.voip_mtc.rx_config; 362 r->jb_nom = pj_htons(sess->stat.tx.voip_mtc.jb_nom); 363 r->jb_max = pj_htons(sess->stat.tx.voip_mtc.jb_max); 364 r->jb_abs_max = pj_htons(sess->stat.tx.voip_mtc.jb_abs_max); 357 r->loss_rate = sess->stat.rx.voip_mtc.loss_rate; 358 r->discard_rate = sess->stat.rx.voip_mtc.discard_rate; 359 r->burst_den = sess->stat.rx.voip_mtc.burst_den; 360 r->gap_den = sess->stat.rx.voip_mtc.gap_den; 361 r->burst_dur = pj_htons(sess->stat.rx.voip_mtc.burst_dur); 362 r->gap_dur = pj_htons(sess->stat.rx.voip_mtc.gap_dur); 363 r->rnd_trip_delay = pj_htons(sess->stat.rx.voip_mtc.rnd_trip_delay); 364 r->end_sys_delay = pj_htons(sess->stat.rx.voip_mtc.end_sys_delay); 365 /* signal & noise level encoded in two's complement form */ 366 r->signal_lvl = (sess->stat.rx.voip_mtc.signal_lvl >= 0)? 367 sess->stat.rx.voip_mtc.signal_lvl : 368 (sess->stat.rx.voip_mtc.signal_lvl + 256); 369 r->noise_lvl = (sess->stat.rx.voip_mtc.noise_lvl >= 0)? 370 sess->stat.rx.voip_mtc.noise_lvl : 371 (sess->stat.rx.voip_mtc.noise_lvl + 256); 372 r->rerl = sess->stat.rx.voip_mtc.rerl; 373 r->gmin = sess->stat.rx.voip_mtc.gmin; 374 r->r_factor = sess->stat.rx.voip_mtc.r_factor; 375 r->ext_r_factor = sess->stat.rx.voip_mtc.ext_r_factor; 376 r->mos_lq = sess->stat.rx.voip_mtc.mos_lq; 377 r->mos_cq = sess->stat.rx.voip_mtc.mos_cq; 378 r->rx_config = sess->stat.rx.voip_mtc.rx_config; 379 r->jb_nom = pj_htons(sess->stat.rx.voip_mtc.jb_nom); 380 r->jb_max = pj_htons(sess->stat.rx.voip_mtc.jb_max); 381 r->jb_abs_max = pj_htons(sess->stat.rx.voip_mtc.jb_abs_max); 365 382 366 383 /* Finally */ 367 384 size += sizeof(pjmedia_rtcp_xr_rb_voip_mtc); 385 pj_gettimeofday(&sess->stat.rx.voip_mtc.update); 368 386 } 369 387 … … 533 551 pj_uint8_t flags = rb_stats->header.specific; 534 552 535 pj_bzero(&sess->stat. rx.stat_sum, sizeof(sess->stat.rx.stat_sum));553 pj_bzero(&sess->stat.tx.stat_sum, sizeof(sess->stat.tx.stat_sum)); 536 554 537 555 /* Range of packets sequence reported in this blocks */ 538 sess->stat. rx.stat_sum.begin_seq = pj_ntohs(rb_stats->begin_seq);539 sess->stat. rx.stat_sum.end_seq = pj_ntohs(rb_stats->end_seq);556 sess->stat.tx.stat_sum.begin_seq = pj_ntohs(rb_stats->begin_seq); 557 sess->stat.tx.stat_sum.end_seq = pj_ntohs(rb_stats->end_seq); 540 558 541 559 /* Get flags of valid fields */ 542 sess->stat. rx.stat_sum.l = (flags & (1 << 7)) != 0;543 sess->stat. rx.stat_sum.d = (flags & (1 << 6)) != 0;544 sess->stat. rx.stat_sum.j = (flags & (1 << 5)) != 0;545 sess->stat. rx.stat_sum.t = (flags & (3 << 3)) != 0;560 sess->stat.tx.stat_sum.l = (flags & (1 << 7)) != 0; 561 sess->stat.tx.stat_sum.d = (flags & (1 << 6)) != 0; 562 sess->stat.tx.stat_sum.j = (flags & (1 << 5)) != 0; 563 sess->stat.tx.stat_sum.t = (flags & (3 << 3)) != 0; 546 564 547 565 /* Fetch the reports info */ 548 if (sess->stat.rx.stat_sum.l) { 549 sess->stat.rx.stat_sum.lost = pj_ntohl(rb_stats->lost); 550 } 551 552 if (sess->stat.rx.stat_sum.d) { 553 sess->stat.rx.stat_sum.dup = pj_ntohl(rb_stats->dup); 554 } 555 556 if (sess->stat.rx.stat_sum.j) { 557 sess->stat.rx.stat_sum.jitter.min = pj_ntohl(rb_stats->jitter_min); 558 sess->stat.rx.stat_sum.jitter.max = pj_ntohl(rb_stats->jitter_max); 559 sess->stat.rx.stat_sum.jitter.mean = pj_ntohl(rb_stats->jitter_mean); 560 sess->stat.rx.stat_sum.jitter.dev = pj_ntohl(rb_stats->jitter_dev); 561 } 562 563 if (sess->stat.rx.stat_sum.t) { 564 sess->stat.rx.stat_sum.toh.min = rb_stats->toh_min; 565 sess->stat.rx.stat_sum.toh.max = rb_stats->toh_max; 566 sess->stat.rx.stat_sum.toh.mean = rb_stats->toh_mean; 567 sess->stat.rx.stat_sum.toh.dev = rb_stats->toh_dev; 568 } 566 if (sess->stat.tx.stat_sum.l) { 567 sess->stat.tx.stat_sum.lost = pj_ntohl(rb_stats->lost); 568 } 569 570 if (sess->stat.tx.stat_sum.d) { 571 sess->stat.tx.stat_sum.dup = pj_ntohl(rb_stats->dup); 572 } 573 574 if (sess->stat.tx.stat_sum.j) { 575 sess->stat.tx.stat_sum.jitter.min = pj_ntohl(rb_stats->jitter_min); 576 sess->stat.tx.stat_sum.jitter.max = pj_ntohl(rb_stats->jitter_max); 577 sess->stat.tx.stat_sum.jitter.mean = pj_ntohl(rb_stats->jitter_mean); 578 sess->stat.tx.stat_sum.jitter.dev = pj_ntohl(rb_stats->jitter_dev); 579 } 580 581 if (sess->stat.tx.stat_sum.t) { 582 sess->stat.tx.stat_sum.toh.min = rb_stats->toh_min; 583 sess->stat.tx.stat_sum.toh.max = rb_stats->toh_max; 584 sess->stat.tx.stat_sum.toh.mean = rb_stats->toh_mean; 585 sess->stat.tx.stat_sum.toh.dev = rb_stats->toh_dev; 586 } 587 588 pj_gettimeofday(&sess->stat.tx.stat_sum.update); 569 589 } 570 590 571 591 /* Receiving VoIP Metrics */ 572 592 if (rb_voip_mtc) { 573 sess->stat. rx.voip_mtc.loss_rate = rb_voip_mtc->loss_rate;574 sess->stat. rx.voip_mtc.discard_rate = rb_voip_mtc->discard_rate;575 sess->stat. rx.voip_mtc.burst_den = rb_voip_mtc->burst_den;576 sess->stat. rx.voip_mtc.gap_den = rb_voip_mtc->gap_den;577 sess->stat. rx.voip_mtc.burst_dur = pj_ntohs(rb_voip_mtc->burst_dur);578 sess->stat. rx.voip_mtc.gap_dur = pj_ntohs(rb_voip_mtc->gap_dur);579 sess->stat. rx.voip_mtc.rnd_trip_delay =593 sess->stat.tx.voip_mtc.loss_rate = rb_voip_mtc->loss_rate; 594 sess->stat.tx.voip_mtc.discard_rate = rb_voip_mtc->discard_rate; 595 sess->stat.tx.voip_mtc.burst_den = rb_voip_mtc->burst_den; 596 sess->stat.tx.voip_mtc.gap_den = rb_voip_mtc->gap_den; 597 sess->stat.tx.voip_mtc.burst_dur = pj_ntohs(rb_voip_mtc->burst_dur); 598 sess->stat.tx.voip_mtc.gap_dur = pj_ntohs(rb_voip_mtc->gap_dur); 599 sess->stat.tx.voip_mtc.rnd_trip_delay = 580 600 pj_ntohs(rb_voip_mtc->rnd_trip_delay); 581 sess->stat. rx.voip_mtc.end_sys_delay =601 sess->stat.tx.voip_mtc.end_sys_delay = 582 602 pj_ntohs(rb_voip_mtc->end_sys_delay); 583 sess->stat.rx.voip_mtc.signal_lvl = rb_voip_mtc->signal_lvl; 584 sess->stat.rx.voip_mtc.noise_lvl = rb_voip_mtc->noise_lvl; 585 sess->stat.rx.voip_mtc.rerl = rb_voip_mtc->rerl; 586 sess->stat.rx.voip_mtc.gmin = rb_voip_mtc->gmin; 587 sess->stat.rx.voip_mtc.r_factor = rb_voip_mtc->r_factor; 588 sess->stat.rx.voip_mtc.ext_r_factor = rb_voip_mtc->ext_r_factor; 589 sess->stat.rx.voip_mtc.mos_lq = rb_voip_mtc->mos_lq; 590 sess->stat.rx.voip_mtc.mos_cq = rb_voip_mtc->mos_cq; 591 sess->stat.rx.voip_mtc.rx_config = rb_voip_mtc->rx_config; 592 sess->stat.rx.voip_mtc.jb_nom = pj_ntohs(rb_voip_mtc->jb_nom); 593 sess->stat.rx.voip_mtc.jb_max = pj_ntohs(rb_voip_mtc->jb_max); 594 sess->stat.rx.voip_mtc.jb_abs_max = pj_ntohs(rb_voip_mtc->jb_abs_max); 603 /* signal & noise level encoded in two's complement form */ 604 sess->stat.tx.voip_mtc.signal_lvl = (rb_voip_mtc->signal_lvl > 127)? 605 (rb_voip_mtc->signal_lvl - 256) : rb_voip_mtc->signal_lvl; 606 sess->stat.tx.voip_mtc.noise_lvl = (rb_voip_mtc->noise_lvl > 127)? 607 (rb_voip_mtc->noise_lvl - 256) : rb_voip_mtc->noise_lvl; 608 sess->stat.tx.voip_mtc.rerl = rb_voip_mtc->rerl; 609 sess->stat.tx.voip_mtc.gmin = rb_voip_mtc->gmin; 610 sess->stat.tx.voip_mtc.r_factor = rb_voip_mtc->r_factor; 611 sess->stat.tx.voip_mtc.ext_r_factor = rb_voip_mtc->ext_r_factor; 612 sess->stat.tx.voip_mtc.mos_lq = rb_voip_mtc->mos_lq; 613 sess->stat.tx.voip_mtc.mos_cq = rb_voip_mtc->mos_cq; 614 sess->stat.tx.voip_mtc.rx_config = rb_voip_mtc->rx_config; 615 sess->stat.tx.voip_mtc.jb_nom = pj_ntohs(rb_voip_mtc->jb_nom); 616 sess->stat.tx.voip_mtc.jb_max = pj_ntohs(rb_voip_mtc->jb_max); 617 sess->stat.tx.voip_mtc.jb_abs_max = pj_ntohs(rb_voip_mtc->jb_abs_max); 618 619 pj_gettimeofday(&sess->stat.tx.voip_mtc.update); 595 620 } 596 621 } … … 665 690 666 691 /* Update statistics summary */ 667 sess->stat. tx.stat_sum.count++;668 669 if (sess->stat. tx.stat_sum.begin_seq == 0 ||670 sess->stat. tx.stat_sum.begin_seq > ext_seq)692 sess->stat.rx.stat_sum.count++; 693 694 if (sess->stat.rx.stat_sum.begin_seq == 0 || 695 sess->stat.rx.stat_sum.begin_seq > ext_seq) 671 696 { 672 sess->stat. tx.stat_sum.begin_seq = ext_seq;673 } 674 675 if (sess->stat. tx.stat_sum.end_seq == 0 ||676 sess->stat. tx.stat_sum.end_seq < ext_seq)697 sess->stat.rx.stat_sum.begin_seq = ext_seq; 698 } 699 700 if (sess->stat.rx.stat_sum.end_seq == 0 || 701 sess->stat.rx.stat_sum.end_seq < ext_seq) 677 702 { 678 sess->stat. tx.stat_sum.end_seq = ext_seq;703 sess->stat.rx.stat_sum.end_seq = ext_seq; 679 704 } 680 705 681 706 if (lost >= 0) { 682 sess->stat. tx.stat_sum.l = PJ_TRUE;707 sess->stat.rx.stat_sum.l = PJ_TRUE; 683 708 if (lost > 0) 684 sess->stat. tx.stat_sum.lost++;709 sess->stat.rx.stat_sum.lost++; 685 710 } 686 711 687 712 if (dup >= 0) { 688 sess->stat. tx.stat_sum.d = PJ_TRUE;713 sess->stat.rx.stat_sum.d = PJ_TRUE; 689 714 if (dup > 0) 690 sess->stat. tx.stat_sum.dup++;715 sess->stat.rx.stat_sum.dup++; 691 716 } 692 717 … … 694 719 pj_int32_t diff; 695 720 696 sess->stat. tx.stat_sum.j = PJ_TRUE;697 if (sess->stat. tx.stat_sum.jitter.min > (pj_uint32_t)jitter)698 sess->stat. tx.stat_sum.jitter.min = jitter;699 if (sess->stat. tx.stat_sum.jitter.max < (pj_uint32_t)jitter)700 sess->stat. tx.stat_sum.jitter.max = jitter;701 sess->stat. tx.stat_sum.jitter.mean =702 (jitter + sess->stat. tx.stat_sum.jitter.mean *703 sess->stat. tx.stat_sum.jitter.count) /704 (sess->stat. tx.stat_sum.jitter.count + 1);705 706 diff = sess->stat. tx.stat_sum.jitter.mean - jitter;707 sess->stat. tx.stat_sum.jitter.dev =708 (diff * diff + sess->stat. tx.stat_sum.jitter.dev *709 sess->stat. tx.stat_sum.jitter.count) /710 (sess->stat. tx.stat_sum.jitter.count + 1);711 712 ++sess->stat. tx.stat_sum.jitter.count;721 sess->stat.rx.stat_sum.j = PJ_TRUE; 722 if (sess->stat.rx.stat_sum.jitter.min > (pj_uint32_t)jitter) 723 sess->stat.rx.stat_sum.jitter.min = jitter; 724 if (sess->stat.rx.stat_sum.jitter.max < (pj_uint32_t)jitter) 725 sess->stat.rx.stat_sum.jitter.max = jitter; 726 sess->stat.rx.stat_sum.jitter.mean = 727 (jitter + sess->stat.rx.stat_sum.jitter.mean * 728 sess->stat.rx.stat_sum.jitter.count) / 729 (sess->stat.rx.stat_sum.jitter.count + 1); 730 731 diff = sess->stat.rx.stat_sum.jitter.mean - jitter; 732 sess->stat.rx.stat_sum.jitter.dev = 733 (diff * diff + sess->stat.rx.stat_sum.jitter.dev * 734 sess->stat.rx.stat_sum.jitter.count) / 735 (sess->stat.rx.stat_sum.jitter.count + 1); 736 737 ++sess->stat.rx.stat_sum.jitter.count; 713 738 } 714 739 … … 716 741 pj_int32_t diff; 717 742 718 sess->stat. tx.stat_sum.t = toh_ipv4? 1 : 2;719 720 if (sess->stat. tx.stat_sum.toh.min > (pj_uint32_t)toh)721 sess->stat. tx.stat_sum.toh.min = toh;722 if (sess->stat. tx.stat_sum.toh.max < (pj_uint32_t)toh)723 sess->stat. tx.stat_sum.toh.max = toh;724 sess->stat. tx.stat_sum.toh.mean =725 (toh + sess->stat. tx.stat_sum.toh.mean *726 sess->stat. tx.stat_sum.toh.count) /727 (sess->stat. tx.stat_sum.toh.count + 1);728 729 diff = sess->stat. tx.stat_sum.toh.mean - toh;730 sess->stat. tx.stat_sum.toh.dev =731 (diff * diff + sess->stat. tx.stat_sum.toh.dev *732 sess->stat. tx.stat_sum.toh.count) /733 (sess->stat. tx.stat_sum.toh.count + 1);734 735 ++sess->stat. tx.stat_sum.toh.count;743 sess->stat.rx.stat_sum.t = toh_ipv4? 1 : 2; 744 745 if (sess->stat.rx.stat_sum.toh.min > (pj_uint32_t)toh) 746 sess->stat.rx.stat_sum.toh.min = toh; 747 if (sess->stat.rx.stat_sum.toh.max < (pj_uint32_t)toh) 748 sess->stat.rx.stat_sum.toh.max = toh; 749 sess->stat.rx.stat_sum.toh.mean = 750 (toh + sess->stat.rx.stat_sum.toh.mean * 751 sess->stat.rx.stat_sum.toh.count) / 752 (sess->stat.rx.stat_sum.toh.count + 1); 753 754 diff = sess->stat.rx.stat_sum.toh.mean - toh; 755 sess->stat.rx.stat_sum.toh.dev = 756 (diff * diff + sess->stat.rx.stat_sum.toh.dev * 757 sess->stat.rx.stat_sum.toh.count) / 758 (sess->stat.rx.stat_sum.toh.count + 1); 759 760 ++sess->stat.rx.stat_sum.toh.count; 736 761 } 737 762 … … 753 778 } 754 779 else { 755 if(sess->voip_mtc_stat.pkt >= sess->stat. tx.voip_mtc.gmin) {780 if(sess->voip_mtc_stat.pkt >= sess->stat.rx.voip_mtc.gmin) { 756 781 /* Gap condition */ 757 782 if(sess->voip_mtc_stat.lost == 1) { … … 801 826 switch(info) { 802 827 case PJMEDIA_RTCP_XR_INFO_SIGNAL_LVL: 803 sess->stat. tx.voip_mtc.signal_lvl = (pj_uint8_t) v;828 sess->stat.rx.voip_mtc.signal_lvl = (pj_int8_t) v; 804 829 break; 805 830 806 831 case PJMEDIA_RTCP_XR_INFO_NOISE_LVL: 807 sess->stat. tx.voip_mtc.noise_lvl = (pj_uint8_t) v;832 sess->stat.rx.voip_mtc.noise_lvl = (pj_int8_t) v; 808 833 break; 809 834 810 835 case PJMEDIA_RTCP_XR_INFO_RERL: 811 sess->stat. tx.voip_mtc.rerl = (pj_uint8_t) v;836 sess->stat.rx.voip_mtc.rerl = (pj_uint8_t) v; 812 837 break; 813 838 814 839 case PJMEDIA_RTCP_XR_INFO_R_FACTOR: 815 sess->stat. tx.voip_mtc.ext_r_factor = (pj_uint8_t) v;840 sess->stat.rx.voip_mtc.ext_r_factor = (pj_uint8_t) v; 816 841 break; 817 842 818 843 case PJMEDIA_RTCP_XR_INFO_MOS_LQ: 819 sess->stat. tx.voip_mtc.mos_lq = (pj_uint8_t) v;844 sess->stat.rx.voip_mtc.mos_lq = (pj_uint8_t) v; 820 845 break; 821 846 822 847 case PJMEDIA_RTCP_XR_INFO_MOS_CQ: 823 sess->stat. tx.voip_mtc.mos_cq = (pj_uint8_t) v;848 sess->stat.rx.voip_mtc.mos_cq = (pj_uint8_t) v; 824 849 break; 825 850 826 851 case PJMEDIA_RTCP_XR_INFO_CONF_PLC: 827 852 if (v >= 0 && v <= 3) { 828 sess->stat. tx.voip_mtc.rx_config &= 0x3F;829 sess->stat. tx.voip_mtc.rx_config |= (pj_uint8_t) (v << 6);853 sess->stat.rx.voip_mtc.rx_config &= 0x3F; 854 sess->stat.rx.voip_mtc.rx_config |= (pj_uint8_t) (v << 6); 830 855 } 831 856 break; … … 833 858 case PJMEDIA_RTCP_XR_INFO_CONF_JBA: 834 859 if (v >= 0 && v <= 3) { 835 sess->stat. tx.voip_mtc.rx_config &= 0xCF;836 sess->stat. tx.voip_mtc.rx_config |= (pj_uint8_t) (v << 4);860 sess->stat.rx.voip_mtc.rx_config &= 0xCF; 861 sess->stat.rx.voip_mtc.rx_config |= (pj_uint8_t) (v << 4); 837 862 } 838 863 break; … … 840 865 case PJMEDIA_RTCP_XR_INFO_CONF_JBR: 841 866 if (v >= 0 && v <= 15) { 842 sess->stat. tx.voip_mtc.rx_config &= 0xF0;843 sess->stat. tx.voip_mtc.rx_config |= (pj_uint8_t) v;867 sess->stat.rx.voip_mtc.rx_config &= 0xF0; 868 sess->stat.rx.voip_mtc.rx_config |= (pj_uint8_t) v; 844 869 } 845 870 break; 846 871 847 872 case PJMEDIA_RTCP_XR_INFO_JB_NOM: 848 sess->stat. tx.voip_mtc.jb_nom = (pj_uint16_t) v;873 sess->stat.rx.voip_mtc.jb_nom = (pj_uint16_t) v; 849 874 break; 850 875 851 876 case PJMEDIA_RTCP_XR_INFO_JB_MAX: 852 sess->stat. tx.voip_mtc.jb_max = (pj_uint16_t) v;877 sess->stat.rx.voip_mtc.jb_max = (pj_uint16_t) v; 853 878 break; 854 879 855 880 case PJMEDIA_RTCP_XR_INFO_JB_ABS_MAX: 856 sess->stat. tx.voip_mtc.jb_abs_max = (pj_uint16_t) v;881 sess->stat.rx.voip_mtc.jb_abs_max = (pj_uint16_t) v; 857 882 break; 858 883
Note: See TracChangeset
for help on using the changeset viewer.