From: Jeongmo Yang Date: Tue, 12 Jul 2016 01:38:01 +0000 (+0900) Subject: [Release version 0.10.63] Fix murphy connection error - wait for connection before... X-Git-Tag: accepted/tizen/common/20160712.150653^0 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fmultimedia%2Flibmm-camcorder.git;a=commitdiff_plain;h=138f8d97fda52b7ed0b049a45c896d432357bb44 [Release version 0.10.63] Fix murphy connection error - wait for connection before return create Change-Id: Ifdab9c4e533735bd13c2f772a1b0b214d455cc71 Signed-off-by: Jeongmo Yang --- diff --git a/packaging/libmm-camcorder.spec b/packaging/libmm-camcorder.spec index 2967b69..011522a 100644 --- a/packaging/libmm-camcorder.spec +++ b/packaging/libmm-camcorder.spec @@ -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 diff --git a/src/mm_camcorder_internal.c b/src/mm_camcorder_internal.c index 1115cc5..e99298e 100644 --- a/src/mm_camcorder_internal.c +++ b/src/mm_camcorder_internal.c @@ -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); diff --git a/src/mm_camcorder_resource.c b/src/mm_camcorder_resource.c index 7570854..8634191 100644 --- a/src/mm_camcorder_resource.c +++ b/src/mm_camcorder_resource.c @@ -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; }