Ignore:
Timestamp:
May 13, 2006 10:46:23 PM (18 years ago)
Author:
bennylp
Message:

Another major modifications in PJMEDIA:

  • handle multiple frames in one packet
  • split stream creation into two steps to allow customization
  • PLC framework and implementation with G.711 and speex
  • stream returns NO_FRAME correctly.
  • added ptime argument in pjsua
File:
1 edited

Legend:

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

    r435 r438  
    6565                                           pj_pool_t *pool, 
    6666                                           pjmedia_endpt *endpt, 
     67                                           const pjmedia_sock_info *skinfo, 
    6768                                           const pjmedia_sdp_session *local, 
    6869                                           const pjmedia_sdp_session *remote, 
    6970                                           unsigned stream_idx) 
    7071{ 
     72    pjmedia_codec_mgr *mgr; 
    7173    const pjmedia_sdp_attr *attr; 
    7274    const pjmedia_sdp_media *local_m; 
     
    8688 
    8789 
     90    /* Get codec manager. */ 
     91    mgr = pjmedia_endpt_get_codec_mgr(endpt); 
     92 
     93    /* Keep SDP shortcuts */ 
    8894    local_m = local->media[stream_idx]; 
    8995    rem_m = remote->media[stream_idx]; 
     
    216222            } 
    217223 
    218         } else { 
    219             pjmedia_codec_mgr *mgr; 
    220             pjmedia_codec_info *p_info; 
    221  
    222             mgr = pjmedia_endpt_get_codec_mgr(endpt); 
     224        } else {             
     225            const pjmedia_codec_info *p_info; 
    223226 
    224227            status = pjmedia_codec_mgr_get_codec_info( mgr, pt, &p_info); 
     
    302305 
    303306   
     307    /* Now that we have codec info, get the codec param. */ 
     308    si->param = pj_pool_alloc(pool, sizeof(*si->param)); 
     309    status = pjmedia_codec_mgr_get_default_param(mgr, &si->fmt, si->param); 
     310    if (status != PJ_SUCCESS) 
     311        return status; 
    304312 
    305313    /* Get incomming payload type for telephone-events */ 
     
    335343    } 
    336344 
     345    /* Copy skinfo */ 
     346    if (skinfo) 
     347        si->sock_info = *skinfo; 
    337348 
    338349    /* Leave SSRC to random. */ 
    339350    si->ssrc = pj_rand(); 
    340351 
    341     /* Leave jitter buffer parameter. */ 
    342      
     352    /* Set default jitter buffer parameter. */ 
     353    si->jb_init = si->jb_max = si->jb_min_pre = si->jb_max_pre = -1; 
     354 
     355    return PJ_SUCCESS; 
     356} 
     357 
     358 
     359/* 
     360 * Initialize session info from SDP session descriptors. 
     361 */ 
     362PJ_DEF(pj_status_t)  
     363pjmedia_session_info_from_sdp( pj_pool_t *pool, 
     364                               pjmedia_endpt *endpt, 
     365                               unsigned max_streams, 
     366                               pjmedia_session_info *si, 
     367                               const pjmedia_sock_info skinfo[], 
     368                               const pjmedia_sdp_session *local, 
     369                               const pjmedia_sdp_session *remote) 
     370{ 
     371    unsigned i; 
     372 
     373    PJ_ASSERT_RETURN(pool && endpt && si && local && remote, PJ_EINVAL); 
     374 
     375    si->stream_cnt = max_streams; 
     376    if (si->stream_cnt > local->media_count) 
     377        si->stream_cnt = local->media_count; 
     378 
     379    for (i=0; i<si->stream_cnt; ++i) { 
     380        pj_status_t status; 
     381 
     382        status = pjmedia_stream_info_from_sdp( &si->stream_info[i], pool, 
     383                                               endpt,  
     384                                               (skinfo ? &skinfo[i] : NULL), 
     385                                               local, remote, i); 
     386        if (status != PJ_SUCCESS) 
     387            return status; 
     388 
     389    } 
     390 
    343391    return PJ_SUCCESS; 
    344392} 
     
    349397 */ 
    350398PJ_DEF(pj_status_t) pjmedia_session_create( pjmedia_endpt *endpt,  
    351                                             unsigned stream_cnt, 
    352                                             const pjmedia_sock_info skinfo[], 
    353                                             const pjmedia_sdp_session *local_sdp, 
    354                                             const pjmedia_sdp_session *rem_sdp, 
     399                                            const pjmedia_session_info *si, 
    355400                                            void *user_data, 
    356401                                            pjmedia_session **p_session ) 
     
    362407 
    363408    /* Verify arguments. */ 
    364     PJ_ASSERT_RETURN(endpt && stream_cnt && skinfo && 
    365                      local_sdp && rem_sdp && p_session, PJ_EINVAL); 
     409    PJ_ASSERT_RETURN(endpt && si && p_session, PJ_EINVAL); 
    366410 
    367411    /* Create pool for the session. */ 
     
    374418    session->pool = pool; 
    375419    session->endpt = endpt; 
    376     session->stream_cnt = stream_cnt; 
     420    session->stream_cnt = si->stream_cnt; 
    377421    session->user_data = user_data; 
    378      
    379     /* Stream count is the lower number of stream_cnt or SDP m= lines count */ 
    380     if (stream_cnt < local_sdp->media_count) 
    381         stream_cnt = local_sdp->media_count; 
    382  
    383     /*  
    384      * Create streams:  
    385      */ 
    386     for (i=0; i<(int)stream_cnt; ++i) { 
    387  
    388         pjmedia_stream_info *si = &session->stream_info[i]; 
    389  
    390         /* Build stream info based on media line in local SDP */ 
    391         status = pjmedia_stream_info_from_sdp(si, session->pool, endpt, 
    392                                               local_sdp, rem_sdp, i); 
    393         if (status != PJ_SUCCESS) 
    394             return status; 
    395  
    396         /* Assign sockinfo */ 
    397         si->sock_info = skinfo[i]; 
    398     } 
     422 
     423    /* Copy stream info (this simple memcpy may break sometime) */ 
     424    pj_memcpy(session->stream_info, si->stream_info, 
     425              si->stream_cnt * sizeof(pjmedia_session_info)); 
    399426 
    400427    /* 
    401428     * Now create and start the stream! 
    402429     */ 
    403     for (i=0; i<(int)stream_cnt; ++i) { 
    404  
     430    for (i=0; i<(int)si->stream_cnt; ++i) { 
     431 
     432        /* Create the stream */ 
    405433        status = pjmedia_stream_create(endpt, session->pool, 
    406434                                       &session->stream_info[i], 
Note: See TracChangeset for help on using the changeset viewer.