summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2009-06-01 13:56:09 +0000
committerNanang Izzuddin <nanang@teluu.com>2009-06-01 13:56:09 +0000
commit19308da7aa0e17ca3d819210a093169bd2e8c892 (patch)
tree57e38905df9ad84ccdd3efbd9081621dfea589a1 /pjmedia
parent72f8877d57343fbc2bb42785da9d0c26bd3f0d7a (diff)
Ticket #834:
- Added calls to delay buf destructor in conference.c and echo_common.c. - Moved mutex creation to the end of pjmedia_delay_buf_create(). - Deprecated pjmedia_conf_add_passive_port(). git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2728 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/include/pjmedia/conference.h3
-rw-r--r--pjmedia/src/pjmedia/conference.c39
-rw-r--r--pjmedia/src/pjmedia/delaybuf.c13
-rw-r--r--pjmedia/src/pjmedia/echo_common.c6
4 files changed, 53 insertions, 8 deletions
diff --git a/pjmedia/include/pjmedia/conference.h b/pjmedia/include/pjmedia/conference.h
index 584e56ce..e12f348b 100644
--- a/pjmedia/include/pjmedia/conference.h
+++ b/pjmedia/include/pjmedia/conference.h
@@ -238,6 +238,9 @@ PJ_DECL(pj_status_t) pjmedia_conf_add_port( pjmedia_conf *conf,
/**
+ * <i><b>Warning:</b> This API has been deprecated since 1.3 and will be
+ * removed in the future release, use #PJMEDIA_SPLITCOMB instead.</i>
+ *
* Create and add a passive media port to the conference bridge. Unlike
* "normal" media port that is added with #pjmedia_conf_add_port(), media
* port created with this function will not have its get_frame() and
diff --git a/pjmedia/src/pjmedia/conference.c b/pjmedia/src/pjmedia/conference.c
index 166247b7..fd237aa4 100644
--- a/pjmedia/src/pjmedia/conference.c
+++ b/pjmedia/src/pjmedia/conference.c
@@ -571,13 +571,17 @@ PJ_DEF(pj_status_t) pjmedia_conf_create( pj_pool_t *pool,
/* Create port zero for sound device. */
status = create_sound_port(pool, conf);
- if (status != PJ_SUCCESS)
+ if (status != PJ_SUCCESS) {
+ pjmedia_conf_destroy(conf);
return status;
+ }
/* Create mutex. */
status = pj_mutex_create_recursive(pool, "conf", &conf->mutex);
- if (status != PJ_SUCCESS)
+ if (status != PJ_SUCCESS) {
+ pjmedia_conf_destroy(conf);
return status;
+ }
/* If sound device was created, connect sound device to the
* master port.
@@ -626,6 +630,8 @@ static pj_status_t resume_sound( pjmedia_conf *conf )
*/
PJ_DEF(pj_status_t) pjmedia_conf_destroy( pjmedia_conf *conf )
{
+ unsigned i, ci;
+
PJ_ASSERT_RETURN(conf != NULL, PJ_EINVAL);
/* Destroy sound device port. */
@@ -634,8 +640,24 @@ PJ_DEF(pj_status_t) pjmedia_conf_destroy( pjmedia_conf *conf )
conf->snd_dev_port = NULL;
}
+ /* Destroy delay buf of all (passive) ports. */
+ for (i=0, ci=0; i<conf->max_ports && ci<conf->port_cnt; ++i) {
+ struct conf_port *cport;
+
+ cport = conf->ports[i];
+ if (!cport)
+ continue;
+
+ ++ci;
+ if (cport->delay_buf) {
+ pjmedia_delay_buf_destroy(cport->delay_buf);
+ cport->delay_buf = NULL;
+ }
+ }
+
/* Destroy mutex */
- pj_mutex_destroy(conf->mutex);
+ if (conf->mutex)
+ pj_mutex_destroy(conf->mutex);
return PJ_SUCCESS;
}
@@ -793,6 +815,9 @@ PJ_DEF(pj_status_t) pjmedia_conf_add_passive_port( pjmedia_conf *conf,
pj_str_t tmp;
pj_status_t status;
+ PJ_LOG(1, (THIS_FILE, "This API has been deprecated since 1.3 and will "
+ "be removed in the future release!"));
+
PJ_ASSERT_RETURN(conf && pool, PJ_EINVAL);
/* For this version of PJMEDIA, channel(s) number MUST be:
@@ -1123,6 +1148,14 @@ PJ_DEF(pj_status_t) pjmedia_conf_remove_port( pjmedia_conf *conf,
--conf->connect_cnt;
}
+ /* Destroy pjmedia port if this conf port is passive port,
+ * i.e: has delay buf.
+ */
+ if (conf_port->delay_buf) {
+ pjmedia_port_destroy(conf_port->port);
+ conf_port->port = NULL;
+ }
+
/* Remove the port. */
conf->ports[port] = NULL;
--conf->port_cnt;
diff --git a/pjmedia/src/pjmedia/delaybuf.c b/pjmedia/src/pjmedia/delaybuf.c
index df075043..e39cda79 100644
--- a/pjmedia/src/pjmedia/delaybuf.c
+++ b/pjmedia/src/pjmedia/delaybuf.c
@@ -121,20 +121,23 @@ PJ_DEF(pj_status_t) pjmedia_delay_buf_create( pj_pool_t *pool,
b->eff_cnt = b->max_cnt >> 1;
b->recalc_timer = RECALC_TIME;
- status = pj_lock_create_recursive_mutex(pool, b->obj_name,
- &b->lock);
- if (status != PJ_SUCCESS)
- return status;
-
+ /* Create circular buffer */
status = pjmedia_circ_buf_create(pool, b->max_cnt, &b->circ_buf);
if (status != PJ_SUCCESS)
return status;
+ /* Create WSOLA */
status = pjmedia_wsola_create(pool, clock_rate, samples_per_frame, 1,
0, &b->wsola);
if (status != PJ_SUCCESS)
return status;
+ /* Finally, create mutex */
+ status = pj_lock_create_recursive_mutex(pool, b->obj_name,
+ &b->lock);
+ if (status != PJ_SUCCESS)
+ return status;
+
*p_b = b;
TRACE__((b->obj_name,"Delay buffer created"));
diff --git a/pjmedia/src/pjmedia/echo_common.c b/pjmedia/src/pjmedia/echo_common.c
index 8d77920d..920988d2 100644
--- a/pjmedia/src/pjmedia/echo_common.c
+++ b/pjmedia/src/pjmedia/echo_common.c
@@ -239,6 +239,12 @@ PJ_DEF(pj_status_t) pjmedia_echo_create2(pj_pool_t *pool,
PJ_DEF(pj_status_t) pjmedia_echo_destroy(pjmedia_echo_state *echo )
{
(*echo->op->ec_destroy)(echo->state);
+
+ if (echo->delay_buf) {
+ pjmedia_delay_buf_destroy(echo->delay_buf);
+ echo->delay_buf = NULL;
+ }
+
pj_pool_release(echo->pool);
return PJ_SUCCESS;
}