+#ifdef _MMCAMCORDER_MURPHY_SUPPORT
+ /* check connection */
+ ret = _mmcamcorder_resource_check_connection(&hcamcorder->resource_manager_sub);
+ if (ret != MM_ERROR_NONE)
+ goto _ERR_CAMCORDER_VIDEO_COMMAND;
+
+ /* create resource set */
+ ret = _mmcamcorder_resource_create_resource_set(&hcamcorder->resource_manager_sub);
+ if (ret != MM_ERROR_NONE)
+ goto _ERR_CAMCORDER_VIDEO_COMMAND;
+
+ hcamcorder->resource_manager_sub.acquire_count = 0;
+
+ /* prepare resource manager for H/W encoder */
+ ret = _mmcamcorder_resource_manager_prepare(&hcamcorder->resource_manager_sub, MM_CAMCORDER_RESOURCE_TYPE_VIDEO_ENCODER);
+ if (ret != MM_ERROR_NONE) {
+ _mmcam_dbg_err("could not prepare for video_encoder resource");
+ ret = MM_ERROR_CAMCORDER_INTERNAL;
+ goto _ERR_CAMCORDER_VIDEO_COMMAND;
+ }
+
+ /* acquire resources */
+ _MMCAMCORDER_LOCK_RESOURCE(hcamcorder);
+
+ ret = _mmcamcorder_resource_manager_acquire(&hcamcorder->resource_manager_sub);
+ if (ret != MM_ERROR_NONE) {
+ _MMCAMCORDER_UNLOCK_RESOURCE(hcamcorder);
+ _mmcam_dbg_err("could not acquire resource");
+ goto _ERR_CAMCORDER_VIDEO_COMMAND;
+ }
+
+ if (hcamcorder->resource_manager_sub.acquire_remain > 0) {
+ gint64 end_time = 0;
+
+ _mmcam_dbg_warn("wait for resource state change");
+
+ /* wait for resource state change */
+ 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_CAMCORDER_VIDEO_COMMAND;
+ }
+ } else {
+ _mmcam_dbg_log("already acquired");
+ }
+
+ _MMCAMCORDER_UNLOCK_RESOURCE(hcamcorder);
+#endif /* _MMCAMCORDER_MURPHY_SUPPORT */
+