From: Suyeon Hwang Date: Fri, 27 Aug 2021 11:15:38 +0000 (+0900) Subject: Recover background volume when engine is terminated X-Git-Tag: submit/tizen/20210831.104905~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F99%2F263199%2F1;p=platform%2Fcore%2Fuifw%2Ftts.git Recover background volume when engine is terminated Change-Id: I2d3ba1f1e26cf2e797ffd62c99addd3a62025dcb Signed-off-by: Suyeon Hwang --- diff --git a/server/ttsd_player.c b/server/ttsd_player.c index fbb8bd68..bc03d133 100644 --- a/server/ttsd_player.c +++ b/server/ttsd_player.c @@ -485,6 +485,18 @@ static void __set_timer_for_delay_recover(void* data) SLOG(LOG_INFO, tts_tag(), "[BG] Delayed unset policy (%p), delay(%f)", g_delayed_unset_policy_timer, delay); } +static long long int __get_duration_from_last_volume_change() +{ + struct timespec current_time; + clock_gettime(CLOCK_MONOTONIC, ¤t_time); + + long long int diff = ((long long int)current_time.tv_sec - (long long int)g_policy_set_time.tv_sec) * 1000 + + ((long long int)current_time.tv_nsec - (long long int)g_policy_set_time.tv_nsec) / 1000000; + SLOG(LOG_INFO, tts_tag(), "[BG] Time Diff(%lld)", diff); + + return diff; +} + static void __unset_policy_for_playing() { int ret; @@ -509,15 +521,9 @@ static void __unset_policy_for_playing() } } - struct timespec current_time; - clock_gettime(CLOCK_MONOTONIC, ¤t_time); - - long long int diff = ((long long int)current_time.tv_sec - (long long int)g_policy_set_time.tv_sec) * 1000 - + ((long long int)current_time.tv_nsec - (long long int)g_policy_set_time.tv_nsec) / 1000000; - SLOG(LOG_INFO, tts_tag(), "[BG] Time Diff(%lld)", diff); - pthread_mutex_lock(&g_delayed_unset_policy_mutex); if (NULL == g_delayed_unset_policy_timer) { + long long int diff = __get_duration_from_last_volume_change(); if (diff > SND_MGR_DUCKING_DURATION) { SLOG(LOG_INFO, tts_tag(), "[BG] Direct unset policy"); __recover_background_volume(); @@ -1111,45 +1117,39 @@ int ttsd_player_init() return 0; } -int __destroy_ducking_handle(void) +static void __destroy_all_ducking_handles() { + SLOG(LOG_INFO, tts_tag(), "[Player] Destroy stream ducking"); + if (__get_duration_from_last_volume_change() <= SND_MGR_DUCKING_DURATION) { + usleep(500000); + } + + __recover_background_volume(); + int ret = -1; - if (g_media_stream_ducking) { - ret = sound_manager_destroy_stream_ducking(g_media_stream_ducking); - if (SOUND_MANAGER_ERROR_NONE != ret) - SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to destroy media stream ducking, ret(%d)", ret); - g_media_stream_ducking = NULL; - } else { - SLOG(LOG_INFO, tts_tag(), "[Player INFO] Ducking handle for media stream is already created"); + ret = sound_manager_destroy_stream_ducking(g_media_stream_ducking); + if (SOUND_MANAGER_ERROR_NONE != ret) { + SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to destroy ducking handle, ret(%d)", ret); } + g_media_stream_ducking = NULL; - if (g_system_stream_ducking) { - ret = sound_manager_destroy_stream_ducking(g_system_stream_ducking); - if (SOUND_MANAGER_ERROR_NONE != ret) - SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to destroy system stream ducking, ret(%d)", ret); - g_system_stream_ducking = NULL; - } else { - SLOG(LOG_INFO, tts_tag(), "[Player INFO] Ducking handle for system stream is already created"); + ret = sound_manager_destroy_stream_ducking(g_system_stream_ducking); + if (SOUND_MANAGER_ERROR_NONE != ret) { + SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to destroy ducking handle, ret(%d)", ret); } + g_system_stream_ducking = NULL; - if (g_notification_stream_ducking) { - ret = sound_manager_destroy_stream_ducking(g_notification_stream_ducking); - if (SOUND_MANAGER_ERROR_NONE != ret) - SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to destroy notification stream ducking, ret(%d)", ret); - g_notification_stream_ducking = NULL; - } else { - SLOG(LOG_INFO, tts_tag(), "[Player INFO] Ducking handle for notification stream is already created"); + ret = sound_manager_destroy_stream_ducking(g_notification_stream_ducking); + if (SOUND_MANAGER_ERROR_NONE != ret) { + SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to destroy ducking handle, ret(%d)", ret); } + g_notification_stream_ducking = NULL; - if (g_alarm_stream_ducking) { - ret = sound_manager_destroy_stream_ducking(g_alarm_stream_ducking); - if (SOUND_MANAGER_ERROR_NONE != ret) - SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to destroy alarm stream ducking, ret(%d)", ret); - g_alarm_stream_ducking = NULL; - } else { - SLOG(LOG_INFO, tts_tag(), "[Player INFO] Ducking handle for alarm stream is already created"); + ret = sound_manager_destroy_stream_ducking(g_alarm_stream_ducking); + if (SOUND_MANAGER_ERROR_NONE != ret) { + SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to destroy ducking handle, ret(%d)", ret); } - return ret; + g_alarm_stream_ducking = NULL; } int ttsd_player_release(void) @@ -1205,11 +1205,7 @@ int ttsd_player_release(void) SLOG(LOG_DEBUG, tts_tag(), "[Player SUCCESS] Remove the focus state watch cb"); } - ret = __destroy_ducking_handle(); - if (SOUND_MANAGER_ERROR_NONE != ret) - SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to destroy stream ducking, ret(%d)", ret); - else - SLOG(LOG_DEBUG, tts_tag(), "[Player SUCCESS] Destroy stream ducking"); + __destroy_all_ducking_handles(); /* clear g_player_list */ g_playing_info = NULL;