From: sooyeon Date: Thu, 7 Mar 2024 03:11:29 +0000 (+0900) Subject: Make not to acquire sound focus when screen reader and notification modes X-Git-Tag: accepted/tizen/7.0/unified/20240308.081104^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7b06449e3b202e9c77567244816c5b754793b955;p=platform%2Fcore%2Fuifw%2Ftts.git Make not to acquire sound focus when screen reader and notification modes - Issue: In Tizen 7.0 FHub, media-type playing is stopped, because TTS screen-reader mode acquires a sound focus. - Solution: Rollback to the previous TTS sound focus policy. * Default / Interrupt modes: acquire sound focus * Screen-reader / Notification modes: NOT acquire sound focus Change-Id: I5c09970aa15f3e1694e1ca2e95f2ddcf2529e203 Signed-off-by: sooyeon --- diff --git a/server/ttsd_player.cpp b/server/ttsd_player.cpp index a2198d4e..e84f10b9 100644 --- a/server/ttsd_player.cpp +++ b/server/ttsd_player.cpp @@ -138,18 +138,28 @@ static void __write_buffer_dump_file(const void* buffer, size_t length) } #endif -static void __set_policy_for_playing(void) +static void __set_policy_for_playing(unsigned int uid) { - g_audio_stream->acquireSoundFocus(); + /* In case of DEFAULT and INTERRUPT mode, acquire sound focus */ + ttsd_mode_e mode = ttsd_data_get_mode(uid); + SLOG(LOG_INFO, tts_tag(), "[Player INFO] Current uid(%d)'s mode(%d)", uid, (int)mode); + if (TTSD_MODE_DEFAULT == mode || TTSD_MODE_INTERRUPT == mode) + g_audio_stream->acquireSoundFocus(); + g_background_volume->applyVolumeRatio(); g_is_set_policy = true; SLOG(LOG_ERROR, tts_tag(), "[BG] g_is_set_policy(%d)", static_cast(g_is_set_policy.load())); SLOG(LOG_DEBUG, tts_tag(), "[Player DEBUG] set policy for playing"); } -static void __unset_policy_for_playing() +static void __unset_policy_for_playing(unsigned int uid) { - g_audio_stream->releaseSoundFocus(); + /* In case of DEFAULT and INTERRUPT mode, release sound focus */ + ttsd_mode_e mode = ttsd_data_get_mode(uid); + SLOG(LOG_INFO, tts_tag(), "[Player INFO] Current uid(%d)'s mode(%d)", uid, (int)mode); + if (TTSD_MODE_DEFAULT == mode || TTSD_MODE_INTERRUPT == mode) + g_audio_stream->releaseSoundFocus(); + g_background_volume->recoverVolumeRatio(); g_is_set_policy = false; SLOG(LOG_ERROR, tts_tag(), "[BG] g_is_set_policy(%d)", static_cast(g_is_set_policy.load())); @@ -211,8 +221,8 @@ static int __play_sound_data(PlayerThread* player, unsigned int uid, sound_data_ // Check whether set_policy is done or not if (false == g_is_set_policy.load()) { - SLOG(LOG_INFO, tts_tag(), "[Player INFO] Set policy"); - __set_policy_for_playing(); + SLOG(LOG_INFO, tts_tag(), "[Player INFO] Set policy. uid(%d)", uid); + __set_policy_for_playing(uid); } if (TTSD_ERROR_NONE != g_audio_stream->prepareAudioOut()) { @@ -278,7 +288,7 @@ static void __wait_sound_data(PlayerThread* player, unsigned int uid) if (TTSD_SYNTHESIS_CONTROL_DOING != synth_control) { if (AudioStream::AUDIO_STATE_PLAY == g_audio_stream->getState()) { g_audio_stream->unprepareAudioOut(); - __unset_policy_for_playing(); + __unset_policy_for_playing(uid); // uid == current uid } } prev_synth_control = synth_control; @@ -347,7 +357,7 @@ static void __play_utterance_cb(PlayerThread* player, unsigned int uid) SLOG(LOG_INFO, tts_tag(), "[Player] No Sound data. Event(%d), uid(%u), uttid(%d)", event, uid, utt_id); if (TTSE_RESULT_EVENT_FINISH == event) { - __unset_policy_for_playing(); + __unset_policy_for_playing(uid); if (TTSD_ERROR_INVALID_PARAMETER == __notify_utterance_completed_event(uid, utt_id)) { break; } @@ -376,7 +386,7 @@ static void __play_utterance_cb(PlayerThread* player, unsigned int uid) sound_data = nullptr; if (TTSE_RESULT_EVENT_FINISH == event) { - __unset_policy_for_playing(); + __unset_policy_for_playing(uid); if (TTSD_ERROR_NONE != __notify_utterance_completed_event(uid, utt_id)) { break; } @@ -391,7 +401,7 @@ static void __play_utterance_cb(PlayerThread* player, unsigned int uid) } g_audio_stream->unprepareAudioOut(); - __unset_policy_for_playing(); + __unset_policy_for_playing(uid); #ifdef BUF_SAVE_MODE __close_buffer_dump_file();