Ignore:
Timestamp:
Mar 4, 2006 8:43:52 PM (18 years ago)
Author:
bennylp
Message:

Added Speex for narrowband, wideband, and ultra-wideband!!

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_core.c

    r277 r278  
    529529    } 
    530530 
    531     /* Init pjmedia-codecs: */ 
    532  
    533     status = pjmedia_codec_init(pjsua.med_endpt); 
    534     if (status != PJ_SUCCESS) { 
    535         pj_caching_pool_destroy(&pjsua.cp); 
    536         pjsua_perror(THIS_FILE,  
    537                      "Media codec initialization has returned error",  
    538                      status); 
    539         return status; 
    540     } 
    541  
    542  
    543531    /* Done. */ 
    544532    return PJ_SUCCESS; 
     
    609597 
    610598/* 
    611  * Start pjsua stack. 
    612  * This will start the registration process, if registration is configured. 
    613  */ 
    614 pj_status_t pjsua_start(void) 
    615 { 
    616     int i;  /* Must be signed */ 
    617     pjsip_transport *udp_transport; 
    618     pj_status_t status = PJ_SUCCESS; 
     599 * Init media. 
     600 */ 
     601static pj_status_t init_media(void) 
     602{ 
     603 
     604    pj_status_t status; 
     605 
     606    /* If user doesn't specify any codecs, register all of them. */ 
     607    if (pjsua.codec_cnt == 0) { 
     608 
     609        unsigned option = PJMEDIA_SPEEX_NO_WB | PJMEDIA_SPEEX_NO_UWB; 
     610 
     611        /* Register speex. */ 
     612        if (pjsua.clock_rate >= 16000) 
     613            option &= ~(PJMEDIA_SPEEX_NO_WB); 
     614        if (pjsua.clock_rate >= 32000) 
     615            option &= ~(PJMEDIA_SPEEX_NO_UWB); 
     616 
     617        status = pjmedia_codec_speex_init(pjsua.med_endpt, option, -1, -1); 
     618        if (status != PJ_SUCCESS) { 
     619            pjsua_perror(THIS_FILE, "Error initializing Speex codec", 
     620                         status); 
     621            return status; 
     622        } 
     623 
     624        pjsua.codec_arg[pjsua.codec_cnt] = pj_str("speex"); 
     625        pjsua.codec_deinit[pjsua.codec_cnt] = &pjmedia_codec_speex_deinit; 
     626        pjsua.codec_cnt++; 
     627 
     628        /* Register GSM */ 
     629        status = pjmedia_codec_gsm_init(pjsua.med_endpt); 
     630        if (status != PJ_SUCCESS) { 
     631            pjsua_perror(THIS_FILE, "Error initializing GSM codec", 
     632                         status); 
     633            return status; 
     634        } 
     635 
     636        pjsua.codec_arg[pjsua.codec_cnt] = pj_str("gsm"); 
     637        pjsua.codec_deinit[pjsua.codec_cnt] = &pjmedia_codec_gsm_deinit; 
     638        pjsua.codec_cnt++; 
     639 
     640        /* Register PCMA and PCMU */ 
     641        status = pjmedia_codec_g711_init(pjsua.med_endpt); 
     642        if (status != PJ_SUCCESS) { 
     643            pjsua_perror(THIS_FILE, "Error initializing G711 codec", 
     644                         status); 
     645            return status; 
     646        } 
     647 
     648        pjsua.codec_arg[pjsua.codec_cnt] = pj_str("pcmu"); 
     649        pjsua.codec_deinit[pjsua.codec_cnt] = &pjmedia_codec_g711_deinit; 
     650        pjsua.codec_cnt++; 
     651        pjsua.codec_arg[pjsua.codec_cnt] = pj_str("pcma"); 
     652        pjsua.codec_deinit[pjsua.codec_cnt] = &pjmedia_codec_g711_deinit; 
     653        pjsua.codec_cnt++; 
     654 
     655    } else { 
     656 
     657        /* If user specifies the exact codec to be used, then create only 
     658         * those codecs. 
     659         */ 
     660        int i; 
     661 
     662        for (i=0; i<pjsua.codec_cnt; ++i) { 
     663         
     664            /* Is it speex? */ 
     665            if (!pj_stricmp2(&pjsua.codec_arg[i], "speex")) { 
     666 
     667                unsigned option = PJMEDIA_SPEEX_NO_WB | PJMEDIA_SPEEX_NO_UWB; 
     668 
     669                /* Register speex. */ 
     670                if (pjsua.clock_rate >= 16000) 
     671                    option &= ~(PJMEDIA_SPEEX_NO_WB); 
     672                if (pjsua.clock_rate >= 32000) 
     673                    option &= ~(PJMEDIA_SPEEX_NO_UWB); 
     674 
     675                status = pjmedia_codec_speex_init(pjsua.med_endpt, option, 
     676                                                  -1, -1); 
     677                if (status != PJ_SUCCESS) { 
     678                    pjsua_perror(THIS_FILE, "Error initializing Speex codec", 
     679                                 status); 
     680                    return status; 
     681                } 
     682 
     683                pjsua.codec_deinit[i] = &pjmedia_codec_speex_deinit; 
     684            } 
     685            /* Is it gsm? */ 
     686            else if (!pj_stricmp2(&pjsua.codec_arg[i], "gsm")) { 
     687 
     688                status = pjmedia_codec_gsm_init(pjsua.med_endpt); 
     689                if (status != PJ_SUCCESS) { 
     690                    pjsua_perror(THIS_FILE, "Error initializing GSM codec", 
     691                                 status); 
     692                    return status; 
     693                } 
     694 
     695                pjsua.codec_deinit[i] = &pjmedia_codec_gsm_deinit; 
     696 
     697            } 
     698            /* Is it pcma/pcmu? */ 
     699            else if (!pj_stricmp2(&pjsua.codec_arg[i], "pcmu") || 
     700                     !pj_stricmp2(&pjsua.codec_arg[i], "pcma")) 
     701            { 
     702 
     703                status = pjmedia_codec_g711_init(pjsua.med_endpt); 
     704                if (status != PJ_SUCCESS) { 
     705                    pjsua_perror(THIS_FILE, "Error initializing G711 codec", 
     706                                 status); 
     707                    return status; 
     708                } 
     709 
     710                pjsua.codec_deinit[i] = &pjmedia_codec_g711_deinit; 
     711 
     712            } 
     713            /* Don't know about this codec... */ 
     714            else { 
     715 
     716                PJ_LOG(1,(THIS_FILE, "Error: unsupported codecs %s", 
     717                          pjsua.codec_arg[i].ptr)); 
     718                return PJMEDIA_CODEC_EUNSUP; 
     719            } 
     720        } 
     721    } 
    619722 
    620723    /* Init conference bridge. */ 
     
    662765 
    663766 
     767    return PJ_SUCCESS; 
     768} 
     769 
     770 
     771/* 
     772 * Start pjsua stack. 
     773 * This will start the registration process, if registration is configured. 
     774 */ 
     775pj_status_t pjsua_start(void) 
     776{ 
     777    int i;  /* Must be signed */ 
     778    pjsip_transport *udp_transport; 
     779    pj_status_t status = PJ_SUCCESS; 
     780 
     781    /* 
     782     * Init media subsystem (codecs, conference bridge, et all). 
     783     */ 
     784    status = init_media(); 
     785    if (status != PJ_SUCCESS) 
     786        return status; 
     787 
    664788    /* Init sockets (STUN etc): */ 
    665789    for (i=0; i<(int)pjsua.max_calls; ++i) { 
     
    871995pj_status_t pjsua_destroy(void) 
    872996{ 
    873     int i; 
     997    int i;  /* Must be signed */ 
    874998 
    875999    /* Signal threads to quit: */ 
     
    9081032        pjmedia_conf_destroy(pjsua.mconf); 
    9091033 
    910     /* Shutdown pjmedia-codec: */ 
    911     pjmedia_codec_deinit(); 
    912  
    9131034    /* Destroy sound framework:  
    9141035     * (this should be done in pjmedia_shutdown()) 
     
    9161037    pj_snd_deinit(); 
    9171038 
     1039    /* Shutdown all codecs: */ 
     1040    for (i = pjsua.codec_cnt-1; i >= 0; --i) { 
     1041        (*pjsua.codec_deinit[i])(); 
     1042    } 
     1043 
     1044    /* Destroy media endpoint. */ 
     1045 
     1046    pjmedia_endpt_destroy(pjsua.med_endpt); 
     1047 
    9181048    /* Destroy endpoint. */ 
    9191049 
Note: See TracChangeset for help on using the changeset viewer.