Add support for mute API set 23/199823/5 accepted/tizen/unified/20190221.015446 submit/tizen/20190220.021455
authorSangchul Lee <sc11.lee@samsung.com>
Thu, 14 Feb 2019 08:25:14 +0000 (17:25 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Mon, 18 Feb 2019 06:43:39 +0000 (15:43 +0900)
[Version] 0.12.39
[Issue Type] New feature

Change-Id: I53276fe8e860eb97ba1b6aa4864ac10552ebf494
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
common/mm_sound_dbus.c
common/mm_sound_utils.c
include/mm_sound.h
include/mm_sound_client.h
include/mm_sound_intf.h
include/mm_sound_proxy.h
include/mm_sound_utils.h
mm_sound.c
mm_sound_client.c
mm_sound_proxy.c
packaging/libmm-sound.spec

index 6707dc9..e026a27 100644 (file)
@@ -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",
        },
index aa189a4..d33125e 100644 (file)
 #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)
 {
index 99c2bfa..99adec6 100644 (file)
@@ -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.
  *
index 7632220..ce62bb9 100644 (file)
@@ -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);
index ab4a200..fa023e0 100644 (file)
@@ -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,
index f2352e6..4f6d282 100644 (file)
@@ -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);
index c29a4d2..64c8dc0 100644 (file)
@@ -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
index 0fc8598..a689cbe 100644 (file)
 #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;
 }
 
index 3cbdf91..95e5a25 100644 (file)
@@ -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"
 
 #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;
index 0351640..31cfafe 100644 (file)
@@ -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;
index 00944f4..38ead95 100644 (file)
@@ -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