|
|
@ -147,8 +147,8 @@ struct ast_conf_user {
|
|
|
|
char usrvalue[50]; /* Custom User Value */
|
|
|
|
char usrvalue[50]; /* Custom User Value */
|
|
|
|
char namerecloc[AST_MAX_EXTENSION]; /* Name Recorded file Location */
|
|
|
|
char namerecloc[AST_MAX_EXTENSION]; /* Name Recorded file Location */
|
|
|
|
time_t jointime; /* Time the user joined the conference */
|
|
|
|
time_t jointime; /* Time the user joined the conference */
|
|
|
|
int desired_volume; /* Desired volume adjustment */
|
|
|
|
int desired_talk_volume; /* Desired talk volume adjustment */
|
|
|
|
int actual_volume; /* Actual volume adjustment (for channels that can't adjust) */
|
|
|
|
int actual_talk_volume; /* Actual talk volume adjustment (for channels that can't adjust) */
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#define ADMINFLAG_MUTED (1 << 1) /* User is muted */
|
|
|
|
#define ADMINFLAG_MUTED (1 << 1) /* User is muted */
|
|
|
@ -279,7 +279,7 @@ static signed char gain_map[] = {
|
|
|
|
15,
|
|
|
|
15,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
static int set_volume(struct ast_conf_user *user, int volume)
|
|
|
|
static int set_talk_volume(struct ast_conf_user *user, int volume)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
signed char gain_adjust;
|
|
|
|
signed char gain_adjust;
|
|
|
|
|
|
|
|
|
|
|
@ -287,49 +287,49 @@ static int set_volume(struct ast_conf_user *user, int volume)
|
|
|
|
if successful, don't adjust in the frame reading routine
|
|
|
|
if successful, don't adjust in the frame reading routine
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
gain_adjust = gain_map[volume + 5];
|
|
|
|
gain_adjust = gain_map[volume + 5];
|
|
|
|
return ast_channel_setoption(user->chan, AST_OPTION_TXGAIN, &gain_adjust, sizeof(gain_adjust), 0);
|
|
|
|
return ast_channel_setoption(user->chan, AST_OPTION_RXGAIN, &gain_adjust, sizeof(gain_adjust), 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void tweak_volume(struct ast_conf_user *user, enum volume_action action)
|
|
|
|
static void tweak_talk_volume(struct ast_conf_user *user, enum volume_action action)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
switch (action) {
|
|
|
|
switch (action) {
|
|
|
|
case VOL_UP:
|
|
|
|
case VOL_UP:
|
|
|
|
switch (user->desired_volume) {
|
|
|
|
switch (user->desired_talk_volume) {
|
|
|
|
case 5:
|
|
|
|
case 5:
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case 0:
|
|
|
|
case 0:
|
|
|
|
user->desired_volume = 2;
|
|
|
|
user->desired_talk_volume = 2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case -2:
|
|
|
|
case -2:
|
|
|
|
user->desired_volume = 0;
|
|
|
|
user->desired_talk_volume = 0;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
user->desired_volume++;
|
|
|
|
user->desired_talk_volume++;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case VOL_DOWN:
|
|
|
|
case VOL_DOWN:
|
|
|
|
switch (user->desired_volume) {
|
|
|
|
switch (user->desired_talk_volume) {
|
|
|
|
case -5:
|
|
|
|
case -5:
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
case 2:
|
|
|
|
user->desired_volume = 0;
|
|
|
|
user->desired_talk_volume = 0;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case 0:
|
|
|
|
case 0:
|
|
|
|
user->desired_volume = -2;
|
|
|
|
user->desired_talk_volume = -2;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
user->desired_volume--;
|
|
|
|
user->desired_talk_volume--;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* attempt to make the adjustment in the channel driver;
|
|
|
|
/* attempt to make the adjustment in the channel driver;
|
|
|
|
if successful, don't adjust in the frame reading routine
|
|
|
|
if successful, don't adjust in the frame reading routine
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
if (!set_volume(user, user->desired_volume))
|
|
|
|
if (!set_talk_volume(user, user->desired_talk_volume))
|
|
|
|
user->actual_volume = 0;
|
|
|
|
user->actual_talk_volume = 0;
|
|
|
|
else
|
|
|
|
else
|
|
|
|
user->actual_volume = user->desired_volume;
|
|
|
|
user->actual_talk_volume = user->desired_talk_volume;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void adjust_volume(struct ast_frame *f, int vol)
|
|
|
|
static void adjust_volume(struct ast_frame *f, int vol)
|
|
|
@ -1037,8 +1037,8 @@ zapretry:
|
|
|
|
/* if we have just exited from the menu, and the user had a channel-driver
|
|
|
|
/* if we have just exited from the menu, and the user had a channel-driver
|
|
|
|
volume adjustment, restore it
|
|
|
|
volume adjustment, restore it
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
if (!menu_active && menu_was_active && user->desired_volume && !user->actual_volume)
|
|
|
|
if (!menu_active && menu_was_active && user->desired_talk_volume && !user->actual_talk_volume)
|
|
|
|
set_volume(user, user->desired_volume);
|
|
|
|
set_talk_volume(user, user->desired_talk_volume);
|
|
|
|
|
|
|
|
|
|
|
|
menu_was_active = menu_active;
|
|
|
|
menu_was_active = menu_active;
|
|
|
|
|
|
|
|
|
|
|
@ -1187,8 +1187,8 @@ zapretry:
|
|
|
|
if (!f)
|
|
|
|
if (!f)
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
if ((f->frametype == AST_FRAME_VOICE) && (f->subclass == AST_FORMAT_SLINEAR)) {
|
|
|
|
if ((f->frametype == AST_FRAME_VOICE) && (f->subclass == AST_FORMAT_SLINEAR)) {
|
|
|
|
if (user->actual_volume) {
|
|
|
|
if (user->actual_talk_volume) {
|
|
|
|
adjust_volume(f, user->actual_volume);
|
|
|
|
adjust_volume(f, user->actual_talk_volume);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (confflags & CONFFLAG_MONITORTALKER) {
|
|
|
|
if (confflags & CONFFLAG_MONITORTALKER) {
|
|
|
|
int totalsilence;
|
|
|
|
int totalsilence;
|
|
|
@ -1244,8 +1244,8 @@ zapretry:
|
|
|
|
/* if we are entering the menu, and the user has a channel-driver
|
|
|
|
/* if we are entering the menu, and the user has a channel-driver
|
|
|
|
volume adjustment, clear it
|
|
|
|
volume adjustment, clear it
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
if (!menu_active && user->desired_volume && !user->actual_volume)
|
|
|
|
if (!menu_active && user->desired_talk_volume && !user->actual_talk_volume)
|
|
|
|
set_volume(user, 0);
|
|
|
|
set_talk_volume(user, 0);
|
|
|
|
|
|
|
|
|
|
|
|
if (musiconhold) {
|
|
|
|
if (musiconhold) {
|
|
|
|
ast_moh_stop(chan);
|
|
|
|
ast_moh_stop(chan);
|
|
|
@ -1309,7 +1309,7 @@ zapretry:
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case '9':
|
|
|
|
case '9':
|
|
|
|
tweak_volume(user, VOL_UP);
|
|
|
|
tweak_talk_volume(user, VOL_UP);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case '8':
|
|
|
|
case '8':
|
|
|
@ -1317,7 +1317,7 @@ zapretry:
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case '7':
|
|
|
|
case '7':
|
|
|
|
tweak_volume(user, VOL_DOWN);
|
|
|
|
tweak_talk_volume(user, VOL_DOWN);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
default:
|
|
|
@ -1364,7 +1364,7 @@ zapretry:
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case '9':
|
|
|
|
case '9':
|
|
|
|
tweak_volume(user, VOL_UP);
|
|
|
|
tweak_talk_volume(user, VOL_UP);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case '8':
|
|
|
|
case '8':
|
|
|
@ -1372,7 +1372,7 @@ zapretry:
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case '7':
|
|
|
|
case '7':
|
|
|
|
tweak_volume(user, VOL_DOWN);
|
|
|
|
tweak_talk_volume(user, VOL_DOWN);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|