diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2008-05-27 00:24:26 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2008-05-27 00:24:26 +0000 |
commit | 931c48d853c586090b85beb75335d26eda88de6a (patch) | |
tree | 65f0228ba4022dc999332b9ea2057977c0af3d39 | |
parent | b9fcee5ffeaed190003c194bf8c8f23f18712364 (diff) |
Changed build optimizations settings for Speex, pjmedia, and symbian_sound for Symbian. Speex/8000 now also runs on Symbian!
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1965 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r-- | build.symbian/bld.inf | 6 | ||||
-rw-r--r-- | build.symbian/pjmedia.mmp | 5 | ||||
-rw-r--r-- | build.symbian/symbian_audio.mmp | 5 | ||||
-rw-r--r-- | build.symbian/symbian_ua.mmp | 2 | ||||
-rw-r--r-- | pjlib/include/pj/config_site_sample.h | 2 | ||||
-rw-r--r-- | pjmedia/include/pjmedia-codec/config.h | 14 | ||||
-rw-r--r-- | pjmedia/include/pjmedia-codec/speex.h | 19 | ||||
-rw-r--r-- | pjmedia/src/pjmedia-codec/speex_codec.c | 51 | ||||
-rw-r--r-- | pjsip-apps/src/symbian_ua/ua.cpp | 20 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_media.c | 5 |
10 files changed, 115 insertions, 14 deletions
diff --git a/build.symbian/bld.inf b/build.symbian/bld.inf index 8adc54c8..bf971afa 100644 --- a/build.symbian/bld.inf +++ b/build.symbian/bld.inf @@ -4,6 +4,8 @@ winscw gcce prj_mmpfiles + +// libraries pjlib.mmp pjlib_util.mmp pjnath.mmp @@ -15,8 +17,12 @@ pjsip.mmp pjsip_simple.mmp pjsip_ua.mmp pjsua_lib.mmp + +// codecs libgsmcodec.mmp +libspeexcodec.mmp +// applications pjlib_test.mmp symbian_ua.mmp symsndtest.mmp diff --git a/build.symbian/pjmedia.mmp b/build.symbian/pjmedia.mmp index 2979d552..6626647b 100644 --- a/build.symbian/pjmedia.mmp +++ b/build.symbian/pjmedia.mmp @@ -22,6 +22,11 @@ SOURCEPATH ..\pjmedia\src\pjmedia //OPTION CW -lang c++ +// +// GCCE optimization setting +// +OPTION GCCE -O2 -fno-unit-at-a-time + MACRO PJ_M_I386=1 MACRO PJ_SYMBIAN=1 diff --git a/build.symbian/symbian_audio.mmp b/build.symbian/symbian_audio.mmp index deeb79fc..571b4b0c 100644 --- a/build.symbian/symbian_audio.mmp +++ b/build.symbian/symbian_audio.mmp @@ -25,6 +25,11 @@ SOURCEPATH ..\pjmedia\src\pjmedia OPTION CW -lang c++ +// +// GCCE optimization setting +// +OPTION GCCE -O2 -fno-unit-at-a-time + MACRO PJ_M_I386=1 MACRO PJ_SYMBIAN=1 diff --git a/build.symbian/symbian_ua.mmp b/build.symbian/symbian_ua.mmp index edd8b59d..1a9363f6 100644 --- a/build.symbian/symbian_ua.mmp +++ b/build.symbian/symbian_ua.mmp @@ -38,7 +38,7 @@ SYSTEMINCLUDE \epoc32\include\libc STATICLIBRARY pjsip_simple.lib pjsip.lib pjsdp.lib pjmedia.lib
STATICLIBRARY pjnath.lib pjlib_util.lib pjlib.lib
STATICLIBRARY symbian_audio.lib
- STATICLIBRARY libgsmcodec.lib
+ STATICLIBRARY libgsmcodec.lib libspeexcodec.lib
#endif
#ifdef WINSCW
diff --git a/pjlib/include/pj/config_site_sample.h b/pjlib/include/pj/config_site_sample.h index 6be85943..63c94708 100644 --- a/pjlib/include/pj/config_site_sample.h +++ b/pjlib/include/pj/config_site_sample.h @@ -56,7 +56,7 @@ # define PJMEDIA_HAS_GSM_CODEC 1 # define PJMEDIA_HAS_L16_CODEC 0 # define PJMEDIA_HAS_ILBC_CODEC 0 -# define PJMEDIA_HAS_SPEEX_CODEC 0 +# define PJMEDIA_HAS_SPEEX_CODEC 1 # define PJMEDIA_HAS_G722_CODEC 0 /* Need larger sound buffers */ diff --git a/pjmedia/include/pjmedia-codec/config.h b/pjmedia/include/pjmedia-codec/config.h index 13e2d9fa..d52044f1 100644 --- a/pjmedia/include/pjmedia-codec/config.h +++ b/pjmedia/include/pjmedia-codec/config.h @@ -51,6 +51,20 @@ # define PJMEDIA_HAS_SPEEX_CODEC 1 #endif +/** + * Speex codec default complexity setting. + */ +#ifndef PJMEDIA_CODEC_SPEEX_DEFAULT_COMPLEXITY +# define PJMEDIA_CODEC_SPEEX_DEFAULT_COMPLEXITY 2 +#endif + +/** + * Speex codec default quality setting. + */ +#ifndef PJMEDIA_CODEC_SPEEX_DEFAULT_QUALITY +# define PJMEDIA_CODEC_SPEEX_DEFAULT_QUALITY 5 +#endif + /** * Unless specified otherwise, iLBC codec is included by default. diff --git a/pjmedia/include/pjmedia-codec/speex.h b/pjmedia/include/pjmedia-codec/speex.h index 7cba3a02..550382df 100644 --- a/pjmedia/include/pjmedia-codec/speex.h +++ b/pjmedia/include/pjmedia-codec/speex.h @@ -61,9 +61,9 @@ enum pjmedia_speex_options * @param endpt The pjmedia endpoint. * @param options Bitmask of pjmedia_speex_options (default=0). * @param quality Specify encoding quality, or use -1 for default - * (default=8). + * (@see PJMEDIA_CODEC_SPEEX_DEFAULT_QUALITY). * @param complexity Specify encoding complexity , or use -1 for default - * (default=8). + * (@see PJMEDIA_CODEC_SPEEX_DEFAULT_COMPLEXITY). * * @return PJ_SUCCESS on success. */ @@ -84,6 +84,21 @@ PJ_DECL(pj_status_t) pjmedia_codec_speex_init( pjmedia_endpt *endpt, PJ_DECL(pj_status_t) pjmedia_codec_speex_init_default(pjmedia_endpt *endpt); +/** + * Change the settings of Speex codec. + * + * @param clock_rate Clock rate of Speex mode to be set. + * @param quality Specify encoding quality, or use -1 for default + * (@see PJMEDIA_CODEC_SPEEX_DEFAULT_QUALITY). + * @param complexity Specify encoding complexity , or use -1 for default + * (@see PJMEDIA_CODEC_SPEEX_DEFAULT_COMPLEXITY). + * + * @return PJ_SUCCESS on success. + */ +PJ_DECL(pj_status_t) pjmedia_codec_speex_set_param(unsigned clock_rate, + int quality, + int complexity); + /** * Unregister Speex codec factory from pjmedia endpoint and deinitialize diff --git a/pjmedia/src/pjmedia-codec/speex_codec.c b/pjmedia/src/pjmedia-codec/speex_codec.c index a01ccb06..dc2c7400 100644 --- a/pjmedia/src/pjmedia-codec/speex_codec.c +++ b/pjmedia/src/pjmedia-codec/speex_codec.c @@ -37,9 +37,6 @@ #define THIS_FILE "speex_codec.c" -#define DEFAULT_QUALITY 10 -#define DEFAULT_COMPLEXITY 10 - /* Prototypes for Speex factory */ static pj_status_t spx_test_alloc( pjmedia_codec_factory *factory, const pjmedia_codec_info *id ); @@ -211,8 +208,12 @@ PJ_DEF(pj_status_t) pjmedia_codec_speex_init( pjmedia_endpt *endpt, } /* Get defaults */ - if (quality <= 0) quality = DEFAULT_QUALITY; - if (complexity <= 0) complexity = DEFAULT_COMPLEXITY; + if (quality < 0) quality = PJMEDIA_CODEC_SPEEX_DEFAULT_QUALITY; + if (complexity < 0) complexity = PJMEDIA_CODEC_SPEEX_DEFAULT_COMPLEXITY; + + /* Validate quality & complexity */ + PJ_ASSERT_RETURN(quality >= 0 && quality <= 10, PJ_EINVAL); + PJ_ASSERT_RETURN(complexity >= 1 && complexity <= 10, PJ_EINVAL); /* Create Speex codec factory. */ spx_factory.base.op = &spx_factory_op; @@ -300,6 +301,46 @@ PJ_DEF(pj_status_t) pjmedia_codec_speex_init_default(pjmedia_endpt *endpt) } /* + * Change the settings of Speex codec. + */ +PJ_DEF(pj_status_t) pjmedia_codec_speex_set_param(unsigned clock_rate, + int quality, + int complexity) +{ + unsigned i; + + /* Get defaults */ + if (quality < 0) quality = PJMEDIA_CODEC_SPEEX_DEFAULT_QUALITY; + if (complexity < 0) complexity = PJMEDIA_CODEC_SPEEX_DEFAULT_COMPLEXITY; + + /* Validate quality & complexity */ + PJ_ASSERT_RETURN(quality >= 0 && quality <= 10, PJ_EINVAL); + PJ_ASSERT_RETURN(complexity >= 1 && complexity <= 10, PJ_EINVAL); + + /* Apply the settings */ + for (i=0; i<PJ_ARRAY_SIZE(spx_factory.speex_param); ++i) { + if (spx_factory.speex_param[i].clock_rate == clock_rate) { + pj_status_t status; + + spx_factory.speex_param[i].quality = quality; + spx_factory.speex_param[i].complexity = complexity; + + /* Somehow quality<=4 is broken in linux. */ + if (i == PARAM_UWB && quality <= 4 && quality >= 0) { + PJ_LOG(5,(THIS_FILE, "Adjusting quality to 5 for uwb")); + spx_factory.speex_param[PARAM_UWB].quality = 5; + } + + status = get_speex_info(&spx_factory.speex_param[i]); + + return status; + } + } + + return PJ_EINVAL; +} + +/* * Unregister Speex codec factory from pjmedia endpoint and deinitialize * the Speex codec library. */ diff --git a/pjsip-apps/src/symbian_ua/ua.cpp b/pjsip-apps/src/symbian_ua/ua.cpp index b80055f9..7910bff2 100644 --- a/pjsip-apps/src/symbian_ua/ua.cpp +++ b/pjsip-apps/src/symbian_ua/ua.cpp @@ -334,7 +334,25 @@ static pj_status_t app_startup() pjsua_destroy(); return status; } - + + /* Adjust Speex priority and enable only the narrowband */ + { + pj_str_t codec_id = pj_str("speex/8000"); + pjmedia_codec_mgr_set_codec_priority( + pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt), + &codec_id, PJMEDIA_CODEC_PRIO_NORMAL+1); + + codec_id = pj_str("speex/16000"); + pjmedia_codec_mgr_set_codec_priority( + pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt), + &codec_id, PJMEDIA_CODEC_PRIO_DISABLED); + + codec_id = pj_str("speex/32000"); + pjmedia_codec_mgr_set_codec_priority( + pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt), + &codec_id, PJMEDIA_CODEC_PRIO_DISABLED); + } + /* Add UDP transport. */ pjsua_transport_config tcfg; pjsua_transport_id tid; diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c index 2d6e2243..29360660 100644 --- a/pjsip/src/pjsua-lib/pjsua_media.c +++ b/pjsip/src/pjsua-lib/pjsua_media.c @@ -82,10 +82,7 @@ pj_status_t pjsua_media_subsys_init(const pjsua_media_config *cfg) /* Register all codecs */ #if PJMEDIA_HAS_SPEEX_CODEC /* Register speex. */ - status = pjmedia_codec_speex_init(pjsua_var.med_endpt, - 0, - pjsua_var.media_cfg.quality, - pjsua_var.media_cfg.quality); + status = pjmedia_codec_speex_init_default(pjsua_var.med_endpt); if (status != PJ_SUCCESS) { pjsua_perror(THIS_FILE, "Error initializing Speex codec", status); |