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

Fixed RTT calculation bug in RTCP

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.