]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-11105: core: fix in switch_core_file_write() for audio channels > 2 ( eg: for...
authorDragos Oancea <dragos.oancea@vonage.com>
Wed, 11 Apr 2018 14:49:25 +0000 (15:49 +0100)
committerDragos Oancea <dragos.oancea@vonage.com>
Wed, 11 Apr 2018 14:51:43 +0000 (15:51 +0100)
src/switch_core_file.c

index f7cfd7b1c3e39e175e06ae0171091fb744b4366f..72690e8035e4cf8c3a04a17614b979f8f2116595 100644 (file)
@@ -608,6 +608,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_file_write(switch_file_handle_t *fh,
 
        if (fh->pre_buffer) {
                switch_size_t rlen, blen;
+               switch_size_t datalen_adj = fh->pre_buffer_datalen;
                switch_status_t status = SWITCH_STATUS_SUCCESS;
                int asis = switch_test_flag(fh, SWITCH_FILE_NATIVE);
 
@@ -615,8 +616,12 @@ SWITCH_DECLARE(switch_status_t) switch_core_file_write(switch_file_handle_t *fh,
 
                rlen = switch_buffer_inuse(fh->pre_buffer);
 
-               if (rlen >= fh->pre_buffer_datalen) {
-                       if ((blen = switch_buffer_read(fh->pre_buffer, fh->pre_buffer_data, fh->pre_buffer_datalen))) {
+               if (fh->pre_buffer_datalen % fh->channels) {
+                       datalen_adj = fh->pre_buffer_datalen - (fh->pre_buffer_datalen % fh->channels);
+               }
+
+               if (rlen >= datalen_adj) {
+                       if ((blen = switch_buffer_read(fh->pre_buffer, fh->pre_buffer_data, datalen_adj))) {
                                if (!asis)
                                        blen /= 2;
                                if (fh->channels > 1)