Make new functions to manager last event of played sound data 79/271879/2
authorSuyeon Hwang <stom.hwang@samsung.com>
Thu, 4 Nov 2021 06:13:25 +0000 (15:13 +0900)
committerSuyeon Hwang <stom.hwang@samsung.com>
Fri, 4 Mar 2022 05:16:01 +0000 (14:16 +0900)
Change-Id: I51f101ddbeb7379a3b783c54bc55c2abef8026d9
Signed-off-by: Suyeon Hwang <stom.hwang@samsung.com>
server/ttsd_data.cpp
server/ttsd_data.h
server/ttsd_player.cpp

index 340a8cb8e11fa5c07712a8a06eb979e8dfe1003b..119cb03d134f36691ffbb3da6b954c54bdde5253 100644 (file)
@@ -34,6 +34,7 @@ typedef struct
        int             utt_id_stopped;
        app_tts_state_e state;
        ttsd_mode_e     mode;
+       ttse_result_event_e result_event;
 
        std::list<speak_data_s*> m_speak_data;
        std::list<sound_data_s*> m_wav_data;
@@ -709,6 +710,31 @@ int ttsd_data_get_sound_data_size(unsigned int uid)
        return app_data->m_wav_data.size();
 }
 
+int ttsd_data_set_last_sound_result_event(unsigned int uid, ttse_result_event_e event)
+{
+       lock_guard<mutex> lock(g_app_data_mutex);
+       app_data_s* app_data = __get_client_app_data(uid);
+       if (nullptr == app_data) {
+               SECURE_SLOG(LOG_ERROR, tts_tag(), "[DATA ERROR] uid is not valid (%u)", uid);
+               return TTSE_ERROR_INVALID_PARAMETER;
+       }
+
+       app_data->result_event = event;
+       return TTSE_ERROR_NONE;
+}
+
+ttse_result_event_e ttsd_data_get_last_sound_result_event(unsigned int uid)
+{
+       lock_guard<mutex> lock(g_app_data_mutex);
+       app_data_s* app_data = __get_client_app_data(uid);
+       if (nullptr == app_data) {
+               SECURE_SLOG(LOG_ERROR, tts_tag(), "[DATA ERROR] uid is not valid (%u)", uid);
+               return TTSE_RESULT_EVENT_FAIL;
+       }
+
+       return app_data->result_event;
+}
+
 int ttsd_data_clear_data(unsigned int uid)
 {
        lock_guard<mutex> lock(g_app_data_mutex);
index 1cb42e337c6bd79bd11d23720e55b227269a0810..2362059a12a0d74a3729dafd29bf98e51e6449d9 100644 (file)
@@ -112,6 +112,10 @@ int ttsd_data_pop_sound_data(unsigned int uid);
 
 int ttsd_data_get_sound_data_size(unsigned int uid);
 
+int ttsd_data_set_last_sound_result_event(unsigned int uid, ttse_result_event_e event);
+
+ttse_result_event_e ttsd_data_get_last_sound_result_event(unsigned int uid);
+
 int ttsd_data_clear_data(unsigned int uid);
 
 
index e103eac2f5e5f8bb47a86a3ba5b23dee4331df3b..286d7e17891c0557cd1f63e63d5cf9c36f832de5 100644 (file)
@@ -32,9 +32,6 @@
 
 typedef struct {
        unsigned int            uid;    /** client id */
-
-       /* Current utterance information */
-       ttse_result_event_e     event;  /** event of last utterance */
 } player_s;
 
 #define SOUND_BUFFER_LENGTH    2048
@@ -497,7 +494,8 @@ static void __play_thread_old(void *data, Ecore_Thread *thread)
                         * When previous wdata's event is 'finish' and current wdata's event is 'finish',
                         * the player should send utt started event.
                         */
-                       if (TTSE_RESULT_EVENT_START == sound_data->event || (TTSE_RESULT_EVENT_FINISH == player->event && TTSE_RESULT_EVENT_FINISH == sound_data->event)) {
+                       ttse_result_event_e last_event = ttsd_data_get_last_sound_result_event(player->uid);
+                       if (TTSE_RESULT_EVENT_START == sound_data->event || (TTSE_RESULT_EVENT_FINISH == last_event && TTSE_RESULT_EVENT_FINISH == sound_data->event)) {
                                int ret = __notify_utterance_started_event(player->uid, sound_data->utt_id);
                                if (TTSD_ERROR_INVALID_PARAMETER == ret) {
                                        g_audio_stream->unprepareAudioOut();
@@ -507,7 +505,7 @@ static void __play_thread_old(void *data, Ecore_Thread *thread)
                        } // (TTSE_RESULT_EVENT_START == sound_data->event || (TTSE_RESULT_EVENT_FINISH == player->event && TTSE_RESULT_EVENT_FINISH == sound_data->event))
 
                        /* Save last event to check utterance start */
-                       player->event = sound_data->event;
+                       ttsd_data_set_last_sound_result_event(player->uid, sound_data->event);
 
                        if (NULL == sound_data->data || 0 >= sound_data->data_size) {
                                ttse_result_event_e event = sound_data->event;
@@ -705,7 +703,7 @@ int ttsd_player_create_instance(unsigned int uid)
        }
 
        new_client->uid = uid;
-       new_client->event = TTSE_RESULT_EVENT_FINISH;
+       ttsd_data_set_last_sound_result_event(uid, TTSE_RESULT_EVENT_FINISH);
        ttsd_data_set_paused_data_existing(uid, false);
 
        SECURE_SLOG(LOG_DEBUG, tts_tag(), "[Player] Create player : uid(%u)", uid);
@@ -871,7 +869,7 @@ int ttsd_player_clear(unsigned int uid)
                return -1;
        }
 
-       current->event = TTSE_RESULT_EVENT_FINISH;
+       ttsd_data_set_last_sound_result_event(uid, TTSE_RESULT_EVENT_FINISH);
        ttsd_data_set_paused_data_existing(uid, false);
 
        SLOG(LOG_DEBUG, tts_tag(), "[Player SUCCESS] Clear player : uid(%u)", uid);
@@ -996,7 +994,7 @@ int ttsd_player_all_stop()
                        }
 
                        if (APP_STATE_PLAYING == state || APP_STATE_PAUSED == state) {
-                               data->event = TTSE_RESULT_EVENT_FINISH;
+                               ttsd_data_set_last_sound_result_event(data->uid, TTSE_RESULT_EVENT_FINISH);
                                ttsd_data_set_paused_data_existing(data->uid, false);
                        }