int _mmcamcorder_resource_create_resource_set(MMCamcorderResourceManager *resource_manager)
{
if (resource_manager->rset) {
- _mmcam_dbg_err(" - resource set was already created");
- return MM_ERROR_RESOURCE_INVALID_STATE;
+ _mmcam_dbg_warn(" - resource set was already created, delete it");
+ mrp_res_delete_resource_set(resource_manager->rset);
+ resource_manager->rset = NULL;
}
resource_manager->rset = mrp_res_create_resource_set(resource_manager->context,
int _mmcamcorder_resource_manager_init(MMCamcorderResourceManager *resource_manager, void *user_data)
{
+ GMainContext *mrp_ctx = NULL;
+ GMainLoop *mrp_loop = NULL;
+
MMCAMCORDER_CHECK_RESOURCE_MANAGER_INSTANCE(resource_manager);
- resource_manager->mloop = mrp_mainloop_glib_get(g_main_loop_new(NULL, TRUE));
+ 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;
+ }
+
+ mrp_loop = g_main_loop_new(mrp_ctx, TRUE);
+
+ g_main_context_unref(mrp_ctx);
+ mrp_ctx = NULL;
+
+ 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;
+
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");
+
mrp_mainloop_destroy(resource_manager->mloop);
resource_manager->mloop = NULL;
+
return MM_ERROR_RESOURCE_INTERNAL;
}
mrp_res_delete_resource_set(resource_manager->rset);
resource_manager->rset = NULL;
}
+
if (resource_manager->context) {
_mmcam_dbg_log("destroy resource context");
mrp_res_destroy(resource_manager->context);
resource_manager->context = NULL;
}
+
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;
}