Ignore:
Timestamp:
Aug 25, 2008 1:58:25 PM (12 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/endpoint.c

    r2072 r2236  
    425425        } 
    426426 
    427         /* Add fmtp mode where applicable */ 
    428         if (codec_param.setting.dec_fmtp_mode != 0) { 
    429             const pj_str_t fmtp = { "fmtp", 4 }; 
     427        /* Add fmtp params */ 
     428        if (codec_param.setting.dec_fmtp.cnt > 0) { 
     429            enum { MAX_FMTP_STR_LEN = 160 }; 
     430            char buf[MAX_FMTP_STR_LEN]; 
     431            unsigned buf_len = 0, i; 
     432            pjmedia_codec_fmtp *dec_fmtp = &codec_param.setting.dec_fmtp; 
     433 
     434            /* Print codec PT */ 
     435            buf_len += pj_ansi_snprintf(buf,  
     436                                        MAX_FMTP_STR_LEN - buf_len,  
     437                                        "%d",  
     438                                        codec_info->pt); 
     439 
     440            for (i = 0; i < dec_fmtp->cnt; ++i) { 
     441                unsigned test_len = 2; 
     442 
     443                /* Check if buf still available */ 
     444                test_len = dec_fmtp->param[i].val.slen +  
     445                           dec_fmtp->param[i].name.slen; 
     446                if (test_len + buf_len >= MAX_FMTP_STR_LEN) 
     447                    return PJ_ETOOBIG; 
     448 
     449                /* Print delimiter */ 
     450                buf_len += pj_ansi_snprintf(&buf[buf_len],  
     451                                            MAX_FMTP_STR_LEN - buf_len, 
     452                                            (i == 0?" ":";")); 
     453 
     454                /* Print an fmtp param */ 
     455                if (dec_fmtp->param[i].name.slen) 
     456                    buf_len += pj_ansi_snprintf( 
     457                                            &buf[buf_len], 
     458                                            MAX_FMTP_STR_LEN - buf_len, 
     459                                            "%.*s=%.*s", 
     460                                            (int)dec_fmtp->param[i].name.slen, 
     461                                            dec_fmtp->param[i].name.ptr, 
     462                                            (int)dec_fmtp->param[i].val.slen, 
     463                                            dec_fmtp->param[i].val.ptr); 
     464                else 
     465                    buf_len += pj_ansi_snprintf(&buf[buf_len],  
     466                                            MAX_FMTP_STR_LEN - buf_len, 
     467                                            "%.*s",  
     468                                            (int)dec_fmtp->param[i].val.slen, 
     469                                            dec_fmtp->param[i].val.ptr); 
     470            } 
     471 
    430472            attr = PJ_POOL_ZALLOC_T(pool, pjmedia_sdp_attr); 
    431473 
    432             attr->name = fmtp; 
    433             attr->value.ptr = (char*) pj_pool_alloc(pool, 32); 
    434             attr->value.slen =  
    435                 pj_ansi_snprintf( attr->value.ptr, 32, 
    436                                   "%d mode=%d", 
    437                                   codec_info->pt, 
    438                                   codec_param.setting.dec_fmtp_mode); 
     474            attr->name = pj_str("fmtp"); 
     475            attr->value = pj_strdup3(pool, buf); 
    439476            m->attr[m->attr_count++] = attr; 
    440477        } 
Note: See TracChangeset for help on using the changeset viewer.