Minor modifications for focus 99/48499/6
authorinhyeok <i_bc.kim@samsung.com>
Tue, 22 Sep 2015 07:47:57 +0000 (16:47 +0900)
committerinhyeok <i_bc.kim@samsung.com>
Wed, 30 Sep 2015 02:12:39 +0000 (11:12 +0900)
[Version] Release 0.9.264
[Profile] Common
[Issue Type] Improvement

Improve focus emergent exit
Improve type converting
Specify temporariness of is_for_session in focus related structs.
Improve device connected callback reliaablility

Change-Id: I531d1d1a2ba276f455f3228bf7cfaae03a2df8de
Signed-off-by: inhyeok <i_bc.kim@samsung.com>
focus_server/include/mm_sound_mgr_focus.h
focus_server/mm_sound_mgr_focus.c
mm_sound_client.c
packaging/libmm-sound.spec
server/mm_sound_mgr_codec.c

index 71708cb..4108a99 100644 (file)
@@ -52,12 +52,13 @@ typedef enum
 typedef struct {
        int pid;
        int handle_id;
-       bool is_for_session;
        char stream_type[MAX_STREAM_TYPE_LEN];
        char option[MM_SOUND_NAME_NUM];
        focus_type_e request_type;
        void *callback;
        void *cbdata;
+
+       bool is_for_session;    /* will be removed when the session concept is completely left out*/
 } _mm_sound_mgr_focus_param_t;
 
 typedef struct _taken_by_id
@@ -72,13 +73,14 @@ typedef struct {
        int handle_id;
        int priority;
        bool is_for_watch;
-       bool is_for_session;
        char stream_type[MAX_STREAM_TYPE_LEN];
        focus_status_e status;
        _focus_taken_by_id_t taken_by_id[NUM_OF_STREAM_IO_TYPE];
        void *callback;
        void *cbdata;
 
+       bool is_for_session;    /* will be removed when the session concept is completely left out*/
+
 #ifdef SUPPORT_CONTAINER
        container_info_t container;
 #endif
index 30ca8f4..e8bd078 100644 (file)
@@ -818,7 +818,7 @@ int mm_sound_mgr_focus_request_acquire (const _mm_sound_mgr_focus_param_t *param
        }
 
        if (need_to_trigger_cb) {
-               _mm_sound_mgr_focus_param_t *param_s = param;
+               _mm_sound_mgr_focus_param_t *param_s = (_mm_sound_mgr_focus_param_t *)param;
                param_s->is_for_session = my_node->is_for_session;
                for (list = g_focus_node_list; list != NULL; list = list->next) {
                        node = (focus_node_t *)list->data;
@@ -922,7 +922,7 @@ int mm_sound_mgr_focus_request_release (const _mm_sound_mgr_focus_param_t *param
        }
 
        if (need_to_trigger_cb) {
-               _mm_sound_mgr_focus_param_t *param_s = param;
+               _mm_sound_mgr_focus_param_t *param_s = (_mm_sound_mgr_focus_param_t *)param;
                param_s->is_for_session = my_node->is_for_session;
                for (list = g_focus_node_list; list != NULL; list = list->next) {
                        node = (focus_node_t *)list->data;
@@ -1075,19 +1075,24 @@ int mm_sound_mgr_focus_emergent_exit(const _mm_sound_mgr_focus_param_t *param)
                                g_free(node);
                        } else if (node->status == FOCUS_STATUS_DEACTIVATED) {
                                debug_log("clearing deactivated focus node of pid(%d) hande(%d)", node->pid, node->handle_id);
-                               __clear_focus_pipe(node);
-                               g_focus_node_list = g_list_remove(g_focus_node_list, node);
-                               list = g_focus_node_list;
-                               g_free(node);
+                               my_node = node;
                                /* update info of nodes that are lost their focus by the process exited */
                                for (list_s = g_focus_node_list; list_s != NULL; list_s = list_s->next) {
                                        node = (focus_node_t *)list_s->data;
                                        for (i = 0; i < NUM_OF_STREAM_IO_TYPE; i++) {
                                                if (node && (node->taken_by_id[i].pid == param->pid)) {
-                                                       UPDATE_FOCUS_TAKEN_INFO(node, 0, 0, false);
+                                                       if (my_node->taken_by_id[i].pid) {
+                                                               UPDATE_FOCUS_TAKEN_INFO(node, my_node->taken_by_id[i].pid, my_node->taken_by_id[i].handle_id, my_node->taken_by_id[i].by_session);
+                                                       } else {
+                                                               UPDATE_FOCUS_TAKEN_INFO(node, 0, 0, false);
+                                                       }
                                                }
                                        }
                                }
+                               __clear_focus_pipe(my_node);
+                               g_focus_node_list = g_list_remove(g_focus_node_list, my_node);
+                               list = g_focus_node_list;
+                               g_free(my_node);
                        } else { /* node that acquired focus */
                                bool need_to_trigger_watch_cb = true;
                                _mm_sound_mgr_focus_param_t param_s;
index 435400e..b56a319 100644 (file)
@@ -91,11 +91,12 @@ typedef struct {
        GPollFD* g_poll_fd;
        GSource* focus_src;
        bool is_used;
-       bool is_for_session;
        GMutex focus_lock;
        mm_sound_focus_changed_cb focus_callback;
        mm_sound_focus_changed_watch_cb watch_callback;
        void* user_data;
+
+       bool is_for_session;    /* will be removed when the session concept is completely left out*/
 } focus_sound_info_t;
 
 typedef struct {
@@ -457,15 +458,12 @@ int mm_sound_client_play_tone(int number, int volume_config, double volume, int
        if (is_focus_registered)
                enable_session = false;
 
-       if (enable_session)
-       {
-               if (MM_ERROR_NONE != _mm_session_util_read_information(-1, &session_type, &session_options))
-               {
+       if (enable_session) {
+               if (MM_ERROR_NONE != _mm_session_util_read_information(-1, &session_type, &session_options)) {
                        debug_warning("[Client] Read Session Information failed. use default \"media\" type\n");
                        session_type = MM_SESSION_TYPE_MEDIA;
 
-                       if(MM_ERROR_NONE != mm_session_init(session_type))
-                       {
+                       if(MM_ERROR_NONE != mm_session_init(session_type)) {
                                debug_critical("[Client] MMSessionInit() failed\n");
                                return MM_ERROR_POLICY_INTERNAL;
                        }
@@ -552,25 +550,19 @@ int mm_sound_client_play_sound(MMSoundPlayParam *param, int tone, int *handle)
                param->skip_session = true;
 
        if (param->skip_session == false) {
-               if(MM_ERROR_NONE != _mm_session_util_read_information(-1, &session_type, &session_options))
-               {
+               if(MM_ERROR_NONE != _mm_session_util_read_information(-1, &session_type, &session_options)) {
                        debug_warning("[Client] Read MMSession Type failed. use default \"media\" type\n");
                        session_type = MM_SESSION_TYPE_MEDIA;
 
-                       if(MM_ERROR_NONE != mm_session_init(session_type))
-                       {
+                       if(MM_ERROR_NONE != mm_session_init(session_type)) {
                                debug_critical("[Client] MMSessionInit() failed\n");
                                return MM_ERROR_POLICY_INTERNAL;
                        }
                }
        }
 
-//     instance = getpid();
-//     debug_msg("[Client] pid for client ::: [%d]\n", instance);
-
        /* Send msg */
-       if ((param->mem_ptr && param->mem_size))
-       {
+       if ((param->mem_ptr && param->mem_size)) {
                // Play memory, deprecated
                return MM_ERROR_INVALID_ARGUMENT;
        }
index e0d1797..4b0df68 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-sound
 Summary:    MMSound Package contains client lib and sound_server binary
-Version:    0.9.263
+Version:    0.9.264
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0
index 4f54fa9..d899552 100644 (file)
@@ -280,7 +280,7 @@ int MMSoundMgrCodecPlay(int *slotid, const mmsound_mgr_codec_param_t *param)
 
                unsigned int subs_id = 0;
 
-               err = mm_sound_add_device_connected_callback(MM_SOUND_DEVICE_ALL_FLAG, (mm_sound_device_connected_cb)sound_codec_device_connected_callback, *slotid, &subs_id);
+               err = mm_sound_add_device_connected_callback(MM_SOUND_DEVICE_STATE_ACTIVATED_FLAG, (mm_sound_device_connected_cb)sound_codec_device_connected_callback, *slotid, &subs_id);
                if (err) {
                        debug_error("mm_sound_add_device_connected_callback failed [0x%x]", err);
                        pthread_mutex_unlock(&g_slot_mutex);
@@ -547,7 +547,7 @@ int MMSoundMgrCodecPlayDtmf(int *slotid, const mmsound_mgr_codec_param_t *param)
 
                unsigned int subs_id = 0;
 
-               err = mm_sound_add_device_connected_callback(MM_SOUND_DEVICE_ALL_FLAG, (mm_sound_device_connected_cb)sound_codec_device_connected_callback, *slotid, &subs_id);
+               err = mm_sound_add_device_connected_callback(MM_SOUND_DEVICE_STATE_ACTIVATED_FLAG, (mm_sound_device_connected_cb)sound_codec_device_connected_callback, *slotid, &subs_id);
                if (err) {
                        debug_error("mm_sound_add_device_connected_callback failed [0x%x]", err);
                        pthread_mutex_unlock(&g_slot_mutex);