summaryrefslogtreecommitdiff
path: root/pjsip
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-08-02 18:22:22 +0000
committerBenny Prijono <bennylp@teluu.com>2006-08-02 18:22:22 +0000
commit2c5b8f5dca277dd3fee1ab1298bb0b2308372eae (patch)
tree395e0e06ffdb66993cb79cd31f5b38ec561e0c67 /pjsip
parent6d4d05a0b62d4d7be91f807943009f2ec57c2421 (diff)
Added experimental AEC media port (aec_port.[hc]) based on Speex AEC in pjmedia and pjsua-lib.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@642 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r--pjsip/include/pjsua-lib/pjsua.h7
-rw-r--r--pjsip/include/pjsua-lib/pjsua_internal.h1
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c19
3 files changed, 25 insertions, 2 deletions
diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h
index fe1b1a70..5ca718ce 100644
--- a/pjsip/include/pjsua-lib/pjsua.h
+++ b/pjsip/include/pjsua-lib/pjsua.h
@@ -2128,6 +2128,12 @@ struct pjsua_media_config
*/
unsigned rx_drop_pct;
+ /**
+ * Echo canceller tail length, in miliseconds.
+ *
+ * Default: 256
+ */
+ unsigned ec_tail_len;
};
@@ -2146,6 +2152,7 @@ PJ_INLINE(void) pjsua_media_config_default(pjsua_media_config *cfg)
cfg->thread_cnt = 1;
cfg->quality = 6;
cfg->ilbc_mode = 20;
+ cfg->ec_tail_len = 256;
}
diff --git a/pjsip/include/pjsua-lib/pjsua_internal.h b/pjsip/include/pjsua-lib/pjsua_internal.h
index c862219f..95c5c40e 100644
--- a/pjsip/include/pjsua-lib/pjsua_internal.h
+++ b/pjsip/include/pjsua-lib/pjsua_internal.h
@@ -204,6 +204,7 @@ struct pjsua_data
pjmedia_conf *mconf; /**< Conference bridge. */
int cap_dev; /**< Capture device ID. */
int play_dev; /**< Playback device ID. */
+ pjmedia_port *aec_port; /**< AEC port to conf bridge. */
pj_bool_t no_snd; /**< No sound (app will manage it) */
pjmedia_snd_port *snd_port; /**< Sound port. */
pjmedia_master_port *null_snd; /**< Master port for null sound. */
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index d92d0cb9..284cdb58 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -968,8 +968,23 @@ PJ_DEF(pj_status_t) pjsua_set_snd_dev( int capture_dev,
conf_port = pjmedia_conf_get_master_port(pjsua_var.mconf);
pj_assert(conf_port != NULL);
- /* Connect to the conference port */
- status = pjmedia_snd_port_connect(pjsua_var.snd_port, conf_port);
+ /* Create AEC if it's not created */
+ if (pjsua_var.aec_port == NULL) {
+ status = pjmedia_aec_port_create(pjsua_var.pool, conf_port,
+ conf_port->info.clock_rate *
+ pjsua_var.media_cfg.ec_tail_len /
+ 1000,
+ &pjsua_var.aec_port);
+ if (status != PJ_SUCCESS) {
+ pjsua_perror(THIS_FILE, "Unable to create AEC port", status);
+ pjmedia_snd_port_destroy(pjsua_var.snd_port);
+ pjsua_var.snd_port = NULL;
+ return status;
+ }
+ }
+
+ /* Connect to the AEC port */
+ status = pjmedia_snd_port_connect(pjsua_var.snd_port, pjsua_var.aec_port);
if (status != PJ_SUCCESS) {
pjsua_perror(THIS_FILE, "Unable to connect conference port to "
"sound device", status);