// static bool ducking_flag;
+/* CAUTION!
+If you change this constant value. Please check the function '__set_timer_for_delay_recover()'.
+If you choose too big value, it may cause integer overflow issue.
+*/
#define SND_MGR_DUCKING_DURATION 500
static struct timespec g_policy_set_time;
return;
}
-static Eina_Bool __delay_unset_policy(void* data)
+static Eina_Bool __delay_recover_background_volume(void* data)
{
pthread_mutex_lock(&g_delayed_unset_policy_mutex);
__recover_background_volume();
return EINA_FALSE;
}
-static void* __set_timer_for_unset(void* data)
+static void __set_timer_for_delay_recover(void* data)
{
- g_delayed_unset_policy_timer = ecore_timer_add(0.5, __delay_unset_policy, NULL);
- SLOG(LOG_INFO, tts_tag(), "[BG] Delayed unset policy (%p)", g_delayed_unset_policy_timer);
- return 0;
+ long long int diff = (intptr_t)data;
+ double delay = (double)(SND_MGR_DUCKING_DURATION - diff) / 1000.0;
+ g_delayed_unset_policy_timer = ecore_timer_add(delay, __delay_recover_background_volume, NULL);
+ SLOG(LOG_INFO, tts_tag(), "[BG] Delayed unset policy (%p), delay(%f)", g_delayed_unset_policy_timer, delay);
}
static void __unset_policy_for_playing()
SLOG(LOG_INFO, tts_tag(), "[BG] Direct unset policy");
__recover_background_volume();
} else {
- ecore_main_loop_thread_safe_call_sync(__set_timer_for_unset, NULL);
+ intptr_t ptr_diff = diff;
+ ecore_main_loop_thread_safe_call_async(__set_timer_for_delay_recover, (void*)ptr_diff);
}
}
pthread_mutex_unlock(&g_delayed_unset_policy_mutex);
- __recover_background_volume();
g_is_set_policy = false;
SLOG(LOG_ERROR, tts_tag(), "[BG] g_is_set_policy(%d)", g_is_set_policy);