+
+int _mmcamcorder_resource_wait_for_connection(MMCamcorderResourceManager *resource_manager)
+{
+ int ret = MM_ERROR_NONE;
+ void *hcamcorder = NULL;
+
+ mmf_return_val_if_fail(resource_manager && resource_manager->hcamcorder, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
+
+ hcamcorder = resource_manager->hcamcorder;
+
+ _MMCAMCORDER_LOCK_RESOURCE(hcamcorder);
+
+ if (resource_manager->is_connected == FALSE) {
+ gint64 end_time = 0;
+
+ /* wait for resource manager connected */
+ _mmcam_dbg_warn("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");
+ ret = MM_ERROR_NONE;
+ } else {
+ _mmcam_dbg_err("connection timeout");
+ ret = MM_ERROR_RESOURCE_INTERNAL;
+ }
+ } else {
+ _mmcam_dbg_warn("already connected [%d]", resource_manager->id);
+ }
+
+ _MMCAMCORDER_UNLOCK_RESOURCE(hcamcorder);
+
+ return ret;
+}
+
+
+int _mmcamcorder_resource_check_connection(MMCamcorderResourceManager *resource_manager)
+{
+ int ret = MM_ERROR_NONE;
+
+ mmf_return_val_if_fail(resource_manager, MM_ERROR_CAMCORDER_NOT_INITIALIZED);
+
+ if (resource_manager->is_connected == FALSE) {
+ _mmcam_dbg_warn("resource manager[%d] disconnected before, try to reconnect", resource_manager->id);
+
+ /* release remained resource */
+ _mmcamcorder_resource_manager_deinit(resource_manager);
+
+ /* init resource manager and wait for connection */
+ ret = _mmcamcorder_resource_manager_init(resource_manager);
+ if (ret != MM_ERROR_NONE) {
+ _mmcam_dbg_err("failed to initialize resource manager[%d]", resource_manager->id);
+ return ret;
+ }
+
+ ret = _mmcamcorder_resource_wait_for_connection(resource_manager);
+ if (ret != MM_ERROR_NONE) {
+ _mmcam_dbg_err("failed to connect resource manager[%d]", resource_manager->id);
+ return ret;
+ }
+ }
+
+ _mmcam_dbg_warn("done[%d]", resource_manager->id);
+
+ return ret;
+}
+
+