Changeset 3106

Show
Ignore:
Timestamp:
02/02/00 15:43:14 (14 years ago)
Author:
ucacoxh
Message:

- Added common/ntp.h common/ntp.c which do basic ntp timestamp get, conversion,

and differencing.

- Changed rtp library to use ntp.h ntp.c.
- Add rtt calculation to rat on reception of sr with lsr != 0.
- Add fields in pdb.h for last_rtt and avg_rtt.

Still have to add field to ui and probably decide an mbus message
name, for moment it's rtp.source.rtt.

Location:
rat/trunk
Files:
7 modified

Legend:

Unmodified
Added
Removed
  • rat/trunk/Makefile.in

    r3105 r3106  
    6060               mbus_engine.o audio.o cushion.o mix.o \ 
    6161               parameters.o timers.o transmit.o playout_calc.o \ 
    62                transcoder.o ui.o rtp_callback.o settings.o \ 
     62               transcoder.o ui.o rtp_callback.o rtt.o settings.o \ 
    6363               pdb.o pktbuf.o $(EXTRA_OBJ) 
    6464 
  • rat/trunk/pdb.c

    r3078 r3106  
    151151        item->playout           = zero_ts; 
    152152        item->last_arr          = zero_ts; 
    153  
     153        item->last_rtt          = 0.0; 
     154        item->avg_rtt           = 0.0; 
    154155        /* Packet stats initialization                                       */ 
    155156        item->received        = 0; 
  • rat/trunk/pdb.h

    r3078 r3106  
    5656        uint32_t        spike_events;                /* Number of spike events                   */ 
    5757        uint32_t        spike_toged;                 /* Number of packets dropped in spike mode  */ 
     58        double          last_rtt; 
     59        double          avg_rtt; 
     60 
     61 
    5862        /* Display Info */ 
    5963        ts_t            last_ui_update;              /* Used for periodic update of packet counts, etc */ 
  • rat/trunk/rtp_callback.c

    r3078 r3106  
    2121#include "codec.h" 
    2222#include "rtp.h" 
    23 #include "rtp_callback.h" 
     23#include "ntp.h" 
    2424#include "session.h" 
    2525#include "cushion.h" 
     
    2929#include "util.h" 
    3030#include "ui.h" 
     31 
     32#include "rtp_callback.h" 
    3133 
    3234/* We need to be able to resolve the rtp session to a rat session in */ 
     
    120122/* Callback utility functions                                                */ 
    121123 
     124/* rtp_rtt_calc return rtt estimate in seconds */ 
     125static double  
     126rtp_rtt_calc(uint32_t arr, uint32_t dep, uint32_t delay) 
     127{ 
     128        uint32_t delta; 
     129 
     130        /* rtt = arr - dep - delay */ 
     131        delta = ntp32_sub(arr,   dep); 
     132        delta = ntp32_sub(delta, delay); 
     133        /* 
     134         * 16 high order bits are seconds  
     135         * 16 low order bits are 1/65536 of sec 
     136         */ 
     137        return  (double)((delta >> 16) & 0xffff) + 
     138                (double)(delta & 0xffff) / 65536.0; 
     139} 
     140 
    122141static void 
    123142process_rtp_data(session_t *sp, uint32_t ssrc, rtp_packet *p) 
     
    167186process_rr(session_t *sp, uint32_t ssrc, rtcp_rr *r) 
    168187{ 
     188        pdb_entry_t  *e; 
    169189        uint32_t fract_lost; 
    170         /* Just update loss statistic in UI for this report if there */ 
    171         /* is somewhere to send them.                                */ 
     190 
     191        /* Calculate rtt estimate */ 
     192 
     193        if (pdb_item_get(sp->pdb, ssrc, &e) && 
     194            r->ssrc == rtp_my_ssrc(sp->rtp_session[0]) && 
     195            r->lsr != 0) { 
     196                uint32_t ntp_sec, ntp_frac, ntp32; 
     197 
     198                ntp64_time(&ntp_sec, &ntp_frac); 
     199                ntp32 = ntp64_to_ntp32(ntp_sec, ntp_frac); 
     200                 
     201                e->last_rtt = rtp_rtt_calc(ntp32, r->lsr, r->dlsr); 
     202                if (e->avg_rtt == 0.0) { 
     203                        e->avg_rtt = e->last_rtt; 
     204                } else { 
     205                        e->avg_rtt += (e->last_rtt - e->avg_rtt) / 8.0; 
     206                } 
     207 
     208                if (sp->mbus_engine != NULL) { 
     209                        ui_update_rtt(sp,  ssrc, e->avg_rtt); 
     210                } 
     211        } 
     212 
     213        /* Update loss stats */ 
    172214        if (sp->mbus_engine != NULL) { 
    173215                fract_lost = (r->fract_lost * 100) >> 8; 
     
    175217        } 
    176218} 
    177  
    178219 
    179220static void 
  • rat/trunk/ui.c

    r3091 r3106  
    791791 
    792792void 
     793ui_update_rtt(session_t *sp, uint32_t ssrc, double rtt_sec) 
     794{ 
     795        uint32_t rtt_ms; 
     796        rtt_ms = (uint32_t)(1000 * rtt_sec); 
     797        mbus_qmsgf(sp->mbus_engine, sp->mbus_ui_addr, FALSE, "rtp.source.rtt", "\"%08lx\" %6ld", ssrc, rtt_ms); 
     798} 
     799 
     800void 
    793801ui_update_duration(session_t *sp, uint32_t ssrc, int duration) 
    794802{ 
  • rat/trunk/ui.h

    r3078 r3106  
    5353void ui_update_reception     (struct s_session *s, uint32_t ssrc, uint32_t recv, uint32_t lost,  
    5454                              uint32_t misordered, uint32_t duplicates, uint32_t jitter, int jit_tog); 
     55void ui_update_rtt           (struct s_session *s, uint32_t ssrc, double rtt_secs); 
    5556void ui_update_duration      (struct s_session *s, uint32_t ssrc, int duration); 
    5657void ui_update_sync          (struct s_session *s, int sync); 
  • rat/trunk/ui_audiotool.tcl

    r3090 r3106  
    306306                rtp.source.mute                 {eval mbus_recv_rtp.source.mute $args} 
    307307                rtp.source.gain                 {eval mbus_recv_rtp.source.gain $args} 
     308                rtp.source.rtt                  {puts "rtt $args"} 
    308309                security.encryption.key         {eval mbus_recv_security.encryption.key $args} 
    309310                default                         {puts "Unknown mbus command $cmnd"}