]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
update
authorAnthony Minessale <anthony.minessale@gmail.com>
Fri, 1 Feb 2008 18:43:25 +0000 (18:43 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Fri, 1 Feb 2008 18:43:25 +0000 (18:43 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7465 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/include/switch_types.h
src/mod/applications/mod_conference/mod_conference.c

index 522e5d73378b4c928d45c0341f96c85dd04ba80b..69df21137ac7a43aec5895f16f715b5f802bc6b5 100644 (file)
@@ -296,7 +296,7 @@ SWITCH_DECLARE_DATA extern switch_directories SWITCH_GLOBAL_dirs;
 
 #define SWITCH_MAX_STACKS 32
 #define SWITCH_THREAD_STACKSIZE 240 * 1024
-#define SWITCH_RECOMMENDED_BUFFER_SIZE 3968
+#define SWITCH_RECOMMENDED_BUFFER_SIZE 8000
 #define SWITCH_MAX_CODECS 30
 #define SWITCH_MAX_STATE_HANDLERS 30
 #define SWITCH_CORE_QUEUE_LEN 100000
index 9a22fe38ae350a04de985d9c6f1abdb1070ca1ac..0d3cf9c5aa5ce9004d9a694ffbdd27a8fd807c75 100644 (file)
@@ -255,14 +255,11 @@ struct conference_member {
        uint8_t *frame;
     uint32_t frame_size;
        uint8_t *mux_frame;
-       uint32_t buflen;
-       uint32_t framelen;
        uint32_t read;
        int32_t energy_level;
        int32_t volume_in_level;
        int32_t volume_out_level;
        uint32_t native_rate;
-       switch_audio_resampler_t *mux_resampler;
        switch_audio_resampler_t *read_resampler;
     int16_t *resample_out;
     uint32_t resample_out_len;
@@ -731,7 +728,6 @@ static void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t * thread,
        file_frame = switch_core_alloc(conference->pool, SWITCH_RECOMMENDED_BUFFER_SIZE);
        async_file_frame = switch_core_alloc(conference->pool, SWITCH_RECOMMENDED_BUFFER_SIZE);
 
-
        if (switch_core_timer_init(&timer, conference->timer_name, conference->interval, samples, conference->pool) == SWITCH_STATUS_SUCCESS) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "setup timer success interval: %u  samples: %u\n", conference->interval, samples);
        } else {
@@ -765,44 +761,17 @@ static void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t * thread,
                /* Read one frame of audio from each member channel and save it for redistribution */
                for (imember = conference->members; imember; imember = imember->next) {
                        uint32_t buf_read = 0;
-                       uint32_t buf_read_max = imember->framelen;
                        total++;
                        imember->read = 0;
 
                        switch_clear_flag_locked(imember, MFLAG_HAS_AUDIO);
                        switch_mutex_lock(imember->audio_in_mutex);
 
-                       if (imember->read_resampler) {
-                               buf_read_max = bytes;
-                       }
-
-                       if ((buf_read = (uint32_t) switch_buffer_read(imember->audio_buffer, imember->frame, buf_read_max))) {
-                               /* If the caller is not at the right sample rate resample him to suit and buffer accordingly */
-                               switch_audio_resampler_t *mux_resampler = imember->mux_resampler;
-                               if (mux_resampler) {
-                                       int16_t *bptr = (int16_t *) imember->frame;
-                                       switch_assert(buf_read <= mux_resampler->from_size);
-                                       mux_resampler->from_len = switch_short_to_float(bptr, mux_resampler->from, (int) buf_read / 2);
-                                       mux_resampler->to_len = switch_resample_process(mux_resampler,
-                                               mux_resampler->from,
-                                               mux_resampler->from_len,
-                                               mux_resampler->to,
-                                               mux_resampler->to_size, 0);
-
-                                       switch_float_to_short(mux_resampler->to, imember->resample_out, mux_resampler->to_len);
-                                       switch_buffer_write(imember->resample_buffer, imember->resample_out, mux_resampler->to_len * 2);
-
-                                       if (switch_buffer_inuse(imember->resample_buffer) >= bytes) {
-                                               if ((imember->read = (uint32_t) switch_buffer_read(imember->resample_buffer, imember->frame, bytes))) {
-                                                       switch_set_flag(imember, MFLAG_HAS_AUDIO);
-                                                       ready++;
-                                               }
-                                       }
-                               } else {
-                                       imember->read = buf_read;
-                                       switch_set_flag_locked(imember, MFLAG_HAS_AUDIO);
-                                       ready++;
-                               }
+                       if (switch_buffer_inuse(imember->audio_buffer) >= bytes 
+                && (buf_read = (uint32_t) switch_buffer_read(imember->audio_buffer, imember->frame, bytes))) {
+                imember->read = buf_read;
+                switch_set_flag_locked(imember, MFLAG_HAS_AUDIO);
+                ready++;
                        }
                        switch_mutex_unlock(imember->audio_in_mutex);
                }
@@ -1408,7 +1377,6 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t * thread,
                        }
 
                        if ((samples = read_frame->datalen / sizeof(*data))) {
-
                                for (i = 0; i < samples; i++) {
                                        energy += abs(data[j]);
                                        j += read_codec->implementation->number_of_channels;
@@ -1495,8 +1463,6 @@ static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t * thread,
        }
 
        switch_resample_destroy(&member->read_resampler);
-       switch_resample_destroy(&member->mux_resampler);
-
        switch_clear_flag_locked(member, MFLAG_ITHREAD);
 
        return NULL;
@@ -1546,6 +1512,7 @@ static void conference_loop_output(conference_member_t * member)
        switch_codec_t *read_codec = switch_core_session_get_read_codec(member->session);
        uint32_t interval = read_codec->implementation->microseconds_per_frame / 1000;
        uint32_t samples = switch_bytes_per_frame(member->conference->rate, interval);
+       uint32_t flush_len = switch_bytes_per_frame(member->conference->rate, member->conference->interval) * 4;
     uint32_t csamples = samples;
        uint32_t tsamples = member->orig_read_codec->implementation->samples_per_frame;
        uint32_t low_count = 0, bytes = samples * 2;
@@ -1754,7 +1721,7 @@ static void conference_loop_output(conference_member_t * member)
                                                        switch_set_flag_locked(member, MFLAG_FLUSH_BUFFER);
                                                }
                                                mux_used = 0;
-                                       } else if (mux_used > bytes * 4) {
+                                       } else if (mux_used > flush_len) {
                                                /* getting behind, clear the buffer */
                                                switch_set_flag_locked(member, MFLAG_FLUSH_BUFFER);
                                        }
@@ -3879,9 +3846,6 @@ SWITCH_STANDARD_APP(conference_function)
        char *dpin = NULL;
        conf_xml_cfg_t xml_cfg = { 0 };
        switch_event_t *params = NULL;
-    uint32_t buflen;
-    uint32_t rinterval;
-
 
 
        if (switch_strlen_zero(data)) {
@@ -4140,27 +4104,17 @@ SWITCH_STANDARD_APP(conference_function)
        } else {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Raw Codec Activation Failed L16@%uhz 1 channel %dms\n",
                                                  read_codec->implementation->actual_samples_per_second, read_codec->implementation->microseconds_per_frame / 1000);
+                          
                flags = 0;
                goto done;
        }
 
-    buflen = switch_bytes_per_frame(conference->rate, conference->interval);
-    rinterval = read_codec->implementation->microseconds_per_frame / 1000;
-
-    member.framelen = member.read_codec.implementation->bytes_per_frame * ((conference->interval > rinterval) ? conference->interval / rinterval : 1);
-    member.buflen = buflen;
-    member.frame_size = (member.framelen + member.buflen) * 4;
-
+    member.frame_size = switch_bytes_per_frame(conference->rate, conference->interval) * 4;
     member.frame = switch_core_alloc(member.pool, member.frame_size);
     member.mux_frame = switch_core_alloc(member.pool, member.frame_size);
-
-
-
+    
        if (read_codec->implementation->actual_samples_per_second != conference->rate) {
-               switch_audio_resampler_t **resampler = read_codec->implementation->actual_samples_per_second > conference->rate ?
-                       &member.read_resampler : &member.mux_resampler;
-
-               if (switch_resample_create(resampler,
+               if (switch_resample_create(&member.read_resampler,
                                                                   read_codec->implementation->actual_samples_per_second,
                                                                   member.frame_size,
                                                                   conference->rate,