Changeset 385


Ignore:
Timestamp:
Apr 5, 2006 5:13:42 PM (19 years ago)
Author:
bennylp
Message:

Fixed RTT calculation bug in RTCP

Location:
pjproject/trunk/pjmedia
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/include/pjmedia/rtcp.h

    r384 r385  
    164164    pj_timestamp            ts_freq;    /**< System timestamp frequency.    */ 
    165165 
    166     pjmedia_rtcp_ntp_rec    rtcp_lsr;   /**< NTP ts in last SR received    */ 
    167     pj_timestamp            rtcp_lsr_time;/**< Time when last SR is received*/ 
     166    pj_uint32_t             rx_lsr;     /**< NTP ts in last SR received     */ 
     167    pj_timestamp            rx_lsr_time;/**< Time when last SR is received  */ 
    168168    pj_uint32_t             peer_ssrc;  /**< Peer SSRC                      */ 
    169169    unsigned                rtt_us;     /**< End-to-end delay, in usec.     */ 
  • pjproject/trunk/pjmedia/src/pjmedia/rtcp.c

    r384 r385  
    7777 
    7878    /* Init time */ 
    79     s->rtcp_lsr.hi = s->rtcp_lsr.lo = 0; 
    80     s->rtcp_lsr_time.u64 = 0; 
     79    s->rx_lsr = 0; 
     80    s->rx_lsr_time.u64 = 0; 
    8181     
    8282    /* Init common RTCP header */ 
     
    183183    pj_assert(size >= sizeof(pjmedia_rtcp_common)+sizeof(pjmedia_rtcp_sr)); 
    184184 
    185     /* Save NTP timestamp */ 
    186     session->rtcp_lsr.hi = pj_ntohl(rtcp->sr.ntp_sec); 
    187     session->rtcp_lsr.lo = pj_ntohl(rtcp->sr.ntp_frac); 
     185    /* Save LSR from NTP timestamp of RTCP packet */ 
     186    session->rx_lsr = ((pj_ntohl(rtcp->sr.ntp_sec) & 0x0000FFFF) << 16) |  
     187                         ((pj_ntohl(rtcp->sr.ntp_frac) >> 16) & 0xFFFF); 
    188188 
    189189    /* Calculate SR arrival time for DLSR */ 
    190     pj_get_timestamp(&session->rtcp_lsr_time); 
     190    pj_get_timestamp(&session->rx_lsr_time); 
    191191 
    192192    /* Calculate RTT if it has RR */ 
     
    295295    rtcp_pkt->sr.ntp_frac = pj_htonl(ntp.lo); 
    296296     
    297     if (session->rtcp_lsr_time.u64 == 0) { 
     297    if (session->rx_lsr_time.u64 == 0 || session->rx_lsr == 0) { 
    298298        rtcp_pkt->rr.lsr = 0; 
    299299        rtcp_pkt->rr.dlsr = 0; 
    300300    } else { 
    301301        pj_timestamp ts; 
     302        pj_uint32_t lsr = session->rx_lsr; 
     303        pj_uint64_t lsr_time = session->rx_lsr_time.u64; 
    302304         
    303305        /* Fill in LSR. 
    304306           LSR is the middle 32bit of the last SR NTP time received. 
    305307         */ 
    306         rtcp_pkt->rr.lsr = ((session->rtcp_lsr.hi & 0x0000FFFF) << 16) |  
    307                            ((session->rtcp_lsr.lo >> 16) & 0xFFFF); 
    308         rtcp_pkt->rr.lsr = pj_htonl(rtcp_pkt->rr.lsr); 
     308        rtcp_pkt->rr.lsr = pj_htonl(lsr); 
    309309         
    310310        /* Fill in DLSR. 
     
    313313        pj_get_timestamp(&ts); 
    314314 
    315         /* Calculate DLSR */ 
    316         ts.u64 -= session->rtcp_lsr_time.u64; 
    317  
    318315        /* Convert interval to 1/65536 seconds value */ 
    319         ts.u64 = ((ts.u64 - session->rtcp_lsr_time.u64) << 16) /  
    320                     session->ts_freq.u64; 
     316        ts.u64 = ((ts.u64 - lsr_time) << 16) / session->ts_freq.u64; 
    321317 
    322318        rtcp_pkt->rr.dlsr = pj_htonl( (pj_uint32_t)ts.u64 ); 
Note: See TracChangeset for help on using the changeset viewer.