summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packaging/libmm-camcorder.spec2
-rw-r--r--src/include/mm_camcorder_resource.h2
-rw-r--r--src/mm_camcorder_resource.c20
3 files changed, 22 insertions, 2 deletions
diff --git a/packaging/libmm-camcorder.spec b/packaging/libmm-camcorder.spec
index c67d306..b6de7e4 100644
--- a/packaging/libmm-camcorder.spec
+++ b/packaging/libmm-camcorder.spec
@@ -1,6 +1,6 @@
Name: libmm-camcorder
Summary: Camera and recorder library
-Version: 0.10.90
+Version: 0.10.91
Release: 0
Group: Multimedia/Libraries
License: Apache-2.0
diff --git a/src/include/mm_camcorder_resource.h b/src/include/mm_camcorder_resource.h
index d399a1c..e5e685e 100644
--- a/src/include/mm_camcorder_resource.h
+++ b/src/include/mm_camcorder_resource.h
@@ -42,6 +42,8 @@ typedef struct {
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);
diff --git a/src/mm_camcorder_resource.c b/src/mm_camcorder_resource.c
index 3c15e0a..af32408 100644
--- a/src/mm_camcorder_resource.c
+++ b/src/mm_camcorder_resource.c
@@ -318,11 +318,24 @@ static int __mmcamcorder_resource_set_release_cb(MMCamcorderResourceManager *res
return ret;
}
+static gpointer __mmcamcorder_launch_glib_murphy_loop(void *user_data)
+{
+ LOGI("Run mrp_loop");
+ MMCamcorderResourceManager *resource_manager= (MMCamcorderResourceManager *)user_data;
+ g_main_loop_run(resource_manager->mrp_loop);
+ LOGI("Murphy glib loop exit");
+ return NULL;
+}
+
int _mmcamcorder_resource_manager_init(MMCamcorderResourceManager *resource_manager, void *user_data)
{
MMCAMCORDER_CHECK_RESOURCE_MANAGER_INSTANCE(resource_manager);
- resource_manager->mloop = mrp_mainloop_glib_get(g_main_loop_new(NULL, TRUE));
+ 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;
@@ -425,6 +438,11 @@ int _mmcamcorder_resource_manager_deinit(MMCamcorderResourceManager *resource_ma
mrp_res_destroy(resource_manager->context);
resource_manager->context = NULL;
}
+ if (resource_manager->mrp_loop) {
+ g_main_loop_quit(resource_manager->mrp_loop);
+ resource_manager->mrp_loop = NULL;
+ }
+ g_thread_join(resource_manager->starter);
if (resource_manager->mloop) {
_mmcam_dbg_log("destroy resource mainloop");
mrp_mainloop_destroy(resource_manager->mloop);