summaryrefslogtreecommitdiff
path: root/pjmedia/src/pjmedia/sound_port.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjmedia/src/pjmedia/sound_port.c')
-rw-r--r--pjmedia/src/pjmedia/sound_port.c22
1 files changed, 17 insertions, 5 deletions
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