]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-8338 a few regressions that were relying on this bug to function properly in stere...
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 20 Oct 2015 16:00:12 +0000 (11:00 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 20 Oct 2015 16:00:12 +0000 (11:00 -0500)
src/switch_ivr_play_say.c
src/switch_pcm.c

index 27a40f537ca54a8fd04b576e8e365d525e8c7d3e..968c7d031daf4aa0ee00f54fb6545d59d871e0d4 100644 (file)
@@ -1047,7 +1047,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess
        switch_channel_t *channel = switch_core_session_get_channel(session);
        int16_t *abuf = NULL;
        switch_dtmf_t dtmf = { 0 };
-       uint32_t interval = 0, samples = 0, framelen, sample_start = 0;
+       uint32_t interval = 0, samples = 0, framelen, sample_start = 0, channels = 1;
        uint32_t ilen = 0;
        switch_size_t olen = 0, llen = 0;
        switch_frame_t write_frame = { 0 };
@@ -1388,6 +1388,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess
                        write_frame.codec = switch_core_session_get_read_codec(session);
                        samples = read_impl.samples_per_packet;
                        framelen = read_impl.encoded_bytes_per_packet;
+                       channels = read_impl.number_of_channels;
                        if (framelen == 0) {
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "%s cannot play or record native files with variable length data\n", switch_channel_get_name(channel));
                                
@@ -1410,6 +1411,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess
                        write_frame.codec = &codec;
                        samples = codec.implementation->samples_per_packet;
                        framelen = codec.implementation->decoded_bytes_per_packet;
+                       channels = codec.implementation->number_of_channels;
                }
 
                last_native = test_native;
@@ -1417,8 +1419,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess
                if (timer_name && !timer.samplecount) {
                        uint32_t len;
 
-                       len = samples * 2;
-                       if (switch_core_timer_init(&timer, timer_name, interval, samples / codec.implementation->number_of_channels, pool) != SWITCH_STATUS_SUCCESS) {
+                       len = samples * 2 * channels;
+                       if (switch_core_timer_init(&timer, timer_name, interval, samples, pool) != SWITCH_STATUS_SUCCESS) {
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Setup timer failed!\n");
                                switch_core_codec_destroy(&codec);
                                switch_core_session_io_write_lock(session);
@@ -1444,7 +1446,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess
                        switch_core_service_session(session);
                }
 
-               ilen = samples;
+               ilen = samples * channels;
 
                if (switch_event_create(&event, SWITCH_EVENT_PLAYBACK_START) == SWITCH_STATUS_SUCCESS) {
                        switch_channel_event_set_data(channel, event);
index 12a921837153a754c6444a2065609db93ec42bec..cc034b6be7135d4229877a420a52fe54252a7e06 100644 (file)
@@ -321,7 +321,7 @@ static void mod_g711_load(switch_loadable_module_interface_t ** module_interface
                                                                                         48000, /* actual samples transferred per second */
                                                                                         64000 * 6 * 2, /* bits transferred per second */
                                                                                         mpf * count,   /* number of microseconds per frame */
-                                                                                        spf * count * 6 * 2,   /* number of samples per frame */
+                                                                                        spf * count * 6,       /* number of samples per frame */
                                                                                         bpf * count * 6 * 2,   /* number of bytes per frame decompressed */
                                                                                         ebpf * count * 6 * 2,  /* number of bytes per frame compressed */
                                                                                         2,     /* number of channels represented */