Ignore:
Timestamp:
Dec 28, 2016 3:40:07 AM (4 years ago)
Author:
nanang
Message:

Re #1900: More merged from trunk (r5512 mistakenly contains merged changes in third-party dir only).

Location:
pjproject/branches/projects/uwp
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/projects/uwp

  • pjproject/branches/projects/uwp/pjmedia/src/pjmedia/stream.c

    r5187 r5513  
    2323#include <pjmedia/rtcp.h> 
    2424#include <pjmedia/jbuf.h> 
    25 #include <pjmedia/stream_common.h> 
    2625#include <pj/array.h> 
    2726#include <pj/assert.h> 
     
    441440    /* Send RTCP */ 
    442441    send_rtcp(stream, PJ_TRUE, PJ_FALSE, PJ_FALSE); 
     442     
     443    /* Update stats in case the stream is paused */ 
     444    stream->rtcp.stat.rtp_tx_last_seq = pj_ntohs(stream->enc->rtp.out_hdr.seq); 
    443445 
    444446#elif PJMEDIA_STREAM_ENABLE_KA == PJMEDIA_STREAM_KA_USER 
     
    15671569 
    15681570    /* Ignore unknown event. */ 
     1571#if defined(PJMEDIA_HAS_DTMF_FLASH) && PJMEDIA_HAS_DTMF_FLASH!= 0 
    15691572    if (event->event > 16) { 
     1573#else 
     1574    if (event->event > 15) { 
     1575#endif     
    15701576        PJ_LOG(5,(stream->port.info.name.ptr, 
    15711577                  "Ignored RTP pkt with bad DTMF event %d", 
     
    16291635    if (bytes_read < 0) { 
    16301636        status = (pj_status_t)-bytes_read; 
     1637        if (status == PJ_STATUS_FROM_OS(OSERR_EWOULDBLOCK)) { 
     1638            return; 
     1639        } 
    16311640        if (stream->rtp_rx_last_err != status) { 
    16321641            char errmsg[PJ_ERR_MSG_SIZE]; 
     
    18951904    /* Check for errors */ 
    18961905    if (bytes_read < 0) { 
    1897         LOGERR_((stream->port.info.name.ptr, "RTCP recv() error", 
    1898                 (pj_status_t)-bytes_read)); 
     1906        if (bytes_read != -PJ_STATUS_FROM_OS(OSERR_EWOULDBLOCK)) { 
     1907            LOGERR_((stream->port.info.name.ptr, "RTCP recv() error", 
     1908                    (pj_status_t)-bytes_read)); 
     1909        } 
    18991910        return; 
    19001911    } 
     
    19942005    char *p; 
    19952006    pj_status_t status; 
     2007    pjmedia_transport_attach_param att_param; 
    19962008 
    19972009    PJ_ASSERT_RETURN(endpt && info && p_stream, PJ_EINVAL); 
     
    21052117 
    21062118    /* Open the codec. */ 
     2119 
     2120    /* The clock rate for Opus codec is not static, 
     2121     * it's negotiated in the SDP. 
     2122     */ 
     2123    if (!pj_stricmp2(&info->fmt.encoding_name, "opus")) { 
     2124        stream->codec_param.info.clock_rate = info->fmt.clock_rate; 
     2125        stream->codec_param.info.channel_cnt = info->fmt.channel_cnt; 
     2126    } 
     2127 
    21072128    status = pjmedia_codec_open(stream->codec, &stream->codec_param); 
    21082129    if (status != PJ_SUCCESS) 
     
    22192240        /* RTP clock rate = 1/2 real clock rate */ 
    22202241        stream->rtp_tx_ts_len_per_pkt >>= 1; 
     2242    } else if (!pj_stricmp2(&info->fmt.encoding_name, "opus")) { 
     2243        unsigned opus_ts_modifier = 48000 / afd->clock_rate; 
     2244        stream->rtp_rx_check_cnt = 0; 
     2245        stream->has_g722_mpeg_bug = PJ_TRUE; 
     2246        stream->rtp_tx_ts_len_per_pkt *= opus_ts_modifier; 
     2247        stream->rtp_rx_ts_len_per_frame *= opus_ts_modifier; 
    22212248    } 
    22222249#endif 
     
    23202347 
    23212348    stream->out_rtcp_pkt = pj_pool_alloc(pool, stream->out_rtcp_pkt_size); 
     2349    att_param.stream = stream; 
     2350    att_param.media_type = PJMEDIA_TYPE_AUDIO; 
     2351    att_param.user_data = stream; 
     2352    pj_sockaddr_cp(&att_param.rem_addr, &info->rem_addr); 
     2353    pj_sockaddr_cp(&att_param.rem_rtcp, &info->rem_rtcp); 
     2354    att_param.addr_len = pj_sockaddr_get_len(&info->rem_addr); 
     2355    att_param.rtp_cb = &on_rx_rtp; 
     2356    att_param.rtcp_cb = &on_rx_rtcp; 
    23222357 
    23232358    /* Only attach transport when stream is ready. */ 
    2324     status = pjmedia_transport_attach(tp, stream, &info->rem_addr, 
    2325                                       &info->rem_rtcp, 
    2326                                       pj_sockaddr_get_len(&info->rem_addr), 
    2327                                       &on_rx_rtp, &on_rx_rtcp); 
     2359    status = pjmedia_transport_attach2(tp, &att_param); 
    23282360    if (status != PJ_SUCCESS) 
    23292361        goto err_cleanup; 
     
    27672799                pt = 11; 
    27682800            } 
     2801#if defined(PJMEDIA_HAS_DTMF_FLASH) && PJMEDIA_HAS_DTMF_FLASH!= 0            
    27692802            else if (dig == 'r') 
    27702803            { 
    27712804                pt = 16; 
    27722805            } 
     2806#endif 
    27732807            else 
    27742808            { 
     
    28892923    return PJ_SUCCESS; 
    28902924} 
     2925 
     2926 
     2927/** 
     2928 * Get RTP session information from stream. 
     2929 */ 
     2930PJ_DEF(pj_status_t) 
     2931pjmedia_stream_get_rtp_session_info(pjmedia_stream *stream, 
     2932                                    pjmedia_stream_rtp_sess_info *session_info) 
     2933{ 
     2934    session_info->rx_rtp = &stream->dec->rtp; 
     2935    session_info->tx_rtp = &stream->enc->rtp; 
     2936    session_info->rtcp = &stream->rtcp; 
     2937    return PJ_SUCCESS; 
     2938} 
Note: See TracChangeset for help on using the changeset viewer.