Ignore:
Timestamp:
Jul 15, 2011 9:51:46 AM (10 years ago)
Author:
bennylp
Message:

Fixed #1294: New pjmedia_codec_register_audio_codecs() API to register all known codecs, and also added implementation to deregister all codecs when the media endpoint is destroyed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/projects/2.0-dev/pjsip/src/pjsua-lib/pjsua_media.c

    r3659 r3661  
    6767    pj_str_t codec_id = {NULL, 0}; 
    6868    unsigned opt; 
     69    pjmedia_audio_codec_config codec_cfg; 
    6970    pj_status_t status; 
    7071 
     
    113114    } 
    114115 
    115     /* Register all codecs */ 
    116  
    117 #if PJMEDIA_HAS_SPEEX_CODEC 
    118     /* Register speex. */ 
    119     status = pjmedia_codec_speex_init(pjsua_var.med_endpt,   
    120                                       0,  
    121                                       pjsua_var.media_cfg.quality,   
    122                                       -1); 
    123     if (status != PJ_SUCCESS) { 
    124         pjsua_perror(THIS_FILE, "Error initializing Speex codec", 
    125                      status); 
    126         return status; 
    127     } 
    128  
    129     /* Set speex/16000 to higher priority*/ 
    130     codec_id = pj_str("speex/16000"); 
    131     pjmedia_codec_mgr_set_codec_priority(  
    132         pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt), 
    133         &codec_id, PJMEDIA_CODEC_PRIO_NORMAL+2); 
    134  
    135     /* Set speex/8000 to next higher priority*/ 
    136     codec_id = pj_str("speex/8000"); 
    137     pjmedia_codec_mgr_set_codec_priority(  
    138         pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt), 
    139         &codec_id, PJMEDIA_CODEC_PRIO_NORMAL+1); 
    140  
    141  
    142  
    143 #endif /* PJMEDIA_HAS_SPEEX_CODEC */ 
    144  
    145 #if PJMEDIA_HAS_ILBC_CODEC 
    146     /* Register iLBC. */ 
    147     status = pjmedia_codec_ilbc_init( pjsua_var.med_endpt,  
    148                                       pjsua_var.media_cfg.ilbc_mode); 
    149     if (status != PJ_SUCCESS) { 
    150         pjsua_perror(THIS_FILE, "Error initializing iLBC codec", 
    151                      status); 
    152         return status; 
    153     } 
    154 #endif /* PJMEDIA_HAS_ILBC_CODEC */ 
    155  
    156 #if PJMEDIA_HAS_GSM_CODEC 
    157     /* Register GSM */ 
    158     status = pjmedia_codec_gsm_init(pjsua_var.med_endpt); 
    159     if (status != PJ_SUCCESS) { 
    160         pjsua_perror(THIS_FILE, "Error initializing GSM codec", 
    161                      status); 
    162         return status; 
    163     } 
    164 #endif /* PJMEDIA_HAS_GSM_CODEC */ 
    165  
    166 #if PJMEDIA_HAS_G711_CODEC 
    167     /* Register PCMA and PCMU */ 
    168     status = pjmedia_codec_g711_init(pjsua_var.med_endpt); 
    169     if (status != PJ_SUCCESS) { 
    170         pjsua_perror(THIS_FILE, "Error initializing G711 codec", 
    171                      status); 
    172         return status; 
    173     } 
    174 #endif  /* PJMEDIA_HAS_G711_CODEC */ 
    175  
    176 #if PJMEDIA_HAS_G722_CODEC 
    177     status = pjmedia_codec_g722_init( pjsua_var.med_endpt ); 
    178     if (status != PJ_SUCCESS) { 
    179         pjsua_perror(THIS_FILE, "Error initializing G722 codec", 
    180                      status); 
    181         return status; 
    182     } 
    183 #endif  /* PJMEDIA_HAS_G722_CODEC */ 
    184  
    185 #if PJMEDIA_HAS_INTEL_IPP 
    186     /* Register IPP codecs */ 
    187     status = pjmedia_codec_ipp_init(pjsua_var.med_endpt); 
    188     if (status != PJ_SUCCESS) { 
    189         pjsua_perror(THIS_FILE, "Error initializing IPP codecs", 
    190                      status); 
    191         return status; 
    192     } 
    193  
    194 #endif /* PJMEDIA_HAS_INTEL_IPP */ 
     116    /* 
     117     * Register all codecs 
     118     */ 
     119    pjmedia_audio_codec_config_default(&codec_cfg); 
     120    codec_cfg.speex.quality = pjsua_var.media_cfg.quality; 
     121    codec_cfg.speex.complexity = -1; 
     122    codec_cfg.ilbc.mode = pjsua_var.media_cfg.ilbc_mode; 
    195123 
    196124#if PJMEDIA_HAS_PASSTHROUGH_CODECS 
     
    200128        unsigned ext_fmt_cnt = 0; 
    201129        pjmedia_format ext_fmts[32]; 
    202         pjmedia_codec_passthrough_setting setting; 
    203130 
    204131        /* List extended formats supported by audio devices */ 
     
    237164 
    238165        /* Init the passthrough codec with supported formats only */ 
    239         setting.fmt_cnt = ext_fmt_cnt; 
    240         setting.fmts = ext_fmts; 
    241         setting.ilbc_mode = cfg->ilbc_mode; 
    242         status = pjmedia_codec_passthrough_init2(pjsua_var.med_endpt, &setting); 
    243         if (status != PJ_SUCCESS) { 
    244             pjsua_perror(THIS_FILE, "Error initializing passthrough codecs", 
    245                          status); 
    246             return status; 
    247         } 
     166        codec_cfg.passthrough.setting.fmt_cnt = ext_fmt_cnt; 
     167        codec_cfg.passthrough.setting.fmts = ext_fmts; 
     168        codec_cfg.passthrough.setting.ilbc_mode = cfg->ilbc_mode; 
    248169    } 
    249170#endif /* PJMEDIA_HAS_PASSTHROUGH_CODECS */ 
    250171 
    251 #if PJMEDIA_HAS_G7221_CODEC 
    252     /* Register G722.1 codecs */ 
    253     status = pjmedia_codec_g7221_init(pjsua_var.med_endpt); 
     172    /* Register all codecs */ 
     173    status = pjmedia_codec_register_audio_codecs(pjsua_var.med_endpt, 
     174                                                 &codec_cfg); 
    254175    if (status != PJ_SUCCESS) { 
    255         pjsua_perror(THIS_FILE, "Error initializing G722.1 codec", 
    256                      status); 
     176        PJ_PERROR(1,(THIS_FILE, status, "Error registering codecs")); 
    257177        return status; 
    258178    } 
    259 #endif /* PJMEDIA_HAS_G7221_CODEC */ 
    260  
    261 #if PJMEDIA_HAS_L16_CODEC 
    262     /* Register L16 family codecs, but disable all */ 
    263     status = pjmedia_codec_l16_init(pjsua_var.med_endpt, 0); 
    264     if (status != PJ_SUCCESS) { 
    265         pjsua_perror(THIS_FILE, "Error initializing L16 codecs", 
    266                      status); 
    267         return status; 
    268     } 
     179 
     180    /* Set speex/16000 to higher priority*/ 
     181    codec_id = pj_str("speex/16000"); 
     182    pjmedia_codec_mgr_set_codec_priority( 
     183        pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt), 
     184        &codec_id, PJMEDIA_CODEC_PRIO_NORMAL+2); 
     185 
     186    /* Set speex/8000 to next higher priority*/ 
     187    codec_id = pj_str("speex/8000"); 
     188    pjmedia_codec_mgr_set_codec_priority( 
     189        pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt), 
     190        &codec_id, PJMEDIA_CODEC_PRIO_NORMAL+1); 
    269191 
    270192    /* Disable ALL L16 codecs */ 
     
    273195        pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt), 
    274196        &codec_id, PJMEDIA_CODEC_PRIO_DISABLED); 
    275  
    276 #endif  /* PJMEDIA_HAS_L16_CODEC */ 
    277197 
    278198 
     
    519439            pjsua_vid_subsys_destroy(); 
    520440#       endif 
    521         /* Shutdown all codecs: */ 
    522 #       if PJMEDIA_HAS_SPEEX_CODEC 
    523             pjmedia_codec_speex_deinit(); 
    524 #       endif /* PJMEDIA_HAS_SPEEX_CODEC */ 
    525  
    526 #       if PJMEDIA_HAS_GSM_CODEC 
    527             pjmedia_codec_gsm_deinit(); 
    528 #       endif /* PJMEDIA_HAS_GSM_CODEC */ 
    529  
    530 #       if PJMEDIA_HAS_G711_CODEC 
    531             pjmedia_codec_g711_deinit(); 
    532 #       endif   /* PJMEDIA_HAS_G711_CODEC */ 
    533  
    534 #       if PJMEDIA_HAS_G722_CODEC 
    535             pjmedia_codec_g722_deinit(); 
    536 #       endif   /* PJMEDIA_HAS_G722_CODEC */ 
    537  
    538 #       if PJMEDIA_HAS_INTEL_IPP 
    539             pjmedia_codec_ipp_deinit(); 
    540 #       endif   /* PJMEDIA_HAS_INTEL_IPP */ 
    541  
    542 #       if PJMEDIA_HAS_PASSTHROUGH_CODECS 
    543             pjmedia_codec_passthrough_deinit(); 
    544 #       endif /* PJMEDIA_HAS_PASSTHROUGH_CODECS */ 
    545  
    546 #       if PJMEDIA_HAS_G7221_CODEC 
    547             pjmedia_codec_g7221_deinit(); 
    548 #       endif /* PJMEDIA_HAS_G7221_CODEC */ 
    549  
    550 #       if PJMEDIA_HAS_L16_CODEC 
    551             pjmedia_codec_l16_deinit(); 
    552 #       endif   /* PJMEDIA_HAS_L16_CODEC */ 
    553441 
    554442        pjmedia_endpt_destroy(pjsua_var.med_endpt); 
Note: See TracChangeset for help on using the changeset viewer.