summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2012-04-21 02:17:07 +0000
committerBenny Prijono <bennylp@teluu.com>2012-04-21 02:17:07 +0000
commit6b05067e089b1536a2003d06ddd8bda2de50abb4 (patch)
tree0ade364c36a786158a3a6df418fbaa9788e2020f /pjmedia
parent824407dfad66205a82037b8212549a5a45e87195 (diff)
Fixed #1492: The echo options field in the media config and pjsua_set_ec() argument are ignored
git-svn-id: http://svn.pjsip.org/repos/pjproject/branches/1.x@4065 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/include/pjmedia/sound_port.h15
-rw-r--r--pjmedia/src/pjmedia/sound_port.c22
2 files changed, 32 insertions, 5 deletions
diff --git a/pjmedia/include/pjmedia/sound_port.h b/pjmedia/include/pjmedia/sound_port.h
index 4c47da43..61ba66bf 100644
--- a/pjmedia/include/pjmedia/sound_port.h
+++ b/pjmedia/include/pjmedia/sound_port.h
@@ -75,6 +75,8 @@ enum pjmedia_snd_port_option
/**
* This structure specifies the parameters to create the sound port.
+ * Use pjmedia_snd_port_param_default() to initialize this structure with
+ * default values (mostly zeroes)
*/
typedef struct pjmedia_snd_port_param
{
@@ -87,9 +89,22 @@ typedef struct pjmedia_snd_port_param
* Sound port creation options.
*/
unsigned options;
+
+ /**
+ * Echo cancellation options/flags.
+ */
+ unsigned ec_options;
+
} pjmedia_snd_port_param;
/**
+ * Initialize pjmedia_snd_port_param with default values.
+ *
+ * @param prm The parameter.
+ */
+PJ_DECL(void) pjmedia_snd_port_param_default(pjmedia_snd_port_param *prm);
+
+/**
* This opaque type describes sound device port connection.
* Sound device port is not a media port, but it is used to connect media
* port to the sound device.
diff --git a/pjmedia/src/pjmedia/sound_port.c b/pjmedia/src/pjmedia/sound_port.c
index cf2890a2..35f91dc9 100644
--- a/pjmedia/src/pjmedia/sound_port.c
+++ b/pjmedia/src/pjmedia/sound_port.c
@@ -49,6 +49,7 @@ struct pjmedia_snd_port
unsigned samples_per_frame;
unsigned bits_per_sample;
unsigned options;
+ unsigned prm_ec_options;
/* software ec */
pjmedia_echo_state *ec_state;
@@ -179,6 +180,12 @@ static pj_status_t rec_cb_ext(void *user_data, pjmedia_frame *frame)
return PJ_SUCCESS;
}
+/* Initialize with default values (zero) */
+PJ_DEF(void) pjmedia_snd_port_param_default(pjmedia_snd_port_param *prm)
+{
+ pj_bzero(prm, sizeof(*prm));
+}
+
/*
* Start the sound stream.
* This may be called even when the sound stream has already been started.
@@ -269,7 +276,8 @@ static pj_status_t start_sound_device( pj_pool_t *pool,
}
status = pjmedia_snd_port_set_ec(snd_port, pool,
- snd_port->aud_param.ec_tail_ms, 0);
+ snd_port->aud_param.ec_tail_ms,
+ snd_port->prm_ec_options);
if (status != PJ_SUCCESS) {
pjmedia_aud_stream_destroy(snd_port->aud_stream);
snd_port->aud_stream = NULL;
@@ -330,7 +338,7 @@ PJ_DEF(pj_status_t) pjmedia_snd_port_create( pj_pool_t *pool,
pjmedia_snd_port_param param;
pj_status_t status;
- PJ_UNUSED_ARG(options);
+ pjmedia_snd_port_param_default(&param);
status = pjmedia_aud_dev_default_param(rec_id, &param.base);
if (status != PJ_SUCCESS)
@@ -344,6 +352,7 @@ PJ_DEF(pj_status_t) pjmedia_snd_port_create( pj_pool_t *pool,
param.base.samples_per_frame = samples_per_frame;
param.base.bits_per_sample = bits_per_sample;
param.options = options;
+ param.ec_options = 0;
return pjmedia_snd_port_create2(pool, &param, p_port);
}
@@ -363,7 +372,7 @@ PJ_DEF(pj_status_t) pjmedia_snd_port_create_rec( pj_pool_t *pool,
pjmedia_snd_port_param param;
pj_status_t status;
- PJ_UNUSED_ARG(options);
+ pjmedia_snd_port_param_default(&param);
status = pjmedia_aud_dev_default_param(dev_id, &param.base);
if (status != PJ_SUCCESS)
@@ -376,6 +385,7 @@ PJ_DEF(pj_status_t) pjmedia_snd_port_create_rec( pj_pool_t *pool,
param.base.samples_per_frame = samples_per_frame;
param.base.bits_per_sample = bits_per_sample;
param.options = options;
+ param.ec_options = 0;
return pjmedia_snd_port_create2(pool, &param, p_port);
}
@@ -396,7 +406,7 @@ PJ_DEF(pj_status_t) pjmedia_snd_port_create_player( pj_pool_t *pool,
pjmedia_snd_port_param param;
pj_status_t status;
- PJ_UNUSED_ARG(options);
+ pjmedia_snd_port_param_default(&param);
status = pjmedia_aud_dev_default_param(dev_id, &param.base);
if (status != PJ_SUCCESS)
@@ -409,6 +419,7 @@ PJ_DEF(pj_status_t) pjmedia_snd_port_create_player( pj_pool_t *pool,
param.base.samples_per_frame = samples_per_frame;
param.base.bits_per_sample = bits_per_sample;
param.options = options;
+ param.ec_options = 0;
return pjmedia_snd_port_create2(pool, &param, p_port);
}
@@ -436,8 +447,9 @@ PJ_DEF(pj_status_t) pjmedia_snd_port_create2(pj_pool_t *pool,
snd_port->channel_count = prm->base.channel_count;
snd_port->samples_per_frame = prm->base.samples_per_frame;
snd_port->bits_per_sample = prm->base.bits_per_sample;
- pj_memcpy(&snd_port->aud_param, prm, sizeof(snd_port->aud_param));
+ pj_memcpy(&snd_port->aud_param, &prm->base, sizeof(snd_port->aud_param));
snd_port->options = prm->options;
+ snd_port->prm_ec_options = prm->ec_options;
/* Start sound device immediately.
* If there's no port connected, the sound callback will return