]> 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)
committerMike Jerris <mike@jerris.com>
Thu, 30 Mar 2017 15:29:29 +0000 (10:29 -0500)
src/mod/applications/mod_conference/conference_member.c

index b0083352a5ffeae1b71a4c05e307c595b5a3c97c..20ada623c8d1a365bc734af182acf4a4f491d728 100644 (file)
@@ -567,6 +567,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) {
@@ -1392,8 +1397,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) {