Adapt session interrupt callback to focus callback 20/45020/12 accepted/tizen/mobile/20150813.083543 accepted/tizen/tv/20150813.083601 accepted/tizen/wearable/20150813.083609 submit/tizen/20150812.103754 submit/tizen/20150813.040619
authorinhyeok <i_bc.kim@samsung.com>
Thu, 30 Jul 2015 10:52:32 +0000 (19:52 +0900)
committerinhyeok <i_bc.kim@samsung.com>
Wed, 12 Aug 2015 07:24:17 +0000 (16:24 +0900)
a[Version] Release 0.9.251
[Profile] Common
[Issue Type] Refactoring
[Dependency module] sound-manager

Modify session interrupt callback to be invoked when focus callback is called.

Change-Id: I78cc864ed4065c43cd397b9bc1e578fe6fc404b5
Signed-off-by: inhyeok <i_bc.kim@samsung.com>
include/mm_sound_client.h
include/mm_sound_client_dbus.h
include/mm_sound_focus.h
mm_sound_client.c
mm_sound_client_dbus.c
mm_sound_focus.c
packaging/libmm-sound.spec

index 208365f..4490d8d 100644 (file)
@@ -55,6 +55,8 @@ int mm_sound_client_remove_device_connected_callback(unsigned int subs_id);
 int mm_sound_client_add_device_info_changed_callback(int device_flags, mm_sound_device_info_changed_cb func, void* user_data, unsigned int *subs_id);
 int mm_sound_client_remove_device_info_changed_callback(unsigned int subs_id);
 #ifdef USE_FOCUS
+int mm_sound_client_set_session_interrupt_callback(mm_sound_focus_session_interrupt_cb callback, void* user_data);
+int mm_sound_client_unset_session_interrupt_callback(void);
 int mm_sound_client_get_uniq_id(int *id);
 int mm_sound_client_register_focus(int id, const char *stream_type, mm_sound_focus_changed_cb callback, void* user_data);
 int mm_sound_client_unregister_focus(int id);
index 2012802..026ddb9 100644 (file)
@@ -43,6 +43,8 @@ int mm_sound_client_dbus_remove_volume_changed_callback(unsigned int subs_id);
 int mm_sound_client_dbus_get_audio_path(mm_sound_device_in *device_in, mm_sound_device_out *device_out);
 
 #ifdef USE_FOCUS
+int mm_sound_client_dbus_set_session_interrupt_callback(mm_sound_focus_session_interrupt_cb callback, void* user_data);
+int mm_sound_client_dbus_unset_session_interrupt_callback(void);
 int mm_sound_client_dbus_register_focus(int id, const char *stream_type, mm_sound_focus_changed_cb callback, void* user_data);
 int mm_sound_client_dbus_unregister_focus(int id);
 int mm_sound_client_dbus_acquire_focus(int id, mm_sound_focus_type_e type, const char *option);
index 3c0552c..7ccfd29 100644 (file)
@@ -57,6 +57,10 @@ typedef void (*mm_sound_focus_changed_watch_cb) (int id, mm_sound_focus_type_e f
 int mm_sound_set_focus_watch_callback(mm_sound_focus_type_e focus_type, mm_sound_focus_changed_watch_cb callback, void *user_data, int *id);
 int mm_sound_unset_focus_watch_callback(int id);
 
+typedef void (*mm_sound_focus_session_interrupt_cb) (mm_sound_focus_state_e state, const char *reason_for_change, bool is_wcb, void *user_data);
+int mm_sound_focus_set_session_interrupt_callback(mm_sound_focus_session_interrupt_cb callback, void *user_data);
+int mm_sound_focus_unset_session_interrupt_callback(void);
+
 
 #ifdef __cplusplus
 }
index 2a75d7d..02e4a85 100644 (file)
@@ -626,6 +626,33 @@ int mm_sound_client_get_audio_path(mm_sound_device_in *device_in, mm_sound_devic
 
 
 #ifdef USE_FOCUS
+int mm_sound_client_set_session_interrupt_callback(mm_sound_focus_session_interrupt_cb callback, void* user_data)
+{
+       int ret = MM_ERROR_NONE;
+
+       debug_fenter();
+
+       if (!callback)
+               return MM_ERROR_INVALID_ARGUMENT;
+
+       ret = mm_sound_client_dbus_set_session_interrupt_callback(callback, user_data);
+
+       debug_fleave();
+       return ret;
+}
+
+int mm_sound_client_unset_session_interrupt_callback(void)
+{
+       int ret = MM_ERROR_NONE;
+
+       debug_fenter();
+
+       ret = mm_sound_client_dbus_unset_session_interrupt_callback();
+
+       debug_fleave();
+       return ret;
+}
+
 int mm_sound_client_get_uniq_id(int *id)
 {
        static int uniq_id = 0;
@@ -683,7 +710,7 @@ int mm_sound_client_release_focus(int id, mm_sound_focus_type_e type, const char
        int ret = MM_ERROR_NONE;
        debug_fenter();
 
-       mm_sound_client_dbus_release_focus(id, type, option);
+       ret = mm_sound_client_dbus_release_focus(id, type, option);
 
        debug_fleave();
        return ret;
@@ -694,7 +721,7 @@ int mm_sound_client_set_focus_watch_callback(mm_sound_focus_type_e focus_type, m
        int ret = MM_ERROR_NONE;
        debug_fenter();
 
-       mm_sound_client_dbus_set_focus_watch_callback(focus_type, callback, user_data, id);
+       ret = mm_sound_client_dbus_set_focus_watch_callback(focus_type, callback, user_data, id);
 
        debug_fleave();
        return ret;
index c065d9b..db212d7 100644 (file)
@@ -92,10 +92,15 @@ typedef struct {
        char name [MM_SOUND_NAME_NUM];
 } focus_cb_data_lib;
 
+typedef struct {
+       mm_sound_focus_session_interrupt_cb user_cb;
+       void* user_data;
+} focus_session_interrupt_info_t;
 
 GThread *g_focus_thread;
 GMainLoop *g_focus_loop;
 focus_sound_info_t g_focus_sound_handle[FOCUS_HANDLE_MAX];
+focus_session_interrupt_info_t g_focus_session_interrupt_info = {NULL, NULL};
 guint g_dbus_subs_ids[SIGNAL_MAX];
 guint g_dbus_prop_subs_ids[PULSEAUDIO_PROP_MAX];
 
@@ -1625,6 +1630,10 @@ static gboolean _focus_callback_handler(gpointer d)
                        debug_error("[CALLBACK(%p) START]",g_focus_sound_handle[focus_index].focus_callback);
                        (g_focus_sound_handle[focus_index].focus_callback)(cb_data.handle, cb_data.type, cb_data.state, cb_data.stream_type, cb_data.name, g_focus_sound_handle[focus_index].user_data);
                        debug_error("[CALLBACK END]");
+                       if (g_focus_session_interrupt_info.user_cb) {
+                               debug_error("sending session interrupt callback(%p)", g_focus_session_interrupt_info.user_cb);
+                               (g_focus_session_interrupt_info.user_cb)(cb_data.state, cb_data.stream_type, false, g_focus_session_interrupt_info.user_data);
+                       }
                }
 #ifdef CONFIG_ENABLE_RETCB
 
@@ -1701,6 +1710,10 @@ static gboolean _focus_watch_callback_handler( gpointer d)
                debug_msg("[CALLBACK(%p) START]",g_focus_sound_handle[focus_index].watch_callback);
                (g_focus_sound_handle[focus_index].watch_callback)(cb_data.handle, cb_data.type, cb_data.state, cb_data.stream_type, cb_data.name, g_focus_sound_handle[focus_index].user_data);
                debug_msg("[CALLBACK END]");
+               if (g_focus_session_interrupt_info.user_cb) {
+                       debug_error("sending session interrupt callback(%p)", g_focus_session_interrupt_info.user_cb);
+                       (g_focus_session_interrupt_info.user_cb)(cb_data.state, cb_data.stream_type, true, g_focus_session_interrupt_info.user_data);
+               }
 
 #ifdef CONFIG_ENABLE_RETCB
 
@@ -1998,6 +2011,35 @@ static void _focus_destroy_callback(int index, bool is_for_watching)
        debug_fleave();
 }
 
+int mm_sound_client_dbus_set_session_interrupt_callback(mm_sound_focus_session_interrupt_cb callback, void* user_data)
+{
+       debug_fenter();
+
+       if (!callback)
+               return MM_ERROR_INVALID_ARGUMENT;
+
+       g_focus_session_interrupt_info.user_cb = callback;
+       g_focus_session_interrupt_info.user_data = user_data;
+
+       debug_fleave();
+       return MM_ERROR_NONE;
+}
+
+int mm_sound_client_dbus_unset_session_interrupt_callback(void)
+{
+       debug_fenter();
+       if (!g_focus_session_interrupt_info.user_cb) {
+               debug_error("no callback to unset");
+               return MM_ERROR_SOUND_INTERNAL;
+       }
+
+       g_focus_session_interrupt_info.user_cb = NULL;
+       g_focus_session_interrupt_info.user_data = NULL;
+
+       debug_fleave();
+       return MM_ERROR_NONE;
+}
+
 int mm_sound_client_dbus_register_focus(int id, const char *stream_type, mm_sound_focus_changed_cb callback, void* user_data)
 {
        int ret = MM_ERROR_NONE;
index 896aaef..3ae342b 100644 (file)
 #include "focus_server/include/mm_sound_mgr_focus.h"
 
 EXPORT_API
+int mm_sound_focus_set_session_interrupt_callback(mm_sound_focus_session_interrupt_cb callback, void *user_data)
+{
+       int ret = MM_ERROR_NONE;
+       debug_fenter();
+
+       if (!callback)
+               return MM_ERROR_INVALID_ARGUMENT;
+
+       ret = mm_sound_client_set_session_interrupt_callback (callback, user_data);
+
+       debug_fleave();
+
+       return ret;
+}
+
+EXPORT_API
+int mm_sound_focus_unset_session_interrupt_callback(void)
+{
+       int ret = MM_ERROR_NONE;
+       debug_fenter();
+
+       ret = mm_sound_client_unset_session_interrupt_callback ();
+       if (ret) {
+               debug_error("Failed to mm_sound_client_unset_session_interrupt_callback(), ret[0x%x]\n", ret);
+       }
+
+       debug_fleave();
+
+       return ret;
+}
+
+EXPORT_API
 int mm_sound_focus_get_id(int *id)
 {
        int ret = MM_ERROR_NONE;
index fff99c0..6436a8e 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-sound
 Summary:    MMSound Package contains client lib and sound_server binary
-Version:    0.9.250
+Version:    0.9.251
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0