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 /pjmedia | |
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
Diffstat (limited to 'pjmedia')
-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 |
3 files changed, 77 insertions, 7 deletions
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. */ |