summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSangchul Lee <sc11.lee@samsung.com>2019-02-14 17:25:14 +0900
committerSangchul Lee <sc11.lee@samsung.com>2019-02-18 15:43:39 +0900
commit5669ffe9cf86a1d9915f66eeea75c32b6f479b9b (patch)
tree2f185e6de25a672a4d19ec206ce4f248382dc2c4
parentdfb5e4dc334843165c987b46d9b7f4c659c6505d (diff)
downloadlibmm-sound-5669ffe9cf86a1d9915f66eeea75c32b6f479b9b.tar.gz
libmm-sound-5669ffe9cf86a1d9915f66eeea75c32b6f479b9b.tar.bz2
libmm-sound-5669ffe9cf86a1d9915f66eeea75c32b6f479b9b.zip
[Version] 0.12.39 [Issue Type] New feature Change-Id: I53276fe8e860eb97ba1b6aa4864ac10552ebf494 Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
-rw-r--r--common/mm_sound_dbus.c3
-rw-r--r--common/mm_sound_utils.c54
-rw-r--r--include/mm_sound.h5
-rw-r--r--include/mm_sound_client.h5
-rw-r--r--include/mm_sound_intf.h1
-rw-r--r--include/mm_sound_proxy.h1
-rw-r--r--include/mm_sound_utils.h2
-rw-r--r--mm_sound.c92
-rw-r--r--mm_sound_client.c179
-rw-r--r--mm_sound_proxy.c34
-rw-r--r--packaging/libmm-sound.spec2
11 files changed, 265 insertions, 113 deletions
diff --git a/common/mm_sound_dbus.c b/common/mm_sound_dbus.c
index 6707dc9..e026a27 100644
--- a/common/mm_sound_dbus.c
+++ b/common/mm_sound_dbus.c
@@ -64,6 +64,9 @@ const mm_sound_dbus_method_info_t g_methods[AUDIO_METHOD_MAX] = {
[AUDIO_METHOD_SET_VOLUME_LEVEL] = {
.name = "SetVolumeLevel",
},
+ [AUDIO_METHOD_SET_MUTE] = {
+ .name = "SetVolumeMute",
+ },
[AUDIO_METHOD_GET_CONNECTED_DEVICE_LIST] = {
.name = "GetConnectedDeviceList",
},
diff --git a/common/mm_sound_utils.c b/common/mm_sound_utils.c
index aa189a4..d33125e 100644
--- a/common/mm_sound_utils.c
+++ b/common/mm_sound_utils.c
@@ -26,66 +26,12 @@
#include <errno.h>
#include <glib.h>
-#include <vconf.h>
#include <mm_types.h>
#include <mm_error.h>
#include <mm_debug.h>
#include "../include/mm_sound_private.h"
#include "../include/mm_sound_utils.h"
-#define VCONF_KEY_VOLUME_PREFIX "file/private/sound/volume"
-#define VCONF_KEY_VOLUME_TYPE_SYSTEM VCONF_KEY_VOLUME_PREFIX"/system"
-#define VCONF_KEY_VOLUME_TYPE_NOTIFICATION VCONF_KEY_VOLUME_PREFIX"/notification"
-#define VCONF_KEY_VOLUME_TYPE_ALARM VCONF_KEY_VOLUME_PREFIX"/alarm"
-#define VCONF_KEY_VOLUME_TYPE_RINGTONE VCONF_KEY_VOLUME_PREFIX"/ringtone"
-#define VCONF_KEY_VOLUME_TYPE_MEDIA VCONF_KEY_VOLUME_PREFIX"/media"
-#define VCONF_KEY_VOLUME_TYPE_CALL VCONF_KEY_VOLUME_PREFIX"/call"
-#define VCONF_KEY_VOLUME_TYPE_VOIP VCONF_KEY_VOLUME_PREFIX"/voip"
-#define VCONF_KEY_VOLUME_TYPE_VOICE VCONF_KEY_VOLUME_PREFIX"/voice"
-#define VCONF_KEY_VOLUME_TYPE_ANDROID VCONF_KEY_VOLUME_PREFIX"/fixed"
-
-static char *g_volume_vconf[VOLUME_TYPE_MAX] = {
- VCONF_KEY_VOLUME_TYPE_SYSTEM, /* VOLUME_TYPE_SYSTEM */
- VCONF_KEY_VOLUME_TYPE_NOTIFICATION, /* VOLUME_TYPE_NOTIFICATION */
- VCONF_KEY_VOLUME_TYPE_ALARM, /* VOLUME_TYPE_ALARM */
- VCONF_KEY_VOLUME_TYPE_RINGTONE, /* VOLUME_TYPE_RINGTONE */
- VCONF_KEY_VOLUME_TYPE_MEDIA, /* VOLUME_TYPE_MEDIA */
- VCONF_KEY_VOLUME_TYPE_CALL, /* VOLUME_TYPE_CALL */
- VCONF_KEY_VOLUME_TYPE_VOIP, /* VOLUME_TYPE_VOIP */
- VCONF_KEY_VOLUME_TYPE_VOICE, /* VOLUME_TYPE_VOICE */
- VCONF_KEY_VOLUME_TYPE_ANDROID /* VOLUME_TYPE_FIXED */
-};
-static char *g_volume_str[VOLUME_TYPE_MAX] = {
- "SYSTEM",
- "NOTIFICATION",
- "ALARM",
- "RINGTONE",
- "MEDIA",
- "CALL",
- "VOIP",
- "VOICE",
- "FIXED",
-};
-
-EXPORT_API
-int mm_sound_util_volume_get_value_by_type(volume_type_t type, unsigned int *value)
-{
- int ret = MM_ERROR_NONE;
- int vconf_value = 0;
-
- /* Get volume value from VCONF */
- if (vconf_get_int(g_volume_vconf[type], &vconf_value)) {
- debug_error("vconf_get_int(%s) failed..\n", g_volume_vconf[type]);
- return MM_ERROR_SOUND_INTERNAL;
- }
-
- *value = vconf_value;
- if (ret == MM_ERROR_NONE)
- debug_log("volume_get_value %s %d", g_volume_str[type], *value);
-
- return ret;
-}
-
EXPORT_API
bool mm_sound_util_is_process_alive(pid_t pid)
{
diff --git a/include/mm_sound.h b/include/mm_sound.h
index 99c2bfa..99adec6 100644
--- a/include/mm_sound.h
+++ b/include/mm_sound.h
@@ -408,7 +408,7 @@ int mm_sound_remove_volume_changed_callback(unsigned int id);
* @post Volume value will be changed to given value for given volume type.
* @par Example
*/
-int mm_sound_volume_set_value(volume_type_t type, const unsigned int volume_level);
+int mm_sound_volume_set_value(volume_type_t type, const unsigned int value);
/**
@@ -442,6 +442,9 @@ else
*/
int mm_sound_volume_get_value(volume_type_t type, unsigned int *value);
+int mm_sound_set_mute(volume_type_t type, bool mute);
+int mm_sound_get_mute(volume_type_t type, bool *muted);
+
/**
* This function is to set sound filter and apply to selected stream type.
*
diff --git a/include/mm_sound_client.h b/include/mm_sound_client.h
index 7632220..ce62bb9 100644
--- a/include/mm_sound_client.h
+++ b/include/mm_sound_client.h
@@ -39,9 +39,12 @@ int mm_sound_client_finalize(void);
int mm_sound_client_play_tone_with_stream_info(int tone, char *stream_type, int stream_id, double volume, int duration, int *handle);
int mm_sound_client_play_sound_with_stream_info(MMSoundPlayParam *param, int *handle, char* stream_type, int stream_id);
int mm_sound_client_stop_sound(int handle);
-int mm_sound_client_set_volume_by_type(const int volume_type, const unsigned int volume_level);
+int mm_sound_client_set_volume_by_type(volume_type_t type, const unsigned int level);
+int mm_sound_client_get_volume_by_type(volume_type_t type, unsigned int *level);
int mm_sound_client_add_volume_changed_callback(mm_sound_volume_changed_cb func, void* user_data, unsigned int *subs_id);
int mm_sound_client_remove_volume_changed_callback(unsigned int subs_id);
+int mm_sound_client_set_mute_by_type(volume_type_t type, bool mute);
+int mm_sound_client_get_mute_by_type(volume_type_t type, bool *muted);
int mm_sound_client_set_filter_by_type(const char *stream_type, const char *filter_name, const char *filter_parameters, const char *filter_group);
int mm_sound_client_unset_filter_by_type(const char *stream_type);
int mm_sound_client_control_filter_by_type(const char *stream_type, const char *filter_name, const char *filter_controls);
diff --git a/include/mm_sound_intf.h b/include/mm_sound_intf.h
index ab4a200..fa023e0 100644
--- a/include/mm_sound_intf.h
+++ b/include/mm_sound_intf.h
@@ -55,6 +55,7 @@ typedef enum audio_method {
AUDIO_METHOD_IS_STREAM_ON_DEVICE,
AUDIO_METHOD_GET_AUDIO_PATH,
AUDIO_METHOD_SET_VOLUME_LEVEL,
+ AUDIO_METHOD_SET_MUTE,
AUDIO_METHOD_ACQUIRE_FOCUS,
AUDIO_METHOD_RELEASE_FOCUS,
diff --git a/include/mm_sound_proxy.h b/include/mm_sound_proxy.h
index f2352e6..4f6d282 100644
--- a/include/mm_sound_proxy.h
+++ b/include/mm_sound_proxy.h
@@ -58,6 +58,7 @@ int mm_sound_proxy_is_stream_on_device(int stream_id, int device_id, bool *is_on
int mm_sound_proxy_set_volume_by_type(const char *volume_type, const unsigned volume_level);
int mm_sound_proxy_add_volume_changed_callback(mm_sound_volume_changed_wrapper_cb func, void* userdata, mm_sound_proxy_userdata_free freefunc, unsigned *subs_id);
int mm_sound_proxy_remove_volume_changed_callback(unsigned subs_id);
+int mm_sound_proxy_set_mute_by_type(const char *volume_type, bool mute);
int mm_sound_proxy_emergent_exit(int exit_pid);
int mm_sound_proxy_set_filter_by_type(const char *stream_type, const char *filter_name, const char *filter_parameters, const char *filter_group);
int mm_sound_proxy_unset_filter_by_type(const char *stream_type);
diff --git a/include/mm_sound_utils.h b/include/mm_sound_utils.h
index c29a4d2..64c8dc0 100644
--- a/include/mm_sound_utils.h
+++ b/include/mm_sound_utils.h
@@ -35,8 +35,6 @@
extern "C" {
#endif
-int mm_sound_util_volume_get_value_by_type(volume_type_t type, unsigned int *value);
-
bool mm_sound_util_is_process_alive(pid_t pid);
#ifdef __cplusplus
diff --git a/mm_sound.c b/mm_sound.c
index 0fc8598..a689cbe 100644
--- a/mm_sound.c
+++ b/mm_sound.c
@@ -36,12 +36,6 @@
#include "include/mm_sound_pa_client.h"
#include "include/mm_sound_common.h"
-
-#define VOLUME_MAX_MULTIMEDIA 16
-#define VOLUME_MAX_BASIC 8
-#define VOLUME_MAX_SINGLE 1
-
-
#define MASTER_VOLUME_MAX 100
#define MASTER_VOLUME_MIN 0
@@ -60,35 +54,6 @@ static const char* _get_volume_str(volume_type_t type)
return (type < VOLUME_TYPE_MAX) ? volume_type_str[type] : "Unknown";
}
-static int _validate_volume(volume_type_t type, int value)
-{
- if (value < 0)
- return -1;
-
- switch (type) {
- case VOLUME_TYPE_CALL:
- case VOLUME_TYPE_VOIP:
- if (value >= VOLUME_MAX_BASIC) {
- return -1;
- }
- break;
- case VOLUME_TYPE_SYSTEM:
- case VOLUME_TYPE_MEDIA:
- case VOLUME_TYPE_ALARM:
- case VOLUME_TYPE_NOTIFICATION:
- case VOLUME_TYPE_RINGTONE:
- case VOLUME_TYPE_VOICE:
- if (value >= VOLUME_MAX_MULTIMEDIA) {
- return -1;
- }
- break;
- default:
- return -1;
- break;
- }
- return 0;
-}
-
EXPORT_API
int mm_sound_volume_remove_callback(volume_type_t type)
{
@@ -128,22 +93,16 @@ int mm_sound_remove_volume_changed_callback(unsigned int subs_id)
}
EXPORT_API
-int mm_sound_volume_set_value(volume_type_t volume_type, const unsigned int volume_level)
+int mm_sound_volume_set_value(volume_type_t type, const unsigned int value)
{
int ret = MM_ERROR_NONE;
- debug_msg("type = (%d)%s, value = %d", volume_type, _get_volume_str(volume_type), volume_level);
-
- /* Check input param */
- if (0 > _validate_volume(volume_type, (int)volume_level)) {
- debug_error("invalid volume type %d, value %u", volume_type, volume_level);
- return MM_ERROR_INVALID_ARGUMENT;
- }
-
/* request daemon to set volume */
- ret = mm_sound_client_set_volume_by_type(volume_type, volume_level);
- if (MM_ERROR_NONE != ret)
- debug_error("Can not set volume, ret=0x%x", ret);
+ ret = mm_sound_client_set_volume_by_type(type, value);
+ if (ret)
+ debug_error("can not set volume, type(%s), value(%d), ret=0x%x", _get_volume_str(type), value, ret);
+ else
+ debug_msg("set (%s) volume to (%d)", _get_volume_str(type), value);
return ret;
}
@@ -153,19 +112,50 @@ int mm_sound_volume_get_value(volume_type_t type, unsigned int *value)
{
int ret = MM_ERROR_NONE;
+ ret = mm_sound_client_get_volume_by_type(type, value);
+ if (ret)
+ debug_error("can not get volume, type(%s), ret=0x%x", _get_volume_str(type), ret);
+ else
+ debug_msg("(%s) volume : %d", _get_volume_str(type), *value);
+
+ return ret;
+}
+
+EXPORT_API
+int mm_sound_set_mute(volume_type_t type, bool mute)
+{
+ int ret = MM_ERROR_NONE;
+
+ ret = mm_sound_client_set_mute_by_type(type, mute);
+ if (ret)
+ debug_error("can not set mute, type(%s), mute(%d), ret=0x%x", _get_volume_str(type), mute, ret);
+ else
+ debug_msg("set (%s) mute to (%d)", _get_volume_str(type), mute);
+
+ return ret;
+}
+
+EXPORT_API
+int mm_sound_get_mute(volume_type_t type, bool *muted)
+{
+ int ret = MM_ERROR_NONE;
+
/* Check input param */
- if (value == NULL) {
+ if (!muted) {
debug_error("invalid argument");
return MM_ERROR_INVALID_ARGUMENT;
}
- if (type >= VOLUME_TYPE_MAX) {
+ if (type > VOLUME_TYPE_VOICE) {
debug_error("invalid volume type value %d", type);
return MM_ERROR_INVALID_ARGUMENT;
}
- ret = mm_sound_util_volume_get_value_by_type(type, value);
+ ret = mm_sound_client_get_mute_by_type(type, muted);
+ if (ret)
+ debug_error("can not get mute, type(%s), ret=0x%x", _get_volume_str(type), ret);
+ else
+ debug_msg("(%s) mute state : %d", _get_volume_str(type), *muted);
- debug_msg("returned %s = %d", _get_volume_str(type), *value);
return ret;
}
diff --git a/mm_sound_client.c b/mm_sound_client.c
index 3cbdf91..95e5a25 100644
--- a/mm_sound_client.c
+++ b/mm_sound_client.c
@@ -26,6 +26,7 @@
#include <glib.h>
#include <mm_error.h>
#include <mm_debug.h>
+#include <vconf.h>
#include "include/mm_sound.h"
#include "include/mm_sound_client.h"
@@ -37,6 +38,64 @@
#define CLIENT_HANDLE_MAX 256
#define VOLUME_TYPE_LEN 64
+#define VOLUME_MAX_MULTIMEDIA 16
+#define VOLUME_MAX_BASIC 8
+
+#define VCONF_KEY_VOLUME_PREFIX "file/private/sound/volume"
+#define VCONF_KEY_VOLUME_TYPE_SYSTEM VCONF_KEY_VOLUME_PREFIX"/system"
+#define VCONF_KEY_VOLUME_TYPE_NOTIFICATION VCONF_KEY_VOLUME_PREFIX"/notification"
+#define VCONF_KEY_VOLUME_TYPE_ALARM VCONF_KEY_VOLUME_PREFIX"/alarm"
+#define VCONF_KEY_VOLUME_TYPE_RINGTONE VCONF_KEY_VOLUME_PREFIX"/ringtone"
+#define VCONF_KEY_VOLUME_TYPE_MEDIA VCONF_KEY_VOLUME_PREFIX"/media"
+#define VCONF_KEY_VOLUME_TYPE_CALL VCONF_KEY_VOLUME_PREFIX"/call"
+#define VCONF_KEY_VOLUME_TYPE_VOIP VCONF_KEY_VOLUME_PREFIX"/voip"
+#define VCONF_KEY_VOLUME_TYPE_VOICE VCONF_KEY_VOLUME_PREFIX"/voice"
+#define VCONF_KEY_VOLUME_TYPE_ANDROID VCONF_KEY_VOLUME_PREFIX"/fixed"
+
+#define VCONF_KEY_MUTE_PREFIX "file/private/sound/mute"
+#define VCONF_KEY_MUTE_TYPE_SYSTEM VCONF_KEY_MUTE_PREFIX"/system"
+#define VCONF_KEY_MUTE_TYPE_NOTIFICATION VCONF_KEY_MUTE_PREFIX"/notification"
+#define VCONF_KEY_MUTE_TYPE_ALARM VCONF_KEY_MUTE_PREFIX"/alarm"
+#define VCONF_KEY_MUTE_TYPE_RINGTONE VCONF_KEY_MUTE_PREFIX"/ringtone"
+#define VCONF_KEY_MUTE_TYPE_MEDIA VCONF_KEY_MUTE_PREFIX"/media"
+#define VCONF_KEY_MUTE_TYPE_CALL VCONF_KEY_MUTE_PREFIX"/call"
+#define VCONF_KEY_MUTE_TYPE_VOIP VCONF_KEY_MUTE_PREFIX"/voip"
+#define VCONF_KEY_MUTE_TYPE_VOICE VCONF_KEY_MUTE_PREFIX"/voice"
+
+static char *g_volume_vconf[VOLUME_TYPE_MAX] = {
+ VCONF_KEY_VOLUME_TYPE_SYSTEM, /* VOLUME_TYPE_SYSTEM */
+ VCONF_KEY_VOLUME_TYPE_NOTIFICATION, /* VOLUME_TYPE_NOTIFICATION */
+ VCONF_KEY_VOLUME_TYPE_ALARM, /* VOLUME_TYPE_ALARM */
+ VCONF_KEY_VOLUME_TYPE_RINGTONE, /* VOLUME_TYPE_RINGTONE */
+ VCONF_KEY_VOLUME_TYPE_MEDIA, /* VOLUME_TYPE_MEDIA */
+ VCONF_KEY_VOLUME_TYPE_CALL, /* VOLUME_TYPE_CALL */
+ VCONF_KEY_VOLUME_TYPE_VOIP, /* VOLUME_TYPE_VOIP */
+ VCONF_KEY_VOLUME_TYPE_VOICE, /* VOLUME_TYPE_VOICE */
+ VCONF_KEY_VOLUME_TYPE_ANDROID /* VOLUME_TYPE_FIXED */
+};
+
+static char *g_mute_vconf[] = {
+ VCONF_KEY_MUTE_TYPE_SYSTEM, /* MUTE_TYPE_SYSTEM */
+ VCONF_KEY_MUTE_TYPE_NOTIFICATION, /* MUTE_TYPE_NOTIFICATION */
+ VCONF_KEY_MUTE_TYPE_ALARM, /* MUTE_TYPE_ALARM */
+ VCONF_KEY_MUTE_TYPE_RINGTONE, /* MUTE_TYPE_RINGTONE */
+ VCONF_KEY_MUTE_TYPE_MEDIA, /* MUTE_TYPE_MEDIA */
+ VCONF_KEY_MUTE_TYPE_CALL, /* MUTE_TYPE_CALL */
+ VCONF_KEY_MUTE_TYPE_VOIP, /* MUTE_TYPE_VOIP */
+ VCONF_KEY_MUTE_TYPE_VOICE, /* MUTE_TYPE_VOICE */
+};
+
+static char *g_volume_str[VOLUME_TYPE_MAX] = {
+ "SYSTEM",
+ "NOTIFICATION",
+ "ALARM",
+ "RINGTONE",
+ "MEDIA",
+ "CALL",
+ "VOIP",
+ "VOICE",
+ "FIXED",
+};
struct callback_data {
void *user_cb;
@@ -69,6 +128,35 @@ typedef struct _focus_idle_event {
int data;
} focus_idle_event_t;
+static int _validate_volume(volume_type_t type, int level)
+{
+ if (level < 0)
+ return -1;
+
+ switch (type) {
+ case VOLUME_TYPE_CALL:
+ case VOLUME_TYPE_VOIP:
+ if (level >= VOLUME_MAX_BASIC) {
+ return -1;
+ }
+ break;
+ case VOLUME_TYPE_SYSTEM:
+ case VOLUME_TYPE_MEDIA:
+ case VOLUME_TYPE_ALARM:
+ case VOLUME_TYPE_NOTIFICATION:
+ case VOLUME_TYPE_RINGTONE:
+ case VOLUME_TYPE_VOICE:
+ if (level >= VOLUME_MAX_MULTIMEDIA) {
+ return -1;
+ }
+ break;
+ default:
+ return -1;
+ break;
+ }
+ return 0;
+}
+
int mm_sound_client_initialize(void)
{
int ret = MM_ERROR_NONE;
@@ -724,24 +812,61 @@ static int __convert_volume_type_to_int(const char *volume_type_str, volume_type
return ret;
}
-int mm_sound_client_set_volume_by_type(const int volume_type, const unsigned int volume_level)
+int mm_sound_client_set_volume_by_type(volume_type_t type, const unsigned int level)
{
int ret = MM_ERROR_NONE;
char *type_str = NULL;
debug_fenter();
- if ((ret = __convert_volume_type_to_str(volume_type, &type_str)) != MM_ERROR_NONE) {
+ if (type >= VOLUME_TYPE_MAX) {
+ debug_error("invalid volume type %d", type);
+ return MM_ERROR_INVALID_ARGUMENT;
+ }
+
+ /* Check input param */
+ if (0 > _validate_volume(type, (int)level)) {
+ debug_error("invalid level %u of %s", level, g_volume_str[type]);
+ return MM_ERROR_INVALID_ARGUMENT;
+ }
+
+ if ((ret = __convert_volume_type_to_str(type, &type_str)) != MM_ERROR_NONE) {
debug_error("volume type convert failed");
goto failed;
}
- ret = mm_sound_proxy_set_volume_by_type(type_str, volume_level);
+ ret = mm_sound_proxy_set_volume_by_type(type_str, level);
failed:
debug_fleave();
return ret;
}
+int mm_sound_client_get_volume_by_type(volume_type_t type, unsigned int *level)
+{
+ int ret = MM_ERROR_NONE;
+ int vconf_value = 0;
+
+ if (level == NULL) {
+ debug_error("invalid argument, level is null");
+ return MM_ERROR_INVALID_ARGUMENT;
+ }
+
+ if (type >= VOLUME_TYPE_MAX) {
+ debug_error("invalid volume type %d", type);
+ return MM_ERROR_INVALID_ARGUMENT;
+ }
+
+ /* Get volume value from VCONF */
+ if (vconf_get_int(g_volume_vconf[type], &vconf_value)) {
+ debug_error("vconf_get_int(%s) failed..\n", g_volume_vconf[type]);
+ return MM_ERROR_SOUND_INTERNAL;
+ }
+
+ *level = vconf_value;
+
+ return ret;
+}
+
static void _mm_sound_volume_changed_callback_wrapper_func(const char *direction, const char *volume_type_str,
int volume_level, void *userdata)
{
@@ -792,6 +917,54 @@ int mm_sound_client_remove_volume_changed_callback(unsigned int subs_id)
return ret;
}
+int mm_sound_client_set_mute_by_type(volume_type_t type, bool mute)
+{
+ int ret = MM_ERROR_NONE;
+ char *type_str = NULL;
+
+ debug_fenter();
+
+ if (type > VOLUME_TYPE_VOICE) {
+ debug_error("invalid volume type %d", type);
+ return MM_ERROR_INVALID_ARGUMENT;
+ }
+
+ if ((ret = __convert_volume_type_to_str(type, &type_str)) != MM_ERROR_NONE) {
+ debug_error("volume type convert failed");
+ goto failed;
+ }
+
+ ret = mm_sound_proxy_set_mute_by_type(type_str, mute);
+
+failed:
+ debug_fleave();
+ return ret;
+}
+
+int mm_sound_client_get_mute_by_type(volume_type_t type, bool *muted)
+{
+ int ret = MM_ERROR_NONE;
+ int vconf_value = 0;
+
+ debug_fenter();
+
+ if (type > VOLUME_TYPE_VOICE) {
+ debug_error("invalid volume type %d", type);
+ return MM_ERROR_INVALID_ARGUMENT;
+ }
+
+ /* Get mute state from VCONF */
+ if (vconf_get_bool(g_mute_vconf[type], &vconf_value)) {
+ debug_error("vconf_get_int(%s) failed..\n", g_mute_vconf[type]);
+ return MM_ERROR_SOUND_INTERNAL;
+ }
+
+ *muted = (bool)vconf_value;
+
+ debug_fleave();
+ return ret;
+}
+
int mm_sound_client_set_filter_by_type(const char *stream_type, const char *filter_name, const char *filter_parameters, const char *filter_group)
{
int ret = MM_ERROR_NONE;
diff --git a/mm_sound_proxy.c b/mm_sound_proxy.c
index 0351640..31cfafe 100644
--- a/mm_sound_proxy.c
+++ b/mm_sound_proxy.c
@@ -711,6 +711,40 @@ int mm_sound_proxy_remove_volume_changed_callback(unsigned subs_id)
return ret;
}
+int mm_sound_proxy_set_mute_by_type(const char *volume_type, bool mute)
+{
+ int ret = MM_ERROR_NONE;
+ char *reply = NULL, *direction = "out";
+ GVariant *params = NULL, *result = NULL;
+
+ debug_fenter();
+
+ if ((params = g_variant_new("(ssu)", direction, volume_type, (unsigned int)mute)) == NULL) {
+ debug_error("Construct Param for method call failed");
+ return MM_ERROR_SOUND_INTERNAL;
+ }
+
+ if ((ret = mm_sound_dbus_method_call_to(AUDIO_PROVIDER_STREAM_MANAGER, AUDIO_METHOD_SET_MUTE, params, &result)) != MM_ERROR_NONE) {
+ debug_error("dbus set mute by type failed");
+ g_variant_unref(result);
+ return ret;
+ }
+
+ if (result) {
+ g_variant_get(result, "(&s)", &reply);
+ debug_log("reply : %s", reply);
+ if (strcmp(reply, "STREAM_MANAGER_RETURN_OK"))
+ ret = MM_ERROR_SOUND_INTERNAL;
+ g_variant_unref(result);
+ } else {
+ debug_error("reply null");
+ ret = MM_ERROR_SOUND_INTERNAL;
+ }
+
+ debug_fleave();
+ return ret;
+}
+
int mm_sound_proxy_set_filter_by_type(const char *stream_type, const char *filter_name, const char *filter_parameters, const char *filter_group)
{
int ret = MM_ERROR_NONE;
diff --git a/packaging/libmm-sound.spec b/packaging/libmm-sound.spec
index 00944f4..38ead95 100644
--- a/packaging/libmm-sound.spec
+++ b/packaging/libmm-sound.spec
@@ -1,6 +1,6 @@
Name: libmm-sound
Summary: MMSound Package contains client lib and sound_server binary
-Version: 0.12.38
+Version: 0.12.39
Release: 0
Group: System/Libraries
License: Apache-2.0