Ignore:
Timestamp:
Jun 26, 2010 4:43:50 AM (12 years ago)
Author:
nanang
Message:

Fix #740:

  • Fixed zeroed/unset RTP timestamp in RTCP sender report.
File:
1 edited

Legend:

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

    r2422 r3224  
    126126 
    127127 
     128/* 
     129 * Initialize RTCP session setting. 
     130 */ 
     131PJ_DEF(void) pjmedia_rtcp_session_setting_default( 
     132                                    pjmedia_rtcp_session_setting *settings) 
     133{ 
     134    pj_bzero(&settings, sizeof(*settings)); 
     135} 
     136 
     137 
     138/* 
     139 * Initialize RTCP session. 
     140 */ 
    128141PJ_DEF(void) pjmedia_rtcp_init(pjmedia_rtcp_session *sess,  
    129142                               char *name, 
     
    132145                               pj_uint32_t ssrc) 
    133146{ 
     147    pjmedia_rtcp_session_setting settings; 
     148 
     149    pjmedia_rtcp_session_setting_default(&settings); 
     150    settings.name = name; 
     151    settings.clock_rate = clock_rate; 
     152    settings.samples_per_frame = samples_per_frame; 
     153    settings.ssrc = ssrc; 
     154 
     155    pjmedia_rtcp_init2(sess, &settings); 
     156} 
     157 
     158 
     159/* 
     160 * Initialize RTCP session. 
     161 */ 
     162PJ_DEF(void) pjmedia_rtcp_init2( pjmedia_rtcp_session *sess, 
     163                                 const pjmedia_rtcp_session_setting *settings) 
     164{ 
    134165    pjmedia_rtcp_sr_pkt *sr_pkt = &sess->rtcp_sr_pkt; 
    135166    pj_time_val now; 
     
    142173 
    143174    /* Name */ 
    144     sess->name = name ? name : (char*)THIS_FILE, 
     175    sess->name = settings->name ? settings->name : (char*)THIS_FILE; 
    145176 
    146177    /* Set clock rate */ 
    147     sess->clock_rate = clock_rate; 
    148     sess->pkt_size = samples_per_frame; 
     178    sess->clock_rate = settings->clock_rate; 
     179    sess->pkt_size = settings->samples_per_frame; 
    149180 
    150181    /* Init common RTCP SR header */ 
     
    153184    sr_pkt->common.pt = RTCP_SR; 
    154185    sr_pkt->common.length = pj_htons(12); 
    155     sr_pkt->common.ssrc = pj_htonl(ssrc); 
     186    sr_pkt->common.ssrc = pj_htonl(settings->ssrc); 
    156187     
    157188    /* Copy to RTCP RR header */ 
     
    167198    pj_get_timestamp(&sess->ts_base); 
    168199    pj_get_timestamp_freq(&sess->ts_freq); 
     200    sess->rtp_ts_base = settings->rtp_ts_base; 
    169201 
    170202    /* Initialize statistics states */ 
     
    572604     */ 
    573605    if (sess->stat.tx.pkt != pj_ntohl(sess->rtcp_sr_pkt.sr.sender_pcount)) { 
     606        pj_time_val ts_time; 
     607        pj_uint32_t rtp_ts; 
    574608 
    575609        /* So we should send RTCP SR */ 
     
    589623        sr->ntp_sec = pj_htonl(ntp.hi); 
    590624        sr->ntp_frac = pj_htonl(ntp.lo); 
     625 
     626        /* Fill in RTP timestamp (corresponds to NTP timestamp) in SR. */ 
     627        ts_time.sec = ntp.hi - sess->tv_base.sec - JAN_1970; 
     628        ts_time.msec = (long)(ntp.lo * 1000.0 / 0xFFFFFFFF); 
     629        rtp_ts = sess->rtp_ts_base + 
     630                 (pj_uint32_t)(sess->clock_rate*ts_time.sec) + 
     631                 (pj_uint32_t)(sess->clock_rate*ts_time.msec/1000); 
     632        sr->rtp_ts = pj_htonl(rtp_ts); 
    591633 
    592634        TRACE_((sess->name, "TX RTCP SR: ntp_ts=%p",  
Note: See TracChangeset for help on using the changeset viewer.