X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fmm_camcorder_internal.c;h=b117f6eba2c2c23e9ea308ff34329df800b63f52;hb=1b05dc8590744478df20004a4ad175df69f8a288;hp=c11e06811731c1731f499f3b24d699f732556287;hpb=839afadbb88fb7b223f498619842c6d7273ed485;p=platform%2Fcore%2Fmultimedia%2Flibmm-camcorder.git diff --git a/src/mm_camcorder_internal.c b/src/mm_camcorder_internal.c index c11e068..b117f6e 100644 --- a/src/mm_camcorder_internal.c +++ b/src/mm_camcorder_internal.c @@ -65,22 +65,6 @@ #define __MMCAMCORDER_RESOURCE_WAIT_TIME 5 #endif /* _MMCAMCORDER_MURPHY_SUPPORT */ -#define __MMCAMCORDER_DBUS_OBJECT "/org/tizen/MMCamcorder" -#define __MMCAMCORDER_DBUS_INTERFACE_CAMERA "org.tizen.MMCamcorder.Camera" -#define __MMCAMCORDER_DBUS_INTERFACE_RECORDER "org.tizen.MMCamcorder.Recorder" -#define __MMCAMCORDER_DBUS_SIGNAL_STATE_CHANGED "DeviceStateChanged" - -enum { - CAMERA_DEVICE_STATE_NULL, /**< Not opened */ - CAMERA_DEVICE_STATE_OPENED, /**< Opened */ - CAMERA_DEVICE_STATE_WORKING /**< Now previewing or capturing or is being used for video recording */ -}; - -enum { - RECORDER_DEVICE_STATE_NULL, /**< Not recording */ - RECORDER_DEVICE_STATE_RECORDING /**< Now recording */ -}; - /*--------------------------------------------------------------------------------------- | LOCAL FUNCTION PROTOTYPES: | @@ -175,12 +159,15 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info) /* init for sound thread */ g_mutex_init(&hcamcorder->task_thread_lock); g_cond_init(&hcamcorder->task_thread_cond); - hcamcorder->task_thread_state = _MMCAMCORDER_SOUND_STATE_NONE; + hcamcorder->task_thread_state = _MMCAMCORDER_TASK_THREAD_STATE_NONE; if (info->videodev_type != MM_VIDEO_DEVICE_NONE) { /* init for gdbus */ + hcamcorder->gdbus_info_sound.mm_handle = hcamcorder; g_mutex_init(&hcamcorder->gdbus_info_sound.sync_mutex); g_cond_init(&hcamcorder->gdbus_info_sound.sync_cond); + + hcamcorder->gdbus_info_solo_sound.mm_handle = hcamcorder; g_mutex_init(&hcamcorder->gdbus_info_solo_sound.sync_mutex); g_cond_init(&hcamcorder->gdbus_info_solo_sound.sync_cond); } @@ -220,14 +207,6 @@ int _mmcamcorder_create(MMHandleType *handle, MMCamPreset *info) goto _ERR_DEFAULT_VALUE_INIT; } - /* init for gdbus */ - hcamcorder->gdbus_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, NULL); - if (hcamcorder->gdbus_conn == NULL) { - _mmcam_dbg_err("failed to get gdbus"); - ret = MM_ERROR_CAMCORDER_RESOURCE_CREATION; - goto _ERR_DEFAULT_VALUE_INIT; - } - /* get DPM handle for camera/microphone restriction */ hcamcorder->dpm_handle = dpm_manager_create(); @@ -642,7 +621,6 @@ int _mmcamcorder_destroy(MMHandleType handle) { int ret = MM_ERROR_NONE; int state = MM_CAMCORDER_STATE_NONE; - int state_FROM = MM_CAMCORDER_STATE_NULL; #ifdef _MMCAMCORDER_RM_SUPPORT int iret = RM_OK; #endif /* _MMCAMCORDER_RM_SUPPORT */ @@ -666,7 +644,7 @@ int _mmcamcorder_destroy(MMHandleType handle) } state = _mmcamcorder_get_state(handle); - if (state != state_FROM) { + if (state != MM_CAMCORDER_STATE_NULL) { _mmcam_dbg_err("Wrong state(%d)", state); ret = MM_ERROR_CAMCORDER_INVALID_STATE; goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; @@ -842,9 +820,6 @@ int _mmcamcorder_destroy(MMHandleType handle) g_cond_clear(&hcamcorder->gdbus_info_solo_sound.sync_cond); } - g_object_unref(hcamcorder->gdbus_conn); - hcamcorder->gdbus_conn = NULL; - /* Release handle */ memset(hcamcorder, 0x00, sizeof(mmf_camcorder_t)); free(hcamcorder); @@ -869,17 +844,22 @@ int _mmcamcorder_realize(MMHandleType handle) int ret = MM_ERROR_NONE; int ret_sound = MM_ERROR_NONE; int state = MM_CAMCORDER_STATE_NONE; - int state_FROM = MM_CAMCORDER_STATE_NULL; - int state_TO = MM_CAMCORDER_STATE_READY; int display_surface_type = MM_DISPLAY_SURFACE_OVERLAY; int pid_for_sound_focus = 0; double motion_rate = _MMCAMCORDER_DEFAULT_RECORDING_MOTION_RATE; char *videosink_element_type = NULL; const char *videosink_name = NULL; char *socket_path = NULL; - int socket_path_len; + int socket_path_len = 0; + int conn_size = 0; #ifdef _MMCAMCORDER_RM_SUPPORT - int iret = RM_OK; + int iret = RM_OK; + int preview_format = MM_PIXEL_FORMAT_NV12; + int qret = RM_OK; + int qret_avail = 0; /* 0: not available, 1: available */ + rm_consumer_info rci; + int app_pid = 0; + int resource_count = 0; #endif /* _MMCAMCORDER_RM_SUPPORT */ mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); @@ -899,18 +879,26 @@ int _mmcamcorder_realize(MMHandleType handle) } state = _mmcamcorder_get_state(handle); - if (state != state_FROM) { + if (state != MM_CAMCORDER_STATE_NULL) { _mmcam_dbg_err("Wrong state(%d)", state); ret = MM_ERROR_CAMCORDER_INVALID_STATE; goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; } + /* Get profile mode and gdbus connection */ mm_camcorder_get_attributes(handle, NULL, MMCAM_MODE, &hcamcorder->type, + MMCAM_GDBUS_CONNECTION, &hcamcorder->gdbus_conn, &conn_size, NULL); - /* Get profile mode */ - _mmcam_dbg_log("Profile mode [%d]", hcamcorder->type); + if (!hcamcorder->gdbus_conn) { + _mmcam_dbg_err("gdbus connection NULL"); + ret = MM_ERROR_CAMCORDER_RESOURCE_CREATION; + goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; + } + + _mmcam_dbg_log("Profile mode [%d], gdbus connection [%p]", + hcamcorder->type, hcamcorder->gdbus_conn); mm_camcorder_get_attributes(handle, NULL, MMCAM_DISPLAY_SURFACE, &display_surface_type, @@ -924,7 +912,7 @@ int _mmcamcorder_realize(MMHandleType handle) /* acquire sound focus */ _mmcam_dbg_log("PAUSE_OTHERS - acquire sound focus"); - ret_sound = mm_sound_acquire_focus(0, FOCUS_FOR_BOTH, NULL); + ret_sound = mm_sound_acquire_focus(hcamcorder->sound_focus_id, FOCUS_FOR_BOTH, NULL); if (ret_sound != MM_ERROR_NONE) { _mmcam_dbg_err("mm_sound_acquire_focus failed [0x%x]", ret_sound); @@ -974,83 +962,11 @@ int _mmcamcorder_realize(MMHandleType handle) _mmcam_dbg_log("no need to register sound focus"); } -#ifdef _MMCAMCORDER_RM_SUPPORT - int preview_format = MM_PIXEL_FORMAT_NV12; - int qret = RM_OK; - int qret_avail = RM_OK; - rm_consumer_info rci; - int app_pid = 0; - int resource_count = 0; - - mm_camcorder_get_attributes(handle, NULL, - MMCAM_PID_FOR_SOUND_FOCUS, &app_pid, - NULL); - rci.app_pid = app_pid; - aul_app_get_appid_bypid(rci.app_pid, rci.app_id, sizeof(rci.app_id)); - - /* RM register */ - if (hcamcorder->rm_handle == 0) { - iret = rm_register((rm_resource_cb)_mmcamcorder_rm_callback, (void*)hcamcorder, - &(hcamcorder->rm_handle), &rci); - if (iret != RM_OK) { - _mmcam_dbg_err("rm_register fail"); - ret = MM_ERROR_POLICY_BLOCKED; - goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; - } - } - - mm_camcorder_get_attributes(handle, NULL, - MMCAM_CAMERA_FORMAT, &preview_format, - NULL); - - if (hcamcorder->type != MM_CAMCORDER_MODE_AUDIO && preview_format == MM_PIXEL_FORMAT_ENCODED_H264) { - resource_count = 0; - memset(&hcamcorder->request_resources, 0x0, sizeof(rm_category_request_s)); - memset(&hcamcorder->returned_devices, 0x0, sizeof(rm_device_return_s)); - hcamcorder->request_resources.state[resource_count] = RM_STATE_EXCLUSIVE; - hcamcorder->request_resources.category_id[resource_count] = RM_CATEGORY_VIDEO_DECODER; - _mmcam_dbg_log("request video decoder resource - device category 0x%x", hcamcorder->request_resources.category_id[resource_count]); - - resource_count++; - hcamcorder->request_resources.state[resource_count] = RM_STATE_EXCLUSIVE; - hcamcorder->request_resources.category_id[resource_count] = RM_CATEGORY_SCALER; - hcamcorder->request_resources.request_num = resource_count + 1; - _mmcam_dbg_log("request scaler resource - device category 0x%x", hcamcorder->request_resources.category_id[resource_count]); - - qret = rm_query(hcamcorder->rm_handle, RM_QUERY_ALLOCATION, &(hcamcorder->request_resources), &qret_avail); - - if (qret != RM_OK || qret_avail != RM_OK) { - _mmcam_dbg_log("Resource manager main device request fail"); - - resource_count = 0; - hcamcorder->request_resources.category_id[resource_count] = RM_CATEGORY_VIDEO_DECODER_SUB; - _mmcam_dbg_log("request video decoder resource - device category 0x%x", hcamcorder->request_resources.category_id[resource_count]); - - resource_count++; - hcamcorder->request_resources.category_id[resource_count] = RM_CATEGORY_SCALER_SUB; - _mmcam_dbg_log("request scaler resource - device category 0x%x", hcamcorder->request_resources.category_id[resource_count]); - } - - resource_count++; - hcamcorder->request_resources.state[resource_count] = RM_STATE_EXCLUSIVE; - hcamcorder->request_resources.category_id[resource_count] = RM_CATEGORY_CAMERA; - hcamcorder->request_resources.request_num = resource_count + 1; - _mmcam_dbg_log("request camera resource - device category 0x%x", hcamcorder->request_resources.category_id[resource_count]); - - iret = rm_allocate_resources(hcamcorder->rm_handle, &(hcamcorder->request_resources), &hcamcorder->returned_devices); - if (iret != RM_OK) { - _mmcam_dbg_err("Resource allocation request failed"); - ret = MM_ERROR_POLICY_BLOCKED; - goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; - } - } -#endif /* _MMCAMCORDER_RM_SUPPORT */ - /* alloc sub context */ hcamcorder->sub_context = _mmcamcorder_alloc_subcontext(hcamcorder->type); if (!hcamcorder->sub_context) { ret = MM_ERROR_CAMCORDER_RESOURCE_CREATION; - goto _ERR_CAMCORDER_CMD; + goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; } /* Set basic configure information */ @@ -1069,6 +985,7 @@ int _mmcamcorder_realize(MMHandleType handle) CONFIGURE_CATEGORY_MAIN_RECORD, "SupportDualStream", &(hcamcorder->sub_context->info_video->support_dual_stream)); + _mmcam_dbg_warn("SupportDualStream [%d]", hcamcorder->sub_context->info_video->support_dual_stream); } @@ -1152,6 +1069,7 @@ int _mmcamcorder_realize(MMHandleType handle) } else { _mmcam_dbg_warn("NULL dpm_handle"); } + #ifdef _MMCAMCORDER_MURPHY_SUPPORT ret = _mmcamcorder_resource_create_resource_set(&hcamcorder->resource_manager); if (ret != MM_ERROR_NONE) { @@ -1169,10 +1087,6 @@ int _mmcamcorder_realize(MMHandleType handle) } /* prepare resource manager for "video_overlay only if display surface is X" */ - mm_camcorder_get_attributes(handle, NULL, - MMCAM_DISPLAY_SURFACE, &display_surface_type, - NULL); - if (display_surface_type == MM_DISPLAY_SURFACE_OVERLAY) { ret = _mmcamcorder_resource_manager_prepare(&hcamcorder->resource_manager, MM_CAMCORDER_RESOURCE_TYPE_VIDEO_OVERLAY); if (ret != MM_ERROR_NONE) { @@ -1215,6 +1129,86 @@ int _mmcamcorder_realize(MMHandleType handle) _MMCAMCORDER_UNLOCK_RESOURCE(hcamcorder); #endif /* _MMCAMCORDER_MURPHY_SUPPORT */ + +#ifdef _MMCAMCORDER_RM_SUPPORT + mm_camcorder_get_attributes(handle, NULL, + MMCAM_PID_FOR_SOUND_FOCUS, &app_pid, + NULL); + rci.app_pid = app_pid; + aul_app_get_appid_bypid(rci.app_pid, rci.app_id, sizeof(rci.app_id)); + + /* RM register */ + if (hcamcorder->rm_handle == 0) { + iret = rm_register((rm_resource_cb)_mmcamcorder_rm_callback, (void*)hcamcorder, &(hcamcorder->rm_handle), &rci); + if (iret != RM_OK) { + _mmcam_dbg_err("rm_register fail"); + ret = MM_ERROR_POLICY_BLOCKED; + goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; + } + } + + mm_camcorder_get_attributes(handle, NULL, + MMCAM_CAMERA_FORMAT, &preview_format, + NULL); + + resource_count = 0; + memset(&hcamcorder->request_resources, 0x0, sizeof(rm_category_request_s)); + memset(&hcamcorder->returned_devices, 0x0, sizeof(rm_device_return_s)); + + if (preview_format == MM_PIXEL_FORMAT_ENCODED_H264) { + hcamcorder->request_resources.state[resource_count] = RM_STATE_EXCLUSIVE; + hcamcorder->request_resources.category_id[resource_count] = RM_CATEGORY_VIDEO_DECODER; + + _mmcam_dbg_log("request dec rsc - category 0x%x", RM_CATEGORY_VIDEO_DECODER); + + resource_count++; + } + + if (display_surface_type == MM_DISPLAY_SURFACE_OVERLAY) { + hcamcorder->request_resources.state[resource_count] = RM_STATE_EXCLUSIVE; + hcamcorder->request_resources.category_id[resource_count] = RM_CATEGORY_SCALER; + + _mmcam_dbg_log("request scaler rsc - category 0x%x", RM_CATEGORY_SCALER); + + resource_count++; + } + + hcamcorder->request_resources.request_num = resource_count; + + if (resource_count > 0) { + qret = rm_query(hcamcorder->rm_handle, RM_QUERY_ALLOCATION, &(hcamcorder->request_resources), &qret_avail); + if (qret != RM_OK || qret_avail != 1) { + _mmcam_dbg_log("rm query failed. retry with sub devices"); + + resource_count = 0; + + if (preview_format == MM_PIXEL_FORMAT_ENCODED_H264) { + hcamcorder->request_resources.category_id[resource_count] = RM_CATEGORY_VIDEO_DECODER_SUB; + _mmcam_dbg_log("request dec rsc - category 0x%x", RM_CATEGORY_VIDEO_DECODER_SUB); + resource_count++; + } + + if (display_surface_type == MM_DISPLAY_SURFACE_OVERLAY) { + hcamcorder->request_resources.category_id[resource_count] = RM_CATEGORY_SCALER_SUB; + _mmcam_dbg_log("request scaler rsc - category 0x%x", RM_CATEGORY_SCALER_SUB); + resource_count++; + } + } + } + + hcamcorder->request_resources.state[resource_count] = RM_STATE_EXCLUSIVE; + hcamcorder->request_resources.category_id[resource_count] = RM_CATEGORY_CAMERA; + + hcamcorder->request_resources.request_num = resource_count + 1; + _mmcam_dbg_log("request camera rsc - category 0x%x", RM_CATEGORY_CAMERA); + + iret = rm_allocate_resources(hcamcorder->rm_handle, &(hcamcorder->request_resources), &hcamcorder->returned_devices); + if (iret != RM_OK) { + _mmcam_dbg_err("Resource allocation request failed"); + ret = MM_ERROR_POLICY_BLOCKED; + goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; + } +#endif /* _MMCAMCORDER_RM_SUPPORT */ } /* create pipeline */ @@ -1246,14 +1240,7 @@ int _mmcamcorder_realize(MMHandleType handle) goto _ERR_CAMCORDER_CMD; } - _mmcamcorder_set_state(handle, state_TO); - - if (hcamcorder->type == MM_CAMCORDER_MODE_VIDEO_CAPTURE) { - int value = hcamcorder->device_type << 16 | CAMERA_DEVICE_STATE_OPENED; - - _mmcamcorder_emit_dbus_signal(hcamcorder->gdbus_conn, __MMCAMCORDER_DBUS_OBJECT, - __MMCAMCORDER_DBUS_INTERFACE_CAMERA, __MMCAMCORDER_DBUS_SIGNAL_STATE_CHANGED, value); - } + _mmcamcorder_set_state(handle, MM_CAMCORDER_STATE_READY); _MMCAMCORDER_UNLOCK_CMD(hcamcorder); @@ -1271,22 +1258,6 @@ _ERR_CAMCORDER_CMD: } } #endif /* _MMCAMCORDER_MURPHY_SUPPORT */ - -_ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK: - _MMCAMCORDER_UNLOCK_CMD(hcamcorder); - - if (hcamcorder->sound_focus_watch_id > 0) { - mm_sound_unset_focus_watch_callback(hcamcorder->sound_focus_watch_id); - _mmcam_dbg_warn("unset sound focus watch cb [id %d] done", hcamcorder->sound_focus_watch_id); - hcamcorder->sound_focus_watch_id = 0; - } - - if (hcamcorder->acquired_focus > 0) { - mm_sound_release_focus(0, hcamcorder->acquired_focus, NULL); - _mmcam_dbg_warn("release sound focus [focus %d] done", hcamcorder->acquired_focus); - hcamcorder->acquired_focus = 0; - } - #ifdef _MMCAMCORDER_RM_SUPPORT if (hcamcorder->rm_handle) { if (hcamcorder->returned_devices.allocated_num > 0) { @@ -1301,6 +1272,7 @@ _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK: if (iret != RM_OK) _mmcam_dbg_err("Resource deallocation request failed "); } + /* unregister RM */ int ires = rm_unregister(hcamcorder->rm_handle); if (ires != RM_OK) @@ -1309,6 +1281,21 @@ _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK: } #endif /* _MMCAMCORDER_RM_SUPPORT*/ +_ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK: + _MMCAMCORDER_UNLOCK_CMD(hcamcorder); + + if (hcamcorder->sound_focus_watch_id > 0) { + mm_sound_unset_focus_watch_callback(hcamcorder->sound_focus_watch_id); + _mmcam_dbg_warn("unset sound focus watch cb [id %d] done", hcamcorder->sound_focus_watch_id); + hcamcorder->sound_focus_watch_id = 0; + } + + if (hcamcorder->acquired_focus > 0) { + mm_sound_release_focus(hcamcorder->sound_focus_id, hcamcorder->acquired_focus, NULL); + _mmcam_dbg_warn("release sound focus [focus %d] done", hcamcorder->acquired_focus); + hcamcorder->acquired_focus = 0; + } + _ERR_CAMCORDER_CMD_PRECON: _mmcam_dbg_err("Realize fail (type %d, state %d, ret %x)", hcamcorder->type, state, ret); @@ -1320,8 +1307,6 @@ int _mmcamcorder_unrealize(MMHandleType handle) { int ret = MM_ERROR_NONE; int state = MM_CAMCORDER_STATE_NONE; - int state_FROM = MM_CAMCORDER_STATE_READY; - int state_TO = MM_CAMCORDER_STATE_NULL; mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); @@ -1340,7 +1325,7 @@ int _mmcamcorder_unrealize(MMHandleType handle) } state = _mmcamcorder_get_state(handle); - if (state != state_FROM) { + if (state != MM_CAMCORDER_STATE_READY) { _mmcam_dbg_err("Wrong state(%d)", state); ret = MM_ERROR_CAMCORDER_INVALID_STATE; goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; @@ -1427,7 +1412,7 @@ int _mmcamcorder_unrealize(MMHandleType handle) } if (hcamcorder->acquired_focus > 0) { - mm_sound_release_focus(0, hcamcorder->acquired_focus, NULL); + mm_sound_release_focus(hcamcorder->sound_focus_id, hcamcorder->acquired_focus, NULL); _mmcam_dbg_warn("release sound focus [focus %d] done", hcamcorder->acquired_focus); hcamcorder->acquired_focus = 0; } @@ -1437,16 +1422,9 @@ int _mmcamcorder_unrealize(MMHandleType handle) hcamcorder->acquired_focus = 0; } - if (hcamcorder->type == MM_CAMCORDER_MODE_VIDEO_CAPTURE) { - int value = hcamcorder->device_type << 16 | CAMERA_DEVICE_STATE_NULL; - - _mmcamcorder_emit_dbus_signal(hcamcorder->gdbus_conn, __MMCAMCORDER_DBUS_OBJECT, - __MMCAMCORDER_DBUS_INTERFACE_CAMERA, __MMCAMCORDER_DBUS_SIGNAL_STATE_CHANGED, value); - } - _MMCAMCORDER_UNLOCK_CMD(hcamcorder); - _mmcamcorder_set_state(handle, state_TO); + _mmcamcorder_set_state(handle, MM_CAMCORDER_STATE_NULL); return MM_ERROR_NONE; @@ -1464,8 +1442,6 @@ int _mmcamcorder_start(MMHandleType handle) { int ret = MM_ERROR_NONE; int state = MM_CAMCORDER_STATE_NONE; - int state_FROM = MM_CAMCORDER_STATE_READY; - int state_TO = MM_CAMCORDER_STATE_PREPARE; _MMCamcorderSubContext *sc = NULL; mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); @@ -1488,7 +1464,7 @@ int _mmcamcorder_start(MMHandleType handle) } state = _mmcamcorder_get_state(handle); - if (state != state_FROM) { + if (state != MM_CAMCORDER_STATE_READY) { _mmcam_dbg_err("Wrong state(%d)", state); ret = MM_ERROR_CAMCORDER_INVALID_STATE; goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; @@ -1511,30 +1487,13 @@ int _mmcamcorder_start(MMHandleType handle) goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; } - _mmcamcorder_set_state(handle, state_TO); - - if (hcamcorder->type == MM_CAMCORDER_MODE_VIDEO_CAPTURE) { - int value = hcamcorder->device_type << 16 | CAMERA_DEVICE_STATE_WORKING; - - _mmcamcorder_emit_dbus_signal(hcamcorder->gdbus_conn, __MMCAMCORDER_DBUS_OBJECT, - __MMCAMCORDER_DBUS_INTERFACE_CAMERA, __MMCAMCORDER_DBUS_SIGNAL_STATE_CHANGED, value); - } + _mmcamcorder_set_state(handle, MM_CAMCORDER_STATE_PREPARE); _MMCAMCORDER_UNLOCK_CMD(hcamcorder); return MM_ERROR_NONE; _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK: - if (hcamcorder->gdbus_conn) { - g_object_unref(hcamcorder->gdbus_conn); - hcamcorder->gdbus_conn = NULL; - - g_mutex_clear(&hcamcorder->gdbus_info_sound.sync_mutex); - g_cond_clear(&hcamcorder->gdbus_info_sound.sync_cond); - g_mutex_clear(&hcamcorder->gdbus_info_solo_sound.sync_mutex); - g_cond_clear(&hcamcorder->gdbus_info_solo_sound.sync_cond); - } - _MMCAMCORDER_UNLOCK_CMD(hcamcorder); _ERR_CAMCORDER_CMD_PRECON: @@ -1556,8 +1515,6 @@ int _mmcamcorder_stop(MMHandleType handle) { int ret = MM_ERROR_NONE; int state = MM_CAMCORDER_STATE_NONE; - int state_FROM = MM_CAMCORDER_STATE_PREPARE; - int state_TO = MM_CAMCORDER_STATE_READY; mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); @@ -1576,7 +1533,7 @@ int _mmcamcorder_stop(MMHandleType handle) } state = _mmcamcorder_get_state(handle); - if (state != state_FROM) { + if (state != MM_CAMCORDER_STATE_PREPARE) { _mmcam_dbg_err("Wrong state(%d)", state); ret = MM_ERROR_CAMCORDER_INVALID_STATE; goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; @@ -1586,11 +1543,9 @@ int _mmcamcorder_stop(MMHandleType handle) if (ret != MM_ERROR_NONE) goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; - _mmcamcorder_set_state(handle, state_TO); + _mmcamcorder_set_state(handle, MM_CAMCORDER_STATE_READY); if (hcamcorder->type != MM_CAMCORDER_MODE_AUDIO) { - int value = hcamcorder->device_type << 16 | CAMERA_DEVICE_STATE_OPENED; - /* unsubscribe remained unsubscribed signal */ g_mutex_lock(&hcamcorder->gdbus_info_sound.sync_mutex); if (hcamcorder->gdbus_info_sound.subscribe_id > 0) { @@ -1605,10 +1560,6 @@ int _mmcamcorder_stop(MMHandleType handle) g_dbus_connection_signal_unsubscribe(hcamcorder->gdbus_conn, hcamcorder->gdbus_info_solo_sound.subscribe_id); } g_mutex_unlock(&hcamcorder->gdbus_info_solo_sound.sync_mutex); - - /* emit signal for camera device state */ - _mmcamcorder_emit_dbus_signal(hcamcorder->gdbus_conn, __MMCAMCORDER_DBUS_OBJECT, - __MMCAMCORDER_DBUS_INTERFACE_CAMERA, __MMCAMCORDER_DBUS_SIGNAL_STATE_CHANGED, value); } _MMCAMCORDER_UNLOCK_CMD(hcamcorder); @@ -1633,7 +1584,6 @@ int _mmcamcorder_capture_start(MMHandleType handle) int state_FROM_0 = MM_CAMCORDER_STATE_PREPARE; int state_FROM_1 = MM_CAMCORDER_STATE_RECORDING; int state_FROM_2 = MM_CAMCORDER_STATE_PAUSED; - int state_TO = MM_CAMCORDER_STATE_CAPTURING; mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); @@ -1687,7 +1637,7 @@ int _mmcamcorder_capture_start(MMHandleType handle) /* Do not change state when recording snapshot capture */ if (state == state_FROM_0) - _mmcamcorder_set_state(handle, state_TO); + _mmcamcorder_set_state(handle, MM_CAMCORDER_STATE_CAPTURING); _MMCAMCORDER_UNLOCK_CMD(hcamcorder); @@ -1716,8 +1666,6 @@ int _mmcamcorder_capture_stop(MMHandleType handle) { int ret = MM_ERROR_NONE; int state = MM_CAMCORDER_STATE_NONE; - int state_FROM = MM_CAMCORDER_STATE_CAPTURING; - int state_TO = MM_CAMCORDER_STATE_PREPARE; mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); _mmcam_dbg_log(""); @@ -1735,7 +1683,7 @@ int _mmcamcorder_capture_stop(MMHandleType handle) } state = _mmcamcorder_get_state(handle); - if (state != state_FROM) { + if (state != MM_CAMCORDER_STATE_CAPTURING) { _mmcam_dbg_err("Wrong state(%d)", state); ret = MM_ERROR_CAMCORDER_INVALID_STATE; goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; @@ -1745,7 +1693,7 @@ int _mmcamcorder_capture_stop(MMHandleType handle) if (ret != MM_ERROR_NONE) goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; - _mmcamcorder_set_state(handle, state_TO); + _mmcamcorder_set_state(handle, MM_CAMCORDER_STATE_PREPARE); _MMCAMCORDER_UNLOCK_CMD(hcamcorder); @@ -1766,9 +1714,6 @@ int _mmcamcorder_record(MMHandleType handle) { int ret = MM_ERROR_NONE; int state = MM_CAMCORDER_STATE_NONE; - int state_FROM1 = MM_CAMCORDER_STATE_PREPARE; - int state_FROM2 = MM_CAMCORDER_STATE_PAUSED; - int state_TO = MM_CAMCORDER_STATE_RECORDING; int dpm_mic_state = DPM_ALLOWED; mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); @@ -1788,7 +1733,7 @@ int _mmcamcorder_record(MMHandleType handle) } state = _mmcamcorder_get_state(handle); - if (state != state_FROM1 && state != state_FROM2) { + if (state != MM_CAMCORDER_STATE_PREPARE && state != MM_CAMCORDER_STATE_PAUSED) { _mmcam_dbg_err("Wrong state(%d)", state); ret = MM_ERROR_CAMCORDER_INVALID_STATE; goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; @@ -1823,7 +1768,7 @@ int _mmcamcorder_record(MMHandleType handle) goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; } - _mmcamcorder_set_state(handle, state_TO); + _mmcamcorder_set_state(handle, MM_CAMCORDER_STATE_RECORDING); _MMCAMCORDER_UNLOCK_CMD(hcamcorder); @@ -1852,8 +1797,6 @@ int _mmcamcorder_pause(MMHandleType handle) { int ret = MM_ERROR_NONE; int state = MM_CAMCORDER_STATE_NONE; - int state_FROM = MM_CAMCORDER_STATE_RECORDING; - int state_TO = MM_CAMCORDER_STATE_PAUSED; mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); @@ -1872,7 +1815,7 @@ int _mmcamcorder_pause(MMHandleType handle) } state = _mmcamcorder_get_state(handle); - if (state != state_FROM) { + if (state != MM_CAMCORDER_STATE_RECORDING) { _mmcam_dbg_err("Wrong state(%d)", state); ret = MM_ERROR_CAMCORDER_INVALID_STATE; goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; @@ -1882,7 +1825,7 @@ int _mmcamcorder_pause(MMHandleType handle) if (ret != MM_ERROR_NONE) goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; - _mmcamcorder_set_state(handle, state_TO); + _mmcamcorder_set_state(handle, MM_CAMCORDER_STATE_PAUSED); _MMCAMCORDER_UNLOCK_CMD(hcamcorder); @@ -1903,9 +1846,6 @@ int _mmcamcorder_commit(MMHandleType handle) { int ret = MM_ERROR_NONE; int state = MM_CAMCORDER_STATE_NONE; - int state_FROM1 = MM_CAMCORDER_STATE_RECORDING; - int state_FROM2 = MM_CAMCORDER_STATE_PAUSED; - int state_TO = MM_CAMCORDER_STATE_PREPARE; mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); @@ -1924,7 +1864,7 @@ int _mmcamcorder_commit(MMHandleType handle) } state = _mmcamcorder_get_state(handle); - if (state != state_FROM1 && state != state_FROM2) { + if (state != MM_CAMCORDER_STATE_RECORDING && state != MM_CAMCORDER_STATE_PAUSED) { _mmcam_dbg_err("Wrong state(%d)", state); ret = MM_ERROR_CAMCORDER_INVALID_STATE; goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; @@ -1937,9 +1877,9 @@ int _mmcamcorder_commit(MMHandleType handle) if (ret != MM_ERROR_NONE) goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; - _MMCAMCORDER_UNLOCK_CMD(hcamcorder); + _mmcamcorder_set_state(handle, MM_CAMCORDER_STATE_PREPARE); - _mmcamcorder_set_state(handle, state_TO); + _MMCAMCORDER_UNLOCK_CMD(hcamcorder); return MM_ERROR_NONE; @@ -1958,9 +1898,6 @@ int _mmcamcorder_cancel(MMHandleType handle) { int ret = MM_ERROR_NONE; int state = MM_CAMCORDER_STATE_NONE; - int state_FROM1 = MM_CAMCORDER_STATE_RECORDING; - int state_FROM2 = MM_CAMCORDER_STATE_PAUSED; - int state_TO = MM_CAMCORDER_STATE_PREPARE; mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); @@ -1979,7 +1916,7 @@ int _mmcamcorder_cancel(MMHandleType handle) } state = _mmcamcorder_get_state(handle); - if (state != state_FROM1 && state != state_FROM2) { + if (state != MM_CAMCORDER_STATE_RECORDING && state != MM_CAMCORDER_STATE_PAUSED) { _mmcam_dbg_err("Wrong state(%d)", state); ret = MM_ERROR_CAMCORDER_INVALID_STATE; goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; @@ -1989,7 +1926,7 @@ int _mmcamcorder_cancel(MMHandleType handle) if (ret != MM_ERROR_NONE) goto _ERR_CAMCORDER_CMD_PRECON_AFTER_LOCK; - _mmcamcorder_set_state(handle, state_TO); + _mmcamcorder_set_state(handle, MM_CAMCORDER_STATE_PREPARE); _MMCAMCORDER_UNLOCK_CMD(hcamcorder); @@ -3379,6 +3316,9 @@ void _mmcamcorder_sound_signal_callback(mm_sound_signal_name_t signal, int value } } + /* reset flag not to run sound focus related code since now */ + hcamcorder->sound_focus_register = FALSE; + _MMCAMCORDER_UNLOCK_ASM(hcamcorder); _mmcam_dbg_warn("done"); @@ -3430,14 +3370,14 @@ void _mmcamcorder_sound_focus_watch_cb(int id, mm_sound_focus_type_e focus_type, if (focus_state == FOCUS_IS_RELEASED) { _MMCamcorderMsgItem msg; - _mmcam_dbg_log("other process's FOCUS is acquired"); + _mmcam_dbg_log("other process's FOCUS is released"); msg.id = MM_MESSAGE_READY_TO_RESUME; _mmcamcorder_send_message((MMHandleType)hcamcorder, &msg); _mmcam_dbg_log("Finish opeartion"); } else if (focus_state == FOCUS_IS_ACQUIRED) { - _mmcam_dbg_log("other process's FOCUS is released : Stop pipeline[state:%d]", current_state); + _mmcam_dbg_log("other process's FOCUS is acquired : Stop pipeline[state:%d]", current_state); __mmcamcorder_force_stop(hcamcorder); @@ -4274,33 +4214,23 @@ static gint __mmcamcorder_gst_handle_resource_warning(MMHandleType handle, GstMe return MM_ERROR_NONE; } -int _mmcamcorder_get_video_caps(MMHandleType handle, char **caps) + +void _mmcamcorder_emit_signal(MMHandleType handle, const char *object_name, + const char *interface_name, const char *signal_name, int value) { - GstPad *pad = NULL; - GstCaps *sink_caps = NULL; - _MMCamcorderSubContext *sc = NULL; + mmf_camcorder_t *hcamcorder = MMF_CAMCORDER(handle); - sc = MMF_CAMCORDER_SUBCONTEXT(handle); - _mmcam_dbg_warn("Entered "); - pad = gst_element_get_static_pad(sc->element[_MMCAMCORDER_VIDEOSINK_SINK].gst, "sink"); - if (!pad) { - _mmcam_dbg_err("static pad is NULL"); - return MM_ERROR_CAMCORDER_INVALID_STATE; - } + mmf_return_if_fail(hcamcorder && object_name && interface_name && signal_name); - sink_caps = gst_pad_get_current_caps(pad); - gst_object_unref(pad); - if (!sink_caps) { - _mmcam_dbg_err("fail to get caps"); - return MM_ERROR_CAMCORDER_INVALID_STATE; - } + _mmcam_dbg_log("object %s, interface %s, signal %s, value %d", + object_name, interface_name, signal_name, value); - *caps = gst_caps_to_string(sink_caps); - _mmcam_dbg_err("video caps : %s", *caps); - gst_caps_unref(sink_caps); + _mmcamcorder_emit_dbus_signal(hcamcorder->gdbus_conn, object_name, interface_name, signal_name, value); - return MM_ERROR_NONE; + return; } + + #ifdef _MMCAMCORDER_RM_SUPPORT rm_cb_result _mmcamcorder_rm_callback(int handle, rm_callback_type event_src, rm_device_request_s *info, void* cb_data)