summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pjlib/src/pj/config.c2
-rw-r--r--pjsip-apps/src/pjsua/pjsua_app.c35
-rw-r--r--pjsip/include/pjsua-lib/pjsua.h4
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c19
4 files changed, 55 insertions, 5 deletions
diff --git a/pjlib/src/pj/config.c b/pjlib/src/pj/config.c
index 3a49dc9e..369a2872 100644
--- a/pjlib/src/pj/config.c
+++ b/pjlib/src/pj/config.c
@@ -21,7 +21,7 @@
#include <pj/ioqueue.h>
static const char *id = "config.c";
-const char *PJ_VERSION = "0.5.7";
+const char *PJ_VERSION = "0.5.7.1";
PJ_DEF(void) pj_dump_config(void)
{
diff --git a/pjsip-apps/src/pjsua/pjsua_app.c b/pjsip-apps/src/pjsua/pjsua_app.c
index f76aebdd..4aaa212d 100644
--- a/pjsip-apps/src/pjsua/pjsua_app.c
+++ b/pjsip-apps/src/pjsua/pjsua_app.c
@@ -52,6 +52,7 @@ static struct app_config
pjsua_conf_port_id wav_port;
pj_bool_t auto_play;
pj_bool_t auto_loop;
+ pj_bool_t auto_conf;
unsigned ptime;
unsigned auto_answer;
unsigned duration;
@@ -122,6 +123,7 @@ static void usage(void)
puts (" --play-file=file Play WAV file in conference bridge");
puts (" --auto-play Automatically play the file (to incoming calls only)");
puts (" --auto-loop Automatically loop incoming RTP to outgoing RTP");
+ puts (" --auto-conf Automatically put calls in conference with others");
puts (" --rtp-port=N Base port to try for RTP (default=4000)");
puts (" --quality=N Specify media quality (0-10, default=6)");
puts (" --ptime=MSEC Override codec ptime to MSEC (default=specific)");
@@ -580,6 +582,10 @@ static pj_status_t parse_args(int argc, char *argv[],
cfg->auto_loop = 1;
break;
+ case OPT_AUTO_CONF:
+ cfg->auto_conf = 1;
+ break;
+
case OPT_PLAY_FILE:
cfg->wav_file = pj_str(pj_optarg);
break;
@@ -922,6 +928,8 @@ static int write_settings(const struct app_config *config,
pj_strcat2(&cfg, "--auto-play\n");
if (config->auto_loop)
pj_strcat2(&cfg, "--auto-loop\n");
+ if (config->auto_conf)
+ pj_strcat2(&cfg, "--auto-conf\n");
if (config->wav_file.slen) {
pj_ansi_sprintf(line, "--play-file %s\n",
config->wav_file.ptr);
@@ -1248,6 +1256,33 @@ static void on_call_media_state(pjsua_call_id call_id)
connect_sound = PJ_FALSE;
}
+ /* Put call in conference with other calls, if desired */
+ if (app_config.auto_conf) {
+ pjsua_call_id call_ids[PJSUA_MAX_CALLS];
+ unsigned call_cnt=0;
+ unsigned i;
+
+ /* Get all calls, and establish media connection between
+ * this call and other calls.
+ */
+ pjsua_enum_calls(call_ids, &call_cnt);
+ for (i=0; i<call_cnt; ++i) {
+ if (call_ids[i] == call_id)
+ continue;
+
+ if (!pjsua_call_has_media(call_ids[i]))
+ continue;
+
+ pjsua_conf_connect(call_info.conf_slot,
+ pjsua_call_get_conf_port(call_ids[i]));
+ pjsua_conf_connect(pjsua_call_get_conf_port(call_ids[i]),
+ call_info.conf_slot);
+ }
+
+ /* Also connect call to local sound device */
+ connect_sound = PJ_TRUE;
+ }
+
/* Otherwise connect to sound device */
if (connect_sound) {
pjsua_conf_connect(call_info.conf_slot, 0);
diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h
index e2ae3857..ce4a018d 100644
--- a/pjsip/include/pjsua-lib/pjsua.h
+++ b/pjsip/include/pjsua-lib/pjsua.h
@@ -2085,8 +2085,8 @@ struct pjsua_media_config
/**
* Media quality, 0-10, according to this table:
- * 8-10: resampling use large filter,
- * 3-7: resampling use small filter,
+ * 5-10: resampling use large filter,
+ * 3-4: resampling use small filter,
* 1-2: resampling use linear.
* The media quality also sets speex codec quality/complexity to the
* number.
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index 849d1952..0e24e4de 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -75,7 +75,7 @@ pj_status_t pjsua_media_subsys_init(const pjsua_media_config *cfg)
#if PJMEDIA_HAS_SPEEX_CODEC
/* Register speex. */
status = pjmedia_codec_speex_init(pjsua_var.med_endpt,
- PJMEDIA_SPEEX_NO_UWB,
+ 0,
pjsua_var.media_cfg.quality,
pjsua_var.media_cfg.quality);
if (status != PJ_SUCCESS) {
@@ -83,6 +83,21 @@ pj_status_t pjsua_media_subsys_init(const pjsua_media_config *cfg)
status);
return status;
}
+
+ /* Set speex/16000 to higher priority*/
+ codec_id = pj_str("speex/16000");
+ pjmedia_codec_mgr_set_codec_priority(
+ pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
+ &codec_id, PJMEDIA_CODEC_PRIO_NORMAL+2);
+
+ /* Set speex/8000 to next higher priority*/
+ codec_id = pj_str("speex/8000");
+ pjmedia_codec_mgr_set_codec_priority(
+ pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
+ &codec_id, PJMEDIA_CODEC_PRIO_NORMAL+1);
+
+
+
#endif /* PJMEDIA_HAS_SPEEX_CODEC */
#if PJMEDIA_HAS_ILBC_CODEC
@@ -145,7 +160,7 @@ pj_status_t pjsua_media_subsys_init(const pjsua_media_config *cfg)
/* Init options for conference bridge. */
opt = PJMEDIA_CONF_NO_DEVICE;
if (pjsua_var.media_cfg.quality >= 3 &&
- pjsua_var.media_cfg.quality <= 7)
+ pjsua_var.media_cfg.quality <= 4)
{
opt |= PJMEDIA_CONF_SMALL_FILTER;
}