* 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
#include "tdm_private.h"
#define PP_FUNC_ENTRY() \
+ tdm_private_module *private_module; \
tdm_func_pp *func_pp; \
tdm_private_display *private_display; \
tdm_private_pp *private_pp; \
TDM_RETURN_VAL_IF_FAIL(pp != NULL, TDM_ERROR_INVALID_PARAMETER); \
private_pp = (tdm_private_pp*)pp; \
private_display = private_pp->private_display; \
- func_pp = &private_display->func_pp
+ private_module = private_pp->private_module; \
+ func_pp = &private_module->func_pp
static void
_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
}
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;
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_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_pp, &private_display->pp_list, link) {
- if (private_pp->stamp == stamp)
- return private_pp;
+ 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;
+ }
}
return NULL;
}
INTERN tdm_private_pp *
-tdm_pp_create_internal(tdm_private_display *private_display, 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_module != NULL, NULL);
- func_display = &private_display->func_display;
- func_pp = &private_display->func_pp;
+ private_display = private_module->private_display;
+ func_display = &private_module->func_display;
+ func_pp = &private_module->func_pp;
- if (!(private_display->capabilities & TDM_DISPLAY_CAPABILITY_PP)) {
+ if (!(private_module->capabilities & TDM_DISPLAY_CAPABILITY_PP)) {
/* LCOV_EXCL_START */
- TDM_ERR("no pp capability");
+ 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_display->bdata, &ret);
+ pp_module = func_display->display_create_pp(private_module->bdata, &ret);
if (ret != TDM_ERROR_NONE) {
/* LCOV_EXCL_START */
if (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;
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;
while (_tdm_pp_find_object(private_display, private_pp->stamp))
private_pp->stamp++;
- LIST_ADD(&private_pp->link, &private_display->pp_list);
- private_pp->private_display = private_display;
- 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);
tdm_pp_destroy_internal(tdm_private_pp *private_pp)
{
tdm_private_display *private_display;
+ tdm_private_module *private_module;
tdm_func_pp *func_pp;
tdm_pp_private_buffer *b = NULL, *bb = NULL;
struct list_head clone_list;
tdm_thread_cb_remove(private_pp, TDM_THREAD_CB_PP_DONE, NULL, _tdm_pp_thread_cb_done, NULL);
private_display = private_pp->private_display;
- func_pp = &private_display->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);
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;
/* LCOV_EXCL_STOP */
}
- if (tdm_display_check_module_abi(private_display, 1, 2) &&
- private_display->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_display->caps_pp.max_attach_count) {
+ if (length >= private_module->caps_pp.max_attach_count) {
_pthread_mutex_unlock(&private_display->lock);
- TDM_DBG("failed: too many attached!! max_attach_count(%d)",
- private_display->caps_pp.max_attach_count);
+ TDM_DBG("failed: backend(%s) too many attached!! max_attach_count(%d)",
+ private_module->module_data->name, private_module->caps_pp.max_attach_count);
return TDM_ERROR_BAD_REQUEST;
}
/* LCOV_EXCL_STOP */
/* 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) {
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) {
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);