diff options
-rw-r--r-- | pjlib/src/pj/config.c | 2 | ||||
-rw-r--r-- | pjsip-apps/src/pjsua/pjsua_app.c | 35 | ||||
-rw-r--r-- | pjsip/include/pjsua-lib/pjsua.h | 4 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_media.c | 19 |
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; } |