Clear data when AUDIO_POLICY_BLOCKED is occurred
[platform/core/uifw/tts.git] / server / ttsd_player.c
index a2d2e26..0c7679d 100644 (file)
@@ -428,17 +428,6 @@ static void __play_thread(void *data, Ecore_Thread *thread)
                        if (0 != ret || NULL == sound_data) {
                                /* empty queue */
                                SLOG(LOG_DEBUG, tts_tag(), "[Player] No sound data. Waiting mode");
-                               /* release audio & recover session */
-                               ret = audio_out_unprepare(g_audio_h);
-                               if (AUDIO_IO_ERROR_NONE != ret) {
-                                       SLOG(LOG_ERROR, tts_tag(), "[Player ERROR] Fail to unprepare audio : %d", ret);
-                               } else {
-                                       SLOG(LOG_DEBUG, tts_tag(), "[Player SUCCESS] Unprepare audio");
-                               }
-                               g_audio_state = AUDIO_STATE_READY;
-
-                               /* unset volume policy, volume will be 100% */
-                               __unset_policy_for_playing();
 
                                /* wait for new audio data come */
                                while (1) {
@@ -446,18 +435,50 @@ static void __play_thread(void *data, Ecore_Thread *thread)
                                        if (NULL == g_playing_info) {
                                                /* current playing uid is replaced */
                                                SLOG(LOG_INFO, tts_tag(), "[Player] Finish thread");
+                                               if (AUDIO_STATE_PLAY == g_audio_state) {
+                                                       /* release audio & recover session */
+                                                       ret = audio_out_unprepare(g_audio_h);
+                                                       if (AUDIO_IO_ERROR_NONE != ret) {
+                                                               SLOG(LOG_ERROR, tts_tag(), "[Player ERROR] Fail to unprepare audio : %d", ret);
+                                                       } else {
+                                                               SLOG(LOG_DEBUG, tts_tag(), "[Player SUCCESS] Unprepare audio");
+                                                       }
+                                                       g_audio_state = AUDIO_STATE_READY;
+
+                                                       /* unset volume policy, volume will be 100% */
+                                                       __unset_policy_for_playing();
+                                               }
                                                return;
                                        } else if (0 < ttsd_data_get_sound_data_size(player->uid)) {
                                                /* new audio data come */
                                                SLOG(LOG_INFO, tts_tag(), "[Player] Resume thread");
                                                break;
                                        }
+
+                                       /* If engine is not on processing */
+                                       if (TTSD_SYNTHESIS_CONTROL_DOING != ttsd_get_synth_control()) {
+                                               if (AUDIO_STATE_PLAY == g_audio_state) {
+                                                       /* release audio & recover session */
+                                                       ret = audio_out_unprepare(g_audio_h);
+                                                       if (AUDIO_IO_ERROR_NONE != ret) {
+                                                               SLOG(LOG_ERROR, tts_tag(), "[Player ERROR] Fail to unprepare audio : %d", ret);
+                                                       } else {
+                                                               SLOG(LOG_DEBUG, tts_tag(), "[Player SUCCESS] Unprepare audio");
+                                                       }
+                                                       g_audio_state = AUDIO_STATE_READY;
+
+                                                       /* unset volume policy, volume will be 100% */
+                                                       __unset_policy_for_playing();
+                                               }
+                                       }
                                }
 
                                SLOG(LOG_INFO, tts_tag(), "[Player] Finish to wait for new audio data come");
 
-                               /* set volume policy as 40%, when resume play thread*/
-                               __set_policy_for_playing(40);
+                               if (AUDIO_STATE_READY == g_audio_state) {
+                                       /* set volume policy as 40%, when resume play thread*/
+                                       __set_policy_for_playing(40);
+                               }
 
                                /* resume play thread */
                                player->state = APP_STATE_PLAYING;