Merge branch 'tizen' into sandbox/cyeon/devel
[platform/core/uifw/libtdm.git] / src / tdm_pp.c
index cdc0bde..a53531a 100644 (file)
@@ -9,7 +9,7 @@
  *          Taeheon Kim <th908.kim@samsung.com>,
  *          YoungJun Cho <yj44.cho@samsung.com>,
  *          SooChan Lim <sc1.lim@samsung.com>,
- *          Boram Park <sc1.lim@samsung.com>
+ *          Boram Park <boram1288.park@samsung.com>
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the
@@ -40,7 +40,7 @@
 #include "tdm_private.h"
 
 #define PP_FUNC_ENTRY() \
-       tdm_private_backend *private_backend; \
+       tdm_private_module *private_module; \
        tdm_func_pp *func_pp; \
        tdm_private_display *private_display; \
        tdm_private_pp *private_pp; \
@@ -48,8 +48,8 @@
        TDM_RETURN_VAL_IF_FAIL(pp != NULL, TDM_ERROR_INVALID_PARAMETER); \
        private_pp = (tdm_private_pp*)pp; \
        private_display = private_pp->private_display; \
-       private_backend = private_pp->private_backend; \
-       func_pp = &private_backend->func_pp
+       private_module = private_pp->private_module; \
+       func_pp = &private_module->func_pp
 
 static void
 _tdm_pp_print_list(struct list_head *list)
@@ -60,10 +60,16 @@ _tdm_pp_print_list(struct list_head *list)
 
        TDM_RETURN_IF_FAIL(list != NULL);
 
+       str[0] = '\0';
        p = str;
        LIST_FOR_EACH_ENTRY(b, list, link) {
                if (len > 0) {
-                       int l = snprintf(p, len, " (%p,%p)", b->src, b->dst);
+                       tbm_bo src_bo = tbm_surface_internal_get_bo(b->src, 0);
+                       tbm_bo dst_bo = tbm_surface_internal_get_bo(b->dst, 0);
+                       int src_flags = tbm_bo_get_flags(src_bo);
+                       int dst_flags = tbm_bo_get_flags(dst_bo);
+                       int l = snprintf(p, len, " (%p[bo_flags:%x], %p[bo_flags:%x])",
+                                                        b->src, src_flags, b->dst, dst_flags);
                        p += l;
                        len -= l;
                } else
@@ -156,7 +162,7 @@ _tdm_pp_thread_cb_done(tdm_private_display *private_display, void *object, tdm_t
 }
 
 static void
-_tdm_pp_cb_done(tdm_pp *pp_backend, tbm_surface_h src, tbm_surface_h dst, void *user_data)
+_tdm_pp_cb_done(tdm_pp *pp_module, tbm_surface_h src, tbm_surface_h dst, void *user_data)
 {
        tdm_thread_cb_pp_done pp_done;
        tdm_private_pp *private_pp = user_data;
@@ -173,20 +179,20 @@ _tdm_pp_cb_done(tdm_pp *pp_backend, tbm_surface_h src, tbm_surface_h dst, void *
        pp_done.src = src;
        pp_done.dst = dst;
 
-       ret = tdm_thread_cb_call(private_pp, &pp_done.base);
+       ret = tdm_thread_cb_call(private_pp, &pp_done.base, 1);
        TDM_WARNING_IF_FAIL(ret == TDM_ERROR_NONE);
 }
 
 static void *
 _tdm_pp_find_object(tdm_private_display *private_display, double stamp)
 {
-       tdm_private_backend *private_backend = NULL;
+       tdm_private_module *private_module = NULL;
        tdm_private_pp *private_pp = NULL;
 
        TDM_RETURN_VAL_IF_FAIL(TDM_MUTEX_IS_LOCKED(), NULL);
 
-       LIST_FOR_EACH_ENTRY(private_backend, &private_display->backend_list, link) {
-               LIST_FOR_EACH_ENTRY(private_pp, &private_backend->pp_list, link) {
+       LIST_FOR_EACH_ENTRY(private_module, &private_display->module_list, link) {
+               LIST_FOR_EACH_ENTRY(private_pp, &private_module->pp_list, link) {
                        if (private_pp->stamp == stamp)
                                return private_pp;
                }
@@ -204,32 +210,32 @@ tdm_pp_init(tdm_private_display *private_display)
 }
 
 INTERN tdm_private_pp *
-tdm_pp_create_internal(tdm_private_backend *private_backend, tdm_error *error)
+tdm_pp_create_internal(tdm_private_module *private_module, tdm_error *error)
 {
        tdm_private_display *private_display;
        tdm_func_display *func_display;
        tdm_func_pp *func_pp;
        tdm_private_pp *private_pp = NULL;
-       tdm_pp *pp_backend = NULL;
+       tdm_pp *pp_module = NULL;
        tdm_error ret = TDM_ERROR_NONE;
 
        TDM_RETURN_VAL_IF_FAIL(TDM_MUTEX_IS_LOCKED(), NULL);
-       TDM_RETURN_VAL_IF_FAIL(private_backend != NULL, NULL);
+       TDM_RETURN_VAL_IF_FAIL(private_module != NULL, NULL);
 
-       private_display = private_backend->private_display;
-       func_display = &private_backend->func_display;
-       func_pp = &private_backend->func_pp;
+       private_display = private_module->private_display;
+       func_display = &private_module->func_display;
+       func_pp = &private_module->func_pp;
 
-       if (!(private_backend->capabilities & TDM_DISPLAY_CAPABILITY_PP)) {
+       if (!(private_module->capabilities & TDM_DISPLAY_CAPABILITY_PP)) {
                /* LCOV_EXCL_START */
-               TDM_ERR("backedn(%s) no pp capability", private_backend->module_data->name);
+               TDM_ERR("backedn(%s) no pp capability", private_module->module_data->name);
                if (error)
                        *error = TDM_ERROR_NO_CAPABILITY;
                return NULL;
                /* LCOV_EXCL_STOP */
        }
 
-       pp_backend = func_display->display_create_pp(private_backend->bdata, &ret);
+       pp_module = func_display->display_create_pp(private_module->bdata, &ret);
        if (ret != TDM_ERROR_NONE) {
                /* LCOV_EXCL_START */
                if (error)
@@ -242,7 +248,7 @@ tdm_pp_create_internal(tdm_private_backend *private_backend, tdm_error *error)
        if (!private_pp) {
                /* LCOV_EXCL_START */
                TDM_ERR("failed: alloc memory");
-               func_pp->pp_destroy(pp_backend);
+               func_pp->pp_destroy(pp_module);
                if (error)
                        *error = TDM_ERROR_OUT_OF_MEMORY;
                return NULL;
@@ -252,18 +258,18 @@ tdm_pp_create_internal(tdm_private_backend *private_backend, tdm_error *error)
        ret = tdm_thread_cb_add(private_pp, TDM_THREAD_CB_PP_DONE, NULL, _tdm_pp_thread_cb_done, NULL);
        if (ret != TDM_ERROR_NONE) {
                TDM_ERR("pp tdm_thread_cb_add failed");
-               func_pp->pp_destroy(pp_backend);
+               func_pp->pp_destroy(pp_module);
                free(private_pp);
                if (error)
                        *error = ret;
                return NULL;
        }
 
-       ret = func_pp->pp_set_done_handler(pp_backend, _tdm_pp_cb_done, private_pp);
+       ret = func_pp->pp_set_done_handler(pp_module, _tdm_pp_cb_done, private_pp);
        if (ret != TDM_ERROR_NONE) {
                /* LCOV_EXCL_START */
                TDM_ERR("spp(%p) et pp_done_handler failed", private_pp);
-               func_pp->pp_destroy(pp_backend);
+               func_pp->pp_destroy(pp_module);
                free(private_pp);
                if (error)
                        *error = ret;
@@ -275,10 +281,10 @@ tdm_pp_create_internal(tdm_private_backend *private_backend, tdm_error *error)
        while (_tdm_pp_find_object(private_display, private_pp->stamp))
                private_pp->stamp++;
 
-       LIST_ADD(&private_pp->link, &private_backend->pp_list);
-       private_pp->private_display = private_backend->private_display;
-       private_pp->private_backend = private_backend;
-       private_pp->pp_backend = pp_backend;
+       LIST_ADD(&private_pp->link, &private_module->pp_list);
+       private_pp->private_display = private_module->private_display;
+       private_pp->private_module = private_module;
+       private_pp->pp_module = pp_module;
        private_pp->owner_tid = syscall(SYS_gettid);
 
        LIST_INITHEAD(&private_pp->pending_buffer_list);
@@ -294,7 +300,7 @@ INTERN void
 tdm_pp_destroy_internal(tdm_private_pp *private_pp)
 {
        tdm_private_display *private_display;
-       tdm_private_backend *private_backend;
+       tdm_private_module *private_module;
        tdm_func_pp *func_pp;
        tdm_pp_private_buffer *b = NULL, *bb = NULL;
        struct list_head clone_list;
@@ -307,12 +313,12 @@ tdm_pp_destroy_internal(tdm_private_pp *private_pp)
        tdm_thread_cb_remove(private_pp, TDM_THREAD_CB_PP_DONE, NULL, _tdm_pp_thread_cb_done, NULL);
 
        private_display = private_pp->private_display;
-       private_backend = private_pp->private_backend;
-       func_pp = &private_backend->func_pp;
+       private_module = private_pp->private_module;
+       func_pp = &private_module->func_pp;
 
        LIST_DEL(&private_pp->link);
 
-       func_pp->pp_destroy(private_pp->pp_backend);
+       func_pp->pp_destroy(private_pp->pp_module);
 
        if (!LIST_IS_EMPTY(&private_pp->pending_buffer_list)) {
                TDM_WRN("pp(%p) not finished:", private_pp);
@@ -414,7 +420,7 @@ tdm_pp_set_info(tdm_pp *pp, tdm_info_pp *info)
                         FOURCC_STR(info->dst_config.format),
                         info->transform, info->sync, info->flags);
 
-       ret = func_pp->pp_set_info(private_pp->pp_backend, info);
+       ret = func_pp->pp_set_info(private_pp->pp_module, info);
        TDM_WARNING_IF_FAIL(ret == TDM_ERROR_NONE);
 
        private_pp->info = *info;
@@ -468,15 +474,15 @@ tdm_pp_attach(tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst)
                /* LCOV_EXCL_STOP */
        }
 
-       if (tdm_backend_check_module_abi(private_backend, 1, 2) &&
-               private_backend->caps_pp.max_attach_count > 0) {
+       if (tdm_module_check_abi(private_module, 1, 2) &&
+               private_module->caps_pp.max_attach_count > 0) {
                /* LCOV_EXCL_START */
                int length = LIST_LENGTH(&private_pp->pending_buffer_list) +
                                         LIST_LENGTH(&private_pp->buffer_list);
-               if (length >= private_backend->caps_pp.max_attach_count) {
+               if (length >= private_module->caps_pp.max_attach_count) {
                        _pthread_mutex_unlock(&private_display->lock);
                        TDM_DBG("failed: backend(%s) too many attached!! max_attach_count(%d)",
-                                       private_backend->module_data->name, private_backend->caps_pp.max_attach_count);
+                                       private_module->module_data->name, private_module->caps_pp.max_attach_count);
                        return TDM_ERROR_BAD_REQUEST;
                }
                /* LCOV_EXCL_STOP */
@@ -500,7 +506,7 @@ tdm_pp_attach(tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst)
                /* LCOV_EXCL_STOP */
        }
 
-       ret = func_pp->pp_attach(private_pp->pp_backend, src, dst);
+       ret = func_pp->pp_attach(private_pp->pp_module, src, dst);
        TDM_WARNING_IF_FAIL(ret == TDM_ERROR_NONE);
 
        if (ret != TDM_ERROR_NONE) {
@@ -557,7 +563,7 @@ tdm_pp_commit(tdm_pp *pp)
                LIST_ADDTAIL(&b->commit_link, &commit_buffer_list);
        }
 
-       ret = func_pp->pp_commit(private_pp->pp_backend);
+       ret = func_pp->pp_commit(private_pp->pp_module);
        TDM_WARNING_IF_FAIL(ret == TDM_ERROR_NONE);
 
        LIST_FOR_EACH_ENTRY_SAFE(b, bb, &commit_buffer_list, commit_link) {
@@ -567,14 +573,6 @@ tdm_pp_commit(tdm_pp *pp)
                        continue;
 
                if (ret != TDM_ERROR_NONE) {
-                       /* Not to call the user release handler when failed.
-                        * Do we have to call this function here really?
-                        * User better use set_done_handler to know when pp is done. Using
-                        * buffer_release_handler is not good.
-                        */
-                       tdm_buffer_remove_release_handler_internal(b->src);
-                       tdm_buffer_remove_release_handler_internal(b->dst);
-
                        _pthread_mutex_unlock(&private_display->lock);
                        tdm_buffer_unref_backend(b->src);
                        tdm_buffer_unref_backend(b->dst);