From: Sangchul Lee Date: Tue, 23 Apr 2019 07:09:22 +0000 (+0900) Subject: Merge branch 'tizen' into tizen_line_coverage X-Git-Tag: submit/tizen/20190709.022805~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Ftizen_line_coverage;p=platform%2Fcore%2Fapi%2Fsound-manager.git Merge branch 'tizen' into tizen_line_coverage Change-Id: I860bd7c9d8bf82b4dfb2b50ea5bce7ea0fb482d3 --- e69ce637e1838f72546fd7fd20c9b9a769623b2f diff --cc src/sound_manager_private.c index 04392ed,caec215..7c65474 --- a/src/sound_manager_private.c +++ b/src/sound_manager_private.c @@@ -2516,10 -2491,8 +2516,8 @@@ int _start_virtual_stream(virtual_sound pa_threaded_mainloop_unlock(virtual_stream->pa_mainloop); return ret; -//LCOV_EXCL_START + ERROR_WITH_UNLOCK: - /* UNLOCK the pa_threaded_mainloop */ pa_threaded_mainloop_unlock(virtual_stream->pa_mainloop); for (i = 0; i < SOUND_STREAM_DIRECTION_MAX; i++) { @@@ -2568,4 -2540,76 +2564,77 @@@ int _stop_virtual_stream(virtual_sound_ return ret; } + + int _set_volume_ratio(uint32_t stream_index, sound_stream_direction_e direction, double ratio) + { + int ret = MM_ERROR_NONE; + GDBusConnection *conn = NULL; + GError *err = NULL; + GVariant *result = NULL; + const gchar *dbus_ret = NULL; + + if ((ret = __get_dbus_connection(&conn))) + return ret; + + result = g_dbus_connection_call_sync(conn, + PA_BUS_NAME, + PA_STREAM_MANAGER_OBJECT_PATH, + PA_STREAM_MANAGER_INTERFACE, + PA_STREAM_MANAGER_METHOD_NAME_SET_VOLUME_RATIO, + g_variant_new("(sud)", (direction == SOUND_STREAM_DIRECTION_OUTPUT) ? "out" : "in", stream_index, ratio), + G_VARIANT_TYPE("(s)"), + G_DBUS_CALL_FLAGS_NONE, + 2000, + NULL, + &err); + if (!result || err) { + LOGE("g_dbus_connection_call_sync() for SET_VOLUME_RATIO error (%s)", err ? err->message : NULL); + ret = _convert_dbus_error(err ? err->message : NULL); + g_error_free(err); + goto LEAVE; + } + g_variant_get(result, "(&s)", &dbus_ret); + LOGI("g_dbus_connection_call_sync() success, method return value is (%s)", dbus_ret); + if (!strncmp("STREAM_MANAGER_RETURN_ERROR_INVALID_ARGUMENT", dbus_ret, strlen(dbus_ret))) + ret = MM_ERROR_INVALID_ARGUMENT; + else if (!strncmp("STREAM_MANAGER_RETURN_ERROR_NO_STREAM", dbus_ret, strlen(dbus_ret))) + ret = MM_ERROR_SOUND_NO_DATA; + else if (strncmp("STREAM_MANAGER_RETURN_OK", dbus_ret, strlen(dbus_ret))) + ret = MM_ERROR_SOUND_INTERNAL; + + LEAVE: + g_variant_unref(result); + g_object_unref(conn); + + return ret; + } + + int _set_virtual_stream_volume(virtual_sound_stream_info_s *virtual_stream, double ratio) + { + int ret = MM_ERROR_NONE; + int i = 0; + uint32_t index; + + SM_INSTANCE_CHECK_FOR_PRIV(virtual_stream); + SM_STATE_CHECK_FOR_PRIV(virtual_stream, _VSTREAM_STATE_RUNNING); + + pa_threaded_mainloop_lock(virtual_stream->pa_mainloop); + + for (i = 0; i < SOUND_STREAM_DIRECTION_MAX; i++) { + if (virtual_stream->pa_stream[i]) { + index = pa_stream_get_index(virtual_stream->pa_stream[i]); + if ((ret = _set_volume_ratio(index, i + 1, ratio))) { + if (ret == MM_ERROR_SOUND_NO_DATA) { + LOGE("something wrong, no match index of %u", index); + ret = MM_ERROR_SOUND_INTERNAL; + } + break; + } + } + } + + pa_threaded_mainloop_unlock(virtual_stream->pa_mainloop); + + return ret; -} ++} +//LCOV_EXCL_STOP