Ignore:
Timestamp:
Jul 23, 2018 6:35:57 AM (6 years ago)
Author:
ming
Message:

Fixed #2131: Incorrect Opus fmtp settings

File:
1 edited

Legend:

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

    r5799 r5831  
    300300} 
    301301 
     302static void remove_fmtp(pjmedia_codec_fmtp *fmtp, pj_str_t *name) 
     303{ 
     304    int i, j; 
     305    for (i = 0; i < fmtp->cnt; i++) { 
     306        if (pj_stricmp(&fmtp->param[i].name, name) == 0) { 
     307            fmtp->cnt--; 
     308            for (j = i; j < fmtp->cnt; j++) { 
     309                fmtp->param[i].name = fmtp->param[i+1].name; 
     310                fmtp->param[i].val = fmtp->param[i+1].val; 
     311            } 
     312        } 
     313    } 
     314} 
     315 
    302316static pj_status_t generate_fmtp(pjmedia_codec_param *attr) 
    303317{ 
     
    317331        if (idx >= 0) 
    318332            attr->setting.dec_fmtp.param[idx].val = pj_str(clockrate_str); 
     333    } else { 
     334        remove_fmtp(&attr->setting.dec_fmtp, &STR_MAX_PLAYBACK); 
     335        remove_fmtp(&attr->setting.dec_fmtp, &STR_MAX_CAPTURE); 
    319336    } 
    320337 
     
    327344            attr->setting.dec_fmtp.param[idx].val = pj_str(bitrate_str); 
    328345        } 
     346    } else { 
     347        remove_fmtp(&attr->setting.dec_fmtp, &STR_MAX_BIT_RATE); 
    329348    } 
    330349 
     
    337356        if (idx >= 0) 
    338357            attr->setting.dec_fmtp.param[idx].val = pj_str("1"); 
     358    } else { 
     359        remove_fmtp(&attr->setting.dec_fmtp, &STR_STEREO); 
     360        remove_fmtp(&attr->setting.dec_fmtp, &STR_SPROP_STEREO); 
    339361    } 
    340362 
     
    343365        if (idx >= 0) 
    344366            attr->setting.dec_fmtp.param[idx].val = pj_str("1"); 
     367    } else { 
     368        remove_fmtp(&attr->setting.dec_fmtp, &STR_CBR); 
    345369    } 
    346370 
     
    349373        if (idx >= 0) 
    350374            attr->setting.dec_fmtp.param[idx].val = pj_str("1"); 
     375    } else { 
     376        remove_fmtp(&attr->setting.dec_fmtp, &STR_INBAND_FEC); 
    351377    } 
    352378 
     
    355381        if (idx >= 0) 
    356382            attr->setting.dec_fmtp.param[idx].val = pj_str("1"); 
     383    } else { 
     384        remove_fmtp(&attr->setting.dec_fmtp, &STR_DTX); 
    357385    } 
    358386     
     
    390418        return PJ_EINVAL; 
    391419    } 
    392  
    393     status = pjmedia_codec_mgr_get_default_param(codec_mgr, info[0], param); 
    394     if (status != PJ_SUCCESS) 
    395         return status; 
    396420 
    397421    param->info.clock_rate = opus_cfg.sample_rate = cfg->sample_rate; 
Note: See TracChangeset for help on using the changeset viewer.