summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-11-27 09:54:03 +0000
committerBenny Prijono <bennylp@teluu.com>2006-11-27 09:54:03 +0000
commit8bdc904e9557dc874a1ebf01d3273f418d234b8c (patch)
tree1cde719a66349ceefaa46e08d399ad8b448be20f /pjmedia
parentc46a5192a1ecc5b03466be67087824841462a9c3 (diff)
Display actual sound device name in conference bridge port zero
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@833 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/include/pjmedia/conference.h12
-rw-r--r--pjmedia/src/pjmedia/conference.c40
2 files changed, 52 insertions, 0 deletions
diff --git a/pjmedia/include/pjmedia/conference.h b/pjmedia/include/pjmedia/conference.h
index 936d2294..0aef15c5 100644
--- a/pjmedia/include/pjmedia/conference.h
+++ b/pjmedia/include/pjmedia/conference.h
@@ -172,6 +172,18 @@ PJ_DECL(pjmedia_port*) pjmedia_conf_get_master_port(pjmedia_conf *conf);
/**
+ * Set master port name.
+ *
+ * @param conf The conference bridge.
+ * @param name Name to be assigned.
+ *
+ * @return PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t) pjmedia_conf_set_port0_name(pjmedia_conf *conf,
+ const pj_str_t *name);
+
+
+/**
* Add media port to the conference bridge.
*
* By default, the new conference port will have both TX and RX enabled,
diff --git a/pjmedia/src/pjmedia/conference.c b/pjmedia/src/pjmedia/conference.c
index 5cacaed3..87a2fc3e 100644
--- a/pjmedia/src/pjmedia/conference.c
+++ b/pjmedia/src/pjmedia/conference.c
@@ -181,6 +181,7 @@ struct pjmedia_conf
unsigned connect_cnt; /**< Total number of connections */
pjmedia_snd_port *snd_dev_port; /**< Sound device port. */
pjmedia_port *master_port; /**< Port zero's port. */
+ char master_name_buf[80]; /**< Port0 name buffer. */
pj_mutex_t *mutex; /**< Conference mutex. */
struct conf_port **ports; /**< Array of ports. */
pj_uint16_t *uns_buf; /**< Buf for unsigned conversion */
@@ -390,6 +391,8 @@ static pj_status_t create_sound_port( pj_pool_t *pool,
/* Create sound device port: */
if ((conf->options & PJMEDIA_CONF_NO_DEVICE) == 0) {
+ pjmedia_snd_stream *strm;
+ pjmedia_snd_stream_info si;
/*
* If capture is disabled then create player only port.
@@ -414,6 +417,17 @@ static pj_status_t create_sound_port( pj_pool_t *pool,
if (status != PJ_SUCCESS)
return status;
+
+ strm = pjmedia_snd_port_get_snd_stream(conf->snd_dev_port);
+ status = pjmedia_snd_stream_get_info(strm, &si);
+ if (status == PJ_SUCCESS) {
+ const pjmedia_snd_dev_info *snd_dev_info;
+ if (conf->options & PJMEDIA_CONF_NO_MIC)
+ snd_dev_info = pjmedia_snd_get_dev_info(si.play_id);
+ else
+ snd_dev_info = pjmedia_snd_get_dev_info(si.rec_id);
+ pj_strdup2_with_null(pool, &conf_port->name, snd_dev_info->name);
+ }
}
@@ -583,6 +597,32 @@ PJ_DEF(pjmedia_port*) pjmedia_conf_get_master_port(pjmedia_conf *conf)
/*
+ * Set master port name.
+ */
+PJ_DEF(pj_status_t) pjmedia_conf_set_port0_name(pjmedia_conf *conf,
+ const pj_str_t *name)
+{
+ int len;
+
+ /* Sanity check. */
+ PJ_ASSERT_RETURN(conf != NULL && name != NULL, PJ_EINVAL);
+
+ len = name->slen;
+ if (len > sizeof(conf->master_name_buf))
+ len = sizeof(conf->master_name_buf);
+
+ if (len > 0) pj_memcpy(conf->master_name_buf, name->ptr, len);
+
+ conf->ports[0]->name.ptr = conf->master_name_buf;
+ conf->ports[0]->name.slen = len;
+
+ if (conf->master_port)
+ conf->master_port->info.name = conf->ports[0]->name;
+
+ return PJ_SUCCESS;
+}
+
+/*
* Add stream port to the conference bridge.
*/
PJ_DEF(pj_status_t) pjmedia_conf_add_port( pjmedia_conf *conf,