diff options
author | Benny Prijono <bennylp@teluu.com> | 2006-11-27 09:54:03 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2006-11-27 09:54:03 +0000 |
commit | 8bdc904e9557dc874a1ebf01d3273f418d234b8c (patch) | |
tree | 1cde719a66349ceefaa46e08d399ad8b448be20f /pjmedia | |
parent | c46a5192a1ecc5b03466be67087824841462a9c3 (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.h | 12 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/conference.c | 40 |
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, |