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;
}
}
- 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();
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)
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;