X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=mm_sound.c;h=a689cbed688c00aa175320e49e979cff17e34110;hb=5669ffe9cf86a1d9915f66eeea75c32b6f479b9b;hp=b29da0f6a21401f7e7201ed65be2a2c5d464275b;hpb=c89c982cf6b853edb3eb84d872eaa812e579f0c3;p=platform%2Fcore%2Fmultimedia%2Flibmm-sound.git diff --git a/mm_sound.c b/mm_sound.c index b29da0f..a689cbe 100644 --- a/mm_sound.c +++ b/mm_sound.c @@ -29,7 +29,6 @@ #include #include #include -#include #include #include "include/mm_sound_private.h" #include "include/mm_sound_utils.h" @@ -37,73 +36,22 @@ #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 #include -static pthread_mutex_t g_subscribe_cb_list_mutex = PTHREAD_MUTEX_INITIALIZER; - #define MM_SOUND_DBUS_BUS_NAME_PREPIX "org.tizen.MMSound" #define MM_SOUND_DBUS_OBJECT_PATH "/org/tizen/MMSound" #define MM_SOUND_DBUS_INTERFACE "org.tizen.mmsound" -static GDBusConnection *g_dbus_conn_mmsound; -static int g_dbus_signal_values[MM_SOUND_SIGNAL_MAX] = {0,}; -static const char* dbus_signal_name_str[] = { - "ReleaseInternalFocus", -}; - -typedef struct _subscribe_cb { - mm_sound_signal_name_t signal_type; - mm_sound_signal_callback callback; - void *user_data; - unsigned int id; - int client_pid; -} subscribe_cb_t; - -static const char* _get_volume_str (volume_type_t type) +static const char* _get_volume_str(volume_type_t type) { - static const char *volume_type_str[VOLUME_TYPE_MAX] = - { "SYSTEM", "NOTIFICATION", "ALARM", "RINGTONE", "MEDIA", "CALL", "VOIP", "VOICE", "FIXED"}; + static const char *volume_type_str[VOLUME_TYPE_MAX] = { + "SYSTEM", "NOTIFICATION", "ALARM", "RINGTONE", "MEDIA", "CALL", "VOIP", "VOICE", "FIXED" + }; - return (type >= VOLUME_TYPE_SYSTEM && 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; + return (type < VOLUME_TYPE_MAX) ? volume_type_str[type] : "Unknown"; } EXPORT_API @@ -145,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; } @@ -170,64 +112,50 @@ int mm_sound_volume_get_value(volume_type_t type, unsigned int *value) { int ret = MM_ERROR_NONE; - /* Check input param */ - if (value == NULL) { - debug_error("invalid argument"); - return MM_ERROR_INVALID_ARGUMENT; - } - if (type < 0 || type >= VOLUME_TYPE_MAX) { - 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_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); - debug_msg("returned %s = %d", _get_volume_str(type), *value); return ret; } EXPORT_API -int mm_sound_volume_primary_type_set(volume_type_t type) +int mm_sound_set_mute(volume_type_t type, bool mute) { int ret = MM_ERROR_NONE; - /* Check input param */ - if(type < VOLUME_TYPE_UNKNOWN || type >= VOLUME_TYPE_MAX) { - debug_error("invalid argument"); - return MM_ERROR_INVALID_ARGUMENT; - } - - if (vconf_set_int(VCONFKEY_SOUND_PRIMARY_VOLUME_TYPE, type)) { - debug_error("could not set vconf for RIMARY_VOLUME_TYPE"); - ret = MM_ERROR_SOUND_INTERNAL; - } else { - debug_msg("set primary volume type forcibly %d(%s)", type, _get_volume_str(type)); - } + 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_volume_primary_type_get(volume_type_t *type) +int mm_sound_get_mute(volume_type_t type, bool *muted) { int ret = MM_ERROR_NONE; - int voltype = VOLUME_TYPE_RINGTONE; /* Check input param */ - if(type == NULL) { + if (!muted) { debug_error("invalid argument"); return MM_ERROR_INVALID_ARGUMENT; } - - /* check force set */ - if (vconf_get_int(VCONFKEY_SOUND_PRIMARY_VOLUME_TYPE, &voltype)) { - debug_error("could not get vconf for PRIMARY_VOLUME_TYPE"); - ret = MM_ERROR_SOUND_INTERNAL; - } else { - debug_msg("get primary volume type %d(%s)", voltype, _get_volume_str(voltype)); - *type = voltype; + if (type > VOLUME_TYPE_VOICE) { + debug_error("invalid volume type value %d", type); + return MM_ERROR_INVALID_ARGUMENT; } + 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); + return ret; } @@ -280,77 +208,6 @@ int mm_sound_control_filter(const char *stream_type, const char *filter_name, co /////////////////////////////////// //// MMSOUND PLAY APIs /////////////////////////////////// -static inline void _mm_sound_fill_play_param(MMSoundPlayParam *param, const char *filename, int volume_config, mm_sound_stop_callback_func callback, void *data) -{ - param->filename = filename; - param->volume = 0; //volume value dose not effect anymore - param->callback = callback; - param->data = data; - param->loop = 1; - param->volume_config = volume_config; -} - -EXPORT_API -int mm_sound_play_loud_solo_sound(const char *filename, int volume_config, mm_sound_stop_callback_func callback, void *data, int *handle) -{ - MMSoundPlayParam param = { 0, }; - - /* FIXME : this function will be deleted */ - _mm_sound_fill_play_param(¶m, filename, volume_config, callback, data); - return mm_sound_play_sound_ex(¶m, handle); -} - -EXPORT_API -int mm_sound_play_sound(const char *filename, int volume_config, mm_sound_stop_callback_func callback, void *data, int *handle) -{ - MMSoundPlayParam param = { 0, }; - - _mm_sound_fill_play_param(¶m, filename, volume_config, callback, data); - return mm_sound_play_sound_ex(¶m, handle); -} - -EXPORT_API -int mm_sound_play_sound_ex(MMSoundPlayParam *param, int *handle) -{ - int err; - int lhandle = -1; - int volume_type = 0; - /* Check input param */ - if (param == NULL) { - debug_error("param is null"); - return MM_ERROR_INVALID_ARGUMENT; - } - - volume_type = MM_SOUND_VOLUME_CONFIG_TYPE(param->volume_config); - - if (param->filename == NULL) { - debug_error("filename is NULL"); - return MM_ERROR_SOUND_FILE_NOT_FOUND; - } - if (volume_type < 0 || volume_type >= VOLUME_TYPE_MAX) { - debug_error("Volume type is invalid %d", volume_type); - return MM_ERROR_INVALID_ARGUMENT; - } - - /* Play sound */ - err = mm_sound_client_play_sound(param, 0, &lhandle); - if (err < 0) { - debug_error("Failed to play sound"); - return err; - } - - /* Set handle to return */ - if (handle) { - *handle = lhandle; - } else { - debug_critical("The sound hadle cannot be get [%d]", lhandle); - } - - debug_warning ("success : handle=[%p]", handle); - - return MM_ERROR_NONE; -} - EXPORT_API int mm_sound_play_sound_with_stream_info(const char *filename, char *stream_type, int stream_id, unsigned int loop, mm_sound_stop_callback_func callback, void *data, int *handle) { @@ -373,7 +230,7 @@ int mm_sound_play_sound_with_stream_info(const char *filename, char *stream_type return err; } - debug_warning ("success : handle=[%p]", handle); + debug_warning("success : handle=[%p]", handle); return MM_ERROR_NONE; @@ -385,14 +242,14 @@ int mm_sound_stop_sound(int handle) { int err; - debug_warning ("enter : handle=[%d]", handle); + debug_warning("enter : handle=[%d]", handle); /* Stop sound */ err = mm_sound_client_stop_sound(handle); if (err < 0) { debug_error("Fail to stop sound"); return err; } - debug_warning ("success : handle=[%d]", handle); + debug_warning("success : handle=[%d]", handle); return MM_ERROR_NONE; } @@ -401,58 +258,13 @@ int mm_sound_stop_sound(int handle) //// MMSOUND TONE APIs /////////////////////////////////// EXPORT_API -int mm_sound_play_tone_ex (MMSoundTone_t num, int volume_config, const double volume, const int duration, int *handle, bool enable_session) -{ - int lhandle = -1; - int err = MM_ERROR_NONE; - int volume_type = MM_SOUND_VOLUME_CONFIG_TYPE(volume_config); - - debug_fenter(); - - /* Check input param */ - if (duration < -1) { - debug_error("number is invalid %d", duration); - return MM_ERROR_INVALID_ARGUMENT; - } - if (num < MM_SOUND_TONE_DTMF_0 || num >= MM_SOUND_TONE_NUM) { - debug_error("TONE Value is invalid %d", num); - return MM_ERROR_INVALID_ARGUMENT; - } - if (volume_type < 0 || volume_type >= VOLUME_TYPE_MAX) { - debug_error("Volume type is invalid %d", volume_type); - return MM_ERROR_INVALID_ARGUMENT; - } - if (volume < 0.0 || volume > 1.0) { - debug_error("Volume Value is invalid %d", volume); - return MM_ERROR_INVALID_ARGUMENT; - } - - /* Play tone */ - debug_msg("Call MMSoundClientPlayTone"); - err = mm_sound_client_play_tone(num, volume_config, volume, duration, &lhandle, enable_session); - if (err < 0) { - debug_error("Failed to play sound"); - return err; - } - - /* Set handle to return */ - if (handle) - *handle = lhandle; - else - debug_critical("The sound handle cannot be get [%d]", lhandle); - - debug_fleave(); - return MM_ERROR_NONE; -} - -EXPORT_API int mm_sound_play_tone_with_stream_info(MMSoundTone_t tone, char *stream_type, int stream_id, const double volume, const int duration, int *handle) { int err = MM_ERROR_NONE; err = mm_sound_client_play_tone_with_stream_info(tone, stream_type, stream_id, volume, duration, handle); - if (err <0) { + if (err < 0) { debug_error("Failed to play sound"); return err; } @@ -461,13 +273,6 @@ int mm_sound_play_tone_with_stream_info(MMSoundTone_t tone, char *stream_type, i } - -EXPORT_API -int mm_sound_play_tone (MMSoundTone_t num, int volume_config, const double volume, const int duration, int *handle) -{ - return mm_sound_play_tone_ex (num, volume_config, volume, duration, handle, true); -} - /////////////////////////////////// //// MMSOUND ROUTING APIs /////////////////////////////////// @@ -526,316 +331,12 @@ int mm_sound_remove_test_callback(unsigned int subs_id) return ret; } -static int _convert_signal_name_str_to_enum (const char *name_str, mm_sound_signal_name_t *name_enum) { - int ret = MM_ERROR_NONE; - - if (!name_str || !name_enum) - return MM_ERROR_INVALID_ARGUMENT; - - if (!strncmp(name_str, "ReleaseInternalFocus", strlen("ReleaseInternalFocus"))) { - *name_enum = MM_SOUND_SIGNAL_RELEASE_INTERNAL_FOCUS; - } else { - ret = MM_ERROR_INVALID_ARGUMENT; - LOGE("not supported signal name(%s), err(0x%08x)", name_str, ret); - } - return ret; -} - -static void _dbus_signal_callback (const char *signal_name, int value, void *user_data) -{ - int ret = MM_ERROR_NONE; - mm_sound_signal_name_t signal; - subscribe_cb_t *subscribe_cb = (subscribe_cb_t*)user_data; - - debug_fenter(); - - if (!subscribe_cb) - return; - - ret = _convert_signal_name_str_to_enum(signal_name, &signal); - if (ret) - return; - - debug_msg("signal: name[%s], value[0x%08x], user_data[%p], type[%d]", - signal_name, value, user_data, subscribe_cb->signal_type); - - if (subscribe_cb->signal_type == MM_SOUND_SIGNAL_RELEASE_INTERNAL_FOCUS) { - /* Trigger the signal callback when it comes from the same process. - * In this case, the second integer argument is consist of - * |<-- pid (16bits) -->|<-- value (16bits) -->|, - * FYI, #define PID_MAX_DEFAULT (CONFIG_BASE_SMALL ? 0x1000 : 0x8000). - * In case of daemon usage, it uses the client_pid of subscribe_cb. */ - debug_msg ("client_pid[%d], getpid[%d], value>>16[%d], callback[%p]", - subscribe_cb->client_pid, getpid(), (value >> 16), subscribe_cb); - if ((subscribe_cb->client_pid ? subscribe_cb->client_pid : getpid()) == (value >> 16)) - subscribe_cb->callback(signal, (value & 0x0000FFFF), subscribe_cb->user_data); - } else { - debug_warning("not supported type[%d]", subscribe_cb->signal_type); - } - - debug_fleave(); - - return; -} - -static void signal_callback(GDBusConnection *conn, - const gchar *sender_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *signal_name, - GVariant *parameters, - gpointer user_data) -{ - int value=0; - const GVariantType* value_type; - - debug_msg ("sender : %s, object : %s, interface : %s, signal : %s", - sender_name, object_path, interface_name, signal_name); - if (g_variant_is_of_type(parameters, G_VARIANT_TYPE("(i)"))) { - g_variant_get(parameters, "(i)",&value); - debug_msg(" - value : 0x08%x", value); - _dbus_signal_callback(signal_name, value, user_data); - } else { - value_type = g_variant_get_type(parameters); - debug_warning("signal type is %s", value_type); - } -} - -EXPORT_API -int mm_sound_subscribe_signal(mm_sound_signal_name_t signal_type, unsigned int *subscribe_id, - mm_sound_signal_callback callback, void *user_data) -{ - int ret = MM_ERROR_NONE; - GError *err = NULL; - guint subs_id; - subscribe_cb_t *subscribe_cb = NULL; - - debug_fenter(); - - MMSOUND_ENTER_CRITICAL_SECTION_WITH_RETURN(&g_subscribe_cb_list_mutex, MM_ERROR_SOUND_INTERNAL); - - if (signal_type < 0 || signal_type >= MM_SOUND_SIGNAL_MAX || !subscribe_id) { - debug_error ("invalid argument, signal(%d), subscribe_id(%p)", signal_type, subscribe_id); - ret = MM_ERROR_INVALID_ARGUMENT; - goto error; - } - - subscribe_cb = malloc(sizeof(subscribe_cb_t)); - if (!subscribe_cb) { - ret = MM_ERROR_SOUND_INTERNAL; - goto error; - } - memset(subscribe_cb, 0, sizeof(subscribe_cb_t)); - subscribe_cb->signal_type = signal_type; - subscribe_cb->callback = callback; - subscribe_cb->user_data = user_data; - - g_dbus_conn_mmsound = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &err); - if (!g_dbus_conn_mmsound && err) { - debug_error ("g_bus_get_sync() error (%s) ", err->message); - g_error_free (err); - ret = MM_ERROR_SOUND_INTERNAL; - goto error; - } - subs_id = g_dbus_connection_signal_subscribe(g_dbus_conn_mmsound, NULL, MM_SOUND_DBUS_INTERFACE, - dbus_signal_name_str[signal_type], MM_SOUND_DBUS_OBJECT_PATH, - NULL, G_DBUS_SIGNAL_FLAGS_NONE, signal_callback, - subscribe_cb, free); - if (subs_id == 0) { - debug_error ("g_dbus_connection_signal_subscribe() error (%d)", subs_id); - ret = MM_ERROR_SOUND_INTERNAL; - g_object_unref(g_dbus_conn_mmsound); - goto error; - } - subscribe_cb->id = subs_id; - *subscribe_id = subs_id; - - MMSOUND_LEAVE_CRITICAL_SECTION(&g_subscribe_cb_list_mutex); - - debug_fleave(); - - return ret; - -error: - if (subscribe_cb) - free(subscribe_cb); - - MMSOUND_LEAVE_CRITICAL_SECTION(&g_subscribe_cb_list_mutex); - - return ret; -} - -/* ToDo : Almost same as mm_sound_subscribe_signal, need to be merged */ +#ifdef TIZEN_TV EXPORT_API -int mm_sound_subscribe_signal_for_daemon(mm_sound_signal_name_t signal_type, int client_pid, unsigned int *subscribe_id, - mm_sound_signal_callback callback, void *user_data) +void mm_sound_dotnet_cleanup(int signo) { - int ret = MM_ERROR_NONE; - GError *err = NULL; - guint subs_id; - subscribe_cb_t *subscribe_cb = NULL; - - debug_fenter(); - - MMSOUND_ENTER_CRITICAL_SECTION_WITH_RETURN(&g_subscribe_cb_list_mutex, MM_ERROR_SOUND_INTERNAL); - - if (signal_type < 0 || signal_type >= MM_SOUND_SIGNAL_MAX || !client_pid || !subscribe_id) { - debug_error ("invalid argument, signal(%d), client_pid(%d), subscribe_id(%p)", signal_type, client_pid, subscribe_id); - ret = MM_ERROR_INVALID_ARGUMENT; - goto error; - } - - subscribe_cb = malloc(sizeof(subscribe_cb_t)); - if (!subscribe_cb) { - ret = MM_ERROR_SOUND_INTERNAL; - goto error; - } - memset(subscribe_cb, 0, sizeof(subscribe_cb_t)); - subscribe_cb->signal_type = signal_type; - subscribe_cb->callback = callback; - subscribe_cb->user_data = user_data; - subscribe_cb->client_pid = client_pid; - - g_dbus_conn_mmsound = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &err); - if (!g_dbus_conn_mmsound && err) { - debug_error ("g_bus_get_sync() error (%s) ", err->message); - g_error_free (err); - ret = MM_ERROR_SOUND_INTERNAL; - goto error; - } - subs_id = g_dbus_connection_signal_subscribe(g_dbus_conn_mmsound, NULL, MM_SOUND_DBUS_INTERFACE, - dbus_signal_name_str[signal_type], MM_SOUND_DBUS_OBJECT_PATH, - NULL, G_DBUS_SIGNAL_FLAGS_NONE, signal_callback, - subscribe_cb, free); - if (subs_id == 0) { - debug_error ("g_dbus_connection_signal_subscribe() error (%d)", subs_id); - ret = MM_ERROR_SOUND_INTERNAL; - g_object_unref(g_dbus_conn_mmsound); - goto error; - } - subscribe_cb->id = subs_id; - *subscribe_id = subs_id; - - MMSOUND_LEAVE_CRITICAL_SECTION(&g_subscribe_cb_list_mutex); - - debug_fleave(); - - return ret; - -error: - if (subscribe_cb) - free(subscribe_cb); - - MMSOUND_LEAVE_CRITICAL_SECTION(&g_subscribe_cb_list_mutex); - - return ret; -} - -EXPORT_API -void mm_sound_unsubscribe_signal(unsigned int subscribe_id) -{ - debug_fenter(); - - MMSOUND_ENTER_CRITICAL_SECTION(&g_subscribe_cb_list_mutex); - - if (g_dbus_conn_mmsound && subscribe_id) { - g_dbus_connection_signal_unsubscribe(g_dbus_conn_mmsound, subscribe_id); - g_object_unref(g_dbus_conn_mmsound); - } - - MMSOUND_LEAVE_CRITICAL_SECTION(&g_subscribe_cb_list_mutex); - - debug_fleave(); -} - -EXPORT_API -int mm_sound_send_signal(mm_sound_signal_name_t signal_type, int value) -{ - int ret = MM_ERROR_NONE; - GError *err = NULL; - GDBusConnection *conn = NULL; - gboolean dbus_ret = TRUE; - - debug_fenter(); - - MMSOUND_ENTER_CRITICAL_SECTION_WITH_RETURN(&g_subscribe_cb_list_mutex, MM_ERROR_SOUND_INTERNAL); - - if (signal_type < 0 || signal_type >= MM_SOUND_SIGNAL_MAX) { - debug_error ("invalid argument, signal(%d)", signal_type); - ret = MM_ERROR_INVALID_ARGUMENT; - goto error; - } - - conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &err); - if (!conn && err) { - debug_error ("g_bus_get_sync() error (%s)", err->message); - ret = MM_ERROR_SOUND_INTERNAL; - goto error; - } - - g_dbus_signal_values[signal_type] = value; - if (signal_type == MM_SOUND_SIGNAL_RELEASE_INTERNAL_FOCUS) { - /* Trigger the signal callback when it comes from the same process. - * |<-- pid (16bits) -->|<-- value (16bits) -->|, - * FYI, #define PID_MAX_DEFAULT (CONFIG_BASE_SMALL ? 0x1000 : 0x8000). */ - value |= ((int)getpid() << 16); - if ((_mm_session_util_write_information((int)getpid(), MM_SESSION_TYPE_REPLACED_BY_STREAM, 0))) - debug_error ("failed to _mm_session_util_write_information for MM_SESSION_TYPE_REPLACED_BY_STREAM"); - } - dbus_ret = g_dbus_connection_emit_signal (conn, - NULL, MM_SOUND_DBUS_OBJECT_PATH, MM_SOUND_DBUS_INTERFACE, dbus_signal_name_str[signal_type], - g_variant_new ("(i)", value), - &err); - if (!dbus_ret && err) { - debug_error ("g_dbus_connection_emit_signal() error (%s)", err->message); - ret = MM_ERROR_SOUND_INTERNAL; - goto error; - } - - dbus_ret = g_dbus_connection_flush_sync(conn, NULL, &err); - if (!dbus_ret && err) { - debug_error ("g_dbus_connection_flush_sync() error (%s)", err->message); - ret = MM_ERROR_SOUND_INTERNAL; - goto error; - } - - g_object_unref(conn); - debug_msg ("sending signal[%s], value[%d] success", dbus_signal_name_str[signal_type], value); - - MMSOUND_LEAVE_CRITICAL_SECTION(&g_subscribe_cb_list_mutex); - - debug_fleave(); - - return ret; - -error: - if (err) - g_error_free (err); - if (conn) - g_object_unref(conn); - - MMSOUND_LEAVE_CRITICAL_SECTION(&g_subscribe_cb_list_mutex); - - return ret; -} - -EXPORT_API -int mm_sound_get_signal_value(mm_sound_signal_name_t signal_type, int *value) -{ - int ret = MM_ERROR_NONE; - - debug_fenter(); - - MMSOUND_ENTER_CRITICAL_SECTION_WITH_RETURN(&g_subscribe_cb_list_mutex, MM_ERROR_SOUND_INTERNAL); - - *value = g_dbus_signal_values[signal_type]; - - MMSOUND_LEAVE_CRITICAL_SECTION(&g_subscribe_cb_list_mutex); - - debug_fleave(); - - return ret; } +#endif __attribute__ ((constructor)) static void _mm_sound_initialize(void)