Ignore get stream type error
[platform/core/multimedia/libmm-camcorder.git] / src / mm_camcorder_internal.c
index 61343a1..60c2dd1 100644 (file)
@@ -396,13 +396,26 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info)
                }
 
 #ifdef _MMCAMCORDER_MURPHY_SUPPORT
+               /* set camcorder handle */
+               hcamcorder->resource_manager.id = MM_CAMCORDER_RESOURCE_ID_MAIN;
+               hcamcorder->resource_manager.hcamcorder = hcamcorder;
+               hcamcorder->resource_manager_sub.id = MM_CAMCORDER_RESOURCE_ID_SUB;
+               hcamcorder->resource_manager_sub.hcamcorder = hcamcorder;
+
                /* initialize resource manager */
-               ret = _mmcamcorder_resource_manager_init(&hcamcorder->resource_manager, (void *)hcamcorder);
+               ret = _mmcamcorder_resource_manager_init(&hcamcorder->resource_manager);
                if (ret != MM_ERROR_NONE) {
                        _mmcam_dbg_err("failed to initialize resource manager");
                        ret = MM_ERROR_CAMCORDER_INTERNAL;
                        goto _ERR_DEFAULT_VALUE_INIT;
                }
+
+               ret = _mmcamcorder_resource_manager_init(&hcamcorder->resource_manager_sub);
+               if (ret != MM_ERROR_NONE) {
+                       _mmcam_dbg_err("failed to initialize resource manager sub");
+                       ret = MM_ERROR_CAMCORDER_INTERNAL;
+                       goto _ERR_DEFAULT_VALUE_INIT;
+               }
 #endif /* _MMCAMCORDER_MURPHY_SUPPORT */
        } else {
                _mmcamcorder_conf_get_value_int((MMHandleType)hcamcorder, hcamcorder->conf_main,
@@ -488,7 +501,13 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info)
 
 #ifdef _MMCAMCORDER_MURPHY_SUPPORT
        if (info->videodev_type != MM_VIDEO_DEVICE_NONE) {
-               ret = _mmcamcorder_resource_wait_for_connection(&hcamcorder->resource_manager, (void *)hcamcorder);
+               ret = _mmcamcorder_resource_wait_for_connection(&hcamcorder->resource_manager);
+               if (ret != MM_ERROR_NONE) {
+                       _mmcam_dbg_err("failed to connect resource manager");
+                       goto _ERR_DEFAULT_VALUE_INIT;
+               }
+
+               ret = _mmcamcorder_resource_wait_for_connection(&hcamcorder->resource_manager_sub);
                if (ret != MM_ERROR_NONE) {
                        _mmcam_dbg_err("failed to connect resource manager");
                        goto _ERR_DEFAULT_VALUE_INIT;
@@ -508,6 +527,7 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info)
 _ERR_DEFAULT_VALUE_INIT:
 #ifdef _MMCAMCORDER_MURPHY_SUPPORT
        /* de-initialize resource manager */
+       _mmcamcorder_resource_manager_deinit(&hcamcorder->resource_manager_sub);
        _mmcamcorder_resource_manager_deinit(&hcamcorder->resource_manager);
 #endif /* _MMCAMCORDER_MURPHY_SUPPORT */
 
@@ -673,6 +693,10 @@ int _mmcamcorder_destroy(MMHandleType handle)
        if (ret != MM_ERROR_NONE)
                _mmcam_dbg_err("failed to de-initialize resource manager 0x%x", ret);
 
+       ret = _mmcamcorder_resource_manager_deinit(&hcamcorder->resource_manager_sub);
+       if (ret != MM_ERROR_NONE)
+               _mmcam_dbg_err("failed to de-initialize resource manager sub 0x%x", ret);
+
        _MMCAMCORDER_UNLOCK_RESOURCE(hcamcorder);
 #endif /* _MMCAMCORDER_MURPHY_SUPPORT */
 
@@ -845,6 +869,9 @@ int _mmcamcorder_realize(MMHandleType handle)
        int app_pid = 0;
        int resource_count = 0;
 #endif /* _MMCAMCORDER_RM_SUPPORT */
+       char *stream_type = NULL;
+       char *ext_info = NULL;
+       int option = 0;
 
        mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle);
 
@@ -909,6 +936,37 @@ int _mmcamcorder_realize(MMHandleType handle)
                        /* do nothing */
                        _mmcam_dbg_log("SESSION_UNINTERRUPTIBLE - do nothing for sound focus");
                } else {
+                       /* check previous acquired focus */
+                       ret = mm_sound_get_stream_type_of_acquired_focus(FOCUS_FOR_BOTH, &stream_type, &option, &ext_info);
+                       if (ret == MM_ERROR_NONE && stream_type) {
+                               if (!strcmp(stream_type, "alarm") ||
+                                       !strcmp(stream_type, "ringtone-voip") ||
+                                       !strcmp(stream_type, "ringtone-call") ||
+                                       !strcmp(stream_type, "voip") ||
+                                       !strcmp(stream_type, "call-voice") ||
+                                       !strcmp(stream_type, "call-video")) {
+                                       _mmcam_dbg_err("Blocked by session policy, stream_type [%s]", stream_type);
+                                       ret = MM_ERROR_POLICY_BLOCKED;
+                               }
+                       } else {
+                               _mmcam_dbg_warn("get stream type failed 0x%x, stream type %s, but ignore it",
+                                       ret, stream_type ? stream_type : "NULL");
+                               ret = MM_ERROR_NONE;
+                       }
+
+                       if (stream_type) {
+                               free(stream_type);
+                               stream_type = NULL;
+                       }
+
+                       if (ext_info) {
+                               free(ext_info);
+                               ext_info = NULL;
+                       }
+
+                       if (ret != MM_ERROR_NONE)
+                               goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK;
+
                        /* unset remained watch cb */
                        if (hcamcorder->sound_focus_watch_id > 0) {
                                mm_sound_unset_focus_watch_callback(hcamcorder->sound_focus_watch_id);
@@ -1059,27 +1117,11 @@ int _mmcamcorder_realize(MMHandleType handle)
 
 #ifdef _MMCAMCORDER_MURPHY_SUPPORT
                /* check connection */
-               if (hcamcorder->resource_manager.is_connected == FALSE) {
-                       _mmcam_dbg_warn("resource manager disconnected before, try to reconnect");
-
-                       /* release remained resource */
-                       _mmcamcorder_resource_manager_deinit(&hcamcorder->resource_manager);
-
-                       /* init resource manager and wait for connection */
-                       ret = _mmcamcorder_resource_manager_init(&hcamcorder->resource_manager, (void *)hcamcorder);
-                       if (ret != MM_ERROR_NONE) {
-                               _mmcam_dbg_err("failed to initialize resource manager");
-                               ret = MM_ERROR_CAMCORDER_INTERNAL;
-                               goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK;
-                       }
-
-                       ret = _mmcamcorder_resource_wait_for_connection(&hcamcorder->resource_manager, (void *)hcamcorder);
-                       if (ret != MM_ERROR_NONE) {
-                               _mmcam_dbg_err("failed to connect resource manager");
-                               goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK;
-                       }
-               }
+               ret = _mmcamcorder_resource_check_connection(&hcamcorder->resource_manager);
+               if (ret != MM_ERROR_NONE)
+                       goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK;
 
+               /* create resource set */
                ret = _mmcamcorder_resource_create_resource_set(&hcamcorder->resource_manager);
                if (ret != MM_ERROR_NONE) {
                        goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK;
@@ -1301,7 +1343,7 @@ _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK:
        }
 
        if (hcamcorder->acquired_focus > 0) {
-               mm_sound_release_focus(hcamcorder->sound_focus_id, hcamcorder->acquired_focus, NULL);
+               mm_sound_release_focus(hcamcorder->sound_focus_id, hcamcorder->acquired_focus, "mm-camcorder release focus");
                _mmcam_dbg_warn("release sound focus [focus %d] done", hcamcorder->acquired_focus);
                hcamcorder->acquired_focus = 0;
        }
@@ -1351,13 +1393,13 @@ int _mmcamcorder_unrealize(MMHandleType handle)
        }
 
 #ifdef _MMCAMCORDER_MURPHY_SUPPORT
-       _mmcam_dbg_warn("lock resource - cb calling %d", hcamcorder->resource_release_cb_calling);
+       _mmcam_dbg_warn("lock resource - cb calling %d", hcamcorder->resource_manager.is_release_cb_calling);
 
        _MMCAMCORDER_LOCK_RESOURCE(hcamcorder);
 
        if (hcamcorder->type == MM_CAMCORDER_MODE_VIDEO_CAPTURE &&
                hcamcorder->state_change_by_system != _MMCAMCORDER_STATE_CHANGE_BY_RM &&
-               hcamcorder->resource_release_cb_calling == FALSE) {
+               hcamcorder->resource_manager.is_release_cb_calling == FALSE) {
                gint64 end_time = 0;
 
                /* release resource */
@@ -3358,7 +3400,7 @@ void _mmcamcorder_sound_signal_callback(mm_sound_signal_name_t signal, int value
                /* unregister focus related callback */
                if (hcamcorder->sound_focus_id > 0) {
                        if (hcamcorder->acquired_focus > 0) {
-                               mm_sound_release_focus(hcamcorder->sound_focus_id, hcamcorder->acquired_focus, NULL);
+                               mm_sound_release_focus(hcamcorder->sound_focus_id, hcamcorder->acquired_focus, "mm-camcorder release focus");
                                _mmcam_dbg_warn("release acquired focus [focus %d] done", hcamcorder->acquired_focus);
                                hcamcorder->acquired_focus = 0;
                        }