}
+_camera_dispatcher_release_resource(muse_module_h module)
+{
+ muse_camera_handle_s *muse_camera = NULL;
+
+ if (!module) {
+ LOGE("NULL handle");
+ return;
+ }
+
+ LOGW("enter");
+
+ muse_camera = (muse_camera_handle_s *)muse_core_ipc_get_handle(module);
+
+ _camera_remove_export_data(module, 0, TRUE);
+
+ g_mutex_clear(&muse_camera->list_lock);
+ g_cond_clear(&muse_camera->list_cond);
+ g_mutex_clear(&muse_camera->preview_cb_lock);
+ g_cond_clear(&muse_camera->preview_cb_cond);
+
+ muse_camera->bufmgr = NULL;
+
+ if (muse_camera->task_thread) {
+ LOGW("task thread exiting start");
+
+ g_mutex_lock(&muse_camera->task_lock);
+ muse_camera->task_run = false;
+ g_cond_signal(&muse_camera->task_cond);
+ g_mutex_unlock(&muse_camera->task_lock);
+
+ LOGW("wait task thread join");
+
+ g_thread_join(muse_camera->task_thread);
+ muse_camera->task_thread = NULL;
+
+ LOGW("task thread exiting end");
+ }
+
+ g_mutex_clear(&muse_camera->task_lock);
+ g_cond_clear(&muse_camera->task_cond);
+ g_queue_clear(&muse_camera->task_queue);
+
+ free(muse_camera);
+ muse_camera = NULL;
+}
+
+
int camera_dispatcher_create(muse_module_h module)
{
int ret = CAMERA_ERROR_NONE;
LOGD("Enter, handle : %p", muse_camera);
ret = legacy_camera_destroy(muse_camera->camera_handle);
- if (ret == CAMERA_ERROR_NONE) {
- _camera_remove_export_data(module, 0, TRUE);
-
- g_mutex_clear(&muse_camera->list_lock);
- g_cond_clear(&muse_camera->list_cond);
- g_mutex_clear(&muse_camera->preview_cb_lock);
- g_cond_clear(&muse_camera->preview_cb_cond);
-
- muse_camera->bufmgr = NULL;
-
- if (muse_camera->task_thread) {
- g_mutex_lock(&muse_camera->task_lock);
- muse_camera->task_run = false;
- g_cond_signal(&muse_camera->task_cond);
- g_mutex_unlock(&muse_camera->task_lock);
-
- LOGE("task thread join");
-
- g_thread_join(muse_camera->task_thread);
- muse_camera->task_thread = NULL;
- }
-
- g_mutex_clear(&muse_camera->task_lock);
- g_cond_clear(&muse_camera->task_cond);
- g_queue_clear(&muse_camera->task_queue);
-
- free(muse_camera);
- muse_camera = NULL;
- }
+ if (ret == CAMERA_ERROR_NONE)
+ _camera_dispatcher_release_resource(module);
muse_camera_msg_return(api, class, ret, module);
muse_camera_handle_s *muse_camera = NULL;
camera_state_e state = CAMERA_STATE_NONE;
int capture_try_count = 0;
+ int ret = 0;
muse_camera = (muse_camera_handle_s *)muse_core_ipc_get_handle(module);
if (muse_camera == NULL) {
legacy_camera_stop_preview(muse_camera->camera_handle);
/* fall through */
case CAMERA_STATE_CREATED:
- if (legacy_camera_destroy(muse_camera->camera_handle) == CAMERA_ERROR_NONE) {
- _camera_remove_export_data(module, 0, TRUE);
-
- g_mutex_clear(&muse_camera->list_lock);
- g_mutex_clear(&muse_camera->preview_cb_lock);
- g_cond_clear(&muse_camera->preview_cb_cond);
-
- muse_camera->bufmgr = NULL;
-
- free(muse_camera);
- muse_camera = NULL;
- } else {
+ ret = legacy_camera_destroy(muse_camera->camera_handle);
+ if (ret == CAMERA_ERROR_NONE)
+ _camera_dispatcher_release_resource(module);
+ else
LOGE("failed to destroy camera handle");
- }
+
break;
default:
break;