Ignore:
Timestamp:
Dec 26, 2006 9:18:11 PM (14 years ago)
Author:
bennylp
Message:

Ticket #54: added ability to modify some codec parameters on the fly

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia-codec/ilbc.c

    r738 r867  
    6464                                    pj_pool_t *pool ); 
    6565static pj_status_t  ilbc_codec_open(pjmedia_codec *codec,  
    66                                     pjmedia_codec_param *attr ); 
     66                                    const pjmedia_codec_param *attr ); 
    6767static pj_status_t  ilbc_codec_close(pjmedia_codec *codec ); 
     68static pj_status_t  ilbc_codec_modify(pjmedia_codec *codec,  
     69                                      const pjmedia_codec_param *attr ); 
    6870static pj_status_t  ilbc_codec_parse(pjmedia_codec *codec, 
    6971                                     void *pkt, 
     
    9092    &ilbc_codec_open, 
    9193    &ilbc_codec_close, 
     94    &ilbc_codec_modify, 
    9295    &ilbc_codec_parse, 
    9396    &ilbc_codec_encode, 
     
    124127    char                 obj_name[PJ_MAX_OBJ_NAME]; 
    125128    pjmedia_silence_det *vad; 
     129    pj_bool_t            vad_enabled; 
    126130    pj_bool_t            plc_enabled; 
    127131 
     
    361365 */ 
    362366static pj_status_t ilbc_codec_open(pjmedia_codec *codec,  
    363                                    pjmedia_codec_param *attr ) 
     367                                   const pjmedia_codec_param *param_attr ) 
    364368{ 
    365369    struct ilbc_codec *ilbc_codec = (struct ilbc_codec*)codec; 
     370    pjmedia_codec_param attr_copy, *attr; 
     371    pj_status_t status; 
    366372 
    367373    pj_assert(ilbc_codec != NULL); 
    368374    pj_assert(ilbc_codec->enc_ready == PJ_FALSE &&  
    369375              ilbc_codec->dec_ready == PJ_FALSE); 
     376 
     377    /* Copy param to temporary location since we need to modify fmtp_mode */ 
     378    pj_memcpy(&attr_copy, param_attr, sizeof(*param_attr)); 
     379    attr = &attr_copy; 
    370380 
    371381    /* Decoder mode must be set */ 
     
    405415 
    406416    /* Save plc flags */ 
    407     ilbc_codec->plc_enabled = attr->setting.plc != 0; 
    408  
    409     /* Create silence detector, if wanted. */ 
    410     if (attr->setting.vad != 0) { 
    411         pj_status_t status; 
    412         status = pjmedia_silence_det_create(ilbc_codec->pool, CLOCK_RATE, 
    413                                             ilbc_codec->enc_samples_per_frame, 
    414                                             &ilbc_codec->vad); 
    415         if (status != PJ_SUCCESS) 
    416             return status; 
    417     } 
     417    ilbc_codec->plc_enabled = (attr->setting.plc != 0); 
     418 
     419    /* Create silence detector. */ 
     420    ilbc_codec->vad_enabled = (attr->setting.vad != 0); 
     421    status = pjmedia_silence_det_create(ilbc_codec->pool, CLOCK_RATE, 
     422                                        ilbc_codec->enc_samples_per_frame, 
     423                                        &ilbc_codec->vad); 
     424    if (status != PJ_SUCCESS) 
     425        return status; 
    418426 
    419427    PJ_LOG(5,(ilbc_codec->obj_name,  
     
    439447} 
    440448 
     449/* 
     450 * Modify codec settings. 
     451 */ 
     452static pj_status_t  ilbc_codec_modify(pjmedia_codec *codec,  
     453                                      const pjmedia_codec_param *attr ) 
     454{ 
     455    struct ilbc_codec *ilbc_codec = (struct ilbc_codec*)codec; 
     456 
     457    ilbc_codec->plc_enabled = (attr->setting.plc != 0); 
     458    ilbc_codec->vad_enabled = (attr->setting.vad != 0); 
     459 
     460    return PJ_SUCCESS; 
     461} 
    441462 
    442463/* 
     
    494515 
    495516    /* Detect silence */ 
    496     if (ilbc_codec->vad) { 
     517    if (ilbc_codec->vad_enabled) { 
    497518        pj_bool_t is_silence; 
    498519 
Note: See TracChangeset for help on using the changeset viewer.