Ignore:
Timestamp:
May 17, 2008 2:54:18 PM (16 years ago)
Author:
nanang
Message:

More on ticket #535: updated files using and related to math.h

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia/rtcp_xr.c

    r1945 r1961  
    2727#include <pj/string.h> 
    2828 
    29 #if defined(PJMEDIA_HAS_RTCP_XR) && (PJMEDIA_HAS_RTCP_XR != 0) 
     29#if 1 //defined(PJMEDIA_HAS_RTCP_XR) && (PJMEDIA_HAS_RTCP_XR != 0) 
    3030 
    3131#define THIS_FILE "rtcp_xr.c" 
     
    5858#   define TRACE_(x)    ; 
    5959#endif 
    60  
    61 /* Integer square root for calculating standard deviation */ 
    62 static pj_uint32_t my_isqrt(pj_uint32_t i) 
    63 { 
    64     pj_uint32_t res = 1, prev; 
    65      
    66     /* Rough guess */ 
    67     prev = i >> 2; 
    68     while (prev) { 
    69         prev >>= 2; 
    70         res <<= 1; 
    71     } 
    72  
    73     /* Babilonian method */ 
    74     do { 
    75         prev = res; 
    76         res = (prev + i/prev) >> 1; 
    77     } while ((prev+res)>>1 != res); 
    78  
    79     return res; 
    80 } 
    8160 
    8261void pjmedia_rtcp_xr_init( pjmedia_rtcp_xr_session *session,  
     
    231210            r->jitter_min = pj_htonl(sess->stat.rx.stat_sum.jitter.min); 
    232211            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); 
     212            r->jitter_mean =  
     213                pj_htonl((unsigned)sess->stat.rx.stat_sum.jitter.mean); 
     214            r->jitter_dev =  
     215                pj_htonl(pj_math_stat_get_stddev(&sess->stat.rx.stat_sum.jitter)); 
    237216        } 
    238217        if (sess->stat.rx.stat_sum.t) { 
    239218            r->toh_min = sess->stat.rx.stat_sum.toh.min; 
    240219            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; 
     220            r->toh_mean = (unsigned) sess->stat.rx.stat_sum.toh.mean; 
     221            r->toh_dev = pj_math_stat_get_stddev(&sess->stat.rx.stat_sum.toh); 
    245222        } 
    246223 
     
    293270 
    294271        /* Calculate burst and densities. */ 
    295         if (ctotal) { 
     272        if (c11 && (c23 || c33)) { 
    296273            p32 = c32 / (c31 + c32 + c33); 
    297274            if((c22 + c23) < 1) { 
     
    518495             */ 
    519496            if (eedelay <= 30 * 1000 * 1000UL) { 
    520                 if (sess->stat.rtt.update_cnt == 0) 
    521                     sess->stat.rtt.min = rtt; 
    522  
    523497                /* "Normalize" rtt value that is exceptionally high. 
    524498                 * For such values, "normalize" the rtt to be three times 
    525499                 * the average value. 
    526500                 */ 
    527                 if (rtt>(sess->stat.rtt.avg*3) && sess->stat.rtt.update_cnt!=0) 
     501                if (rtt>((unsigned)sess->stat.rtt.mean*3) && sess->stat.rtt.n!=0) 
    528502                { 
    529503                    unsigned orig_rtt = rtt; 
    530                     rtt = sess->stat.rtt.avg*3; 
     504                    rtt = (unsigned)sess->stat.rtt.mean*3; 
    531505                    PJ_LOG(5,(sess->name,  
    532506                              "RTT value %d usec is normalized to %d usec", 
     
    535509         
    536510                TRACE_((sess->name, "RTCP RTT is set to %d usec", rtt)); 
    537  
    538                 if (rtt < sess->stat.rtt.min && rtt) 
    539                     sess->stat.rtt.min = rtt; 
    540                 if (rtt > sess->stat.rtt.max) 
    541                     sess->stat.rtt.max = rtt; 
    542  
    543                 sess->stat.rtt.avg =  
    544                     (sess->stat.rtt.avg * sess->stat.rtt.update_cnt + rtt) /  
    545                     (sess->stat.rtt.update_cnt + 1); 
    546  
    547                 sess->stat.rtt.last = rtt; 
    548                 sess->stat.rtt.update_cnt++; 
     511                pj_math_stat_update(&sess->stat.rtt, rtt); 
    549512            } 
    550513        } else { 
     
    586549            sess->stat.tx.stat_sum.jitter.min = pj_ntohl(rb_stats->jitter_min); 
    587550            sess->stat.tx.stat_sum.jitter.max = pj_ntohl(rb_stats->jitter_max); 
    588             sess->stat.tx.stat_sum.jitter.mean = pj_ntohl(rb_stats->jitter_mean); 
    589             sess->stat.tx.stat_sum.jitter.dev = pj_ntohl(rb_stats->jitter_dev); 
     551            sess->stat.tx.stat_sum.jitter.mean= pj_ntohl(rb_stats->jitter_mean); 
     552            pj_math_stat_set_stddev(&sess->stat.tx.stat_sum.jitter,  
     553                                    pj_ntohl(rb_stats->jitter_dev)); 
    590554        } 
    591555 
     
    593557            sess->stat.tx.stat_sum.toh.min = rb_stats->toh_min; 
    594558            sess->stat.tx.stat_sum.toh.max = rb_stats->toh_max; 
    595             sess->stat.tx.stat_sum.toh.mean = rb_stats->toh_mean; 
    596             sess->stat.tx.stat_sum.toh.dev = rb_stats->toh_dev; 
     559            sess->stat.tx.stat_sum.toh.mean= rb_stats->toh_mean; 
     560            pj_math_stat_set_stddev(&sess->stat.tx.stat_sum.toh,  
     561                                    pj_ntohl(rb_stats->toh_dev)); 
    597562        } 
    598563 
     
    728693 
    729694    if (jitter >= 0) { 
    730         pj_int32_t diff; 
    731  
    732695        sess->stat.rx.stat_sum.j = PJ_TRUE; 
    733         if (sess->stat.rx.stat_sum.jitter.min > (pj_uint32_t)jitter) 
    734             sess->stat.rx.stat_sum.jitter.min = jitter; 
    735         if (sess->stat.rx.stat_sum.jitter.max < (pj_uint32_t)jitter) 
    736             sess->stat.rx.stat_sum.jitter.max = jitter; 
    737         sess->stat.rx.stat_sum.jitter.mean =  
    738             (jitter + sess->stat.rx.stat_sum.jitter.mean *  
    739              sess->stat.rx.stat_sum.jitter.count) / 
    740             (sess->stat.rx.stat_sum.jitter.count + 1); 
    741  
    742         diff = sess->stat.rx.stat_sum.jitter.mean - jitter; 
    743         sess->stat.rx.stat_sum.jitter.dev = 
    744             (diff * diff + sess->stat.rx.stat_sum.jitter.dev *  
    745              sess->stat.rx.stat_sum.jitter.count) / 
    746             (sess->stat.rx.stat_sum.jitter.count + 1); 
    747  
    748         ++sess->stat.rx.stat_sum.jitter.count; 
     696        pj_math_stat_update(&sess->stat.rx.stat_sum.jitter, jitter); 
    749697    } 
    750698 
    751699    if (toh >= 0) { 
    752         pj_int32_t diff; 
    753  
    754700        sess->stat.rx.stat_sum.t = toh_ipv4? 1 : 2; 
    755  
    756         if (sess->stat.rx.stat_sum.toh.min > (pj_uint32_t)toh) 
    757             sess->stat.rx.stat_sum.toh.min = toh; 
    758         if (sess->stat.rx.stat_sum.toh.max < (pj_uint32_t)toh) 
    759             sess->stat.rx.stat_sum.toh.max = toh; 
    760         sess->stat.rx.stat_sum.toh.mean =  
    761             (toh + sess->stat.rx.stat_sum.toh.mean *  
    762              sess->stat.rx.stat_sum.toh.count) / 
    763             (sess->stat.rx.stat_sum.toh.count + 1); 
    764  
    765         diff = sess->stat.rx.stat_sum.toh.mean - toh; 
    766         sess->stat.rx.stat_sum.toh.dev = 
    767             (diff * diff + sess->stat.rx.stat_sum.toh.dev *  
    768              sess->stat.rx.stat_sum.toh.count) / 
    769             (sess->stat.rx.stat_sum.toh.count + 1); 
    770  
    771         ++sess->stat.rx.stat_sum.toh.count; 
     701        pj_math_stat_update(&sess->stat.rx.stat_sum.toh, toh); 
    772702    } 
    773703 
Note: See TracChangeset for help on using the changeset viewer.