Ignore:
Timestamp:
Aug 25, 2008 1:58:25 PM (16 years ago)
Author:
nanang
Message:

Ticket #599:

  • Added "dec_fmtp" and "enc_fmtp" fields to pjmedia_codec_param.setting.
  • Codec factory puts its default parameters in "dec_fmtp" field.
  • pjmedia_stream_info_from_sdp() puts the "fmtp" attribute in SDP to pjmedia_codec_param.
  • Special treatment for fmtp "bitrate" parameter (of G722.1) during SDP negotiation
  • Added maxptime field in stream_info.
  • Replaced iLBC's fmtp "mode" implementation to use general fmtp mechanism.
  • Added some test scripts for G722.1 bitrate negotiation.
File:
1 edited

Legend:

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

    r2039 r2236  
    534534} 
    535535 
     536/* Matching G722.1 bitrates between offer and answer. 
     537 */ 
     538static pj_bool_t match_g7221( const pjmedia_sdp_media *offer, 
     539                              unsigned o_fmt_idx, 
     540                              const pjmedia_sdp_media *answer, 
     541                              unsigned a_fmt_idx) 
     542{ 
     543    const pjmedia_sdp_attr *a_ans; 
     544    const pjmedia_sdp_attr *a_off; 
     545    pjmedia_sdp_fmtp fmtp; 
     546    unsigned a_bitrate = 0, o_bitrate = 0; 
     547    const pj_str_t bitrate = {"bitrate=", 8}; 
     548    const char *p; 
     549 
     550    a_ans = pjmedia_sdp_media_find_attr2(answer, "fmtp",  
     551                                         &answer->desc.fmt[a_fmt_idx]); 
     552    if (!a_ans) 
     553        return PJ_FALSE; 
     554 
     555    if (pjmedia_sdp_attr_get_fmtp(a_ans, &fmtp) != PJ_SUCCESS) 
     556        return PJ_FALSE; 
     557 
     558    p = pj_stristr(&fmtp.fmt_param, &bitrate); 
     559    if (p == NULL) 
     560        return PJ_FALSE; 
     561 
     562    a_bitrate = atoi(p + bitrate.slen); 
     563 
     564    a_off = pjmedia_sdp_media_find_attr2(offer, "fmtp",  
     565                                         &offer->desc.fmt[o_fmt_idx]); 
     566    if (!a_off) 
     567        return PJ_FALSE; 
     568 
     569    if (pjmedia_sdp_attr_get_fmtp(a_off, &fmtp) != PJ_SUCCESS) 
     570        return PJ_FALSE; 
     571 
     572    p = pj_stristr(&fmtp.fmt_param, &bitrate); 
     573    if (p == NULL) 
     574        return PJ_FALSE; 
     575 
     576    o_bitrate = atoi(p + bitrate.slen); 
     577 
     578    return (a_bitrate == o_bitrate); 
     579} 
     580 
    536581/* Update single local media description to after receiving answer 
    537582 * from remote. 
     
    658703                             (ar.param.slen==1 && *ar.param.ptr=='1'))) 
    659704                        { 
    660                             /* Match! */ 
    661                             break; 
     705                            /* Further check for G7221, negotiate bitrate. */ 
     706                            if (pj_strcmp2(&or_.enc_name, "G7221") == 0) { 
     707                                if (match_g7221(offer, i, answer, j)) 
     708                                    break; 
     709                            } else { 
     710                                /* Match! */ 
     711                                break; 
     712                            } 
    662713                        } 
    663714                    } 
     
    872923                        { 
    873924                            /* Match! */ 
    874                             if (is_codec) 
     925                            if (is_codec) { 
     926                                /* Further check for G7221, negotiate bitrate. */ 
     927                                if (pj_strcmp2(&or_.enc_name, "G7221")  == 0 && 
     928                                    match_g7221(offer, i, preanswer, j) == 0) 
     929                                { 
     930                                    continue; 
     931                                } 
    875932                                found_matching_codec = 1; 
    876                             else 
     933                            } else { 
    877934                                found_matching_telephone_event = 1; 
     935                            } 
     936 
    878937                            pt_answer[pt_answer_count++] = preanswer->desc.fmt[j]; 
    879938                            break; 
Note: See TracChangeset for help on using the changeset viewer.