]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10087: fix for volume level per member of conference (volume level when playing...
authorDragos Oancea <dragos.oancea@nexmo.com>
Mon, 20 Feb 2017 16:20:09 +0000 (16:20 +0000)
committerDragos Oancea <dragos.oancea@nexmo.com>
Fri, 3 Mar 2017 13:54:09 +0000 (13:54 +0000)
src/mod/applications/mod_conference/conference_member.c

index 2dc5ce5a5f2c9b42645e6397415e57dce0e1626e..6b32ea28f795b36ba9aedcdc031e1e3eba73b30f 100644 (file)
@@ -566,6 +566,11 @@ void conference_member_add_file_data(conference_member_t *member, int16_t *data,
                        } else if (member->fnode->type == NODE_TYPE_FILE) {
                                switch_core_file_read(&member->fnode->fh, file_frame, &file_sample_len);
                                file_data_len = file_sample_len * 2 * member->fnode->fh.channels;
+                                       if (member->fnode->fh.vol) {
+                                               switch_change_sln_volume_granular((void *)file_frame, (uint32_t)file_sample_len * member->fnode->fh.channels,
+                                                                                                                 member->fnode->fh.vol);
+                                       }
+
                        }
 
                        if (file_sample_len <= 0) {
@@ -1398,8 +1403,14 @@ switch_status_t conference_member_play_file(conference_member_t *member, char *f
        fnode->file = switch_core_strdup(fnode->pool, file);
 
        if (fnode->fh.params) {
+               const char *vol = switch_event_get_header(fnode->fh.params, "vol");
                const char *position = switch_event_get_header(fnode->fh.params, "position");
 
+               if (!zstr(vol)) {
+                       fnode->fh.vol = atoi(vol);
+                               switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(member->session), SWITCH_LOG_DEBUG, "Set playback volume for file: %d\n",fnode->fh.vol);
+               }
+
                if (!bad_params && !zstr(position) && member->conference->channels == 2) {
                        fnode->al = conference_al_create(pool);
                        if (conference_al_parse_position(fnode->al, position) != SWITCH_STATUS_SUCCESS) {