git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@5618 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Arsen Chaloyan 2007-08-20 10:57:26 +00:00
parent e02f28a8df
commit 646a812eef
1 changed files with 28 additions and 28 deletions

View File

@ -91,7 +91,7 @@ typedef struct {
apr_pool_t *pool; apr_pool_t *pool;
switch_speech_flag_t flags; switch_speech_flag_t flags;
switch_mutex_t *flag_mutex; switch_mutex_t *flag_mutex;
switch_thread_cond_t *wait_object; switch_thread_cond_t *wait_object;
} openmrcp_session_t; } openmrcp_session_t;
typedef enum { typedef enum {
@ -137,10 +137,10 @@ static openmrcp_session_t* openmrcp_session_create(openmrcp_profile_t *profile)
openmrcp_session->mrcp_message_last_rcvd = NULL; openmrcp_session->mrcp_message_last_rcvd = NULL;
switch_mutex_init(&openmrcp_session->flag_mutex, SWITCH_MUTEX_NESTED, openmrcp_session->pool); switch_mutex_init(&openmrcp_session->flag_mutex, SWITCH_MUTEX_NESTED, openmrcp_session->pool);
if (switch_thread_cond_create(&openmrcp_session->wait_object, openmrcp_session->pool)) { if (switch_thread_cond_create(&openmrcp_session->wait_object, openmrcp_session->pool)) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "wait object creation failed\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "wait object creation failed\n");
} }
openmrcp_session->client_session = mrcp_client_context_session_create(openmrcp_session->profile->mrcp_context,openmrcp_session); openmrcp_session->client_session = mrcp_client_context_session_create(openmrcp_session->profile->mrcp_context,openmrcp_session);
if (!openmrcp_session->client_session) { if (!openmrcp_session->client_session) {
@ -184,11 +184,11 @@ static mrcp_status_t openmrcp_on_channel_add(mrcp_client_context_t *context, mrc
if(!openmrcp_session) { if(!openmrcp_session) {
return MRCP_STATUS_FAILURE; return MRCP_STATUS_FAILURE;
} }
switch_mutex_lock(openmrcp_session->flag_mutex); switch_mutex_lock(openmrcp_session->flag_mutex);
openmrcp_session->control_channel = control_channel; openmrcp_session->control_channel = control_channel;
openmrcp_session->audio_channel = audio_channel; openmrcp_session->audio_channel = audio_channel;
switch_thread_cond_signal(openmrcp_session->wait_object); switch_thread_cond_signal(openmrcp_session->wait_object);
switch_mutex_unlock(openmrcp_session->flag_mutex); switch_mutex_unlock(openmrcp_session->flag_mutex);
return MRCP_STATUS_SUCCESS; return MRCP_STATUS_SUCCESS;
} }
@ -333,11 +333,11 @@ static switch_status_t openmrcp_asr_open(switch_asr_handle_t *ah, char *codec, i
mrcp_client_context_channel_add(asr_session->profile->mrcp_context, asr_session->client_session, asr_channel, NULL); mrcp_client_context_channel_add(asr_session->profile->mrcp_context, asr_session->client_session, asr_channel, NULL);
switch_mutex_lock(asr_session->flag_mutex); switch_mutex_lock(asr_session->flag_mutex);
if(switch_thread_cond_timedwait(asr_session->wait_object,asr_session->flag_mutex,5000*1000) != APR_SUCCESS) { if(switch_thread_cond_timedwait(asr_session->wait_object,asr_session->flag_mutex,5000*1000) != APR_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No response from client stack\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No response from client stack\n");
} }
switch_mutex_unlock(asr_session->flag_mutex); switch_mutex_unlock(asr_session->flag_mutex);
if(!asr_session->control_channel) { if(!asr_session->control_channel) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No recognizer channel available\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No recognizer channel available\n");
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
@ -579,11 +579,11 @@ static switch_status_t openmrcp_tts_open(switch_speech_handle_t *sh, char *voice
} }
mrcp_client_context_channel_add(tts_session->profile->mrcp_context, tts_session->client_session, tts_channel, NULL); mrcp_client_context_channel_add(tts_session->profile->mrcp_context, tts_session->client_session, tts_channel, NULL);
switch_mutex_lock(tts_session->flag_mutex); switch_mutex_lock(tts_session->flag_mutex);
if(switch_thread_cond_timedwait(tts_session->wait_object,tts_session->flag_mutex,5000*1000) != APR_SUCCESS) { if(switch_thread_cond_timedwait(tts_session->wait_object,tts_session->flag_mutex,5000*1000) != APR_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No response from client stack\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No response from client stack\n");
} }
switch_mutex_unlock(tts_session->flag_mutex); switch_mutex_unlock(tts_session->flag_mutex);
if(!tts_session->control_channel) { if(!tts_session->control_channel) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No synthesizer channel available\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No synthesizer channel available\n");
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
@ -631,8 +631,8 @@ static switch_status_t openmrcp_read_tts(switch_speech_handle_t *sh, void *data,
{ {
openmrcp_session_t *tts_session = (openmrcp_session_t *) sh->private_info; openmrcp_session_t *tts_session = (openmrcp_session_t *) sh->private_info;
size_t return_len=0; size_t return_len=0;
media_frame_t media_frame; media_frame_t media_frame;
audio_source_t *audio_source; audio_source_t *audio_source;
if (switch_test_flag(tts_session, FLAG_SPEAK_COMPLETE)) { if (switch_test_flag(tts_session, FLAG_SPEAK_COMPLETE)) {
/* tell fs we are done */ /* tell fs we are done */
@ -640,7 +640,7 @@ static switch_status_t openmrcp_read_tts(switch_speech_handle_t *sh, void *data,
return SWITCH_STATUS_BREAK; return SWITCH_STATUS_BREAK;
} }
audio_source = mrcp_client_audio_source_get(tts_session->audio_channel); audio_source = mrcp_client_audio_source_get(tts_session->audio_channel);
if(!audio_source) { if(!audio_source) {
return SWITCH_STATUS_BREAK; return SWITCH_STATUS_BREAK;
} }
@ -654,16 +654,16 @@ static switch_status_t openmrcp_read_tts(switch_speech_handle_t *sh, void *data,
/* sampling rate and frame size should be retrieved from audio source */ /* sampling rate and frame size should be retrieved from audio source */
*rate = 8000; *rate = 8000;
media_frame.codec_frame.size = 160; media_frame.codec_frame.size = 160;
while(return_len < *datalen) { while(return_len < *datalen) {
media_frame.codec_frame.buffer = (char*)data + return_len; media_frame.codec_frame.buffer = (char*)data + return_len;
audio_source->method_set->read_frame(audio_source,&media_frame); audio_source->method_set->read_frame(audio_source,&media_frame);
if(media_frame.type != MEDIA_FRAME_TYPE_AUDIO) { if(media_frame.type != MEDIA_FRAME_TYPE_AUDIO) {
memset(media_frame.codec_frame.buffer,0,media_frame.codec_frame.size); memset(media_frame.codec_frame.buffer,0,media_frame.codec_frame.size);
} }
return_len += media_frame.codec_frame.size; return_len += media_frame.codec_frame.size;
} }
*datalen = return_len; *datalen = return_len;
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }