Ignore:
Timestamp:
Aug 1, 2013 4:18:15 AM (11 years ago)
Author:
ming
Message:

Closed #1692: Allow multiple codecs in SDP answer
By default, the setting is disabled, to change it during run-time, use the function pjmedia_sdp_neg_set_allow_multiple_codecs().

File:
1 edited

Legend:

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

    r4554 r4577  
    3434    pjmedia_sdp_neg_state state;            /**< Negotiator state.           */ 
    3535    pj_bool_t             prefer_remote_codec_order; 
     36    pj_bool_t             answer_with_multiple_codecs; 
    3637    pj_bool_t             has_remote_answer; 
    3738    pj_bool_t             answer_was_remote; 
     
    115116    neg->state = PJMEDIA_SDP_NEG_STATE_LOCAL_OFFER; 
    116117    neg->prefer_remote_codec_order = PJMEDIA_SDP_NEG_PREFER_REMOTE_CODEC_ORDER; 
     118    neg->answer_with_multiple_codecs = PJMEDIA_SDP_NEG_ANSWER_MULTIPLE_CODECS; 
    117119    neg->initial_sdp = pjmedia_sdp_session_clone(pool, local); 
    118120    neg->neg_local_sdp = pjmedia_sdp_session_clone(pool, local); 
     
    179181    PJ_ASSERT_RETURN(neg, PJ_EINVAL); 
    180182    neg->prefer_remote_codec_order = prefer_remote; 
     183    return PJ_SUCCESS; 
     184} 
     185 
     186 
     187/* 
     188 * Set multiple codec answering. 
     189 */ 
     190PJ_DEF(pj_status_t) pjmedia_sdp_neg_set_answer_multiple_codecs( 
     191                        pjmedia_sdp_neg *neg, 
     192                        pj_bool_t answer_multiple) 
     193{ 
     194    PJ_ASSERT_RETURN(neg, PJ_EINVAL); 
     195    neg->answer_with_multiple_codecs = answer_multiple; 
    181196    return PJ_SUCCESS; 
    182197} 
     
    10111026static pj_status_t match_offer(pj_pool_t *pool, 
    10121027                               pj_bool_t prefer_remote_codec_order, 
     1028                               pj_bool_t answer_with_multiple_codecs, 
    10131029                               const pjmedia_sdp_media *offer, 
    10141030                               const pjmedia_sdp_media *preanswer, 
     
    10761092                master_has_codec = 1; 
    10771093 
    1078                 /* We just need to select one codec.  
     1094                /* We just need to select one codec if not allowing multiple. 
    10791095                 * Continue if we have selected matching codec for previous  
    10801096                 * payload. 
    10811097                 */ 
    1082                 if (found_matching_codec) 
     1098                if (!answer_with_multiple_codecs && found_matching_codec) 
    10831099                    continue; 
    10841100 
     
    11201136                } else { 
    11211137                    master_has_codec = 1; 
    1122                     if (found_matching_codec) 
     1138                    if (!answer_with_multiple_codecs && found_matching_codec) 
    11231139                        continue; 
    11241140                    is_codec = 1; 
     
    12781294static pj_status_t create_answer( pj_pool_t *pool, 
    12791295                                  pj_bool_t prefer_remote_codec_order, 
     1296                                  pj_bool_t answer_with_multiple_codecs, 
    12801297                                  const pjmedia_sdp_session *initial, 
    12811298                                  const pjmedia_sdp_session *offer, 
     
    13271344 
    13281345                /* See if it has matching codec. */ 
    1329                 status2 = match_offer(pool, prefer_remote_codec_order,  
     1346                status2 = match_offer(pool, prefer_remote_codec_order, 
     1347                                      answer_with_multiple_codecs, 
    13301348                                      om, im, initial, &am); 
    13311349                if (status2 == PJ_SUCCESS) { 
     
    14251443        pjmedia_sdp_session *answer = NULL; 
    14261444 
    1427         status = create_answer(pool, neg->prefer_remote_codec_order,  
     1445        status = create_answer(pool, neg->prefer_remote_codec_order, 
     1446                               neg->answer_with_multiple_codecs, 
    14281447                               neg->neg_local_sdp, neg->neg_remote_sdp, 
    14291448                               &answer); 
Note: See TracChangeset for help on using the changeset viewer.