Change-Id: Ib3ac65c6679a8eb386e827d930ea54338af9010c
Signed-off-by: Volodymyr Brynza <v.brynza@samsung.com>
Name: libmm-camcorder
Summary: Camera and recorder library
Name: libmm-camcorder
Summary: Camera and recorder library
Release: 0
Group: Multimedia/Libraries
License: Apache-2.0
Release: 0
Group: Multimedia/Libraries
License: Apache-2.0
void *user_data;
int acquire_count;
int acquire_remain;
void *user_data;
int acquire_count;
int acquire_remain;
- GThread *starter;
- GMainLoop *mrp_loop;
} MMCamcorderResourceManager;
int _mmcamcorder_resource_manager_init(MMCamcorderResourceManager *resource_manager, void *user_data);
} MMCamcorderResourceManager;
int _mmcamcorder_resource_manager_init(MMCamcorderResourceManager *resource_manager, void *user_data);
-static gpointer __mmcamcorder_launch_glib_murphy_loop(void *user_data)
+int _mmcamcorder_resource_manager_init(MMCamcorderResourceManager *resource_manager, void *user_data)
- MMCamcorderResourceManager *resource_manager= (MMCamcorderResourceManager *)user_data;
+ GMainContext *mrp_ctx = NULL;
+ GMainLoop *mrp_loop = NULL;
- _mmcam_dbg_log("Run mrp_loop");
+ MMCAMCORDER_CHECK_RESOURCE_MANAGER_INSTANCE(resource_manager);
- g_main_loop_run(resource_manager->mrp_loop);
+ mrp_ctx = g_main_context_new();
+ if (!mrp_ctx) {
+ _mmcam_dbg_err("failed to get create glib context for mrp");
+ return MM_ERROR_RESOURCE_INTERNAL;
+ }
- _mmcam_dbg_log("Murphy glib loop exit");
+ mrp_loop = g_main_loop_new(mrp_ctx, TRUE);
+ g_main_context_unref(mrp_ctx);
+ mrp_ctx = NULL;
-int _mmcamcorder_resource_manager_init(MMCamcorderResourceManager *resource_manager, void *user_data)
-{
- MMCAMCORDER_CHECK_RESOURCE_MANAGER_INSTANCE(resource_manager);
+ if (!mrp_loop) {
+ _mmcam_dbg_err("failed to get create glib loop for mrp");
+ return MM_ERROR_RESOURCE_INTERNAL;
+ }
+
+ resource_manager->mloop = mrp_mainloop_glib_get(mrp_loop);
+
+ g_main_loop_unref(mrp_loop);
+ mrp_loop = NULL;
- GMainContext *mrp_ctx = g_main_context_new();
- resource_manager->mrp_loop = g_main_loop_new(mrp_ctx, TRUE);
- resource_manager->mloop = mrp_mainloop_glib_get(resource_manager->mrp_loop);
- resource_manager->starter = g_thread_new(NULL, (GThreadFunc)__mmcamcorder_launch_glib_murphy_loop, resource_manager);
- g_main_context_unref(mrp_ctx);
if (!resource_manager->mloop) {
_mmcam_dbg_err("failed to get mainloop for mrp");
return MM_ERROR_RESOURCE_INTERNAL;
if (!resource_manager->mloop) {
_mmcam_dbg_err("failed to get mainloop for mrp");
return MM_ERROR_RESOURCE_INTERNAL;
resource_manager->context = mrp_res_create(resource_manager->mloop, __mmcamcorder_resource_state_callback, user_data);
if (!resource_manager->context) {
_mmcam_dbg_err("could not get context for mrp");
resource_manager->context = mrp_res_create(resource_manager->mloop, __mmcamcorder_resource_state_callback, user_data);
if (!resource_manager->context) {
_mmcam_dbg_err("could not get context for mrp");
mrp_mainloop_destroy(resource_manager->mloop);
resource_manager->mloop = NULL;
mrp_mainloop_destroy(resource_manager->mloop);
resource_manager->mloop = NULL;
return MM_ERROR_RESOURCE_INTERNAL;
}
return MM_ERROR_RESOURCE_INTERNAL;
}
resource_manager->context = NULL;
}
resource_manager->context = NULL;
}
- if (resource_manager->mrp_loop) {
- g_main_loop_quit(resource_manager->mrp_loop);
- g_main_loop_unref(resource_manager->mrp_loop);
- resource_manager->mrp_loop = NULL;
- }
-
- if (resource_manager->starter) {
- g_thread_join(resource_manager->starter);
- g_thread_unref(resource_manager->starter);
- resource_manager->starter = NULL;
- }
-
if (resource_manager->mloop) {
_mmcam_dbg_log("destroy resource mainloop");
if (resource_manager->mloop) {
_mmcam_dbg_log("destroy resource mainloop");
+ mrp_mainloop_quit(resource_manager->mloop, 0);
mrp_mainloop_destroy(resource_manager->mloop);
resource_manager->mloop = NULL;
}
mrp_mainloop_destroy(resource_manager->mloop);
resource_manager->mloop = NULL;
}