summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.symbian/bld.inf6
-rw-r--r--build.symbian/pjmedia.mmp5
-rw-r--r--build.symbian/symbian_audio.mmp5
-rw-r--r--build.symbian/symbian_ua.mmp2
-rw-r--r--pjlib/include/pj/config_site_sample.h2
-rw-r--r--pjmedia/include/pjmedia-codec/config.h14
-rw-r--r--pjmedia/include/pjmedia-codec/speex.h19
-rw-r--r--pjmedia/src/pjmedia-codec/speex_codec.c51
-rw-r--r--pjsip-apps/src/symbian_ua/ua.cpp20
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c5
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);