[Freeswitch-svn] [commit] r7623 - freeswitch/trunk/src/mod/applications/mod_conference
Freeswitch SVN
anthm at freeswitch.org
Fri Feb 15 14:08:46 EST 2008
Author: anthm
Date: Fri Feb 15 14:08:45 2008
New Revision: 7623
Modified:
freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c
Log:
update
Modified: freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c (original)
+++ freeswitch/trunk/src/mod/applications/mod_conference/mod_conference.c Fri Feb 15 14:08:45 2008
@@ -496,7 +496,7 @@
for (rel = member->relationships; rel; rel = rel->next) {
if (rel->id == id) {
/* we just forget about rel here cos it was allocated by the member's pool
- it will be freed when the member is */
+ it will be freed when the member is */
status = SWITCH_STATUS_SUCCESS;
if (last) {
last->next = rel->next;
@@ -824,7 +824,7 @@
switch_event_t *event;
uint8_t *file_frame;
uint8_t *async_file_frame;
-
+
file_frame = switch_core_alloc(conference->pool, SWITCH_RECOMMENDED_BUFFER_SIZE);
async_file_frame = switch_core_alloc(conference->pool, SWITCH_RECOMMENDED_BUFFER_SIZE);
@@ -855,6 +855,7 @@
switch_set_flag(conference, CFLAG_DESTRUCT);
break;
}
+
switch_mutex_lock(conference->mutex);
has_file_data = ready = total = 0;
@@ -903,7 +904,7 @@
} else if (conference->fnode->type == NODE_TYPE_FILE) {
switch_core_file_read(&conference->fnode->fh, file_frame, &file_sample_len);
}
-
+
if (file_sample_len <= 0) {
conference->fnode->done++;
} else {
@@ -919,11 +920,13 @@
} else if (!conference->async_fnode->done) {
file_sample_len = samples;
switch_core_file_read(&conference->async_fnode->fh, async_file_frame, &file_sample_len);
+
if (file_sample_len <= 0) {
conference->async_fnode->done++;
} else {
if (has_file_data) {
switch_size_t x;
+
for (x = 0; x < file_sample_len; x++) {
int32_t z;
int16_t *bptr, *muxed;
@@ -945,6 +948,7 @@
if (ready || has_file_data) {
//int nt = 0;
/* Build a muxed frame for every member that contains the mixed audio of everyone else */
+
for (omember = conference->members; omember; omember = omember->next) {
if (has_file_data && file_sample_len) {
uint32_t sample_bytes = file_sample_len * 2;
@@ -1020,7 +1024,6 @@
#endif
}
}
-
/* Go back and write each member his dedicated copy of the audio frame that does not contain his own audio. */
for (imember = conference->members; imember; imember = imember->next) {
if (switch_test_flag(imember, MFLAG_RUNNING)) {
@@ -1445,7 +1448,7 @@
switch_assert(read_codec != NULL);
/* As long as we have a valid read, feed that data into an input buffer where the conference thread will take it
- and mux it with any audio from other channels. */
+ and mux it with any audio from other channels. */
while (switch_test_flag(member, MFLAG_RUNNING) && switch_channel_ready(channel)) {
/* Read a frame. */
@@ -1570,10 +1573,10 @@
read_resampler->from_len = switch_short_to_float(bptr, read_resampler->from, (int) len / 2);
read_resampler->to_len = switch_resample_process(read_resampler,
- read_resampler->from,
- read_resampler->from_len,
- read_resampler->to,
- read_resampler->to_size, 0);
+ read_resampler->from,
+ read_resampler->from_len,
+ read_resampler->to,
+ read_resampler->to_size, 0);
switch_float_to_short(read_resampler->to, member->resample_out, read_resampler->to_len);
len = read_resampler->to_len * 2;
@@ -1648,19 +1651,21 @@
uint32_t samples = switch_bytes_per_frame(member->conference->rate, interval);
uint32_t csamples = samples;
uint32_t tsamples = member->orig_read_codec->implementation->samples_per_frame;
- uint32_t flush_len = member->read_codec.implementation->bytes_per_frame * 4;
+ uint32_t flush_len = 0;
uint32_t low_count = 0, bytes = samples * 2;
call_list_t *call_list = NULL, *cp = NULL;
switch_assert(member->conference != NULL);
- if (switch_core_timer_init(& timer, member->conference->timer_name, interval, tsamples, NULL) != SWITCH_STATUS_SUCCESS) {
+ flush_len = switch_bytes_per_frame(member->conference->rate, member->conference->interval) * 2;
+
+ if (switch_core_timer_init(&timer, member->conference->timer_name, interval, tsamples, NULL) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Timer Setup Failed. Conference Cannot Start\n");
return;
}
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "setup timer %s success interval: %u samples: %u\n",
- member->conference->timer_name, interval, tsamples);
+ member->conference->timer_name, interval, tsamples);
write_frame.data = data;
write_frame.buflen = sizeof(data);
@@ -1676,7 +1681,7 @@
/* build a digit stream object */
if (member->conference->dtmf_parser != NULL
&& switch_ivr_digit_stream_new(member->conference->dtmf_parser, &member->digit_stream) != SWITCH_STATUS_SUCCESS) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Danger Will Robinson, there is no digit parser stream object\n");
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Danger Will Robinson, there is no digit parser stream object\n");
}
if ((call_list = switch_channel_get_private(channel, "_conference_autocall_list_"))) {
@@ -1707,216 +1712,216 @@
/* Fair WARNING, If you expect the caller to hear anything or for digit handling to be proccessed, */
/* you better not block this thread loop for more than the duration of member->conference->timer_name! */
while (switch_test_flag(member, MFLAG_RUNNING) && switch_test_flag(member, MFLAG_ITHREAD)
- && switch_channel_ready(channel)) {
- char dtmf[128] = "";
- uint8_t file_frame[SWITCH_RECOMMENDED_BUFFER_SIZE] = { 0 };
- char *digit;
- switch_event_t *event;
- caller_control_action_t *caller_action = NULL;
- int use_timer = 0;
- switch_size_t file_sample_len = csamples;
- switch_size_t file_data_len = file_sample_len * 2;
-
+ && switch_channel_ready(channel)) {
+ char dtmf[128] = "";
+ uint8_t file_frame[SWITCH_RECOMMENDED_BUFFER_SIZE] = { 0 };
+ char *digit;
+ switch_event_t *event;
+ caller_control_action_t *caller_action = NULL;
+ int use_timer = 0;
+ switch_size_t file_sample_len = csamples;
+ switch_size_t file_data_len = file_sample_len * 2;
- switch_mutex_lock(member->flag_mutex);
+
+ switch_mutex_lock(member->flag_mutex);
- if (switch_core_session_dequeue_event(member->session, &event) == SWITCH_STATUS_SUCCESS) {
- char *from = switch_event_get_header(event, "from");
- char *to = switch_event_get_header(event, "to");
- char *proto = switch_event_get_header(event, "proto");
- char *subject = switch_event_get_header(event, "subject");
- char *hint = switch_event_get_header(event, "hint");
- char *body = switch_event_get_body(event);
- char *p, *freeme = NULL;
-
- if ((p = strchr(to, '+')) && strncmp(to, CONF_CHAT_PROTO, strlen(CONF_CHAT_PROTO))) {
- freeme = switch_mprintf("%s+%s@%s", CONF_CHAT_PROTO, member->conference->name, member->conference->domain);
- to = freeme;
- }
-
- chat_send(proto, from, to, subject, body, hint);
- switch_safe_free(freeme);
- switch_event_destroy(&event);
- }
-
- if (switch_channel_test_flag(channel, CF_OUTBOUND)) {
- /* test to see if outbound channel has answered */
- if (switch_channel_test_flag(channel, CF_ANSWERED) && !switch_test_flag(member->conference, CFLAG_ANSWERED)) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Outbound conference channel answered, setting CFLAG_ANSWERED\n");
- switch_set_flag(member->conference, CFLAG_ANSWERED);
- }
- } else {
- if (switch_test_flag(member->conference, CFLAG_ANSWERED) && !switch_channel_test_flag(channel, CF_ANSWERED)) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CLFAG_ANSWERED set, answering inbound channel\n");
- switch_channel_answer(channel);
- }
+ if (switch_core_session_dequeue_event(member->session, &event) == SWITCH_STATUS_SUCCESS) {
+ char *from = switch_event_get_header(event, "from");
+ char *to = switch_event_get_header(event, "to");
+ char *proto = switch_event_get_header(event, "proto");
+ char *subject = switch_event_get_header(event, "subject");
+ char *hint = switch_event_get_header(event, "hint");
+ char *body = switch_event_get_body(event);
+ char *p, *freeme = NULL;
+
+ if ((p = strchr(to, '+')) && strncmp(to, CONF_CHAT_PROTO, strlen(CONF_CHAT_PROTO))) {
+ freeme = switch_mprintf("%s+%s@%s", CONF_CHAT_PROTO, member->conference->name, member->conference->domain);
+ to = freeme;
+ }
+
+ chat_send(proto, from, to, subject, body, hint);
+ switch_safe_free(freeme);
+ switch_event_destroy(&event);
+ }
+
+ if (switch_channel_test_flag(channel, CF_OUTBOUND)) {
+ /* test to see if outbound channel has answered */
+ if (switch_channel_test_flag(channel, CF_ANSWERED) && !switch_test_flag(member->conference, CFLAG_ANSWERED)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Outbound conference channel answered, setting CFLAG_ANSWERED\n");
+ switch_set_flag(member->conference, CFLAG_ANSWERED);
+ }
+ } else {
+ if (switch_test_flag(member->conference, CFLAG_ANSWERED) && !switch_channel_test_flag(channel, CF_ANSWERED)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CLFAG_ANSWERED set, answering inbound channel\n");
+ switch_channel_answer(channel);
}
+ }
- /* if we have caller digits, feed them to the parser to find an action */
- if (switch_channel_has_dtmf(channel)) {
- switch_channel_dequeue_dtmf_string(channel, dtmf, sizeof(dtmf));
+ /* if we have caller digits, feed them to the parser to find an action */
+ if (switch_channel_has_dtmf(channel)) {
+ switch_channel_dequeue_dtmf_string(channel, dtmf, sizeof(dtmf));
- if (member->conference->dtmf_parser != NULL) {
+ if (member->conference->dtmf_parser != NULL) {
- for (digit = dtmf; *digit && caller_action == NULL; digit++) {
- caller_action = (caller_control_action_t *)
- switch_ivr_digit_stream_parser_feed(member->conference->dtmf_parser, member->digit_stream, *digit);
- }
+ for (digit = dtmf; *digit && caller_action == NULL; digit++) {
+ caller_action = (caller_control_action_t *)
+ switch_ivr_digit_stream_parser_feed(member->conference->dtmf_parser, member->digit_stream, *digit);
}
- /* otherwise, clock the parser so that it can handle digit timeout detection */
- } else if (member->conference->dtmf_parser != NULL) {
- caller_action = (caller_control_action_t *) switch_ivr_digit_stream_parser_feed(member->conference->dtmf_parser, member->digit_stream, '\0');
}
+ /* otherwise, clock the parser so that it can handle digit timeout detection */
+ } else if (member->conference->dtmf_parser != NULL) {
+ caller_action = (caller_control_action_t *) switch_ivr_digit_stream_parser_feed(member->conference->dtmf_parser, member->digit_stream, '\0');
+ }
- /* if a caller action has been detected, handle it */
- if (caller_action != NULL && caller_action->fndesc != NULL && caller_action->fndesc->handler != NULL) {
- char *param = NULL;
+ /* if a caller action has been detected, handle it */
+ if (caller_action != NULL && caller_action->fndesc != NULL && caller_action->fndesc->handler != NULL) {
+ char *param = NULL;
- if (caller_action->fndesc->action != CALLER_CONTROL_MENU) {
- param = caller_action->data;
- }
+ if (caller_action->fndesc->action != CALLER_CONTROL_MENU) {
+ param = caller_action->data;
+ }
#ifdef INTENSE_DEBUG
- switch_log_printf(SWITCH_CHANNEL_LOG,
- SWITCH_LOG_INFO,
- "executing caller control '%s' param '%s' on call '%u, %s, %s, %s'\n",
- caller_action->fndesc->key,
- param ? param : "none", member->id, switch_channel_get_name(channel), profile->caller_id_name, profile->caller_id_number);
+ switch_log_printf(SWITCH_CHANNEL_LOG,
+ SWITCH_LOG_INFO,
+ "executing caller control '%s' param '%s' on call '%u, %s, %s, %s'\n",
+ caller_action->fndesc->key,
+ param ? param : "none", member->id, switch_channel_get_name(channel), profile->caller_id_name, profile->caller_id_number);
#endif
- caller_action->fndesc->handler(member, caller_action);
-
- /* set up for next pass */
- caller_action = NULL;
- }
+ caller_action->fndesc->handler(member, caller_action);
- /* handle file and TTS frames */
- if (member->fnode) {
- /* if we are done, clean it up */
- if (member->fnode->done) {
- conference_file_node_t *fnode;
- switch_memory_pool_t *pool;
+ /* set up for next pass */
+ caller_action = NULL;
+ }
- if (member->fnode->type != NODE_TYPE_SPEECH) {
- switch_core_file_close(&member->fnode->fh);
- }
+ /* handle file and TTS frames */
+ if (member->fnode) {
+ /* if we are done, clean it up */
+ if (member->fnode->done) {
+ conference_file_node_t *fnode;
+ switch_memory_pool_t *pool;
- fnode = member->fnode;
- member->fnode = member->fnode->next;
+ if (member->fnode->type != NODE_TYPE_SPEECH) {
+ switch_core_file_close(&member->fnode->fh);
+ }
- pool = fnode->pool;
- fnode = NULL;
- switch_core_destroy_memory_pool(&pool);
- } else {
- /* skip this frame until leadin time has expired */
- if (member->fnode->leadin) {
- member->fnode->leadin--;
- } else { /* send the node frame instead of the conference frame to the call leg */
- if (member->fnode->type == NODE_TYPE_SPEECH) {
- switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_BLOCKING;
- uint32_t rate = member->conference->rate;
-
- if (switch_core_speech_read_tts(member->fnode->sh, file_frame, &file_data_len, &rate, &flags) == SWITCH_STATUS_SUCCESS) {
- file_sample_len = file_data_len / 2;
- } else {
- file_sample_len = file_data_len = 0;
- }
- } 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;
- }
+ fnode = member->fnode;
+ member->fnode = member->fnode->next;
- if (file_sample_len <= 0) {
- member->fnode->done++;
- } else { /* there is file node data to deliver */
- write_frame.data = file_frame;
- write_frame.datalen = (uint32_t) file_data_len;
- write_frame.samples = (uint32_t) file_sample_len;
- /* Check for output volume adjustments */
- if (member->volume_out_level) {
- switch_change_sln_volume(write_frame.data, write_frame.samples, member->volume_out_level);
- }
- write_frame.timestamp = timer.samplecount;
- switch_core_session_write_frame(member->session, &write_frame, -1, 0);
- switch_core_timer_next(&timer);
+ pool = fnode->pool;
+ fnode = NULL;
+ switch_core_destroy_memory_pool(&pool);
+ } else {
+ /* skip this frame until leadin time has expired */
+ if (member->fnode->leadin) {
+ member->fnode->leadin--;
+ } else { /* send the node frame instead of the conference frame to the call leg */
+ if (member->fnode->type == NODE_TYPE_SPEECH) {
+ switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_BLOCKING;
+ uint32_t rate = member->conference->rate;
-
- /* forget the conference data we played file node data instead */
- switch_set_flag_locked(member, MFLAG_FLUSH_BUFFER);
+ if (switch_core_speech_read_tts(member->fnode->sh, file_frame, &file_data_len, &rate, &flags) == SWITCH_STATUS_SUCCESS) {
+ file_sample_len = file_data_len / 2;
+ } else {
+ file_sample_len = file_data_len = 0;
}
+ } 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;
}
- }
- } else { /* send the conferecne frame to the call leg */
- switch_buffer_t *use_buffer = NULL;
- uint32_t mux_used = (uint32_t) switch_buffer_inuse(member->mux_buffer);
-
- if (mux_used) {
- if (mux_used < bytes) {
- if (++low_count >= 5) {
- /* partial frame sitting around this long is useless and builds delay */
- switch_set_flag_locked(member, MFLAG_FLUSH_BUFFER);
+
+ if (file_sample_len <= 0) {
+ member->fnode->done++;
+ } else { /* there is file node data to deliver */
+ write_frame.data = file_frame;
+ write_frame.datalen = (uint32_t) file_data_len;
+ write_frame.samples = (uint32_t) file_sample_len;
+ /* Check for output volume adjustments */
+ if (member->volume_out_level) {
+ switch_change_sln_volume(write_frame.data, write_frame.samples, member->volume_out_level);
}
- mux_used = 0;
- } else if (mux_used > flush_len) {
- /* getting behind, clear the buffer */
+ write_frame.timestamp = timer.samplecount;
+ switch_core_session_write_frame(member->session, &write_frame, -1, 0);
+ switch_core_timer_next(&timer);
+
+
+ /* forget the conference data we played file node data instead */
switch_set_flag_locked(member, MFLAG_FLUSH_BUFFER);
}
}
+ }
+ } else {
+ switch_buffer_t *use_buffer = NULL;
+ uint32_t mux_used = (uint32_t) switch_buffer_inuse(member->mux_buffer);
- if (switch_test_flag(member, MFLAG_FLUSH_BUFFER)) {
- if (mux_used) {
- switch_mutex_lock(member->audio_out_mutex);
- switch_buffer_zero(member->mux_buffer);
- switch_mutex_unlock(member->audio_out_mutex);
- mux_used = 0;
+ if (mux_used) {
+ if (mux_used < bytes) {
+ if (++low_count >= 5) {
+ /* partial frame sitting around this long is useless and builds delay */
+ switch_set_flag_locked(member, MFLAG_FLUSH_BUFFER);
}
- switch_clear_flag_locked(member, MFLAG_FLUSH_BUFFER);
+ } else if (mux_used > flush_len) {
+ /* getting behind, clear the buffer */
+ switch_set_flag_locked(member, MFLAG_FLUSH_BUFFER);
}
+ }
+
+
+ use_timer = 1;
- use_timer = 1;
-
- if (mux_used) {
- /* Flush the output buffer and write all the data (presumably muxed) back to the channel */
- switch_mutex_lock(member->audio_out_mutex);
- write_frame.data = data;
- use_buffer = member->mux_buffer;
- low_count = 0;
- if ((write_frame.datalen = (uint32_t) switch_buffer_read(use_buffer, write_frame.data, bytes))) {
- if (write_frame.datalen && switch_test_flag(member, MFLAG_CAN_HEAR)) {
- write_frame.samples = write_frame.datalen / 2;
-
- /* Check for output volume adjustments */
- if (member->volume_out_level) {
- switch_change_sln_volume(write_frame.data, write_frame.samples, member->volume_out_level);
- }
- write_frame.timestamp = timer.samplecount;
- switch_core_session_write_frame(member->session, &write_frame, -1, 0);
+ if (mux_used >= bytes) {
+
+ /* Flush the output buffer and write all the data (presumably muxed) back to the channel */
+ switch_mutex_lock(member->audio_out_mutex);
+ write_frame.data = data;
+ use_buffer = member->mux_buffer;
+ low_count = 0;
+ if ((write_frame.datalen = (uint32_t) switch_buffer_read(use_buffer, write_frame.data, bytes))) {
+ if (write_frame.datalen && switch_test_flag(member, MFLAG_CAN_HEAR)) {
+ write_frame.samples = write_frame.datalen / 2;
+
+ /* Check for output volume adjustments */
+ if (member->volume_out_level) {
+ switch_change_sln_volume(write_frame.data, write_frame.samples, member->volume_out_level);
}
- }
-
- switch_mutex_unlock(member->audio_out_mutex);
-
-
- } else {
- if (switch_test_flag(member, MFLAG_WASTE_BANDWIDTH)) {
- if (member->conference->comfort_noise_level) {
- switch_generate_sln_silence(write_frame.data, samples, member->conference->comfort_noise_level);
- } else {
- memset(write_frame.data, 255, bytes);
- }
- write_frame.datalen = bytes;
- write_frame.samples = samples;
write_frame.timestamp = timer.samplecount;
switch_core_session_write_frame(member->session, &write_frame, -1, 0);
}
}
- }
- switch_mutex_unlock(member->flag_mutex);
+ switch_mutex_unlock(member->audio_out_mutex);
+ } else {
+ if (switch_test_flag(member, MFLAG_WASTE_BANDWIDTH)) {
+ if (member->conference->comfort_noise_level) {
+ switch_generate_sln_silence(write_frame.data, samples, member->conference->comfort_noise_level);
+ } else {
+ memset(write_frame.data, 255, bytes);
+ }
+ write_frame.datalen = bytes;
+ write_frame.samples = samples;
+ write_frame.timestamp = timer.samplecount;
+ switch_core_session_write_frame(member->session, &write_frame, -1, 0);
+ }
+ }
+ }
- if (use_timer) {
- switch_core_timer_next(&timer);
+ if (switch_test_flag(member, MFLAG_FLUSH_BUFFER)) {
+ if (switch_buffer_inuse(member->mux_buffer)) {
+ switch_mutex_lock(member->audio_out_mutex);
+ switch_buffer_zero(member->mux_buffer);
+ switch_mutex_unlock(member->audio_out_mutex);
}
+ switch_clear_flag_locked(member, MFLAG_FLUSH_BUFFER);
+ }
+
+ switch_mutex_unlock(member->flag_mutex);
+
+ if (use_timer) {
+ switch_core_timer_next(&timer);
+ } else {
+ switch_yield(1000);
+ }
} /* Rinse ... Repeat */
@@ -1928,7 +1933,7 @@
switch_core_timer_destroy(&timer);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Channel leaving conference, cause: %s\n",
- switch_channel_cause2str(switch_channel_get_cause(channel)));
+ switch_channel_cause2str(switch_channel_get_cause(channel)));
/* if it's an outbound channel, store the release cause in the conference struct, we might need it */
if (switch_channel_test_flag(channel, CF_OUTBOUND)) {
@@ -2037,7 +2042,7 @@
/* Flush the output buffer and write all the data (presumably muxed) to the file */
switch_mutex_lock(member->audio_out_mutex);
low_count = 0;
-
+
if ((rlen = (uint32_t) switch_buffer_read(member->mux_buffer, data, sizeof(data)))) {
if (!switch_test_flag((&fh), SWITCH_FILE_PAUSE)) {
len = (switch_size_t) rlen / sizeof(int16_t);
@@ -2061,7 +2066,7 @@
switch_core_timer_next(&timer);
} /* Rinse ... Repeat */
- end:
+ end:
switch_core_timer_destroy(&timer);
conference_del_member(conference, member);
@@ -2252,7 +2257,7 @@
switch_mutex_unlock(conference->mutex);
- done:
+ done:
switch_safe_free(expanded);
switch_safe_free(dfile);
@@ -2307,11 +2312,11 @@
fnode->leadin = leadin;
/* Open the file */
if (switch_core_file_open(&fnode->fh,
- file, (uint8_t) 1, member->conference->rate, SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT,
- pool) != SWITCH_STATUS_SUCCESS) {
- switch_core_destroy_memory_pool(&pool);
- status = SWITCH_STATUS_NOTFOUND;
- goto done;
+ file, (uint8_t) 1, member->conference->rate, SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT,
+ pool) != SWITCH_STATUS_SUCCESS) {
+ switch_core_destroy_memory_pool(&pool);
+ status = SWITCH_STATUS_NOTFOUND;
+ goto done;
}
fnode->pool = pool;
/* Queue the node */
@@ -2326,7 +2331,7 @@
switch_mutex_unlock(member->flag_mutex);
status = SWITCH_STATUS_SUCCESS;
-done:
+ done:
switch_safe_free(expanded);
switch_safe_free(dfile);
@@ -2371,10 +2376,10 @@
if (!member->sh) {
memset(&member->lsh, 0, sizeof(member->lsh));
if (switch_core_speech_open(&member->lsh, conference->tts_engine, conference->tts_voice,
- conference->rate, conference->interval, &flags, switch_core_session_get_pool(member->session)) !=
+ conference->rate, conference->interval, &flags, switch_core_session_get_pool(member->session)) !=
SWITCH_STATUS_SUCCESS) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid TTS module [%s]!\n", conference->tts_engine);
- return SWITCH_STATUS_FALSE;
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid TTS module [%s]!\n", conference->tts_engine);
+ return SWITCH_STATUS_FALSE;
}
member->sh = &member->lsh;
}
@@ -3023,7 +3028,7 @@
}
ret_status = SWITCH_STATUS_SUCCESS;
- done:
+ done:
switch_safe_free(workspace);
switch_safe_free(expanded);
return ret_status;
@@ -3103,25 +3108,25 @@
if ((member = conference_member_get(conference, id))
&& (other_member = conference_member_get(conference, oid))) {
- conference_relationship_t *rel = NULL;
- if ((rel = member_get_relationship(member, other_member))) {
- rel->flags = 0;
- } else {
- rel = member_add_relationship(member, oid);
- }
+ conference_relationship_t *rel = NULL;
+ if ((rel = member_get_relationship(member, other_member))) {
+ rel->flags = 0;
+ } else {
+ rel = member_add_relationship(member, oid);
+ }
- if (rel) {
- switch_set_flag(rel, RFLAG_CAN_SPEAK | RFLAG_CAN_HEAR);
- if (nospeak) {
- switch_clear_flag(rel, RFLAG_CAN_SPEAK);
- }
- if (nohear) {
- switch_clear_flag(rel, RFLAG_CAN_HEAR);
- }
- stream->write_function(stream, "ok %u->%u set\n", id, oid);
- } else {
- stream->write_function(stream, "error!\n");
+ if (rel) {
+ switch_set_flag(rel, RFLAG_CAN_SPEAK | RFLAG_CAN_HEAR);
+ if (nospeak) {
+ switch_clear_flag(rel, RFLAG_CAN_SPEAK);
}
+ if (nohear) {
+ switch_clear_flag(rel, RFLAG_CAN_HEAR);
+ }
+ stream->write_function(stream, "ok %u->%u set\n", id, oid);
+ } else {
+ stream->write_function(stream, "error!\n");
+ }
} else {
stream->write_function(stream, "relationship %u->%u not found", id, oid);
}
@@ -3336,7 +3341,7 @@
ret_status = SWITCH_STATUS_GENERR;
}
- done:
+ done:
if (params) {
switch_event_destroy(¶ms);
}
@@ -3647,7 +3652,7 @@
stream->write_function(stream, "No parameters specified.\nTry 'help conference'\n");
}
- done:
+ done:
switch_safe_free(lbuf);
return status;
@@ -3757,7 +3762,7 @@
switch_channel_answer(caller_channel);
}
- callup:
+ callup:
/* if the outbound call leg is ready */
if (switch_channel_test_flag(peer_channel, CF_ANSWERED) || switch_channel_test_flag(peer_channel, CF_EARLY_MEDIA)) {
@@ -3786,7 +3791,7 @@
goto done;
}
- done:
+ done:
if (conference) {
switch_thread_rwlock_unlock(conference->rwlock);
}
@@ -4247,6 +4252,7 @@
NULL,
read_codec->implementation->actual_samples_per_second,
read_codec->implementation->microseconds_per_frame / 1000,
+ //conference->interval,
1, SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL, member.pool) == SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,
"Raw Codec Activation Success L16@%uhz 1 channel %dms\n",
@@ -4260,7 +4266,7 @@
goto done;
}
- member.frame_size = switch_bytes_per_frame(conference->rate, conference->interval) * 4;
+ member.frame_size = SWITCH_RECOMMENDED_BUFFER_SIZE;
member.frame = switch_core_alloc(member.pool, member.frame_size);
member.mux_frame = switch_core_alloc(member.pool, member.frame_size);
@@ -4358,11 +4364,11 @@
switch_core_session_set_read_codec(member.session, read_codec);
/* Clean Up. codec_done(X): is for error situations after the codecs were setup and done: is for situations before */
- codec_done1:
+ codec_done1:
switch_core_codec_destroy(&member.read_codec);
- codec_done2:
+ codec_done2:
switch_core_codec_destroy(&member.write_codec);
- done:
+ done:
switch_event_destroy(¶ms);
switch_buffer_destroy(&member.resample_buffer);
switch_buffer_destroy(&member.audio_buffer);
@@ -4499,23 +4505,23 @@
SWITCH_STANDARD_STREAM(stream);
if (body != NULL && (lbuf = strdup(body))) {
- /* special case list */
+ /* special case list */
if (switch_stristr("list", lbuf)) {
conference_list_pretty(conference, &stream);
/* provide help */
}
- else {
- return SWITCH_STATUS_SUCCESS;
- }
+ else {
+ return SWITCH_STATUS_SUCCESS;
+ }
#if 0
- else {
- if (strcasecmp(argv[0], "help") == 0 || strcasecmp(argv[0], "commands") == 0) {
- stream.write_function(&stream, "%s\n", api_syntax);
- /* find a normal command */
- } else {
- conf_api_dispatch(conference, &stream, argc, argv, (const char *) body, 0);
- }
+ else {
+ if (strcasecmp(argv[0], "help") == 0 || strcasecmp(argv[0], "commands") == 0) {
+ stream.write_function(&stream, "%s\n", api_syntax);
+ /* find a normal command */
+ } else {
+ conf_api_dispatch(conference, &stream, argc, argv, (const char *) body, 0);
}
+ }
#endif
}
switch_safe_free(lbuf);
@@ -5039,7 +5045,7 @@
}
}
- done:
+ done:
switch_event_destroy(¶ms);
/* Release the config registry handle */
More information about the Freeswitch-svn
mailing list