提交 623ba5c2 authored 作者: Anthony Minessale's avatar Anthony Minessale

patch for FSCORE-205

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10202 d0543943-73ff-0310-b7d9-9358b9ac24b2
上级 93b20b8d
...@@ -308,10 +308,30 @@ static switch_status_t channel_on_execute(switch_core_session_t *session) ...@@ -308,10 +308,30 @@ static switch_status_t channel_on_execute(switch_core_session_t *session)
static void deactivate_audio_device(void) static void deactivate_audio_device(void)
{ {
switch_mutex_lock(globals.device_lock); switch_mutex_lock(globals.device_lock);
/* LOCKED ************************************************************************************************** */
if (globals.audio_stream) { if (globals.audio_stream) {
CloseAudioStream(globals.audio_stream); CloseAudioStream(globals.audio_stream);
globals.audio_stream = NULL; globals.audio_stream = NULL;
} }
if (globals.read_codec.implementation) {
switch_core_codec_destroy(&globals.read_codec);
}
if (globals.write_codec.implementation) {
switch_core_codec_destroy(&globals.write_codec);
}
if (globals.timer.timer_interface) {
switch_core_timer_destroy(&globals.timer);
}
if (globals.hold_timer.timer_interface) {
switch_core_timer_destroy(&globals.hold_timer);
}
/* UNLOCKED ************************************************************************************************* */
switch_mutex_unlock(globals.device_lock); switch_mutex_unlock(globals.device_lock);
} }
...@@ -1142,13 +1162,17 @@ static switch_status_t engage_device(int sample_rate, int codec_ms) ...@@ -1142,13 +1162,17 @@ static switch_status_t engage_device(int sample_rate, int codec_ms)
codec_ms = globals.codec_ms; codec_ms = globals.codec_ms;
} }
if (switch_core_codec_init(&globals.read_codec, if (!globals.read_codec.implementation) {
"L16", if (switch_core_codec_init(&globals.read_codec,
NULL, sample_rate, codec_ms, 1, SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL, "L16",
NULL) != SWITCH_STATUS_SUCCESS) { NULL, sample_rate, codec_ms, 1, SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL,
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't load codec?\n"); NULL) != SWITCH_STATUS_SUCCESS) {
return SWITCH_STATUS_FALSE; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't load codec?\n");
} else { return SWITCH_STATUS_FALSE;
}
}
if (!globals.write_codec.implementation) {
if (switch_core_codec_init(&globals.write_codec, if (switch_core_codec_init(&globals.write_codec,
"L16", "L16",
NULL, NULL,
...@@ -1160,25 +1184,29 @@ static switch_status_t engage_device(int sample_rate, int codec_ms) ...@@ -1160,25 +1184,29 @@ static switch_status_t engage_device(int sample_rate, int codec_ms)
} }
} }
if (switch_core_timer_init(&globals.timer, if (!globals.timer.timer_interface) {
globals.timer_name, codec_ms, globals.read_codec.implementation->samples_per_packet, if (switch_core_timer_init(&globals.timer,
module_pool) != SWITCH_STATUS_SUCCESS) { globals.timer_name, codec_ms, globals.read_codec.implementation->samples_per_packet,
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setup timer failed!\n"); module_pool) != SWITCH_STATUS_SUCCESS) {
switch_core_codec_destroy(&globals.read_codec); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setup timer failed!\n");
switch_core_codec_destroy(&globals.write_codec); switch_core_codec_destroy(&globals.read_codec);
return SWITCH_STATUS_FALSE; switch_core_codec_destroy(&globals.write_codec);
return SWITCH_STATUS_FALSE;
}
} }
if (switch_core_timer_init(&globals.hold_timer, if (!globals.hold_timer.timer_interface) {
if (switch_core_timer_init(&globals.hold_timer,
globals.timer_name, codec_ms, globals.read_codec.implementation->samples_per_packet, globals.timer_name, codec_ms, globals.read_codec.implementation->samples_per_packet,
module_pool) != SWITCH_STATUS_SUCCESS) { module_pool) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setup hold timer failed!\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setup hold timer failed!\n");
switch_core_codec_destroy(&globals.read_codec); switch_core_codec_destroy(&globals.read_codec);
switch_core_codec_destroy(&globals.write_codec); switch_core_codec_destroy(&globals.write_codec);
switch_core_timer_destroy(&globals.timer); switch_core_timer_destroy(&globals.timer);
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
}
} }
globals.read_frame.rate = sample_rate; globals.read_frame.rate = sample_rate;
globals.read_frame.codec = &globals.read_codec; globals.read_frame.codec = &globals.read_codec;
...@@ -1204,7 +1232,8 @@ static switch_status_t engage_device(int sample_rate, int codec_ms) ...@@ -1204,7 +1232,8 @@ static switch_status_t engage_device(int sample_rate, int codec_ms)
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't open audio device!\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't open audio device!\n");
switch_core_codec_destroy(&globals.read_codec); switch_core_codec_destroy(&globals.read_codec);
switch_core_codec_destroy(&globals.write_codec); switch_core_codec_destroy(&globals.write_codec);
switch_core_timer_destroy(&globals.timer);
switch_core_timer_destroy(&globals.hold_timer);
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
} }
} }
......
...@@ -285,6 +285,8 @@ SWITCH_DECLARE(switch_status_t) switch_core_file_close(switch_file_handle_t *fh) ...@@ -285,6 +285,8 @@ SWITCH_DECLARE(switch_status_t) switch_core_file_close(switch_file_handle_t *fh)
switch_core_destroy_memory_pool(&fh->memory_pool); switch_core_destroy_memory_pool(&fh->memory_pool);
} }
memset(fh, 0, sizeof(*fh));
return status; return status;
} }
......
...@@ -125,6 +125,8 @@ SWITCH_DECLARE(switch_status_t) switch_core_timer_destroy(switch_timer_t *timer) ...@@ -125,6 +125,8 @@ SWITCH_DECLARE(switch_status_t) switch_core_timer_destroy(switch_timer_t *timer)
switch_core_destroy_memory_pool(&timer->memory_pool); switch_core_destroy_memory_pool(&timer->memory_pool);
} }
memset(timer, 0, sizeof(*timer));
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论