X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Ftdm_backend.c;h=c979129e841a147d23116dbd9299fd1c6e7e08b0;hb=60ea919f68912ac1fec69f1f78d743a055970b42;hp=b5e50c6ff167df9025649e811ba3ed0cfbc4ae14;hpb=8f35b8bbce307ac6c3f0fb6cbdb9889823fcf59b;p=platform%2Fcore%2Fuifw%2Flibtdm.git diff --git a/src/tdm_backend.c b/src/tdm_backend.c index b5e50c6..c979129 100644 --- a/src/tdm_backend.c +++ b/src/tdm_backend.c @@ -9,7 +9,7 @@ * Taeheon Kim , * YoungJun Cho , * SooChan Lim , - * Boram Park + * Boram Park * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the @@ -37,8 +37,6 @@ #include "config.h" #endif -#include "tdm.h" -#include "tdm_backend.h" #include "tdm_private.h" #define BACKEND_FUNC_ENTRY() \ @@ -75,12 +73,14 @@ tdm_backend_register_func_display(tdm_display *dpy, TDM_RETURN_VAL_IF_FAIL(func_display != NULL, TDM_ERROR_INVALID_PARAMETER); + assert(private_display->current_module); + /* the ABI version of backend module should be more than 1.1 */ - module = private_display->module_data; + module = private_display->current_module->module_data; if (_check_abi_version(module, 1, 1) < 0) return TDM_ERROR_BAD_MODULE; - private_display->func_display = *func_display; + private_display->current_module->func_display = *func_display; return TDM_ERROR_NONE; } @@ -96,12 +96,14 @@ tdm_backend_register_func_output(tdm_display *dpy, tdm_func_output *func_output) TDM_RETURN_VAL_IF_FAIL(func_output != NULL, TDM_ERROR_INVALID_PARAMETER); + assert(private_display->current_module); + /* the ABI version of backend module should be more than 1.1 */ - module = private_display->module_data; + module = private_display->current_module->module_data; if (_check_abi_version(module, 1, 1) < 0) return TDM_ERROR_BAD_MODULE; - private_display->func_output = *func_output; + private_display->current_module->func_output = *func_output; return TDM_ERROR_NONE; } @@ -117,18 +119,21 @@ tdm_backend_register_func_layer(tdm_display *dpy, tdm_func_layer *func_layer) TDM_RETURN_VAL_IF_FAIL(func_layer != NULL, TDM_ERROR_INVALID_PARAMETER); + assert(private_display->current_module); + /* the ABI version of backend module should be more than 1.1 */ - module = private_display->module_data; + module = private_display->current_module->module_data; if (_check_abi_version(module, 1, 1) < 0) return TDM_ERROR_BAD_MODULE; - private_display->func_layer = *func_layer; + private_display->current_module->func_layer = *func_layer; return TDM_ERROR_NONE; } +/* LCOV_EXCL_START */ EXTERN tdm_error -tdm_backend_register_func_hwc_window(tdm_display *dpy, tdm_func_hwc_window *func_hwc_window) +tdm_backend_register_func_hwc(tdm_display *dpy, tdm_func_hwc *func_hwc) { tdm_backend_module *module; @@ -136,68 +141,86 @@ tdm_backend_register_func_hwc_window(tdm_display *dpy, tdm_func_hwc_window *func BACKEND_FUNC_ENTRY(); - TDM_RETURN_VAL_IF_FAIL(func_hwc_window != NULL, TDM_ERROR_INVALID_PARAMETER); + TDM_RETURN_VAL_IF_FAIL(func_hwc != NULL, TDM_ERROR_INVALID_PARAMETER); + + assert(private_display->current_module); - module = private_display->module_data; + module = private_display->current_module->module_data; if (_check_abi_version(module, 2, 0) < 0) return TDM_ERROR_BAD_MODULE; - private_display->capabilities |= TDM_DISPLAY_CAPABILITY_HWC; - private_display->func_hwc_window = *func_hwc_window; + private_display->current_module->func_hwc = *func_hwc; return TDM_ERROR_NONE; } EXTERN tdm_error -tdm_backend_register_func_pp(tdm_display *dpy, tdm_func_pp *func_pp) +tdm_backend_register_func_hwc_window(tdm_display *dpy, tdm_func_hwc_window *func_hwc_window) { + tdm_backend_module *module; + TDM_RETURN_VAL_IF_FAIL(TDM_MUTEX_IS_LOCKED(), TDM_ERROR_OPERATION_FAILED); BACKEND_FUNC_ENTRY(); - if (!func_pp) - return TDM_ERROR_NONE; + TDM_RETURN_VAL_IF_FAIL(func_hwc_window != NULL, TDM_ERROR_INVALID_PARAMETER); + + assert(private_display->current_module); - private_display->capabilities |= TDM_DISPLAY_CAPABILITY_PP; - private_display->func_pp = *func_pp; + module = private_display->current_module->module_data; + if (_check_abi_version(module, 2, 0) < 0) + return TDM_ERROR_BAD_MODULE; + + private_display->current_module->func_hwc_window = *func_hwc_window; return TDM_ERROR_NONE; } +/* LCOV_EXCL_STOP */ EXTERN tdm_error -tdm_backend_register_func_capture(tdm_display *dpy, - tdm_func_capture *func_capture) +tdm_backend_register_func_pp(tdm_display *dpy, tdm_func_pp *func_pp) { TDM_RETURN_VAL_IF_FAIL(TDM_MUTEX_IS_LOCKED(), TDM_ERROR_OPERATION_FAILED); BACKEND_FUNC_ENTRY(); - if (!func_capture) + if (!func_pp) return TDM_ERROR_NONE; - private_display->capabilities |= TDM_DISPLAY_CAPABILITY_CAPTURE; - private_display->func_capture = *func_capture; + assert(private_display->current_module); + + private_display->current_module->capabilities |= TDM_DISPLAY_CAPABILITY_PP; + private_display->current_module->func_pp = *func_pp; + + if (!private_display->pp_module) + private_display->pp_module = private_display->current_module; + else + TDM_ERR("already has pp backend(%s)", private_display->pp_module->module_data->name); return TDM_ERROR_NONE; } EXTERN tdm_error -tdm_backend_trigger_need_validate_event(tdm_output *output) +tdm_backend_register_func_capture(tdm_display *dpy, + tdm_func_capture *func_capture) { - tdm_private_output *private_output; - uint64_t value; - int res; + TDM_RETURN_VAL_IF_FAIL(TDM_MUTEX_IS_LOCKED(), TDM_ERROR_OPERATION_FAILED); - TDM_RETURN_VAL_IF_FAIL(output != NULL, TDM_ERROR_INVALID_PARAMETER); + BACKEND_FUNC_ENTRY(); + + if (!func_capture) + return TDM_ERROR_NONE; - private_output = (tdm_private_output*)output; - value = 1; + assert(private_display->current_module); - /* do not lock the global display lock here */ + private_display->current_module->capabilities |= TDM_DISPLAY_CAPABILITY_CAPTURE; + private_display->current_module->func_capture = *func_capture; - res = write(private_output->need_validate.event_fd, &value, sizeof(value)); - if (res < 0) - return TDM_ERROR_OPERATION_FAILED; + //TODO: remove later + if (!private_display->capture_module) + private_display->capture_module = private_display->current_module; + else + TDM_ERR("already has capture backend(%s)", private_display->capture_module->module_data->name); return TDM_ERROR_NONE; }