From: Jeongmo Yang Date: Fri, 8 Nov 2019 04:58:09 +0000 (+0900) Subject: Change first parameter of _get_ducking_state() to check server connection in it X-Git-Tag: submit/tizen/20191111.045007^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3b0b98dec26edd75d4708260efe8b747b664c86a;p=platform%2Fcore%2Fapi%2Fsound-manager.git Change first parameter of _get_ducking_state() to check server connection in it [Version] 0.5.45 [Profile] Common [Issue Type] Update Change-Id: Iaf0136107be17626242fec828253763b1819de75 Signed-off-by: Jeongmo Yang --- diff --git a/include/sound_manager_private.h b/include/sound_manager_private.h index 7f32c30..3019971 100644 --- a/include/sound_manager_private.h +++ b/include/sound_manager_private.h @@ -371,7 +371,7 @@ int _set_acm_master_mode(bool on); int _activate_ducking(uint32_t stream_index, bool enable, const char *target_stream, uint32_t duration, double ratio); -int _get_ducking_state(uint32_t stream_index, bool *is_ducked); +int _get_ducking_state(sound_pa_info_s *pa_info, bool *is_ducked); int _set_preferred_device(sound_stream_info_s *stream_info, sound_device_io_direction_e direction, sound_device_h device); diff --git a/packaging/capi-media-sound-manager.spec b/packaging/capi-media-sound-manager.spec index ecdda42..1110d5b 100644 --- a/packaging/capi-media-sound-manager.spec +++ b/packaging/capi-media-sound-manager.spec @@ -1,6 +1,6 @@ Name: capi-media-sound-manager Summary: Sound Manager library -Version: 0.5.44 +Version: 0.5.45 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/sound_manager.c b/src/sound_manager.c index acadaa0..b461291 100644 --- a/src/sound_manager.c +++ b/src/sound_manager.c @@ -1249,44 +1249,38 @@ int sound_manager_destroy_stream_ducking(sound_stream_ducking_h stream_ducking) SM_INSTANCE_CHECK(ducking); - if (ducking->pa_info.is_disconnected == false) { - ret = _get_ducking_state(ducking->pa_info.index, &is_ducked); - if (ret != MM_ERROR_NONE) - return _convert_sound_manager_error_code(__func__, ret); - } else { - LOGW("disconnected handle. destroy it."); - } - - SM_ENTER_CRITICAL_SECTION_WITH_RETURN(&ducking_mutex, SOUND_MANAGER_ERROR_INTERNAL); + ret = _get_ducking_state(&ducking->pa_info, &is_ducked); + if (ret != MM_ERROR_NONE && ret != MM_ERROR_SOUND_SERVER_DISCONNECTED) + return _convert_sound_manager_error_code(__func__, ret); - if (!is_ducked) { - _destroy_pa_connection(&ducking->pa_info); - } else { + if (is_ducked) { LOGE("ducked now, it should be deactivated first."); - ret = MM_ERROR_SOUND_INVALID_STATE; + return SOUND_MANAGER_ERROR_INVALID_STATE; } - if (ret == MM_ERROR_NONE) { - LOGI("destroy stream ducking(%p)", ducking); + LOGI("destroy stream ducking(%p)", ducking); - for (i = 0 ; i < SOUND_DUCKING_ARR_MAX ; i++) - if (ducking_arr[i] == ducking) - ducking_arr[i] = NULL; + SM_ENTER_CRITICAL_SECTION_WITH_RETURN(&ducking_mutex, SOUND_MANAGER_ERROR_INTERNAL); - if (--ducking_arr_count == 0) { - /* unsubscribe ducking finished signal */ - if (mm_sound_remove_ducking_state_changed_callback(ducking_cb_subs_id) != MM_ERROR_NONE) - LOGW("mm_sound_remove_ducking_state_changed_callback(id:%u) failed", ducking_cb_subs_id); + _destroy_pa_connection(&ducking->pa_info); - ducking_cb_subs_id = 0; - } + for (i = 0 ; i < SOUND_DUCKING_ARR_MAX ; i++) + if (ducking_arr[i] == ducking) + ducking_arr[i] = NULL; + + if (--ducking_arr_count == 0) { + /* unsubscribe ducking finished signal */ + if (mm_sound_remove_ducking_state_changed_callback(ducking_cb_subs_id) != MM_ERROR_NONE) + LOGW("mm_sound_remove_ducking_state_changed_callback(id:%u) failed", ducking_cb_subs_id); - free(ducking); + ducking_cb_subs_id = 0; } + free(ducking); + SM_LEAVE_CRITICAL_SECTION(&ducking_mutex); - return _convert_sound_manager_error_code(__func__, ret); + return _convert_sound_manager_error_code(__func__, MM_ERROR_NONE); } int sound_manager_is_ducked(sound_stream_ducking_h stream_ducking, bool *is_ducked) @@ -1299,7 +1293,7 @@ int sound_manager_is_ducked(sound_stream_ducking_h stream_ducking, bool *is_duck SM_INSTANCE_CHECK(ducking); SM_NULL_ARG_CHECK(is_ducked); - ret = _get_ducking_state(ducking->pa_info.index, is_ducked); + ret = _get_ducking_state(&ducking->pa_info, is_ducked); return _convert_sound_manager_error_code(__func__, ret); } @@ -1319,22 +1313,22 @@ int sound_manager_activate_ducking(sound_stream_ducking_h stream_ducking, unsign SM_INSTANCE_CHECK(ducking); - ret = _get_ducking_state(ducking->pa_info.index, &is_ducked); + ret = _get_ducking_state(&ducking->pa_info, &is_ducked); if (ret != MM_ERROR_NONE) return _convert_sound_manager_error_code(__func__, ret); + if (is_ducked) { + LOGE("already ducked"); + return SOUND_MANAGER_ERROR_INVALID_STATE; + } + SM_ENTER_CRITICAL_SECTION_WITH_RETURN(&ducking_mutex, SOUND_MANAGER_ERROR_INTERNAL); - if (!is_ducked) { - ducking->duration = duration; - ducking->ratio = ratio; + ducking->duration = duration; + ducking->ratio = ratio; - ret = _activate_ducking(ducking->pa_info.index, - true, ducking->target_stream, ducking->duration, ducking->ratio); - } else { - LOGE("already ducked"); - ret = MM_ERROR_SOUND_INVALID_STATE; - } + ret = _activate_ducking(ducking->pa_info.index, + true, ducking->target_stream, ducking->duration, ducking->ratio); SM_LEAVE_CRITICAL_SECTION(&ducking_mutex); @@ -1351,20 +1345,20 @@ int sound_manager_deactivate_ducking(sound_stream_ducking_h stream_ducking) SM_INSTANCE_CHECK(ducking); - ret = _get_ducking_state(ducking->pa_info.index, &is_ducked); + ret = _get_ducking_state(&ducking->pa_info, &is_ducked); if (ret != MM_ERROR_NONE) return _convert_sound_manager_error_code(__func__, ret); - SM_ENTER_CRITICAL_SECTION_WITH_RETURN(&ducking_mutex, SOUND_MANAGER_ERROR_INTERNAL); - - if (is_ducked) { - ret = _activate_ducking(ducking->pa_info.index, - false, ducking->target_stream, ducking->duration, ducking->ratio); - } else { + if (!is_ducked) { LOGE("not ducked"); - ret = MM_ERROR_SOUND_INVALID_STATE; + return SOUND_MANAGER_ERROR_INVALID_STATE; } + SM_ENTER_CRITICAL_SECTION_WITH_RETURN(&ducking_mutex, SOUND_MANAGER_ERROR_INTERNAL); + + ret = _activate_ducking(ducking->pa_info.index, + false, ducking->target_stream, ducking->duration, ducking->ratio); + SM_LEAVE_CRITICAL_SECTION(&ducking_mutex); return _convert_sound_manager_error_code(__func__, ret); diff --git a/src/sound_manager_private.c b/src/sound_manager_private.c index 3d29f7a..eccd35e 100644 --- a/src/sound_manager_private.c +++ b/src/sound_manager_private.c @@ -116,6 +116,7 @@ int _convert_sound_manager_error_code(const char *func, int code) case MM_ERROR_SOUND_INTERNAL: case MM_ERROR_SOUND_VOLUME_CAPTURE_ONLY: case MM_ERROR_OUT_OF_MEMORY: + case MM_ERROR_SOUND_SERVER_DISCONNECTED: //LCOV_EXCL_START ret = SOUND_MANAGER_ERROR_INTERNAL; errorstr = "INTERNAL"; @@ -2839,7 +2840,7 @@ LEAVE: return ret; } -int _get_ducking_state(uint32_t stream_index, bool *is_ducked) +int _get_ducking_state(sound_pa_info_s *pa_info, bool *is_ducked) { int ret = MM_ERROR_NONE; gboolean _is_ducked = FALSE; @@ -2848,8 +2849,14 @@ int _get_ducking_state(uint32_t stream_index, bool *is_ducked) GVariant *result = NULL; const gchar *dbus_ret = NULL; + SM_NULL_ARG_CHECK_FOR_PRIV(pa_info); SM_NULL_ARG_CHECK_FOR_PRIV(is_ducked); + if (pa_info->is_disconnected) { + LOGE("server disconnected"); + return MM_ERROR_SOUND_SERVER_DISCONNECTED; + } + if ((ret = __get_dbus_connection(&conn))) return ret; @@ -2858,7 +2865,7 @@ int _get_ducking_state(uint32_t stream_index, bool *is_ducked) PA_STREAM_MANAGER_OBJECT_PATH, PA_STREAM_MANAGER_INTERFACE, PA_STREAM_MANAGER_METHOD_NAME_GET_DUCKING_STATE, - g_variant_new("(u)", stream_index), + g_variant_new("(u)", pa_info->index), G_VARIANT_TYPE("(bs)"), G_DBUS_CALL_FLAGS_NONE, 1000,