[Release version 0.10.63] Fix murphy connection error - wait for connection before... 70/79570/1 accepted/tizen/common/20160712.150653 accepted/tizen/ivi/20160712.043546 accepted/tizen/mobile/20160712.043455 accepted/tizen/tv/20160712.043516 accepted/tizen/wearable/20160712.043536 submit/tizen/20160712.021942
authorJeongmo Yang <jm80.yang@samsung.com>
Tue, 12 Jul 2016 01:38:01 +0000 (10:38 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Tue, 12 Jul 2016 01:38:01 +0000 (10:38 +0900)
Change-Id: Ifdab9c4e533735bd13c2f772a1b0b214d455cc71
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
packaging/libmm-camcorder.spec
src/mm_camcorder_internal.c
src/mm_camcorder_resource.c

index 2967b69..011522a 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-camcorder
 Summary:    Camera and recorder library
-Version:    0.10.62
+Version:    0.10.63
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index 1115cc5..e99298e 100644 (file)
@@ -114,6 +114,9 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info)
        const char *ConfCtrlFile = NULL;
        mmf_camcorder_t *hcamcorder = NULL;
        type_element *EvasSurfaceElement = NULL;
+#ifdef _MMCAMCORDER_MURPHY_SUPPORT
+       gint64 end_time = 0;
+#endif /* _MMCAMCORDER_MURPHY_SUPPORT */
 
        _mmcam_dbg_log("Entered");
 
@@ -515,6 +518,28 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info)
                _mmcam_dbg_warn("failed get software version, sys_info_ret 0x%x", sys_info_ret);
        }
 
+#ifdef _MMCAMCORDER_MURPHY_SUPPORT
+       _MMCAMCORDER_LOCK_RESOURCE(hcamcorder);
+
+       if (hcamcorder->resource_manager.is_connected == FALSE) {
+               /* wait for resource manager connected */
+               _mmcam_dbg_log("resource manager is not connected. wait for signal...");
+
+               end_time = g_get_monotonic_time() + (__MMCAMCORDER_RESOURCE_WAIT_TIME * G_TIME_SPAN_SECOND);
+
+               if (_MMCAMCORDER_RESOURCE_WAIT_UNTIL(hcamcorder, end_time)) {
+                       _mmcam_dbg_warn("signal received");
+               } else {
+                       _MMCAMCORDER_UNLOCK_RESOURCE(hcamcorder);
+                       _mmcam_dbg_err("timeout");
+                       ret = MM_ERROR_RESOURCE_INTERNAL;
+                       goto _ERR_DEFAULT_VALUE_INIT;
+               }
+       }
+
+       _MMCAMCORDER_UNLOCK_RESOURCE(hcamcorder);
+#endif /* _MMCAMCORDER_MURPHY_SUPPORT */
+
        /* Set initial state */
        _mmcamcorder_set_state((MMHandleType)hcamcorder, MM_CAMCORDER_STATE_NULL);
 
index 7570854..8634191 100644 (file)
@@ -90,6 +90,10 @@ static void __mmcamcorder_resource_state_callback(mrp_res_context_t *context, mr
 
        mmf_return_if_fail((MMHandleType)camcorder);
 
+       _mmcam_dbg_log("enter");
+
+       _MMCAMCORDER_LOCK_RESOURCE(camcorder);
+
        switch (context->state) {
        case MRP_RES_CONNECTED:
                _mmcam_dbg_log(" - connected to Murphy");
@@ -98,6 +102,7 @@ static void __mmcamcorder_resource_state_callback(mrp_res_context_t *context, mr
                        resource_names = mrp_res_list_resource_names(rset);
                        if (!resource_names) {
                                _mmcam_dbg_err(" - no resources available");
+                               _MMCAMCORDER_UNLOCK_RESOURCE(camcorder);
                                return;
                        }
                        for (i = 0; i < resource_names->num_strings; i++) {
@@ -109,6 +114,7 @@ static void __mmcamcorder_resource_state_callback(mrp_res_context_t *context, mr
                        mrp_res_free_string_array(resource_names);
                }
                camcorder->resource_manager.is_connected = TRUE;
+               _MMCAMCORDER_RESOURCE_SIGNAL(camcorder);
                break;
        case MRP_RES_DISCONNECTED:
                _mmcam_dbg_log(" - disconnected from Murphy");
@@ -124,6 +130,10 @@ static void __mmcamcorder_resource_state_callback(mrp_res_context_t *context, mr
                break;
        }
 
+       _MMCAMCORDER_UNLOCK_RESOURCE(camcorder);
+
+       _mmcam_dbg_log("leave");
+
        return;
 }