summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-06-19 14:49:14 +0000
committerBenny Prijono <bennylp@teluu.com>2006-06-19 14:49:14 +0000
commitc737c25054a22df28cdfbc3ec470e0877da6cb0b (patch)
treea4f266a8f2f7ef2d1aeab27b31caf87185234eb7
parente301abfa0b1b8fcc1a54af18b602e293227693e3 (diff)
Re-live --quality options in pjsua
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@528 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjsip-apps/src/pjsua/pjsua_app.c41
-rw-r--r--pjsip/build/Makefile2
-rw-r--r--pjsip/include/pjsua-lib/pjsua.h13
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c21
4 files changed, 45 insertions, 32 deletions
diff --git a/pjsip-apps/src/pjsua/pjsua_app.c b/pjsip-apps/src/pjsua/pjsua_app.c
index 4a32ac8a..ded37e2e 100644
--- a/pjsip-apps/src/pjsua/pjsua_app.c
+++ b/pjsip-apps/src/pjsua/pjsua_app.c
@@ -43,7 +43,6 @@ static struct app_config
unsigned codec_cnt;
pj_str_t codec_arg[32];
- unsigned clock_rate;
pj_bool_t null_audio;
pj_str_t wav_file;
pjsua_player_id wav_id;
@@ -51,8 +50,6 @@ static struct app_config
pj_bool_t auto_play;
pj_bool_t auto_loop;
unsigned ptime;
- unsigned quality;
- unsigned complexity;
unsigned auto_answer;
unsigned duration;
} app_config;
@@ -112,9 +109,8 @@ static void usage(void)
puts (" --auto-play Automatically play the file (to incoming calls only)");
puts (" --auto-loop Automatically loop incoming RTP to outgoing RTP");
puts (" --rtp-port=N Base port to try for RTP (default=4000)");
+ puts (" --quality=N Specify media quality (0-10, default=10)");
/*
- puts (" --complexity=N Specify encoding complexity (0-10, default=none(-1))");
- puts (" --quality=N Specify encoding quality (0-10, default=4)");
puts (" --ptime=MSEC Override codec ptime to MSEC (default=specific)");
*/
puts ("");
@@ -561,15 +557,6 @@ static pj_status_t parse_args(int argc, char *argv[],
}
break;
- case OPT_QUALITY:
- cfg->quality = my_atoi(pj_optarg);
- if (cfg->quality < 0 || cfg->quality > 10) {
- PJ_LOG(1,(THIS_FILE,
- "Error: invalid --quality (expecting 0-10"));
- return -1;
- }
- break;
-
case OPT_DURATION:
cfg->duration = my_atoi(pj_optarg);
break;
@@ -585,6 +572,15 @@ static pj_status_t parse_args(int argc, char *argv[],
*/
+ case OPT_QUALITY:
+ cfg->media_cfg.quality = my_atoi(pj_optarg);
+ if (cfg->media_cfg.quality < 0 || cfg->media_cfg.quality > 10) {
+ PJ_LOG(1,(THIS_FILE,
+ "Error: invalid --quality (expecting 0-10"));
+ return -1;
+ }
+ break;
+
case OPT_AUTO_ANSWER:
cfg->auto_answer = my_atoi(pj_optarg);
if (cfg->auto_answer < 100 || cfg->auto_answer > 699) {
@@ -831,25 +827,18 @@ static int write_settings(const struct app_config *config,
pj_strcat2(&cfg, line);
}
/* Media clock rate. */
- if (config->clock_rate) {
+ if (config->media_cfg.clock_rate) {
pj_ansi_sprintf(line, "--clock-rate %d\n",
- config->clock_rate);
+ config->media_cfg.clock_rate);
pj_strcat2(&cfg, line);
}
-
-
- /* Encoding quality and complexity */
- if (config->quality > 0) {
+ if (config->media_cfg.quality != 10) {
pj_ansi_sprintf(line, "--quality %d\n",
- config->quality);
- pj_strcat2(&cfg, line);
- }
- if (config->complexity > 0) {
- pj_ansi_sprintf(line, "--complexity %d\n",
- config->complexity);
+ config->media_cfg.quality);
pj_strcat2(&cfg, line);
}
+
/* ptime */
if (config->ptime) {
pj_ansi_sprintf(line, "--ptime %d\n",
diff --git a/pjsip/build/Makefile b/pjsip/build/Makefile
index 1fd183aa..30e61e10 100644
--- a/pjsip/build/Makefile
+++ b/pjsip/build/Makefile
@@ -126,7 +126,7 @@ pjsua-lib:
echo Making $@
$(MAKE) -f $(RULES_MAK) APP=PJSUA_LIB app=pjsua-lib $@
-clean depend realclean:
+clean depend:
$(MAKE) -f $(RULES_MAK) APP=PJSIP app=pjsip $@
$(MAKE) -f $(RULES_MAK) APP=PJSIP_UA app=pjsip-ua $@
$(MAKE) -f $(RULES_MAK) APP=PJSIP_SIMPLE app=pjsip-simple $@
diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h
index 90ba0f42..466c3196 100644
--- a/pjsip/include/pjsua-lib/pjsua.h
+++ b/pjsip/include/pjsua-lib/pjsua.h
@@ -2037,7 +2037,17 @@ struct pjsua_media_config
*/
unsigned thread_cnt;
-
+ /**
+ * Media quality, 0-10, according to this table:
+ * 8-10: resampling use large filter,
+ * 3-7: resampling use small filter,
+ * 1-2: resampling use linear.
+ * The media quality also sets speex codec quality/complexity to the
+ * number.
+ *
+ * Default: 10.
+ */
+ unsigned quality;
};
@@ -2054,6 +2064,7 @@ PJ_INLINE(void) pjsua_media_config_default(pjsua_media_config *cfg)
cfg->max_media_ports = 32;
cfg->has_ioqueue = PJ_TRUE;
cfg->thread_cnt = 1;
+ cfg->quality = 10;
}
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index 2dddd634..730e3d89 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -37,6 +37,7 @@ static void close_snd_dev(void);
pj_status_t pjsua_media_subsys_init(const pjsua_media_config *cfg)
{
pj_str_t codec_id;
+ unsigned opt;
pj_status_t status;
/* Copy configuration */
@@ -75,7 +76,8 @@ pj_status_t pjsua_media_subsys_init(const pjsua_media_config *cfg)
/* Register speex. */
status = pjmedia_codec_speex_init(pjsua_var.med_endpt,
PJMEDIA_SPEEX_NO_UWB,
- -1, -1);
+ pjsua_var.media_cfg.quality,
+ pjsua_var.media_cfg.quality);
if (status != PJ_SUCCESS) {
pjsua_perror(THIS_FILE, "Error initializing Speex codec",
status);
@@ -129,6 +131,18 @@ pj_status_t pjsua_media_subsys_init(const pjsua_media_config *cfg)
pjsua_var.mconf_cfg.channel_count = 1;
pjsua_var.mconf_cfg.bits_per_sample = 16;
+ /* Init options for conference bridge. */
+ opt = PJMEDIA_CONF_NO_DEVICE;
+ if (pjsua_var.media_cfg.quality >= 3 &&
+ pjsua_var.media_cfg.quality <= 7)
+ {
+ opt |= PJMEDIA_CONF_SMALL_FILTER;
+ }
+ else if (pjsua_var.media_cfg.quality < 3) {
+ opt |= PJMEDIA_CONF_USE_LINEAR;
+ }
+
+
/* Init conference bridge. */
status = pjmedia_conf_create(pjsua_var.pool,
pjsua_var.media_cfg.max_media_ports,
@@ -136,8 +150,7 @@ pj_status_t pjsua_media_subsys_init(const pjsua_media_config *cfg)
pjsua_var.mconf_cfg.channel_count,
pjsua_var.mconf_cfg.samples_per_frame,
pjsua_var.mconf_cfg.bits_per_sample,
- PJMEDIA_CONF_NO_DEVICE,
- &pjsua_var.mconf);
+ opt, &pjsua_var.mconf);
if (status != PJ_SUCCESS) {
pjsua_perror(THIS_FILE,
"Media stack initialization has returned error",
@@ -532,7 +545,7 @@ PJ_DEF(pj_status_t) pjsua_conf_get_port_info( pjsua_conf_port_id id,
pjsua_conf_port_info *info)
{
pjmedia_conf_port_info cinfo;
- unsigned i, count;
+ unsigned i;
pj_status_t status;
status = pjmedia_conf_get_port_info( pjsua_var.mconf, id, &cinfo);