X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=server%2Fttsd_data.cpp;h=47e335b5d2e8dca44dd2d1f287f0f826a6de4231;hb=bb4edcfb7065d45743e03b6a5e00138ec1e1d4d3;hp=a7bdfebbb5afb7516831c0d364720ab7bd93c3d8;hpb=d4983ff56062f0f51418d32820f7d6f5442de2b3;p=platform%2Fcore%2Fuifw%2Ftts.git diff --git a/server/ttsd_data.cpp b/server/ttsd_data.cpp index a7bdfeb..47e335b 100644 --- a/server/ttsd_data.cpp +++ b/server/ttsd_data.cpp @@ -44,6 +44,10 @@ static vector g_app_list; static pthread_mutex_t g_speak_data_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t g_sound_data_mutex = PTHREAD_MUTEX_INITIALIZER; + +/* If engine is running */ +static ttsd_synthesis_control_e g_synth_control; + /* * functions for debug */ @@ -74,7 +78,7 @@ int __data_show_sound_list(int index) if (!g_app_list[index].m_wav_data.empty()) { std::list::iterator iter; for (iter = g_app_list[index].m_wav_data.begin(); (NULL != *iter && iter != g_app_list[index].m_wav_data.end()); ++iter) { - SLOG(LOG_DEBUG, tts_tag(), "[%dth][%p] data(%p) data size(%ld), uttid(%d), type(%d)", + SLOG(LOG_DEBUG, tts_tag(), "[%dth][%p] data(%p) data size(%d), uttid(%d), type(%d)", i, *iter, (*iter)->data, (*iter)->data_size, (*iter)->utt_id, (*iter)->audio_type); i++; } @@ -135,6 +139,17 @@ int __data_show_used_voice_list(int index) * ttsd data functions */ +int ttsd_set_synth_control(ttsd_synthesis_control_e control) +{ + g_synth_control = control; + return 0; +} + +ttsd_synthesis_control_e ttsd_get_synth_control() +{ + return g_synth_control; +} + int ttsd_data_new_client(int pid, int uid) { if( -1 != ttsd_data_is_client(uid) ) { @@ -349,6 +364,27 @@ int ttsd_data_add_speak_data(int uid, speak_data_s* data) return TTSD_ERROR_NONE; } +int __get_speak_data(int index, speak_data_s** data) +{ + if (0 == g_app_list[index].m_speak_data.size()) { +#ifdef DATA_DEBUG + SLOG(LOG_WARN, tts_tag(), "[DATA WARNING] There is no speak data"); +#endif + return -1; + } + + if (!g_app_list[index].m_speak_data.empty()) { + std::list::iterator iter = g_app_list[index].m_speak_data.begin(); + *data = *iter; + g_app_list[index].m_speak_data.pop_front(); + } + +#ifdef DATA_DEBUG + __data_show_text_list(index); +#endif + return 0; +} + int ttsd_data_get_speak_data(int uid, speak_data_s** data) { int index = 0; @@ -362,23 +398,12 @@ int ttsd_data_get_speak_data(int uid, speak_data_s** data) /* mutex is locked */ pthread_mutex_lock(&g_speak_data_mutex); - if (0 == g_app_list[index].m_speak_data.size()) { -#ifdef DATA_DEBUG + if (0 != __get_speak_data(index, data)) { SLOG(LOG_WARN, tts_tag(), "[DATA WARNING] There is no speak data"); -#endif pthread_mutex_unlock(&g_speak_data_mutex); return -1; } - if (!g_app_list[index].m_speak_data.empty()) { - std::list::iterator iter = g_app_list[index].m_speak_data.begin(); - *data = *iter; - g_app_list[index].m_speak_data.pop_front(); - } - -#ifdef DATA_DEBUG - __data_show_text_list(index); -#endif pthread_mutex_unlock(&g_speak_data_mutex); return TTSD_ERROR_NONE; @@ -411,7 +436,7 @@ int ttsd_data_add_sound_data(int uid, sound_data_s* data) return TTSD_ERROR_OUT_OF_MEMORY; } - SLOG(LOG_ERROR, tts_tag(), "[DATA][%p] utt_id(%d), data(%p)", *iter, (*iter)->utt_id, (*iter)->data); + SLOG(LOG_ERROR, tts_tag(), "[DATA][%p] utt_id(%d), data(%p) data size(%d), type(%d)", *iter, (*iter)->utt_id, (*iter)->data, (*iter)->data_size, (*iter)->audio_type); #ifdef DATA_DEBUG __data_show_sound_list(index); @@ -423,25 +448,12 @@ int ttsd_data_add_sound_data(int uid, sound_data_s* data) return TTSD_ERROR_NONE; } -int ttsd_data_get_sound_data(int uid, sound_data_s** data) +int __get_sound_data(int index, sound_data_s** data) { - int index = 0; - index = ttsd_data_is_client(uid); - - if (index < 0) { - SECURE_SLOG(LOG_ERROR, tts_tag(), "[DATA ERROR] uid is not valid (%d)", uid); - return TTSD_ERROR_INVALID_PARAMETER; - } - - /* mutex is locked */ - pthread_mutex_lock(&g_sound_data_mutex); - if (0 == g_app_list[index].m_wav_data.size()) { #ifdef DATA_DEBUG SLOG(LOG_DEBUG, tts_tag(), "[DATA] There is no wav data"); #endif - /* mutex is unlocked */ - pthread_mutex_unlock(&g_sound_data_mutex); return -1; } @@ -454,7 +466,30 @@ int ttsd_data_get_sound_data(int uid, sound_data_s** data) #ifdef DATA_DEBUG __data_show_sound_list(index); #endif + return 0; +} +int ttsd_data_get_sound_data(int uid, sound_data_s** data) +{ + int index = 0; + index = ttsd_data_is_client(uid); + + SLOG(LOG_DEBUG, tts_tag(), "[DATA] sound_data_s: %p", *data); + + if (index < 0) { + SECURE_SLOG(LOG_ERROR, tts_tag(), "[DATA ERROR] uid is not valid (%d)", uid); + return TTSD_ERROR_INVALID_PARAMETER; + } + + /* mutex is locked */ + pthread_mutex_lock(&g_sound_data_mutex); + + if (0 != __get_sound_data(index, data)) { + SLOG(LOG_DEBUG, tts_tag(), "[DATA] There is no wav data"); + /* mutex is unlocked */ + pthread_mutex_unlock(&g_sound_data_mutex); + return -1; + } /* mutex is unlocked */ pthread_mutex_unlock(&g_sound_data_mutex); @@ -482,6 +517,61 @@ int ttsd_data_get_sound_data_size(int uid) return data_size; } +int ttsd_data_clear_speak_data(int uid, speak_data_s** speak_data) +{ + pthread_mutex_lock(&g_speak_data_mutex); + + int index = 0; + index = ttsd_data_is_client(uid); + if (index >= 0) { + if (NULL != *speak_data) { + SLOG(LOG_DEBUG, tts_tag(), "[DEBUG] utt(%d), text(%s), lang(%s), vctype(%d) speed(%d)", + (*speak_data)->utt_id, (*speak_data)->text, (*speak_data)->lang, (*speak_data)->vctype, (*speak_data)->speed); + + if (NULL != (*speak_data)->text) { + free((*speak_data)->text); + (*speak_data)->text = NULL; + } + if (NULL != (*speak_data)->lang) { + free((*speak_data)->lang); + (*speak_data)->lang = NULL; + } + + free(*speak_data); + *speak_data = NULL; + } + } + + pthread_mutex_unlock(&g_speak_data_mutex); + + return TTSD_ERROR_NONE; +} + +int ttsd_data_clear_sound_data(int uid, sound_data_s** sound_data) +{ + pthread_mutex_lock(&g_sound_data_mutex); + + int index = 0; + index = ttsd_data_is_client(uid); + if (index >= 0) { + if (NULL != *sound_data) { + SLOG(LOG_ERROR, tts_tag(), "[DEBUG][%p] event(%d) data(%p) size(%d) rate(%d) utt(%d)", + (*sound_data), (*sound_data)->event, (*sound_data)->data, (*sound_data)->data_size, (*sound_data)->rate, (*sound_data)->utt_id); + + if (NULL != (*sound_data)->data) { + free((*sound_data)->data); + (*sound_data)->data = NULL; + } + + free(*sound_data); + *sound_data = NULL; + } + } + pthread_mutex_unlock(&g_sound_data_mutex); + + return TTSD_ERROR_NONE; +} + int ttsd_data_clear_data(int uid) { int index = 0; @@ -497,12 +587,12 @@ int ttsd_data_clear_data(int uid) sound_data_s* temp_sound = NULL; /* free allocated data */ + pthread_mutex_lock(&g_speak_data_mutex); while(1) { - if (0 != ttsd_data_get_speak_data(uid, &temp_speak)) { + if (0 != __get_speak_data(index, &temp_speak)) { break; } - pthread_mutex_lock(&g_speak_data_mutex); if (NULL != temp_speak) { SLOG(LOG_DEBUG, tts_tag(), "[DEBUG] utt(%d), text(%s), lang(%s), vctype(%d) speed(%d)", temp_speak->utt_id, temp_speak->text, temp_speak->lang, temp_speak->vctype, temp_speak->speed); @@ -520,23 +610,21 @@ int ttsd_data_clear_data(int uid) free(temp_speak); temp_speak = NULL; } - pthread_mutex_unlock(&g_speak_data_mutex); } if (-1 != removed_last_uttid) { g_app_list[index].utt_id_stopped = removed_last_uttid; } - pthread_mutex_lock(&g_speak_data_mutex); g_app_list[index].m_speak_data.clear(); pthread_mutex_unlock(&g_speak_data_mutex); + pthread_mutex_lock(&g_sound_data_mutex); while(1) { - if (0 != ttsd_data_get_sound_data(uid, &temp_sound)) { + if (0 != __get_sound_data(index, &temp_sound)) { break; } - pthread_mutex_lock(&g_sound_data_mutex); if (NULL != temp_sound) { SLOG(LOG_ERROR, tts_tag(), "[DEBUG][%p] uid(%d), event(%d) data(%p) size(%d) rate(%d) utt(%d)", temp_sound, uid, temp_sound->event, temp_sound->data, temp_sound->data_size, temp_sound->rate, temp_sound->utt_id); @@ -549,10 +637,8 @@ int ttsd_data_clear_data(int uid) free(temp_sound); temp_sound = NULL; } - pthread_mutex_unlock(&g_sound_data_mutex); } - pthread_mutex_lock(&g_sound_data_mutex); g_app_list[index].m_wav_data.clear(); pthread_mutex_unlock(&g_sound_data_mutex); @@ -733,7 +819,7 @@ int ttsd_data_save_error_log(int uid, FILE* fp) if (!g_app_list[index].m_wav_data.empty()) { std::list::iterator iter; for (iter = g_app_list[index].m_wav_data.begin(); (NULL != *iter && iter != g_app_list[index].m_wav_data.end()); ++iter) { - SLOG(LOG_DEBUG, tts_tag(), "[%dth][%p] data(%p) data size(%ld), uttid(%d), type(%d)", + SLOG(LOG_DEBUG, tts_tag(), "[%dth][%p] data(%p) data size(%d), uttid(%d), type(%d)", i, *iter, (*iter)->data, (*iter)->data_size, (*iter)->utt_id, (*iter)->audio_type); i++; }