summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pjmedia/src/pjmedia/conference.c20
-rw-r--r--pjsip-apps/src/pjsua/pjsua_app.c26
-rw-r--r--pjsip/include/pjsua-lib/pjsua.h51
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c36
4 files changed, 125 insertions, 8 deletions
diff --git a/pjmedia/src/pjmedia/conference.c b/pjmedia/src/pjmedia/conference.c
index 026f376a..75837c42 100644
--- a/pjmedia/src/pjmedia/conference.c
+++ b/pjmedia/src/pjmedia/conference.c
@@ -61,6 +61,7 @@ static FILE *fhnd_rec;
#define SIGNATURE PJMEDIA_PORT_SIGNATURE('C', 'O', 'N', 'F')
#define SIGNATURE_PORT PJMEDIA_PORT_SIGNATURE('C', 'O', 'N', 'P')
+/* Normal level is hardcodec to 128 in all over places */
#define NORMAL_LEVEL 128
#define SLOT_TYPE unsigned
#define INVALID_SLOT ((SLOT_TYPE)-1)
@@ -1137,7 +1138,10 @@ PJ_DEF(pj_status_t) pjmedia_conf_adjust_rx_level( pjmedia_conf *conf,
PJ_ASSERT_RETURN(conf->ports[slot] != NULL, PJ_EINVAL);
/* Value must be from -128 to +127 */
- PJ_ASSERT_RETURN(adj_level >= -128 && adj_level <= 127, PJ_EINVAL);
+ /* Disabled, you can put more than +127, at your own risk:
+ PJ_ASSERT_RETURN(adj_level >= -128 && adj_level <= 127, PJ_EINVAL);
+ */
+ PJ_ASSERT_RETURN(adj_level >= -128, PJ_EINVAL);
conf_port = conf->ports[slot];
@@ -1164,7 +1168,10 @@ PJ_DEF(pj_status_t) pjmedia_conf_adjust_tx_level( pjmedia_conf *conf,
PJ_ASSERT_RETURN(conf->ports[slot] != NULL, PJ_EINVAL);
/* Value must be from -128 to +127 */
- PJ_ASSERT_RETURN(adj_level >= -128 && adj_level <= 127, PJ_EINVAL);
+ /* Disabled, you can put more than +127,, at your own risk:
+ PJ_ASSERT_RETURN(adj_level >= -128 && adj_level <= 127, PJ_EINVAL);
+ */
+ PJ_ASSERT_RETURN(adj_level >= -128, PJ_EINVAL);
conf_port = conf->ports[slot];
@@ -1364,7 +1371,8 @@ static pj_status_t write_port(pjmedia_conf *conf, struct conf_port *cport,
* 16bit sample storage.
*/
itemp = input[j];
- itemp = itemp * adj / NORMAL_LEVEL;
+ /*itemp = itemp * adj / NORMAL_LEVEL; */
+ itemp = (itemp * adj) >> 7;
/* Clip the signal if it's too loud */
if (itemp > 32767) itemp = 32767;
@@ -1396,7 +1404,8 @@ static pj_status_t write_port(pjmedia_conf *conf, struct conf_port *cport,
itemp = unsigned2pcm(cport->mix_buf[j] / cport->src_level);
/* Adjust the level */
- itemp = itemp * adj_level / NORMAL_LEVEL;
+ /*itemp = itemp * adj_level / NORMAL_LEVEL;*/
+ itemp = (itemp * adj_level) >> 7;
/* Clip the signal if it's too loud */
if (itemp > 32767) itemp = 32767;
@@ -1650,7 +1659,8 @@ static pj_status_t get_frame(pjmedia_port *this_port,
* 16bit sample storage.
*/
itemp = input[j];
- itemp = itemp * adj / NORMAL_LEVEL;
+ /*itemp = itemp * adj / NORMAL_LEVEL;*/
+ itemp = (itemp * adj) >> 7;
/* Clip the signal if it's too loud */
if (itemp > 32767) itemp = 32767;
diff --git a/pjsip-apps/src/pjsua/pjsua_app.c b/pjsip-apps/src/pjsua/pjsua_app.c
index 24868a9f..42395174 100644
--- a/pjsip-apps/src/pjsua/pjsua_app.c
+++ b/pjsip-apps/src/pjsua/pjsua_app.c
@@ -76,6 +76,9 @@ static struct app_config
pjmedia_snd_port *snd;
#endif
+ float mic_level,
+ speaker_level;
+
} app_config;
@@ -209,6 +212,7 @@ static void default_config(struct app_config *cfg)
cfg->rec_id = PJSUA_INVALID_ID;
cfg->wav_port = PJSUA_INVALID_ID;
cfg->rec_port = PJSUA_INVALID_ID;
+ cfg->mic_level = cfg->speaker_level = 1.0;
}
@@ -848,7 +852,7 @@ static pj_status_t parse_args(int argc, char *argv[],
default:
PJ_LOG(1,(THIS_FILE,
"Argument \"%s\" is not valid. Use --help to see help",
- argv[pj_optind-1]));
+ argv[pj_optind]));
return -1;
}
}
@@ -1837,7 +1841,7 @@ static void keystroke_help(void)
puts("| # Send DTMF string | cl List ports | d Dump status |");
puts("| dq Dump curr. call quality | cc Connect port | dd Dump detailed |");
puts("| | cd Disconnect port | dc Dump config |");
- puts("| S Send arbitrary REQUEST | | f Save config |");
+ puts("| S Send arbitrary REQUEST | V Adjust audio Volume | f Save config |");
puts("+------------------------------+--------------------------+-------------------+");
puts("| q QUIT |");
puts("+=============================================================================+");
@@ -2713,6 +2717,24 @@ void console_app_main(const pj_str_t *uri_to_call)
}
break;
+ case 'V':
+ /* Adjust audio volume */
+ sprintf(buf, "Adjust mic level: [%4.1fx] ", app_config.mic_level);
+ if (simple_input(buf,text,sizeof(text))) {
+ char *err;
+ app_config.mic_level = (float)strtod(text, &err);
+ pjsua_conf_adjust_rx_level(0, app_config.mic_level);
+ }
+ sprintf(buf, "Adjust speaker level: [%4.1fx] ",
+ app_config.speaker_level);
+ if (simple_input(buf,text,sizeof(text))) {
+ char *err;
+ app_config.speaker_level = (float)strtod(text, &err);
+ pjsua_conf_adjust_tx_level(0, app_config.speaker_level);
+ }
+
+ break;
+
case 'd':
if (menuin[1] == 'c') {
char settings[2000];
diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h
index cb8d4643..87481b1d 100644
--- a/pjsip/include/pjsua-lib/pjsua.h
+++ b/pjsip/include/pjsua-lib/pjsua.h
@@ -2625,6 +2625,57 @@ PJ_DECL(pj_status_t) pjsua_conf_disconnect(pjsua_conf_port_id source,
pjsua_conf_port_id sink);
+/**
+ * Adjust the signal level to be transmitted from the bridge to the
+ * specified port by making it louder or quieter.
+ *
+ * @param slot The conference bridge slot number.
+ * @param level Signal level adjustment. Value 1.0 means no level
+ * adjustment, while value 0 means to mute the port.
+ *
+ * @return PJ_SUCCESS on success, or the appropriate error code.
+ */
+PJ_DECL(pj_status_t) pjsua_conf_adjust_tx_level(pjsua_conf_port_id slot,
+ float level);
+
+/**
+ * Adjust the signal level to be received from the specified port (to
+ * the bridge) by making it louder or quieter.
+ *
+ * @param slot The conference bridge slot number.
+ * @param level Signal level adjustment. Value 1.0 means no level
+ * adjustment, while value 0 means to mute the port.
+ *
+ * @return PJ_SUCCESS on success, or the appropriate error code.
+ */
+PJ_DECL(pj_status_t) pjsua_conf_adjust_rx_level(pjsua_conf_port_id slot,
+ float level);
+
+/**
+ * Get last signal level transmitted to or received from the specified port.
+ * The signal level is an integer value in zero to 255, with zero indicates
+ * no signal, and 255 indicates the loudest signal level.
+ *
+ * @param slot The conference bridge slot number.
+ * @param tx_level Optional argument to receive the level of signal
+ * transmitted to the specified port (i.e. the direction
+ * is from the bridge to the port).
+ * @param rx_level Optional argument to receive the level of signal
+ * received from the port (i.e. the direction is from the
+ * port to the bridge).
+ *
+ * @return PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t) pjsua_conf_get_signal_level(pjsua_conf_port_id slot,
+ unsigned *tx_level,
+ unsigned *rx_level);
+
+/**
+ *
+ */
+
+
+
/*****************************************************************************
* File player.
*/
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index 87d7d6df..07af5fbb 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -673,6 +673,40 @@ PJ_DEF(pj_status_t) pjsua_conf_disconnect( pjsua_conf_port_id source,
}
+/*
+ * Adjust the signal level to be transmitted from the bridge to the
+ * specified port by making it louder or quieter.
+ */
+PJ_DEF(pj_status_t) pjsua_conf_adjust_tx_level(pjsua_conf_port_id slot,
+ float level)
+{
+ return pjmedia_conf_adjust_tx_level(pjsua_var.mconf, slot,
+ (int)((level-1) * 128));
+}
+
+/*
+ * Adjust the signal level to be received from the specified port (to
+ * the bridge) by making it louder or quieter.
+ */
+PJ_DEF(pj_status_t) pjsua_conf_adjust_rx_level(pjsua_conf_port_id slot,
+ float level)
+{
+ return pjmedia_conf_adjust_rx_level(pjsua_var.mconf, slot,
+ (int)((level-1) * 128));
+}
+
+
+/*
+ * Get last signal level transmitted to or received from the specified port.
+ */
+PJ_DEF(pj_status_t) pjsua_conf_get_signal_level(pjsua_conf_port_id slot,
+ unsigned *tx_level,
+ unsigned *rx_level)
+{
+ return pjmedia_conf_get_signal_level(pjsua_var.mconf, slot,
+ tx_level, rx_level);
+}
+
/*****************************************************************************
* File player.
*/
@@ -1008,7 +1042,7 @@ PJ_DEF(pj_status_t) pjsua_set_snd_dev( int capture_dev,
int playback_dev)
{
pjmedia_port *conf_port;
- const pjmedia_snd_dev_info *cap_info, *play_info;
+ const pjmedia_snd_dev_info *play_info;
unsigned clock_rates[] = { 0, 22050, 44100, 48000, 11025, 32000, 8000};
unsigned selected_clock_rate = 0;
unsigned i;