static struct timespec g_policy_set_time;
static Ecore_Timer* g_delayed_unset_policy_timer = NULL;
-static int g_focus_watch_id = -1;
-
static double g_bg_volume_ratio;
static pthread_mutex_t g_play_thread_mutex = PTHREAD_MUTEX_INITIALIZER;
return;
}
- if (TTSD_MODE_DEFAULT == ttsd_get_mode()) {
+ switch (ttsd_get_mode()) {
+ case TTSD_MODE_DEFAULT:
+ SLOG(LOG_DEBUG, tts_tag(), "[Player] Pause current player - mode(%d)", ttsd_get_mode());
g_audio_state = AUDIO_STATE_READY;
int uid = g_playing_info->uid;
if (0 != ttsd_player_pause(uid)) {
SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to pause the player");
- return;
+ break;
}
ttsd_data_set_client_state(uid, APP_STATE_PAUSED);
int pid = ttsd_data_get_pid(uid);
if (pid <= 0) {
SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to get pid. uid(%d)", uid);
- return;
} else {
/* send message to client about changing state */
SLOG(LOG_INFO, tts_tag(), "[Player INFO] Player paused. pid(%d), uid(%d)", pid, uid);
ttsdc_ipc_send_set_state_message(pid, uid, APP_STATE_PAUSED);
}
- } else {
- SLOG(LOG_DEBUG, tts_tag(), "[Player] Ignore focus state cb - mode(%d)", ttsd_get_mode());
- }
-
-/* if (AUDIO_STATE_READY == g_audio_state && focus_mask == SOUND_STREAM_FOCUS_FOR_PLAYBACK && SOUND_STREAM_FOCUS_STATE_ACQUIRED == focus_state) {
- if (TTSD_MODE_DEFAULT == ttsd_get_mode()) {
- g_audio_state = AUDIO_STATE_PLAY;
-
- if (NULL == g_playing_info) {
- SLOG(LOG_WARN, tts_tag(), "[Player WARNING] No current player");
- return;
- }
-
- if (APP_STATE_PAUSED == g_playing_info->state) {
- int uid = g_playing_info->uid;
-
- g_audio_state = AUDIO_STATE_PLAY;
- if (0 != ttsd_player_resume(uid)) {
- SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to resume the player");
- g_audio_state = AUDIO_STATE_READY;
- return;
- }
-
- ttsd_data_set_client_state(uid, APP_STATE_PLAYING);
- int pid = ttsd_data_get_pid(uid);
- ttsdc_send_set_state_message(pid, uid, APP_STATE_PLAYING);
- }
-
- } else {
- SLOG(LOG_DEBUG, tts_tag(), "[Player] Ignore focus state cb - mode(%d)", ttsd_get_mode());
- }
- }
-*/
- SLOG(LOG_DEBUG, tts_tag(), "@@@");
-
- return;
-}
-
-void __player_focus_state_watch_cb(int id, sound_stream_focus_mask_e focus_mask, sound_stream_focus_state_e focus_state, sound_stream_focus_change_reason_e reason,
- const char *extra_info, void *user_data)
-{
- SLOG(LOG_DEBUG, tts_tag(), "@@@ Focus state watch cb");
-
- ttsd_mode_e mode = ttsd_get_mode();
-
- if (TTSD_MODE_SCREEN_READER != mode && TTSD_MODE_NOTIFICATION != mode) {
- SLOG(LOG_DEBUG, tts_tag(), "[Player DEBUG] This is not screen-reader mode and notification mode.");
- return;
- }
-
- if (SOUND_STREAM_FOCUS_CHANGED_BY_VOICE_INFORMATION == reason && NULL != extra_info && strlen(extra_info) > 0 && 0 == strncmp(extra_info, "TTSD_MODE_INTERRUPT", strlen(extra_info))) {
- /* If the focus is changed by "Interrupt" mode and current players of "SR" and "Noti" modes are on going, please stop all players. */
- SLOG(LOG_INFO, tts_tag(), "[Player INFO] All stop the playing or the request to play. audio state(%d)", g_audio_state);
-
-// if (AUDIO_STATE_PLAY == g_audio_state || AUDIO_STATE_WAIT_FOR_PLAYING == g_audio_state)
+ break;
+ case TTSD_MODE_NOTIFICATION:
+ case TTSD_MODE_SCREEN_READER:
+ SLOG(LOG_DEBUG, tts_tag(), "[Player] Stop current player - mode(%d)", ttsd_get_mode());
g_audio_state = AUDIO_STATE_READY;
-
ttsd_send_all_stop();
-
-/* if (NULL == g_playing_info) {
- SLOG(LOG_WARN, tts_tag(), "[Player WARNING] No current player");
- return;
- }
-
- if (APP_STATE_PLAYING == g_playing_info->state) {
- int uid = g_playing_info->uid;
-
- if (0 != ttsd_server_stop(uid)) {
- SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to stop TTS server");
- return;
- }
- if (0 != ttsd_player_stop(uid)) {
- SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to stop the player");
- return;
- }
-
- ttsd_data_set_client_state(uid, APP_STATE_READY);
- int pid = ttsd_data_get_pid(uid);
- // send message to client about changing state
- ttsdc_send_set_state_message(pid, uid, APP_STATE_READY);
- } else {
- SLOG(LOG_DEBUG, tts_tag(), "[Player] Not playing state");
- }
-*/ } else {
- SLOG(LOG_DEBUG, tts_tag(), "[Player] Extra info is not Interrupt mode(%s) or not playing state(%d).", (NULL == extra_info) ? "NULL" : extra_info, g_audio_state);
+ break;
+ case TTSD_MODE_INTERRUPT:
+ SLOG(LOG_DEBUG, tts_tag(), "[Player] Ignore focus release - mode(%d)", ttsd_get_mode());
+ break;
+ default:
+ SLOG(LOG_ERROR, tts_tag(), "[Player ERROR] Invalid mode - mode(%d)", ttsd_get_mode());
+ break;
}
+ SLOG(LOG_DEBUG, tts_tag(), "@@@");
+
return;
}
ecore_main_loop_thread_safe_call_async(__del_timer_for_delayed_recover, NULL);
/* Set stream info */
- int ret;
- ttsd_mode_e mode = ttsd_get_mode();
- if (TTSD_MODE_DEFAULT == mode) {
- ret = sound_manager_acquire_focus(g_stream_info_h, SOUND_STREAM_FOCUS_FOR_PLAYBACK, SOUND_BEHAVIOR_NONE, NULL);
- if (SOUND_MANAGER_ERROR_NONE != ret) {
- SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to acquire focus");
- } else {
- SLOG(LOG_DEBUG, tts_tag(), "[Player DEBUG] Success to acquire focus (default mode)");
- }
- } else if (TTSD_MODE_INTERRUPT == mode) {
- ret = sound_manager_acquire_focus(g_stream_info_h, SOUND_STREAM_FOCUS_FOR_PLAYBACK, SOUND_BEHAVIOR_NONE, "TTSD_MODE_INTERRUPT");
- if (SOUND_MANAGER_ERROR_NONE != ret) {
- SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to acquire focus");
- } else {
- SLOG(LOG_DEBUG, tts_tag(), "[Player DEBUG] Success to acquire focus (interrupt mode)");
- }
+ char* extra_info = NULL;
+ if (TTSD_MODE_INTERRUPT == ttsd_get_mode()) {
+ extra_info = "TTSD_MODE_INTERRUPT";
+ }
+
+ int ret = sound_manager_acquire_focus(g_stream_info_h, SOUND_STREAM_FOCUS_FOR_PLAYBACK, SOUND_BEHAVIOR_NONE, extra_info);
+ if (SOUND_MANAGER_ERROR_NONE != ret) {
+ SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to acquire focus");
+ } else {
+ SLOG(LOG_DEBUG, tts_tag(), "[Player DEBUG] Success to acquire focus");
}
ret = audio_out_set_sound_stream_info(g_audio_h, g_stream_info_h);
static void __unset_policy_for_playing()
{
- int ret;
- ttsd_mode_e mode = ttsd_get_mode();
/* Unset stream info */
- if (TTSD_MODE_DEFAULT == mode || TTSD_MODE_INTERRUPT == mode) {
- sound_stream_focus_state_e state_for_playing = SOUND_STREAM_FOCUS_STATE_ACQUIRED;
- ret = sound_manager_get_focus_state(g_stream_info_h, &state_for_playing, NULL);
- if (SOUND_MANAGER_ERROR_NONE != ret) {
- SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to get focus state: %d", ret);
- }
-
- if (SOUND_STREAM_FOCUS_STATE_ACQUIRED == state_for_playing) {
- if (TTSD_MODE_DEFAULT == mode || TTSD_MODE_INTERRUPT == mode) {
- ret = sound_manager_release_focus(g_stream_info_h, SOUND_STREAM_FOCUS_FOR_PLAYBACK, SOUND_BEHAVIOR_NONE, NULL);
- SLOG(LOG_DEBUG, tts_tag(), "[Player DEBUG] release focus (mode: %d)", mode);
- }
+ sound_stream_focus_state_e state_for_playing = SOUND_STREAM_FOCUS_STATE_ACQUIRED;
+ int ret = sound_manager_get_focus_state(g_stream_info_h, &state_for_playing, NULL);
+ if (SOUND_MANAGER_ERROR_NONE != ret) {
+ SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to get focus state: %d", ret);
+ }
- if (SOUND_MANAGER_ERROR_NONE != ret) {
- SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to release focus");
- }
+ if (SOUND_STREAM_FOCUS_STATE_ACQUIRED == state_for_playing) {
+ SLOG(LOG_DEBUG, tts_tag(), "[Player DEBUG] release focus (mode: %d)", ttsd_get_mode());
+ ret = sound_manager_release_focus(g_stream_info_h, SOUND_STREAM_FOCUS_FOR_PLAYBACK, SOUND_BEHAVIOR_NONE, NULL);
+ if (SOUND_MANAGER_ERROR_NONE != ret) {
+ SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to release focus: %d", ret);
}
}
SLOG(LOG_DEBUG, tts_tag(), "[Player SUCCESS] Create stream info");
}
- /* add sound focus state watch callback */
- ret = sound_manager_add_focus_state_watch_cb(SOUND_STREAM_FOCUS_FOR_PLAYBACK, __player_focus_state_watch_cb, NULL, &g_focus_watch_id);
- if (SOUND_MANAGER_ERROR_NONE != ret) {
- SLOG(LOG_ERROR, tts_tag(), "[Player ERROR] Fail to add sound focus watch callback");
- sound_manager_destroy_stream_information(g_stream_info_h);
- g_stream_info_h = NULL;
- pthread_mutex_unlock(&g_player_control_mutex);
- return -1;
- } else {
- SLOG(LOG_DEBUG, tts_tag(), "[Player SUCCESS] Add sound focus watch callback");
- }
-
ret = __create_ducking_handle();
if (SOUND_MANAGER_ERROR_NONE != ret) {
SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to create ducking handle, ret(%d)", ret);
ret = __create_audio_out(TTSE_AUDIO_TYPE_RAW_S16, 16000);
if (0 != ret) {
sound_manager_destroy_stream_information(g_stream_info_h);
- sound_manager_remove_focus_state_watch_cb(g_focus_watch_id);
g_stream_info_h = NULL;
- g_focus_watch_id = -1;
pthread_mutex_unlock(&g_player_control_mutex);
return -1;
SLOG(LOG_DEBUG, tts_tag(), "[Player SUCCESS] Destroy stream info");
}
- /* remove focus state watch callback */
- ret = sound_manager_remove_focus_state_watch_cb(g_focus_watch_id);
- if (SOUND_MANAGER_ERROR_NONE != ret) {
- SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to remove the focus state watch cb");
- } else {
- SLOG(LOG_DEBUG, tts_tag(), "[Player SUCCESS] Remove the focus state watch cb");
- }
-
__destroy_all_ducking_handles();
/* clear g_player_list */
g_player_init = false;
g_stream_info_h = NULL;
- g_focus_watch_id = -1;
pthread_mutex_unlock(&g_player_control_mutex);