diff options
author | frahaase <fra.haase@googlemail.com> | 2016-08-12 18:23:40 +0200 |
---|---|---|
committer | George Joseph <gjoseph@digium.com> | 2017-02-24 15:13:56 -0600 |
commit | 5b1796f59d01f399c68b05b31fe173fc7ede16dc (patch) | |
tree | 24dfcbf2460e3f3b0191da886d9047e2120f9cfa /apps | |
parent | 094c26aa689664177e156d17bf5e9ab67c442a53 (diff) |
Binaural synthesis (confbridge): DTMF conference management.
DTMF configuration options for the binaural softmix bridge:
toggle binaural rendering (per channel).
ASTERISK-26292
Change-Id: Ibfe708b9fe26097c1798fcbfcc4dc461267d8af8
Diffstat (limited to 'apps')
-rw-r--r-- | apps/app_confbridge.c | 21 | ||||
-rw-r--r-- | apps/confbridge/conf_config_parser.c | 17 | ||||
-rw-r--r-- | apps/confbridge/include/confbridge.h | 5 |
3 files changed, 43 insertions, 0 deletions
diff --git a/apps/app_confbridge.c b/apps/app_confbridge.c index c7c76ff6b..5ec20ddb9 100644 --- a/apps/app_confbridge.c +++ b/apps/app_confbridge.c @@ -438,6 +438,10 @@ const char *conf_get_sound(enum conf_sounds sound, struct bridge_profile_sounds return S_OR(custom_sounds->muted, "conf-muted"); case CONF_SOUND_UNMUTED: return S_OR(custom_sounds->unmuted, "conf-unmuted"); + case CONF_SOUND_BINAURAL_ON: + return S_OR(custom_sounds->binauralon, "confbridge-binaural-on"); + case CONF_SOUND_BINAURAL_OFF: + return S_OR(custom_sounds->binauraloff, "confbridge-binaural-off"); case CONF_SOUND_ONLY_ONE: return S_OR(custom_sounds->onlyone, "conf-onlyone"); case CONF_SOUND_THERE_ARE: @@ -2452,6 +2456,20 @@ static int action_toggle_mute(struct confbridge_conference *conference, conference->b_profile.sounds)) < 0; } +static int action_toggle_binaural(struct confbridge_conference *conference, + struct confbridge_user *user, + struct ast_bridge_channel *bridge_channel) +{ + unsigned int binaural; + ast_bridge_channel_lock_bridge(bridge_channel); + binaural = !bridge_channel->binaural_suspended; + bridge_channel->binaural_suspended = binaural; + ast_bridge_unlock(bridge_channel->bridge); + return play_file(bridge_channel, NULL, (binaural ? + conf_get_sound(CONF_SOUND_BINAURAL_OFF, user->b_profile.sounds) : + conf_get_sound(CONF_SOUND_BINAURAL_ON, user->b_profile.sounds))) < 0; +} + static int action_toggle_mute_participants(struct confbridge_conference *conference, struct confbridge_user *user) { struct confbridge_user *cur_user = NULL; @@ -2670,6 +2688,9 @@ static int execute_menu_entry(struct confbridge_conference *conference, case MENU_ACTION_TOGGLE_MUTE: res |= action_toggle_mute(conference, user, bridge_channel); break; + case MENU_ACTION_TOGGLE_BINAURAL: + action_toggle_binaural(conference, user, bridge_channel); + break; case MENU_ACTION_ADMIN_TOGGLE_MUTE_PARTICIPANTS: if (!isadmin) { break; diff --git a/apps/confbridge/conf_config_parser.c b/apps/confbridge/conf_config_parser.c index 29d7b7f53..4729139c2 100644 --- a/apps/confbridge/conf_config_parser.c +++ b/apps/confbridge/conf_config_parser.c @@ -425,6 +425,8 @@ <enum name="sound_kicked"><para>The sound played to a user who has been kicked from the conference.</para></enum> <enum name="sound_muted"><para>The sound played when the mute option it toggled on.</para></enum> <enum name="sound_unmuted"><para>The sound played when the mute option it toggled off.</para></enum> + <enum name="sound_binaural_on"><para>The sound played when binaural auudio is turned on.</para></enum> + <enum name="sound_binaural_off"><para>The sound played when the binaural audio is turned off.</para></enum> <enum name="sound_only_person"><para>The sound played when the user is the only person in the conference.</para></enum> <enum name="sound_only_one"><para>The sound played to a user when there is only one other person is in the conference.</para></enum> @@ -512,6 +514,9 @@ Toggle turning on and off mute. Mute will make the user silent to everyone else, but the user will still be able to listen in. </para></enum> + <enum name="toggle_binaural"><para> + Toggle turning on and off binaural audio processing. + </para></enum> <enum name="no_op"><para> This action does nothing (No Operation). Its only real purpose exists for being able to reserve a sequence in the config as a menu exit sequence.</para></enum> @@ -916,6 +921,10 @@ static int set_sound(const char *sound_name, const char *sound_file, struct brid ast_string_field_set(sounds, muted, sound_file); } else if (!strcasecmp(sound_name, "sound_unmuted")) { ast_string_field_set(sounds, unmuted, sound_file); + } else if (!strcasecmp(sound_name, "sound_binaural_on")) { + ast_string_field_set(sounds, binauralon, sound_file); + } else if (!strcasecmp(sound_name, "sound_binaural_off")) { + ast_string_field_set(sounds, binauraloff, sound_file); } else if (!strcasecmp(sound_name, "sound_there_are")) { ast_string_field_set(sounds, thereare, sound_file); } else if (!strcasecmp(sound_name, "sound_other_in_party")) { @@ -1141,6 +1150,7 @@ static int add_action_to_menu_entry(struct conf_menu_entry *menu_entry, enum con switch (id) { case MENU_ACTION_NOOP: case MENU_ACTION_TOGGLE_MUTE: + case MENU_ACTION_TOGGLE_BINAURAL: case MENU_ACTION_INCREASE_LISTENING: case MENU_ACTION_DECREASE_LISTENING: case MENU_ACTION_INCREASE_TALKING: @@ -1249,6 +1259,8 @@ static int add_menu_entry(struct conf_menu *menu, const char *dtmf, const char * ast_copy_string(menu_entry->dtmf, dtmf, sizeof(menu_entry->dtmf)); if (!strcasecmp(action, "toggle_mute")) { res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_TOGGLE_MUTE, NULL); + } else if (!strcasecmp(action, "toggle_binaural")) { + res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_TOGGLE_BINAURAL, NULL); } else if (!strcasecmp(action, "no_op")) { res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_NOOP, NULL); } else if (!strcasecmp(action, "increase_listening_volume")) { @@ -1647,6 +1659,8 @@ static char *handle_cli_confbridge_show_bridge_profile(struct ast_cli_entry *e, ast_cli(a->fd,"sound_kicked: %s\n", conf_get_sound(CONF_SOUND_KICKED, b_profile.sounds)); ast_cli(a->fd,"sound_muted: %s\n", conf_get_sound(CONF_SOUND_MUTED, b_profile.sounds)); ast_cli(a->fd,"sound_unmuted: %s\n", conf_get_sound(CONF_SOUND_UNMUTED, b_profile.sounds)); + ast_cli(a->fd,"sound_binaural_on: %s\n", conf_get_sound(CONF_SOUND_BINAURAL_ON, b_profile.sounds)); + ast_cli(a->fd,"sound_binaural_off: %s\n", conf_get_sound(CONF_SOUND_BINAURAL_OFF, b_profile.sounds)); ast_cli(a->fd,"sound_there_are: %s\n", conf_get_sound(CONF_SOUND_THERE_ARE, b_profile.sounds)); ast_cli(a->fd,"sound_other_in_party: %s\n", conf_get_sound(CONF_SOUND_OTHER_IN_PARTY, b_profile.sounds)); ast_cli(a->fd,"sound_place_into_conference: %s\n", conf_get_sound(CONF_SOUND_PLACE_IN_CONF, b_profile.sounds)); @@ -1775,6 +1789,9 @@ static char *handle_cli_confbridge_show_menu(struct ast_cli_entry *e, int cmd, s case MENU_ACTION_TOGGLE_MUTE: ast_cli(a->fd, "toggle_mute"); break; + case MENU_ACTION_TOGGLE_BINAURAL: + ast_cli(a->fd, "toggle_binaural"); + break; case MENU_ACTION_NOOP: ast_cli(a->fd, "no_op"); break; diff --git a/apps/confbridge/include/confbridge.h b/apps/confbridge/include/confbridge.h index f91f2dc89..584499ff3 100644 --- a/apps/confbridge/include/confbridge.h +++ b/apps/confbridge/include/confbridge.h @@ -93,6 +93,7 @@ enum conf_menu_action_id { MENU_ACTION_RELEASE_SINGLE_VIDEO_SRC, MENU_ACTION_PARTICIPANT_COUNT, MENU_ACTION_ADMIN_TOGGLE_MUTE_PARTICIPANTS, + MENU_ACTION_TOGGLE_BINAURAL, }; /*! The conference menu action contains both @@ -170,6 +171,8 @@ enum conf_sounds { CONF_SOUND_PARTICIPANTS_MUTED, CONF_SOUND_PARTICIPANTS_UNMUTED, CONF_SOUND_BEGIN, + CONF_SOUND_BINAURAL_ON, + CONF_SOUND_BINAURAL_OFF, }; struct bridge_profile_sounds { @@ -197,6 +200,8 @@ struct bridge_profile_sounds { AST_STRING_FIELD(participantsmuted); AST_STRING_FIELD(participantsunmuted); AST_STRING_FIELD(begin); + AST_STRING_FIELD(binauralon); + AST_STRING_FIELD(binauraloff); ); }; |