From 93d7ead74b85e17f576fe7c7b3d3e56d0026c5d2 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Thu, 4 Feb 2021 15:42:39 +0900 Subject: [PATCH] second implementation Change-Id: Idc619c05f464c5e6069978c512a50e39b8a648df --- include/hal-tdm-interface.h | 115 +++---- include/hal-tdm-types.h | 27 +- include/hal-tdm.h | 151 ++++----- src/hal-api-tdm.c | 630 +++++++++++++++++++++--------------- 4 files changed, 535 insertions(+), 388 deletions(-) diff --git a/include/hal-tdm-interface.h b/include/hal-tdm-interface.h index f72b828..139586b 100644 --- a/include/hal-tdm-interface.h +++ b/include/hal-tdm-interface.h @@ -35,7 +35,7 @@ #ifndef __HAL_TDM_INTERFACE__ #define __HAL_TDM_INTERFACE__ -#include +#include #include #include @@ -45,18 +45,45 @@ extern "C" { #endif -typedef struct _hal_tdm_func_display { - hal_tdm_error (*display_get_capability)(hal_tdm_backend_data *bdata, hal_tdm_caps_display *caps); - hal_tdm_error (*display_get_pp_capability)(hal_tdm_backend_data *bdata, hal_tdm_caps_pp *caps); - hal_tdm_error (*display_get_capture_capability)(hal_tdm_backend_data *bdata, hal_tdm_caps_capture *caps); - hal_tdm_output **(*display_get_outputs)(hal_tdm_backend_data *bdata, int *count, hal_tdm_error *error); - hal_tdm_error (*display_get_fd)(hal_tdm_backend_data *bdata, int *fd); - hal_tdm_error (*display_handle_events)(hal_tdm_backend_data *bdata); - hal_tdm_pp *(*display_create_pp)(hal_tdm_backend_data *bdata, hal_tdm_error *error); - hal_tdm_voutput *(*display_voutput_create)(hal_tdm_backend_data *bdata, const char *name, hal_tdm_error *error); -} hal_tdm_func_display; - -typedef struct _hal_tdm_func_output { +typedef struct _hal_tdm_backend_data hal_tdm_backend_data; + +typedef struct _hal_tdm_display_funcs hal_tdm_display_funcs; +typedef struct _hal_tdm_output_funcs hal_tdm_output_funcs; +typedef struct _hal_tdm_hwc_funcs hal_tdm_hwc_funcs; +typedef struct _hal_tdm_hwc_window_funcs hal_tdm_hwc_window_funcs; +typedef struct _hal_tdm_pp_funcs hal_tdm_pp_funcs; +typedef struct _hal_tdm_capture_funcs hal_tdm_capture_funcs; +typedef struct _hal_tdm_voutput_funcs hal_tdm_voutput_funcs; + +#define HAL_TDM_EVENT_SOURCE_MAX 3 + +struct _hal_tdm_backend_data { + hal_tdm_display *display; // handle + + int num_event_sources; + hal_tdm_event_source *event_sources[HAL_TDM_EVENT_SOURCE_MAX]; + + hal_tdm_display_funcs *display_funcs; + hal_tdm_output_funcs *output_funcs; + hal_tdm_hwc_funcs *hwc_funcs; + hal_tdm_hwc_window_funcs *hwc_window_funcs; + hal_tdm_pp_funcs *pp_funcs; + hal_tdm_capture_funcs *capture_funcs; + hal_tdm_voutput_funcs *voutput_funcs; +}; + +struct _hal_tdm_display_funcs { + hal_tdm_error (*display_get_capability)(hal_tdm_display *display, hal_tdm_caps_display *caps); + hal_tdm_error (*display_get_pp_capability)(hal_tdm_display *display, hal_tdm_caps_pp *caps); + hal_tdm_error (*display_get_capture_capability)(hal_tdm_display *display, hal_tdm_caps_capture *caps); + hal_tdm_output **(*display_get_outputs)(hal_tdm_display *display, int *count, hal_tdm_error *error); + hal_tdm_error (*display_get_fd)(hal_tdm_display *display, int *fd); + hal_tdm_error (*display_handle_events)(hal_tdm_display *display); + hal_tdm_pp *(*display_create_pp)(hal_tdm_display *display, hal_tdm_error *error); + hal_tdm_voutput *(*display_voutput_create)(hal_tdm_display *display, const char *name, hal_tdm_error *error); +}; + +struct _hal_tdm_output_funcs { hal_tdm_error (*output_get_capability)(hal_tdm_output *output, hal_tdm_caps_output *caps); hal_tdm_error (*output_set_property)(hal_tdm_output *output, unsigned int id, hal_tdm_value value); hal_tdm_error (*output_get_property)(hal_tdm_output *output, unsigned int id, hal_tdm_value *value); @@ -75,9 +102,9 @@ typedef struct _hal_tdm_func_output { hal_tdm_hwc *(*output_get_hwc)(hal_tdm_output *output, hal_tdm_error *error); hal_tdm_error (*output_set_mirror)(hal_tdm_output *output, hal_tdm_output *src_output, hal_tdm_transform transform); hal_tdm_error (*output_unset_mirror)(hal_tdm_output *output); -} hal_tdm_func_output; +}; -typedef struct _hal_tdm_func_voutput { +struct _hal_tdm_voutput_funcs { hal_tdm_error (*voutput_destroy)(hal_tdm_voutput *voutput); hal_tdm_error (*voutput_set_available_mode)(hal_tdm_voutput *voutput, const hal_tdm_output_mode *modes, int count); hal_tdm_error (*voutput_set_physical_size)(hal_tdm_voutput *voutput, unsigned int mmwidth, unsigned int mmheight); @@ -87,9 +114,9 @@ typedef struct _hal_tdm_func_voutput { hal_tdm_error (*voutput_set_commit_func)(hal_tdm_voutput *voutput, hal_tdm_voutput_commit_handler commit_func); hal_tdm_error (*voutput_commit_done)(hal_tdm_voutput *voutput); hal_tdm_error (*voutput_set_target_buffer_queue_flag)(hal_tdm_voutput *voutput, int flags); -} hal_tdm_func_voutput; +}; -typedef struct _hal_tdm_func_hwc { +struct _hal_tdm_hwc_funcs { hal_tdm_hwc_window *(*hwc_create_window)(hal_tdm_hwc *hwc, hal_tdm_error *error); hal_tdm_error (*hwc_get_video_supported_formats)(hal_tdm_hwc *hwc, const tbm_format **formats, int *count); hal_tdm_error (*hwc_get_video_available_properties)(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count); @@ -108,9 +135,9 @@ typedef struct _hal_tdm_func_hwc { hal_tdm_error (*hwc_set_property)(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value value); hal_tdm_error (*hwc_get_property)(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value *value); hal_tdm_error (*hwc_get_commit_interval)(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_interval *interval); -} hal_tdm_func_hwc; +}; -typedef struct _hal_tdm_func_hwc_window { +struct _hal_tdm_hwc_window_funcs { void (*hwc_window_destroy)(hal_tdm_hwc_window *hwc_window); tbm_surface_queue_h (*hwc_window_acquire_buffer_queue)(hal_tdm_hwc_window *hwc_window, hal_tdm_error *error); void (*hwc_window_release_buffer_queue)(hal_tdm_hwc_window *hwc_window, tbm_surface_queue_h queue); @@ -124,57 +151,37 @@ typedef struct _hal_tdm_func_hwc_window { hal_tdm_error (*hwc_window_set_name)(hal_tdm_hwc_window *hwc_window, const char *name); hal_tdm_error (*hwc_window_set_cursor_image)(hal_tdm_hwc_window *hwc_window, int width, int height, int stride, void *ptr); hal_tdm_error (*hwc_window_set_acquire_fence)(hal_tdm_hwc_window *hwc_window, int acquire_fence); -} hal_tdm_func_hwc_window; +}; -typedef struct _hal_tdm_func_pp { +struct _hal_tdm_pp_funcs { void (*pp_destroy)(hal_tdm_pp *pp); hal_tdm_error (*pp_set_info)(hal_tdm_pp *pp, hal_tdm_info_pp *info); hal_tdm_error (*pp_attach)(hal_tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst); hal_tdm_error (*pp_commit)(hal_tdm_pp *pp); hal_tdm_error (*pp_set_done_handler)(hal_tdm_pp *pp, hal_tdm_pp_done_handler func, void *user_data); -} hal_tdm_func_pp; +}; -typedef struct _hal_tdm_func_capture { +typedef struct _hal_tdm_capture_funcs { void (*capture_destroy)(hal_tdm_capture *capture); hal_tdm_error (*capture_set_info)(hal_tdm_capture *capture, hal_tdm_info_capture *info); hal_tdm_error (*capture_attach)(hal_tdm_capture *capture, tbm_surface_h buffer); hal_tdm_error (*capture_commit)(hal_tdm_capture *capture); hal_tdm_error (*capture_set_done_handler)(hal_tdm_capture *capture, hal_tdm_capture_done_handler func, void *user_data); -} hal_tdm_func_capture; - -typedef struct _hal_backend_tdm_funcs { - hal_tdm_func_display *tdm_func_display; - hal_tdm_func_output *tdm_func_output; - hal_tdm_func_voutput *tdm_func_voutput; - hal_tdm_func_hwc *tdm_func_hwc; - hal_tdm_func_hwc_window *tdm_func_hwc_window; - hal_tdm_func_pp *tdm_func_pp; - hal_tdm_func_capture *tdm_func_capture; -} hal_backend_tdm_funcs; - -hal_tdm_error hal_tdm_backend_register_func_display(hal_tdm_display *dpy, hal_tdm_func_display *func_display); -hal_tdm_error hal_tdm_backend_register_func_output(hal_tdm_display *dpy, hal_tdm_func_output *func_output); -hal_tdm_error hal_tdm_backend_register_func_voutput(hal_tdm_display *dpy, hal_tdm_func_voutput *func_voutput); -hal_tdm_error hal_tdm_backend_register_func_hwc(hal_tdm_display *dpy, hal_tdm_func_hwc *func_hwc); -hal_tdm_error hal_tdm_backend_register_func_hwc_window(hal_tdm_display *dpy, hal_tdm_func_hwc_window *func_hwc_window); -hal_tdm_error hal_tdm_backend_register_func_pp(hal_tdm_display *dpy, hal_tdm_func_pp *func_pp); -hal_tdm_error hal_tdm_backend_register_func_capture(hal_tdm_display *dpy, hal_tdm_func_capture *func_capture); - -typedef void hal_tdm_event_loop_source; -typedef hal_tdm_error (*hal_tdm_event_loop_fd_handler)(int fd, hal_tdm_event_loop_mask mask, void *user_data); -typedef hal_tdm_error (*hal_tdm_event_loop_timer_handler)(void *user_data); +} hal_tdm_capture_funcs; + +hal_tdm_error hal_tdm_backend_register_display_funcs(hal_tdm_display *dpy, hal_tdm_display_funcs *display_funcs); +hal_tdm_error hal_tdm_backend_register_output_funcs(hal_tdm_display *dpy, hal_tdm_output_funcs *output_funcs); +hal_tdm_error hal_tdm_backend_register_voutput_funcs(hal_tdm_display *dpy, hal_tdm_voutput_funcs *voutput_funcs); +hal_tdm_error hal_tdm_backend_register_hwc_funcs(hal_tdm_display *dpy, hal_tdm_hwc_funcs *hwc_funcs); +hal_tdm_error hal_tdm_backend_register_hwc_window_funcs(hal_tdm_display *dpy, hal_tdm_hwc_window_funcs *hwc_window_funcs); +hal_tdm_error hal_tdm_backend_register_pp_funcs(hal_tdm_display *dpy, hal_tdm_pp_funcs *pp_funcs); +hal_tdm_error hal_tdm_backend_register_capture_funcs(hal_tdm_display *dpy, hal_tdm_capture_funcs *capture_funcs); tbm_surface_h hal_tdm_buffer_ref_backend(tbm_surface_h buffer); -void hal_tdm_buffer_unref_backend(tbm_surface_h buffer); +void hal_tdm_buffer_unref_backend(tbm_surface_h buffer); typedef void (*hal_tdm_buffer_destroy_handler)(tbm_surface_h buffer, void *user_data); hal_tdm_error hal_tdm_buffer_add_destroy_handler(tbm_surface_h buffer, hal_tdm_buffer_destroy_handler func, void *user_data); -void hal_tdm_buffer_remove_destroy_handler(tbm_surface_h buffer, hal_tdm_buffer_destroy_handler func, void *user_data); -hal_tdm_event_loop_source *hal_tdm_event_loop_add_fd_handler(hal_tdm_display *dpy, int fd, hal_tdm_event_loop_mask mask, - hal_tdm_event_loop_fd_handler func, void *user_data, hal_tdm_error *error); -hal_tdm_event_loop_source *hal_tdm_event_loop_add_timer_handler(hal_tdm_display *dpy, hal_tdm_event_loop_timer_handler func, - void *user_data, hal_tdm_error *error); -hal_tdm_error hal_tdm_event_loop_source_timer_update(hal_tdm_event_loop_source *source, unsigned int ms_delay); -void hal_tdm_event_loop_source_remove(hal_tdm_event_loop_source *source); +void hal_tdm_buffer_remove_destroy_handler(tbm_surface_h buffer, hal_tdm_buffer_destroy_handler func, void *user_data); #ifdef __cplusplus } diff --git a/include/hal-tdm-types.h b/include/hal-tdm-types.h index 51edf7a..6a3dd00 100644 --- a/include/hal-tdm-types.h +++ b/include/hal-tdm-types.h @@ -32,8 +32,8 @@ * **************************************************************************/ -#ifndef _HAL_TDM_TYPES_H_ -#define _HAL_TDM_TYPES_H_ +#ifndef __HAL_TDM_TYPES_H__ +#define __HAL_TDM_TYPES_H__ #include #include @@ -501,7 +501,14 @@ typedef void hal_tdm_vblank; /** * @brief The tdm backend object */ -typedef void hal_tdm_backend_data; +typedef void hal_tdm_backend; + +/** + * @brief The event_loop_fd handler + * @details This handler will be called when the output object is + * createed in runtime. + */ +typedef hal_tdm_error (*hal_tdm_event_loop_fd_handler)(int event_fd, hal_tdm_event_loop_mask mask, void *user_data); /** * @brief The output create handler @@ -529,7 +536,7 @@ typedef void (*hal_tdm_output_change_handler)(hal_tdm_output *output, /** * @brief The vblank handler - * @see output_set_vblank_handler() function of #hal_tdm_func_display + * @see output_set_vblank_handler() function of #hal_tdm_display_funcs */ typedef void (*hal_tdm_output_vblank_handler)(hal_tdm_output *output, unsigned int sequence, unsigned int tv_sec, unsigned int tv_usec, @@ -537,7 +544,7 @@ typedef void (*hal_tdm_output_vblank_handler)(hal_tdm_output *output, unsigned i /** * @brief The output commit handler - * @see output_set_commit_handler() function of #hal_tdm_func_display + * @see output_set_commit_handler() function of #hal_tdm_display_funcs */ typedef void (*hal_tdm_output_commit_handler)(hal_tdm_output *output, unsigned int sequence, unsigned int tv_sec, unsigned int tv_usec, @@ -580,7 +587,7 @@ typedef void (*hal_tdm_vblank_create_handler)(hal_tdm_vblank *vblank, void *user /** * @brief The hwc commit handler - * @see hwc_set_commit_handler() function of #hal_tdm_func_hwc + * @see hwc_set_commit_handler() function of #hal_tdm_hwc_funcs */ typedef void (*hal_tdm_hwc_commit_handler)(hal_tdm_hwc *hwc, unsigned int sequence, unsigned int tv_sec, unsigned int tv_usec, @@ -598,6 +605,14 @@ typedef void (*hal_tdm_voutput_commit_handler)(hal_tdm_voutput *voutput, unsigne */ typedef void (*hal_tdm_voutput_commit_func)(hal_tdm_voutput *voutput, tbm_surface_h buffer); +/** + * @brief The event source information + */ +typedef struct _hal_tdm_event_source { + int event_fd; + hal_tdm_event_loop_fd_handler func; + void *user_data; +} hal_tdm_event_source; typedef struct _hal_tdm_caps_output { char maker[HAL_TDM_NAME_LEN]; /**< The output maker */ diff --git a/include/hal-tdm.h b/include/hal-tdm.h index 31169fc..ed2855c 100644 --- a/include/hal-tdm.h +++ b/include/hal-tdm.h @@ -39,96 +39,103 @@ extern "C" { #endif +#include +#include #include "hal-tdm-types.h" -hal_tdm_error hal_tdm_get_backend(hal_tdm_display *dpy); -void hal_tdm_put_backend(void); +/* hal_tdm */ +hal_tdm_backend *hal_tdm_get_backend(hal_tdm_error *error); +hal_tdm_error hal_tdm_put_backend(hal_tdm_backend *backend); -/* tdm_func_display */ -hal_tdm_error hal_tdm_display_get_capability(hal_tdm_backend_data *bdata, hal_tdm_caps_display *caps); -hal_tdm_error hal_tdm_display_get_pp_capability(hal_tdm_backend_data *bdata, hal_tdm_caps_pp *caps); -hal_tdm_error hal_tdm_display_get_capture_capability(hal_tdm_backend_data *bdata, hal_tdm_caps_capture *caps); -hal_tdm_output **hal_tdm_display_get_outputs(hal_tdm_backend_data *bdata, int *count, hal_tdm_error *error); -hal_tdm_error hal_tdm_display_get_fd(hal_tdm_backend_data *bdata, int *fd); -hal_tdm_error hal_tdm_display_handle_events(hal_tdm_backend_data *bdata); -hal_tdm_pp *hal_tdm_display_create_pp(hal_tdm_backend_data *bdata, hal_tdm_error *error); -hal_tdm_voutput *hal_tdm_display_voutput_create(hal_tdm_backend_data *bdata, const char *name, hal_tdm_error *error); +/* tdm_backend_data */ +hal_tdm_display *hal_tdm_backend_get_display(hal_tdm_backend *backend, hal_tdm_error *error); +hal_tdm_event_source **hal_tdm_backend_get_event_sources(hal_tdm_backend *backend, int num_event_sources, hal_tdm_error *error); -/* tdm_func_output */ -hal_tdm_error hal_tdm_output_get_capability(hal_tdm_output *output, hal_tdm_caps_output *caps); -hal_tdm_error hal_tdm_output_set_property(hal_tdm_output *output, unsigned int id, hal_tdm_value value); -hal_tdm_error hal_tdm_output_get_property(hal_tdm_output *output, unsigned int id, hal_tdm_value *value); -hal_tdm_error hal_tdm_output_wait_vblank(hal_tdm_output *output, int interval, int sync, void *user_data); -hal_tdm_error hal_tdm_output_set_vblank_handler(hal_tdm_output *output, hal_tdm_output_vblank_handler func); -hal_tdm_error hal_tdm_output_commit(hal_tdm_output *output, int sync, void *user_data); -hal_tdm_error hal_tdm_output_set_commit_handler(hal_tdm_output *output, hal_tdm_output_commit_handler func); -hal_tdm_error hal_tdm_output_set_dpms(hal_tdm_output *output, hal_tdm_output_dpms dpms_value); -hal_tdm_error hal_tdm_output_get_dpms(hal_tdm_output *output, hal_tdm_output_dpms *dpms_value); -hal_tdm_error hal_tdm_output_set_mode(hal_tdm_output *output, const hal_tdm_output_mode *mode); -hal_tdm_error hal_tdm_output_get_mode(hal_tdm_output *output, const hal_tdm_output_mode **mode); +/* tdm_display_funcs */ +hal_tdm_error hal_tdm_display_get_capability(hal_tdm_display *display, hal_tdm_caps_display *caps); +hal_tdm_error hal_tdm_display_get_pp_capability(hal_tdm_display *display, hal_tdm_caps_pp *caps); +hal_tdm_error hal_tdm_display_get_capture_capability(hal_tdm_display *display, hal_tdm_caps_capture *caps); +hal_tdm_output **hal_tdm_display_get_outputs(hal_tdm_display *display, int *count, hal_tdm_error *error); +hal_tdm_error hal_tdm_display_get_fd(hal_tdm_display *display, int *fd); +hal_tdm_error hal_tdm_display_handle_events(hal_tdm_display *display); +hal_tdm_pp *hal_tdm_display_create_pp(hal_tdm_display *display, hal_tdm_error *error); +hal_tdm_voutput *hal_tdm_display_voutput_create(hal_tdm_display *display, const char *name, hal_tdm_error *error); + +/* output_funcs */ +hal_tdm_error hal_tdm_output_get_capability(hal_tdm_output *output, hal_tdm_caps_output *caps); +hal_tdm_error hal_tdm_output_set_property(hal_tdm_output *output, unsigned int id, hal_tdm_value value); +hal_tdm_error hal_tdm_output_get_property(hal_tdm_output *output, unsigned int id, hal_tdm_value *value); +hal_tdm_error hal_tdm_output_wait_vblank(hal_tdm_output *output, int interval, int sync, void *user_data); +hal_tdm_error hal_tdm_output_set_vblank_handler(hal_tdm_output *output, hal_tdm_output_vblank_handler func); +hal_tdm_error hal_tdm_output_commit(hal_tdm_output *output, int sync, void *user_data); +hal_tdm_error hal_tdm_output_set_commit_handler(hal_tdm_output *output, hal_tdm_output_commit_handler func); +hal_tdm_error hal_tdm_output_set_dpms(hal_tdm_output *output, hal_tdm_output_dpms dpms_value); +hal_tdm_error hal_tdm_output_get_dpms(hal_tdm_output *output, hal_tdm_output_dpms *dpms_value); +hal_tdm_error hal_tdm_output_set_mode(hal_tdm_output *output, const hal_tdm_output_mode *mode); +hal_tdm_error hal_tdm_output_get_mode(hal_tdm_output *output, const hal_tdm_output_mode **mode); hal_tdm_capture *hal_tdm_output_create_capture(hal_tdm_output *output, hal_tdm_error *error); -hal_tdm_error hal_tdm_output_set_status_handler(hal_tdm_output *output, hal_tdm_output_status_handler func, void *user_data); -hal_tdm_error hal_tdm_output_set_dpms_handler(hal_tdm_output *output, hal_tdm_output_dpms_handler func, void *user_data); -hal_tdm_error hal_tdm_output_set_dpms_async(hal_tdm_output *output, hal_tdm_output_dpms dpms_value, int *sync); -hal_tdm_hwc *hal_tdm_output_get_hwc(hal_tdm_output *output, hal_tdm_error *error); -hal_tdm_error hal_tdm_output_set_mirror(hal_tdm_output *output, hal_tdm_output *src_output, hal_tdm_transform transform); -hal_tdm_error hal_tdm_output_unset_mirror(hal_tdm_output *output); +hal_tdm_error hal_tdm_output_set_status_handler(hal_tdm_output *output, hal_tdm_output_status_handler func, void *user_data); +hal_tdm_error hal_tdm_output_set_dpms_handler(hal_tdm_output *output, hal_tdm_output_dpms_handler func, void *user_data); +hal_tdm_error hal_tdm_output_set_dpms_async(hal_tdm_output *output, hal_tdm_output_dpms dpms_value, int *sync); +hal_tdm_hwc *hal_tdm_output_get_hwc(hal_tdm_output *output, hal_tdm_error *error); +hal_tdm_error hal_tdm_output_set_mirror(hal_tdm_output *output, hal_tdm_output *src_output, hal_tdm_transform transform); +hal_tdm_error hal_tdm_output_unset_mirror(hal_tdm_output *output); -/* tdm_func_voutput */ -hal_tdm_error hal_tdm_voutput_destroy(hal_tdm_voutput *voutput); -hal_tdm_error hal_tdm_voutput_set_available_mode(hal_tdm_voutput *voutput, const hal_tdm_output_mode *modes, int count); -hal_tdm_error hal_tdm_voutput_set_physical_size(hal_tdm_voutput *voutput, unsigned int mmwidth, unsigned int mmheight); -hal_tdm_error hal_tdm_voutput_connect(hal_tdm_voutput *voutput); -hal_tdm_error hal_tdm_voutput_disconnect(hal_tdm_voutput *voutput); +/* voutput_funcs */ +hal_tdm_error hal_tdm_voutput_destroy(hal_tdm_voutput *voutput); +hal_tdm_error hal_tdm_voutput_set_available_mode(hal_tdm_voutput *voutput, const hal_tdm_output_mode *modes, int count); +hal_tdm_error hal_tdm_voutput_set_physical_size(hal_tdm_voutput *voutput, unsigned int mmwidth, unsigned int mmheight); +hal_tdm_error hal_tdm_voutput_connect(hal_tdm_voutput *voutput); +hal_tdm_error hal_tdm_voutput_disconnect(hal_tdm_voutput *voutput); hal_tdm_output *hal_tdm_voutput_get_output(hal_tdm_voutput *voutput, hal_tdm_error *error); -hal_tdm_error hal_tdm_voutput_set_commit_func(hal_tdm_voutput *voutput, hal_tdm_voutput_commit_handler commit_func); -hal_tdm_error hal_tdm_voutput_commit_done(hal_tdm_voutput *voutput); -hal_tdm_error hal_tdm_voutput_set_target_buffer_queue_flag(hal_tdm_voutput *voutput, int flags); +hal_tdm_error hal_tdm_voutput_set_commit_func(hal_tdm_voutput *voutput, hal_tdm_voutput_commit_handler commit_func); +hal_tdm_error hal_tdm_voutput_commit_done(hal_tdm_voutput *voutput); +hal_tdm_error hal_tdm_voutput_set_target_buffer_queue_flag(hal_tdm_voutput *voutput, int flags); -/* tdm_func_hwc */ +/* hwc_funcs */ hal_tdm_hwc_window *hal_tdm_hwc_create_window(hal_tdm_hwc *hwc, hal_tdm_error *error); -hal_tdm_error hal_tdm_hwc_get_video_supported_formats(hal_tdm_hwc *hwc, const tbm_format **formats, int *count); -hal_tdm_error hal_tdm_hwc_get_video_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count); -hal_tdm_error hal_tdm_hwc_get_capabilities(hal_tdm_hwc *hwc, hal_tdm_hwc_capability *capabilities); -hal_tdm_error hal_tdm_hwc_get_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count); +hal_tdm_error hal_tdm_hwc_get_video_supported_formats(hal_tdm_hwc *hwc, const tbm_format **formats, int *count); +hal_tdm_error hal_tdm_hwc_get_video_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count); +hal_tdm_error hal_tdm_hwc_get_capabilities(hal_tdm_hwc *hwc, hal_tdm_hwc_capability *capabilities); +hal_tdm_error hal_tdm_hwc_get_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count); tbm_surface_queue_h hal_tdm_hwc_get_client_target_buffer_queue(hal_tdm_hwc *hwc, hal_tdm_error *error); -hal_tdm_error hal_tdm_hwc_set_client_target_buffer(hal_tdm_hwc *hwc, tbm_surface_h target_buffer, hal_tdm_region damage); -hal_tdm_error hal_tdm_hwc_set_client_target_acquire_fence(hal_tdm_hwc *hwc, int acquire_fence); -hal_tdm_error hal_tdm_hwc_validate(hal_tdm_hwc *hwc, hal_tdm_hwc_window **composited_wnds, uint32_t num_wnds, uint32_t *num_types); -hal_tdm_error hal_tdm_hwc_get_changed_composition_types(hal_tdm_hwc *hwc, uint32_t *num_elements, hal_tdm_hwc_window **hwc_window, hal_tdm_hwc_window_composition *composition_types); -hal_tdm_error hal_tdm_hwc_accept_validation(hal_tdm_hwc *hwc); -hal_tdm_error hal_tdm_hwc_commit(hal_tdm_hwc *hwc, int sync, void *user_data); -hal_tdm_error hal_tdm_hwc_set_commit_handler(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_handler func); -hal_tdm_error hal_tdm_hwc_get_commit_fence(hal_tdm_hwc *hwc, int *commit_fence); -hal_tdm_error hal_tdm_hwc_get_release_fences(hal_tdm_hwc *hwc, uint32_t *num_elements, hal_tdm_hwc_window **hwc_windows, int *release_fences); -hal_tdm_error hal_tdm_hwc_set_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value value); -hal_tdm_error hal_tdm_hwc_get_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value *value); -hal_tdm_error hal_tdm_hwc_get_commit_interval(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_interval *interval); +hal_tdm_error hal_tdm_hwc_set_client_target_buffer(hal_tdm_hwc *hwc, tbm_surface_h target_buffer, hal_tdm_region damage); +hal_tdm_error hal_tdm_hwc_set_client_target_acquire_fence(hal_tdm_hwc *hwc, int acquire_fence); +hal_tdm_error hal_tdm_hwc_validate(hal_tdm_hwc *hwc, hal_tdm_hwc_window **composited_wnds, uint32_t num_wnds, uint32_t *num_types); +hal_tdm_error hal_tdm_hwc_get_changed_composition_types(hal_tdm_hwc *hwc, uint32_t *num_elements, hal_tdm_hwc_window **hwc_window, hal_tdm_hwc_window_composition *composition_types); +hal_tdm_error hal_tdm_hwc_accept_validation(hal_tdm_hwc *hwc); +hal_tdm_error hal_tdm_hwc_commit(hal_tdm_hwc *hwc, int sync, void *user_data); +hal_tdm_error hal_tdm_hwc_set_commit_handler(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_handler func); +hal_tdm_error hal_tdm_hwc_get_commit_fence(hal_tdm_hwc *hwc, int *commit_fence); +hal_tdm_error hal_tdm_hwc_get_release_fences(hal_tdm_hwc *hwc, uint32_t *num_elements, hal_tdm_hwc_window **hwc_windows, int *release_fences); +hal_tdm_error hal_tdm_hwc_set_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value value); +hal_tdm_error hal_tdm_hwc_get_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value *value); +hal_tdm_error hal_tdm_hwc_get_commit_interval(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_interval *interval); -/* tdm_func_hwc_window */ -void hal_tdm_hwc_window_destroy(hal_tdm_hwc_window *hwc_window); +/* hwc_window_funcs */ +void hal_tdm_hwc_window_destroy(hal_tdm_hwc_window *hwc_window); tbm_surface_queue_h hal_tdm_hwc_window_acquire_buffer_queue(hal_tdm_hwc_window *hwc_window, hal_tdm_error *error); -void hal_tdm_hwc_window_release_buffer_queue(hal_tdm_hwc_window *hwc_window, tbm_surface_queue_h queue); -hal_tdm_error hal_tdm_hwc_window_set_composition_type(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_composition composition_type); -hal_tdm_error hal_tdm_hwc_window_set_buffer_damage(hal_tdm_hwc_window *hwc_window, hal_tdm_region damage); -hal_tdm_error hal_tdm_hwc_window_set_info(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_info *info); -hal_tdm_error hal_tdm_hwc_window_set_buffer(hal_tdm_hwc_window *hwc_window, tbm_surface_h buffer); -hal_tdm_error hal_tdm_hwc_window_set_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value value); -hal_tdm_error hal_tdm_hwc_window_get_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value *value); -hal_tdm_error hal_tdm_hwc_window_get_constraints(hal_tdm_hwc_window *hwc_window, int *constraints); -hal_tdm_error hal_tdm_hwc_window_set_name(hal_tdm_hwc_window *hwc_window, const char *name); -hal_tdm_error hal_tdm_hwc_window_set_cursor_image(hal_tdm_hwc_window *hwc_window, int width, int height, int stride, void *ptr); -hal_tdm_error hal_tdm_hwc_window_set_acquire_fence(hal_tdm_hwc_window *hwc_window, int acquire_fence); +void hal_tdm_hwc_window_release_buffer_queue(hal_tdm_hwc_window *hwc_window, tbm_surface_queue_h queue); +hal_tdm_error hal_tdm_hwc_window_set_composition_type(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_composition composition_type); +hal_tdm_error hal_tdm_hwc_window_set_buffer_damage(hal_tdm_hwc_window *hwc_window, hal_tdm_region damage); +hal_tdm_error hal_tdm_hwc_window_set_info(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_info *info); +hal_tdm_error hal_tdm_hwc_window_set_buffer(hal_tdm_hwc_window *hwc_window, tbm_surface_h buffer); +hal_tdm_error hal_tdm_hwc_window_set_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value value); +hal_tdm_error hal_tdm_hwc_window_get_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value *value); +hal_tdm_error hal_tdm_hwc_window_get_constraints(hal_tdm_hwc_window *hwc_window, int *constraints); +hal_tdm_error hal_tdm_hwc_window_set_name(hal_tdm_hwc_window *hwc_window, const char *name); +hal_tdm_error hal_tdm_hwc_window_set_cursor_image(hal_tdm_hwc_window *hwc_window, int width, int height, int stride, void *ptr); +hal_tdm_error hal_tdm_hwc_window_set_acquire_fence(hal_tdm_hwc_window *hwc_window, int acquire_fence); -/* tdm_func_pp */ -void hal_tdm_pp_destroy(hal_tdm_pp *pp); +/* pp_funcs */ +void hal_tdm_pp_destroy(hal_tdm_pp *pp); hal_tdm_error hal_tdm_pp_set_info(hal_tdm_pp *pp, hal_tdm_info_pp *info); hal_tdm_error hal_tdm_pp_attach(hal_tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst); hal_tdm_error hal_tdm_pp_commit(hal_tdm_pp *pp); hal_tdm_error hal_tdm_pp_set_done_handler(hal_tdm_pp *pp, hal_tdm_pp_done_handler func, void *user_data); -/* tdm_func_capture */ -void hal_tdm_capture_destroy(hal_tdm_capture *capture); +/* capture_funcs */ +void hal_tdm_capture_destroy(hal_tdm_capture *capture); hal_tdm_error hal_tdm_capture_set_info(hal_tdm_capture *capture, hal_tdm_info_capture *info); hal_tdm_error hal_tdm_capture_attach(hal_tdm_capture *capture, tbm_surface_h buffer); hal_tdm_error hal_tdm_capture_commit(hal_tdm_capture *capture); diff --git a/src/hal-api-tdm.c b/src/hal-api-tdm.c index 05ec556..9f3fc6d 100644 --- a/src/hal-api-tdm.c +++ b/src/hal-api-tdm.c @@ -38,9 +38,9 @@ #include #include -#include -#include "hal-tdm-interface.h" +#include #include "hal-tdm.h" +#include "hal-tdm-interface.h" #include "common.h" #if defined(__GNUC__) && __GNUC__ >= 4 @@ -58,767 +58,914 @@ #define ARRAY_SIZE(name) (sizeof(name)/sizeof(name[0])) #define DISPLAY_FUNC_ENTRY(__func__) \ - hal_tdm_func_display *func_display; \ - if (!g_tdm_funcs) return HAL_TDM_ERROR_NO_MODULE; \ - if (!g_tdm_funcs->tdm_func_display) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \ - func_display = g_tdm_funcs->tdm_func_display; \ - if (!func_display->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED; + hal_tdm_display_funcs *display_funcs; \ + if (!display) return HAL_TDM_ERROR_INVALID_PARAMETER; \ + if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \ + if (!g_hal_tdm_backend_data->display_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \ + display_funcs = g_hal_tdm_backend_data->display_funcs; \ + if (!display_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED; #define DISPLAY_FUNC_ENTRY_NULL(__func__) \ - hal_tdm_func_display *func_display; \ - if (!g_tdm_funcs) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \ - if (!g_tdm_funcs->tdm_func_display) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \ - func_display = g_tdm_funcs->tdm_func_display; \ - if (!func_display->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; }; + hal_tdm_display_funcs *display_funcs; \ + if (!display) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \ + if (!g_hal_tdm_backend_data) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \ + if (!g_hal_tdm_backend_data->display_funcs) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \ + display_funcs = g_hal_tdm_backend_data->display_funcs; \ + if (!display_funcs->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; }; #define OUTPUT_FUNC_ENTRY(__func__) \ - hal_tdm_func_output *func_output; \ - if (!g_tdm_funcs) return HAL_TDM_ERROR_NO_MODULE; \ - if (!g_tdm_funcs->tdm_func_output) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \ - func_output = g_tdm_funcs->tdm_func_output; \ - if (!func_output->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED; + hal_tdm_output_funcs *output_funcs; \ + if (!output) return HAL_TDM_ERROR_INVALID_PARAMETER; \ + if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \ + if (!g_hal_tdm_backend_data->output_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \ + output_funcs = g_hal_tdm_backend_data->output_funcs; \ + if (!output_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED; #define OUTPUT_FUNC_ENTRY_NULL(__func__) \ - hal_tdm_func_output *func_output; \ - if (!g_tdm_funcs) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \ - if (!g_tdm_funcs->tdm_func_output) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \ - func_output = g_tdm_funcs->tdm_func_output; \ - if (!func_output->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; }; + hal_tdm_output_funcs *output_funcs; \ + if (!output) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \ + if (!g_hal_tdm_backend_data) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \ + if (!g_hal_tdm_backend_data->output_funcs) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \ + output_funcs = g_hal_tdm_backend_data->output_funcs; \ + if (!output_funcs->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; }; #define VOUTPUT_FUNC_ENTRY(__func__) \ - hal_tdm_func_voutput *func_voutput; \ - if (!g_tdm_funcs) return HAL_TDM_ERROR_NO_MODULE; \ - if (!g_tdm_funcs->tdm_func_voutput) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \ - func_voutput = g_tdm_funcs->tdm_func_voutput; \ - if (!func_voutput->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED; + hal_tdm_voutput_funcs *voutput_funcs; \ + if (!voutput) return HAL_TDM_ERROR_INVALID_PARAMETER; \ + if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \ + if (!g_hal_tdm_backend_data->voutput_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \ + voutput_funcs = g_hal_tdm_backend_data->voutput_funcs; \ + if (!voutput_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED; #define VOUTPUT_FUNC_ENTRY_NULL(__func__) \ - hal_tdm_func_voutput *func_voutput; \ - if (!g_tdm_funcs) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \ - if (!g_tdm_funcs->tdm_func_voutput) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \ - func_voutput = g_tdm_funcs->tdm_func_voutput; \ - if (!func_voutput->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; }; + hal_tdm_voutput_funcs *voutput_funcs; \ + if (!voutput) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \ + if (!g_hal_tdm_backend_data) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \ + if (!g_hal_tdm_backend_data->voutput_funcs) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \ + voutput_funcs = g_hal_tdm_backend_data->voutput_funcs; \ + if (!voutput_funcs->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; }; #define HWC_FUNC_ENTRY(__func__) \ - hal_tdm_func_hwc *func_hwc; \ - if (!g_tdm_funcs) return HAL_TDM_ERROR_NO_MODULE; \ - if (!g_tdm_funcs->tdm_func_hwc) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \ - func_hwc = g_tdm_funcs->tdm_func_hwc; \ - if (!func_hwc->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED; + hal_tdm_hwc_funcs *hwc_funcs; \ + if (!hwc) return HAL_TDM_ERROR_INVALID_PARAMETER; \ + if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \ + if (!g_hal_tdm_backend_data->hwc_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \ + hwc_funcs = g_hal_tdm_backend_data->hwc_funcs; \ + if (!hwc_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED; #define HWC_FUNC_ENTRY_NULL(__func__) \ - hal_tdm_func_hwc *func_hwc; \ - if (!g_tdm_funcs) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \ - if (!g_tdm_funcs->tdm_func_hwc) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \ - func_hwc = g_tdm_funcs->tdm_func_hwc; \ - if (!func_hwc->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; }; + hal_tdm_hwc_funcs *hwc_funcs; \ + if (!hwc) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \ + if (!g_hal_tdm_backend_data) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \ + if (!g_hal_tdm_backend_data->hwc_funcs) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \ + hwc_funcs = g_hal_tdm_backend_data->hwc_funcs; \ + if (!hwc_funcs->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; }; #define HWC_WINDOW_FUNC_ENTRY(__func__) \ - hal_tdm_func_hwc_window *func_hwc_window; \ - if (!g_tdm_funcs) return HAL_TDM_ERROR_NO_MODULE; \ - if (!g_tdm_funcs->tdm_func_hwc_window) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \ - func_hwc_window = g_tdm_funcs->tdm_func_hwc_window; \ - if (!func_hwc_window->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED; + hal_tdm_hwc_window_funcs *hwc_window_funcs; \ + if (!hwc_window) return HAL_TDM_ERROR_INVALID_PARAMETER; \ + if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \ + if (!g_hal_tdm_backend_data->hwc_window_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \ + hwc_window_funcs = g_hal_tdm_backend_data->hwc_window_funcs; \ + if (!hwc_window_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED; #define HWC_WINDOW_FUNC_ENTRY_NULL(__func__) \ - hal_tdm_func_hwc_window *func_hwc_window; \ - if (!g_tdm_funcs) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \ - if (!g_tdm_funcs->tdm_func_hwc_window) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \ - func_hwc_window = g_tdm_funcs->tdm_func_hwc_window; \ - if (!func_hwc_window->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; }; + hal_tdm_hwc_window_funcs *hwc_window_funcs; \ + if (!hwc_window) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \ + if (!g_hal_tdm_backend_data) { if (*error) *error = HAL_TDM_ERROR_NO_MODULE; return NULL; } \ + if (!g_hal_tdm_backend_data->hwc_window_funcs) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; } \ + hwc_window_funcs = g_hal_tdm_backend_data->hwc_window_funcs; \ + if (!hwc_window_funcs->__func__) { if (*error) *error = HAL_TDM_ERROR_NOT_IMPLEMENTED; return NULL; }; #define HWC_WINDOW_FUNC_ENTRY_VOID(__func__) \ - hal_tdm_func_hwc_window *func_hwc_window; \ - if (!g_tdm_funcs) return; \ - if (!g_tdm_funcs->tdm_func_hwc_window) return; \ - func_hwc_window = g_tdm_funcs->tdm_func_hwc_window; \ - if (!func_hwc_window->__func__) return; + hal_tdm_hwc_window_funcs *hwc_window_funcs; \ + if (!hwc_window) return; \ + if (!g_hal_tdm_backend_data) return; \ + if (!g_hal_tdm_backend_data->hwc_window_funcs) return; \ + hwc_window_funcs = g_hal_tdm_backend_data->hwc_window_funcs; \ + if (!hwc_window_funcs->__func__) return; #define PP_FUNC_ENTRY(__func__) \ - hal_tdm_func_pp *func_pp; \ - if (!g_tdm_funcs) return HAL_TDM_ERROR_NO_MODULE; \ - if (!g_tdm_funcs->tdm_func_pp) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \ - func_pp = g_tdm_funcs->tdm_func_pp; \ - if (!func_pp->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED; + hal_tdm_pp_funcs *pp_funcs; \ + if (!pp) return HAL_TDM_ERROR_INVALID_PARAMETER; \ + if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \ + if (!g_hal_tdm_backend_data->pp_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \ + pp_funcs = g_hal_tdm_backend_data->pp_funcs; \ + if (!pp_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED; #define PP_FUNC_ENTRY_VOID(__func__) \ - hal_tdm_func_pp *func_pp; \ - if (!g_tdm_funcs) return; \ - if (!g_tdm_funcs->tdm_func_pp) return; \ - func_pp = g_tdm_funcs->tdm_func_pp; \ - if (!func_pp->__func__) return; + hal_tdm_pp_funcs *pp_funcs; \ + if (!pp) return; \ + if (!g_hal_tdm_backend_data) return; \ + if (!g_hal_tdm_backend_data->pp_funcs) return; \ + pp_funcs = g_hal_tdm_backend_data->pp_funcs; \ + if (!pp_funcs->__func__) return; #define CAPTURE_FUNC_ENTRY(__func__) \ - hal_tdm_func_capture *func_capture; \ - if (!g_tdm_funcs) return HAL_TDM_ERROR_NO_MODULE; \ - if (!g_tdm_funcs->tdm_func_capture) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \ - func_capture = g_tdm_funcs->tdm_func_capture; \ - if (!func_capture->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED; + hal_tdm_capture_funcs *capture_funcs; \ + if (!capture) return HAL_TDM_ERROR_INVALID_PARAMETER; \ + if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_NO_MODULE; \ + if (!g_hal_tdm_backend_data->capture_funcs) return HAL_TDM_ERROR_NOT_IMPLEMENTED; \ + capture_funcs = g_hal_tdm_backend_data->capture_funcs; \ + if (!capture_funcs->__func__) return HAL_TDM_ERROR_NOT_IMPLEMENTED; #define CAPTURE_FUNC_ENTRY_VOID(__func__) \ - hal_tdm_func_capture *func_capture; \ - if (!g_tdm_funcs) return; \ - if (!g_tdm_funcs->tdm_func_capture) return; \ - func_capture = g_tdm_funcs->tdm_func_capture; \ - if (!func_capture->__func__) return; + hal_tdm_capture_funcs *capture_funcs; \ + if (!capture) return; \ + if (!g_hal_tdm_backend_data) return; \ + if (!g_hal_tdm_backend_data->capture_funcs) return; \ + capture_funcs = g_hal_tdm_backend_data->capture_funcs; \ + if (!capture_funcs->__func__) return; -static hal_backend_tdm_funcs *g_tdm_funcs = NULL; +static hal_tdm_backend_data *g_hal_tdm_backend_data = NULL; -EXTERN hal_tdm_error -hal_tdm_get_backend(hal_tdm_display *dpy) +EXTERN hal_tdm_backend * +hal_tdm_get_backend(hal_tdm_error *error) { + hal_tdm_backend_data *backend_data; int ret; - if (!dpy) - return HAL_TDM_ERROR_INVALID_PARAMETER; - - if (g_tdm_funcs) - return HAL_TDM_ERROR_BAD_REQUEST; - - g_tdm_funcs = calloc(1, sizeof(hal_backend_tdm_funcs)); - if (!g_tdm_funcs) - return HAL_TDM_ERROR_OUT_OF_MEMORY; + if (g_hal_tdm_backend_data) { + if (error) + *error = HAL_TDM_ERROR_BAD_REQUEST; + return NULL; + } - ret = hal_common_get_backend(HAL_MODULE_TDM, (void **)&dpy); + ret = hal_common_get_backend(HAL_MODULE_TDM, (void **)&backend_data); if (ret < 0) { _E("Failed to get backend\n"); - free(g_tdm_funcs); - g_tdm_funcs = NULL; - return HAL_TDM_ERROR_NO_MODULE; + if (error) + *error = HAL_TDM_ERROR_NO_MODULE; + return NULL; } + g_hal_tdm_backend_data = (hal_tdm_backend_data *)backend_data; + + if (error) + *error = HAL_TDM_ERROR_NONE; + _I("hal_tdm_get_backend"); - return HAL_TDM_ERROR_NONE; + return (hal_tdm_backend *)backend_data; } -EXTERN void -hal_tdm_put_backend(void) +EXTERN hal_tdm_error +hal_tdm_put_backend(hal_tdm_backend *backend) { - if (!g_tdm_funcs) - return; + hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend; + int ret; - hal_common_put_backend(HAL_MODULE_TDM, NULL); - free(g_tdm_funcs); - g_tdm_funcs = NULL; + if (!backend_data && g_hal_tdm_backend_data != backend) { + _E("no backend_data\n"); + return HAL_TDM_ERROR_NO_MODULE; + } + + ret = hal_common_put_backend(HAL_MODULE_TDM, NULL); + if (ret < 0) { + _E("Failed to put backend\n"); + return HAL_TDM_ERROR_OPERATION_FAILED; + } + + g_hal_tdm_backend_data = NULL; _I("hal_tdm_put_backend"); + + return HAL_TDM_ERROR_NONE; +} + +EXTERN hal_tdm_display * +hal_tdm_backend_get_display(hal_tdm_backend *backend, hal_tdm_error *error) +{ + hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend; + hal_tdm_display *display; + + if (!backend_data && g_hal_tdm_backend_data != backend) { + _E("no backend_data\n"); + if (error) + *error = HAL_TDM_ERROR_NO_MODULE; + return NULL; + } + + display = backend_data->display; + if (!display) { + _E("no display\n"); + if (error) + *error = HAL_TDM_ERROR_OPERATION_FAILED; + return NULL; + } + + if (error) + *error = HAL_TDM_ERROR_NONE; + + return display; } -/* tdm_func_display */ +EXTERN hal_tdm_event_source ** +hal_tdm_backend_data_get_event_sources(hal_tdm_backend_data *backend_data, int num_event_sources, hal_tdm_error *error) +{ + hal_tdm_event_source **event_source; + + if (!backend_data && g_hal_tdm_backend_data != backend_data) { + _E("no backend_data\n"); + if (error) + *error = HAL_TDM_ERROR_NO_MODULE; + return NULL; + } + + event_source = backend_data->event_sources; + + return backend_data->event_sources; +} + +/* tdm_display_funcs */ EXTERN hal_tdm_error -hal_tdm_display_get_capability(hal_tdm_backend_data *bdata, hal_tdm_caps_display *caps) +hal_tdm_display_get_capability(hal_tdm_display *display, hal_tdm_caps_display *caps) { DISPLAY_FUNC_ENTRY(display_get_capability); - return func_display->display_get_capability(bdata, caps); + + return display_funcs->display_get_capability(display, caps); } EXTERN hal_tdm_error -hal_tdm_display_get_pp_capability(hal_tdm_backend_data *bdata, hal_tdm_caps_pp *caps) +hal_tdm_display_get_pp_capability(hal_tdm_display *display, hal_tdm_caps_pp *caps) { DISPLAY_FUNC_ENTRY(display_get_pp_capability); - return func_display->display_get_pp_capability(bdata, caps); + + return display_funcs->display_get_pp_capability(display, caps); } EXTERN hal_tdm_error -hal_tdm_display_get_capture_capability(hal_tdm_backend_data *bdata, hal_tdm_caps_capture *caps) +hal_tdm_display_get_capture_capability(hal_tdm_display *display, hal_tdm_caps_capture *caps) { DISPLAY_FUNC_ENTRY(display_get_capture_capability); - return func_display->display_get_capture_capability(bdata, caps); + + return display_funcs->display_get_capture_capability(display, caps); } EXTERN hal_tdm_output ** -hal_tdm_display_get_outputs(hal_tdm_backend_data *bdata, int *count, hal_tdm_error *error) +hal_tdm_display_get_outputs(hal_tdm_display *display, int *count, hal_tdm_error *error) { DISPLAY_FUNC_ENTRY_NULL(display_get_outputs); - return func_display->display_get_outputs(bdata, count, error); + + return display_funcs->display_get_outputs(display, count, error); } EXTERN hal_tdm_error -hal_tdm_display_get_fd(hal_tdm_backend_data *bdata, int *fd) +hal_tdm_display_get_fd(hal_tdm_display *display, int *fd) { DISPLAY_FUNC_ENTRY(display_get_fd); - return func_display->display_get_fd(bdata, fd); + + return display_funcs->display_get_fd(display, fd); } EXTERN hal_tdm_error -hal_tdm_display_handle_events(hal_tdm_backend_data *bdata) +hal_tdm_display_handle_events(hal_tdm_display *display) { DISPLAY_FUNC_ENTRY(display_handle_events); - return func_display->display_handle_events(bdata); + + return display_funcs->display_handle_events(display); } EXTERN hal_tdm_pp * -hal_tdm_display_create_pp(hal_tdm_backend_data *bdata, hal_tdm_error *error) +hal_tdm_display_create_pp(hal_tdm_display *display, hal_tdm_error *error) { DISPLAY_FUNC_ENTRY_NULL(display_create_pp); - return func_display->display_create_pp(bdata, error); + + return display_funcs->display_create_pp(display, error); } EXTERN hal_tdm_voutput * -hal_tdm_display_voutput_create(hal_tdm_backend_data *bdata, const char *name, hal_tdm_error *error) +hal_tdm_display_voutput_create(hal_tdm_display *display, const char *name, hal_tdm_error *error) { DISPLAY_FUNC_ENTRY_NULL(display_voutput_create); - return func_display->display_voutput_create(bdata, name, error); + + return display_funcs->display_voutput_create(display, name, error); } -/* tdm_func_output */ +/* output_funcs */ EXTERN hal_tdm_error hal_tdm_output_get_capability(hal_tdm_output *output, hal_tdm_caps_output *caps) { OUTPUT_FUNC_ENTRY(output_get_capability); - return func_output->output_get_capability(output, caps); + + return output_funcs->output_get_capability(output, caps); } EXTERN hal_tdm_error hal_tdm_output_set_property(hal_tdm_output *output, unsigned int id, hal_tdm_value value) { OUTPUT_FUNC_ENTRY(output_set_property); - return func_output->output_set_property(output, id, value); + + return output_funcs->output_set_property(output, id, value); } EXTERN hal_tdm_error hal_tdm_output_get_property(hal_tdm_output *output, unsigned int id, hal_tdm_value *value) { OUTPUT_FUNC_ENTRY(output_get_property); - return func_output->output_get_property(output, id, value); + + return output_funcs->output_get_property(output, id, value); } EXTERN hal_tdm_error hal_tdm_output_wait_vblank(hal_tdm_output *output, int interval, int sync, void *user_data) { OUTPUT_FUNC_ENTRY(output_wait_vblank); - return func_output->output_wait_vblank(output, interval, sync, user_data); + + return output_funcs->output_wait_vblank(output, interval, sync, user_data); } EXTERN hal_tdm_error hal_tdm_output_set_vblank_handler(hal_tdm_output *output, hal_tdm_output_vblank_handler func) { OUTPUT_FUNC_ENTRY(output_set_vblank_handler); - return func_output->output_set_vblank_handler(output, func); + + return output_funcs->output_set_vblank_handler(output, func); } EXTERN hal_tdm_error hal_tdm_output_commit(hal_tdm_output *output, int sync, void *user_data) { OUTPUT_FUNC_ENTRY(output_commit); - return func_output->output_commit(output, sync, user_data); + + return output_funcs->output_commit(output, sync, user_data); } EXTERN hal_tdm_error hal_tdm_output_set_commit_handler(hal_tdm_output *output, hal_tdm_output_commit_handler func) { OUTPUT_FUNC_ENTRY(output_set_commit_handler); - return func_output->output_set_commit_handler(output, func); + + return output_funcs->output_set_commit_handler(output, func); } EXTERN hal_tdm_error hal_tdm_output_set_dpms(hal_tdm_output *output, hal_tdm_output_dpms dpms_value) { OUTPUT_FUNC_ENTRY(output_set_dpms); - return func_output->output_set_dpms(output, dpms_value); + + return output_funcs->output_set_dpms(output, dpms_value); } EXTERN hal_tdm_error hal_tdm_output_get_dpms(hal_tdm_output *output, hal_tdm_output_dpms *dpms_value) { OUTPUT_FUNC_ENTRY(output_get_dpms); - return func_output->output_get_dpms(output, dpms_value); + + return output_funcs->output_get_dpms(output, dpms_value); } EXTERN hal_tdm_error hal_tdm_output_set_mode(hal_tdm_output *output, const hal_tdm_output_mode *mode) { OUTPUT_FUNC_ENTRY(output_set_mode); - return func_output->output_set_mode(output, mode); + + return output_funcs->output_set_mode(output, mode); } EXTERN hal_tdm_error hal_tdm_output_get_mode(hal_tdm_output *output, const hal_tdm_output_mode **mode) { OUTPUT_FUNC_ENTRY(output_get_mode); - return func_output->output_get_mode(output, mode); + + return output_funcs->output_get_mode(output, mode); } EXTERN hal_tdm_capture * hal_tdm_output_create_capture(hal_tdm_output *output, hal_tdm_error *error) { OUTPUT_FUNC_ENTRY_NULL(output_create_capture); - return func_output->output_create_capture(output, error); + + return output_funcs->output_create_capture(output, error); } EXTERN hal_tdm_error hal_tdm_output_set_status_handler(hal_tdm_output *output, hal_tdm_output_status_handler func, void *user_data) { OUTPUT_FUNC_ENTRY(output_set_status_handler); - return func_output->output_set_status_handler(output, func, user_data); + + return output_funcs->output_set_status_handler(output, func, user_data); } EXTERN hal_tdm_error hal_tdm_output_set_dpms_handler(hal_tdm_output *output, hal_tdm_output_dpms_handler func, void *user_data) { OUTPUT_FUNC_ENTRY(output_set_dpms_handler); - return func_output->output_set_dpms_handler(output, func, user_data); + + return output_funcs->output_set_dpms_handler(output, func, user_data); } EXTERN hal_tdm_error hal_tdm_output_set_dpms_async(hal_tdm_output *output, hal_tdm_output_dpms dpms_value, int *sync) { OUTPUT_FUNC_ENTRY(output_set_dpms_async); - return func_output->output_set_dpms_async(output, dpms_value, sync); + + return output_funcs->output_set_dpms_async(output, dpms_value, sync); } EXTERN hal_tdm_hwc * hal_tdm_output_get_hwc(hal_tdm_output *output, hal_tdm_error *error) { OUTPUT_FUNC_ENTRY_NULL(output_get_hwc); - return func_output->output_get_hwc(output, error); + + return output_funcs->output_get_hwc(output, error); } EXTERN hal_tdm_error hal_tdm_output_set_mirror(hal_tdm_output *output, hal_tdm_output *src_output, hal_tdm_transform transform) { OUTPUT_FUNC_ENTRY(output_set_mirror); - return func_output->output_set_mirror(output, src_output, transform); + + return output_funcs->output_set_mirror(output, src_output, transform); } EXTERN hal_tdm_error hal_tdm_output_unset_mirror(hal_tdm_output *output) { OUTPUT_FUNC_ENTRY(output_unset_mirror); - return func_output->output_unset_mirror(output); + + return output_funcs->output_unset_mirror(output); } -/* tdm_func_voutput */ +/* voutput_funcs */ EXTERN hal_tdm_error hal_tdm_voutput_destroy(hal_tdm_voutput *voutput) { VOUTPUT_FUNC_ENTRY(voutput_destroy); - return func_voutput->voutput_destroy(voutput); + + return voutput_funcs->voutput_destroy(voutput); } EXTERN hal_tdm_error hal_tdm_voutput_set_available_mode(hal_tdm_voutput *voutput, const hal_tdm_output_mode *modes, int count) { VOUTPUT_FUNC_ENTRY(voutput_set_available_mode); - return func_voutput->voutput_set_available_mode(voutput, modes, count); + + return voutput_funcs->voutput_set_available_mode(voutput, modes, count); } EXTERN hal_tdm_error hal_tdm_voutput_set_physical_size(hal_tdm_voutput *voutput, unsigned int mmwidth, unsigned int mmheight) { VOUTPUT_FUNC_ENTRY(voutput_set_physical_size); - return func_voutput->voutput_set_physical_size(voutput, mmwidth, mmheight); + + return voutput_funcs->voutput_set_physical_size(voutput, mmwidth, mmheight); } EXTERN hal_tdm_error hal_tdm_voutput_connect(hal_tdm_voutput *voutput) { VOUTPUT_FUNC_ENTRY(voutput_connect); - return func_voutput->voutput_connect(voutput); + + return voutput_funcs->voutput_connect(voutput); } EXTERN hal_tdm_error hal_tdm_voutput_disconnect(hal_tdm_voutput *voutput) { VOUTPUT_FUNC_ENTRY(voutput_disconnect); - return func_voutput->voutput_disconnect(voutput); + + return voutput_funcs->voutput_disconnect(voutput); } EXTERN hal_tdm_output * hal_tdm_voutput_get_output(hal_tdm_voutput *voutput, hal_tdm_error *error) { VOUTPUT_FUNC_ENTRY_NULL(voutput_get_output); - return func_voutput->voutput_get_output(voutput, error); + + return voutput_funcs->voutput_get_output(voutput, error); } EXTERN hal_tdm_error hal_tdm_voutput_set_commit_func(hal_tdm_voutput *voutput, hal_tdm_voutput_commit_handler commit_func) { VOUTPUT_FUNC_ENTRY(voutput_set_commit_func); - return func_voutput->voutput_set_commit_func(voutput, commit_func); + + return voutput_funcs->voutput_set_commit_func(voutput, commit_func); } EXTERN hal_tdm_error hal_tdm_voutput_commit_done(hal_tdm_voutput *voutput) { VOUTPUT_FUNC_ENTRY(voutput_commit_done); - return func_voutput->voutput_commit_done(voutput); + + return voutput_funcs->voutput_commit_done(voutput); } EXTERN hal_tdm_error hal_tdm_voutput_set_target_buffer_queue_flag(hal_tdm_voutput *voutput, int flags) { VOUTPUT_FUNC_ENTRY(voutput_set_target_buffer_queue_flag); - return func_voutput->voutput_set_target_buffer_queue_flag(voutput, flags); + + return voutput_funcs->voutput_set_target_buffer_queue_flag(voutput, flags); } -/* tdm_func_hwc */ +/* hwc_funcs */ EXTERN hal_tdm_hwc_window * hal_tdm_hwc_create_window(hal_tdm_hwc *hwc, hal_tdm_error *error) { HWC_FUNC_ENTRY_NULL(hwc_create_window); - return func_hwc->hwc_create_window(hwc, error); + + return hwc_funcs->hwc_create_window(hwc, error); } EXTERN hal_tdm_error hal_tdm_hwc_get_video_supported_formats(hal_tdm_hwc *hwc, const tbm_format **formats, int *count) { HWC_FUNC_ENTRY(hwc_get_video_supported_formats); - return func_hwc->hwc_get_video_supported_formats(hwc, formats, count); + + return hwc_funcs->hwc_get_video_supported_formats(hwc, formats, count); } EXTERN hal_tdm_error hal_tdm_hwc_get_video_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count) { HWC_FUNC_ENTRY(hwc_get_video_available_properties); - return func_hwc->hwc_get_video_available_properties(hwc, props, count); + + return hwc_funcs->hwc_get_video_available_properties(hwc, props, count); } EXTERN hal_tdm_error hal_tdm_hwc_get_capabilities(hal_tdm_hwc *hwc, hal_tdm_hwc_capability *capabilities) { HWC_FUNC_ENTRY(hwc_get_capabilities); - return func_hwc->hwc_get_capabilities(hwc, capabilities); + + return hwc_funcs->hwc_get_capabilities(hwc, capabilities); } EXTERN hal_tdm_error hal_tdm_hwc_get_available_properties(hal_tdm_hwc *hwc, const hal_tdm_prop **props, int *count) { HWC_FUNC_ENTRY(hwc_get_available_properties); - return func_hwc->hwc_get_available_properties(hwc, props, count); + + return hwc_funcs->hwc_get_available_properties(hwc, props, count); } EXTERN tbm_surface_queue_h hal_tdm_hwc_get_client_target_buffer_queue(hal_tdm_hwc *hwc, hal_tdm_error *error) { HWC_FUNC_ENTRY_NULL(hwc_get_client_target_buffer_queue); - return func_hwc->hwc_get_client_target_buffer_queue(hwc, error); + + return hwc_funcs->hwc_get_client_target_buffer_queue(hwc, error); } EXTERN hal_tdm_error hal_tdm_hwc_set_client_target_buffer(hal_tdm_hwc *hwc, tbm_surface_h target_buffer, hal_tdm_region damage) { HWC_FUNC_ENTRY(hwc_set_client_target_buffer); - return func_hwc->hwc_set_client_target_buffer(hwc, target_buffer, damage); + + return hwc_funcs->hwc_set_client_target_buffer(hwc, target_buffer, damage); } EXTERN hal_tdm_error hal_tdm_hwc_set_client_target_acquire_fence(hal_tdm_hwc *hwc, int acquire_fence) { HWC_FUNC_ENTRY(hwc_set_client_target_acquire_fence); - return func_hwc->hwc_set_client_target_acquire_fence(hwc, acquire_fence); + + return hwc_funcs->hwc_set_client_target_acquire_fence(hwc, acquire_fence); } EXTERN hal_tdm_error hal_tdm_hwc_validate(hal_tdm_hwc *hwc, hal_tdm_hwc_window **composited_wnds, uint32_t num_wnds, uint32_t *num_types) { HWC_FUNC_ENTRY(hwc_validate); - return func_hwc->hwc_validate(hwc, composited_wnds, num_wnds, num_types); + + return hwc_funcs->hwc_validate(hwc, composited_wnds, num_wnds, num_types); } EXTERN hal_tdm_error hal_tdm_hwc_get_changed_composition_types(hal_tdm_hwc *hwc, uint32_t *num_elements, hal_tdm_hwc_window **hwc_window, hal_tdm_hwc_window_composition *composition_types) { HWC_FUNC_ENTRY(hwc_get_changed_composition_types); - return func_hwc->hwc_get_changed_composition_types(hwc, num_elements, hwc_window, composition_types); + + return hwc_funcs->hwc_get_changed_composition_types(hwc, num_elements, hwc_window, composition_types); } EXTERN hal_tdm_error hal_tdm_hwc_accept_validation(hal_tdm_hwc *hwc) { HWC_FUNC_ENTRY(hwc_accept_validation); - return func_hwc->hwc_accept_validation(hwc); + + return hwc_funcs->hwc_accept_validation(hwc); } EXTERN hal_tdm_error hal_tdm_hwc_commit(hal_tdm_hwc *hwc, int sync, void *user_data) { HWC_FUNC_ENTRY(hwc_commit); - return func_hwc->hwc_commit(hwc, sync, user_data); + + return hwc_funcs->hwc_commit(hwc, sync, user_data); } EXTERN hal_tdm_error hal_tdm_hwc_set_commit_handler(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_handler func) { HWC_FUNC_ENTRY(hwc_set_commit_handler); - return func_hwc->hwc_set_commit_handler(hwc, func); + + return hwc_funcs->hwc_set_commit_handler(hwc, func); } EXTERN hal_tdm_error hal_tdm_hwc_get_commit_fence(hal_tdm_hwc *hwc, int *commit_fence) { HWC_FUNC_ENTRY(hwc_get_commit_fence); - return func_hwc->hwc_get_commit_fence(hwc, commit_fence); + + return hwc_funcs->hwc_get_commit_fence(hwc, commit_fence); } EXTERN hal_tdm_error hal_tdm_hwc_get_release_fences(hal_tdm_hwc *hwc, uint32_t *num_elements, hal_tdm_hwc_window **hwc_windows, int *release_fences) { HWC_FUNC_ENTRY(hwc_get_release_fences); - return func_hwc->hwc_get_release_fences(hwc, num_elements, hwc_windows, release_fences); + + return hwc_funcs->hwc_get_release_fences(hwc, num_elements, hwc_windows, release_fences); } EXTERN hal_tdm_error hal_tdm_hwc_set_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value value) { HWC_FUNC_ENTRY(hwc_set_property); - return func_hwc->hwc_set_property(hwc, id, value); + + return hwc_funcs->hwc_set_property(hwc, id, value); } EXTERN hal_tdm_error hal_tdm_hwc_get_property(hal_tdm_hwc *hwc, uint32_t id, hal_tdm_value *value) { HWC_FUNC_ENTRY(hwc_get_property); - return func_hwc->hwc_get_property(hwc, id, value); + + return hwc_funcs->hwc_get_property(hwc, id, value); } EXTERN hal_tdm_error hal_tdm_hwc_get_commit_interval(hal_tdm_hwc *hwc, hal_tdm_hwc_commit_interval *interval) { HWC_FUNC_ENTRY(hwc_get_commit_interval); - return func_hwc->hwc_get_commit_interval(hwc, interval); + + return hwc_funcs->hwc_get_commit_interval(hwc, interval); } -/* tdm_func_hwc_window */ +/* hwc_window_funcs */ EXTERN void hal_tdm_hwc_window_destroy(hal_tdm_hwc_window *hwc_window) { HWC_WINDOW_FUNC_ENTRY_VOID(hwc_window_destroy); - func_hwc_window->hwc_window_destroy(hwc_window); + + hwc_window_funcs->hwc_window_destroy(hwc_window); } EXTERN tbm_surface_queue_h hal_tdm_hwc_window_acquire_buffer_queue(hal_tdm_hwc_window *hwc_window, hal_tdm_error *error) { HWC_WINDOW_FUNC_ENTRY_NULL(hwc_window_acquire_buffer_queue); - return func_hwc_window->hwc_window_acquire_buffer_queue(hwc_window, error); + + return hwc_window_funcs->hwc_window_acquire_buffer_queue(hwc_window, error); } EXTERN void hal_tdm_hwc_window_release_buffer_queue(hal_tdm_hwc_window *hwc_window, tbm_surface_queue_h queue) { HWC_WINDOW_FUNC_ENTRY_VOID(hwc_window_release_buffer_queue); - func_hwc_window->hwc_window_release_buffer_queue(hwc_window, queue); + + hwc_window_funcs->hwc_window_release_buffer_queue(hwc_window, queue); } EXTERN hal_tdm_error hal_tdm_hwc_window_set_composition_type(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_composition composition_type) { HWC_WINDOW_FUNC_ENTRY(hwc_window_set_composition_type); - return func_hwc_window->hwc_window_set_composition_type(hwc_window, composition_type); + + return hwc_window_funcs->hwc_window_set_composition_type(hwc_window, composition_type); } EXTERN hal_tdm_error hal_tdm_hwc_window_set_buffer_damage(hal_tdm_hwc_window *hwc_window, hal_tdm_region damage) { HWC_WINDOW_FUNC_ENTRY(hwc_window_set_buffer_damage); - return func_hwc_window->hwc_window_set_buffer_damage(hwc_window, damage); + + return hwc_window_funcs->hwc_window_set_buffer_damage(hwc_window, damage); } EXTERN hal_tdm_error hal_tdm_hwc_window_set_info(hal_tdm_hwc_window *hwc_window, hal_tdm_hwc_window_info *info) { HWC_WINDOW_FUNC_ENTRY(hwc_window_set_info); - return func_hwc_window->hwc_window_set_info(hwc_window, info); + + return hwc_window_funcs->hwc_window_set_info(hwc_window, info); } EXTERN hal_tdm_error hal_tdm_hwc_window_set_buffer(hal_tdm_hwc_window *hwc_window, tbm_surface_h buffer) { HWC_WINDOW_FUNC_ENTRY(hwc_window_set_buffer); - return func_hwc_window->hwc_window_set_buffer(hwc_window, buffer); + + return hwc_window_funcs->hwc_window_set_buffer(hwc_window, buffer); } EXTERN hal_tdm_error hal_tdm_hwc_window_set_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value value) { HWC_WINDOW_FUNC_ENTRY(hwc_window_set_property); - return func_hwc_window->hwc_window_set_property(hwc_window, id, value); + + return hwc_window_funcs->hwc_window_set_property(hwc_window, id, value); } EXTERN hal_tdm_error hal_tdm_hwc_window_get_property(hal_tdm_hwc_window *hwc_window, uint32_t id, hal_tdm_value *value) { HWC_WINDOW_FUNC_ENTRY(hwc_window_get_property); - return func_hwc_window->hwc_window_get_property(hwc_window, id, value); + + return hwc_window_funcs->hwc_window_get_property(hwc_window, id, value); } EXTERN hal_tdm_error hal_tdm_hwc_window_get_constraints(hal_tdm_hwc_window *hwc_window, int *constraints) { HWC_WINDOW_FUNC_ENTRY(hwc_window_get_constraints); - return func_hwc_window->hwc_window_get_constraints(hwc_window, constraints); + + return hwc_window_funcs->hwc_window_get_constraints(hwc_window, constraints); } EXTERN hal_tdm_error hal_tdm_hwc_window_set_name(hal_tdm_hwc_window *hwc_window, const char *name) { HWC_WINDOW_FUNC_ENTRY(hwc_window_set_name); - return func_hwc_window->hwc_window_set_name(hwc_window, name); + + return hwc_window_funcs->hwc_window_set_name(hwc_window, name); } EXTERN hal_tdm_error hal_tdm_hwc_window_set_cursor_image(hal_tdm_hwc_window *hwc_window, int width, int height, int stride, void *ptr) { HWC_WINDOW_FUNC_ENTRY(hwc_window_set_cursor_image); - return func_hwc_window->hwc_window_set_cursor_image(hwc_window, width, height, stride, ptr); + + return hwc_window_funcs->hwc_window_set_cursor_image(hwc_window, width, height, stride, ptr); } EXTERN hal_tdm_error hal_tdm_hwc_window_set_acquire_fence(hal_tdm_hwc_window *hwc_window, int acquire_fence) { HWC_WINDOW_FUNC_ENTRY(hwc_window_set_acquire_fence); - return func_hwc_window->hwc_window_set_acquire_fence(hwc_window, acquire_fence); + + return hwc_window_funcs->hwc_window_set_acquire_fence(hwc_window, acquire_fence); } -/* tdm_func_pp */ +/* pp_funcs */ EXTERN void hal_tdm_pp_destroy(hal_tdm_pp *pp) { PP_FUNC_ENTRY_VOID(pp_destroy); - func_pp->pp_destroy(pp); + pp_funcs->pp_destroy(pp); } EXTERN hal_tdm_error hal_tdm_pp_set_info(hal_tdm_pp *pp, hal_tdm_info_pp *info) { PP_FUNC_ENTRY(pp_set_info); - return func_pp->pp_set_info(pp, info); + + return pp_funcs->pp_set_info(pp, info); } EXTERN hal_tdm_error hal_tdm_pp_attach(hal_tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst) { PP_FUNC_ENTRY(pp_attach); - return func_pp->pp_attach(pp, src, dst); + + return pp_funcs->pp_attach(pp, src, dst); } EXTERN hal_tdm_error hal_tdm_pp_commit(hal_tdm_pp *pp) { PP_FUNC_ENTRY(pp_commit); - return func_pp->pp_commit(pp); + + return pp_funcs->pp_commit(pp); } EXTERN hal_tdm_error hal_tdm_pp_set_done_handler(hal_tdm_pp *pp, hal_tdm_pp_done_handler func, void *user_data) { PP_FUNC_ENTRY(pp_set_done_handler); - return func_pp->pp_set_done_handler(pp, func, user_data); + + return pp_funcs->pp_set_done_handler(pp, func, user_data); } -/* tdm_func_capture */ +/* capture_funcs */ EXTERN void hal_tdm_capture_destroy(hal_tdm_capture *capture) { CAPTURE_FUNC_ENTRY_VOID(capture_destroy); - func_capture->capture_destroy(capture); + capture_funcs->capture_destroy(capture); } EXTERN hal_tdm_error hal_tdm_capture_set_info(hal_tdm_capture *capture, hal_tdm_info_capture *info) { CAPTURE_FUNC_ENTRY(capture_set_info); - return func_capture->capture_set_info(capture, info); + + return capture_funcs->capture_set_info(capture, info); } EXTERN hal_tdm_error hal_tdm_capture_attach(hal_tdm_capture *capture, tbm_surface_h buffer) { CAPTURE_FUNC_ENTRY(capture_attach); - return func_capture->capture_attach(capture, buffer); + + return capture_funcs->capture_attach(capture, buffer); } EXTERN hal_tdm_error hal_tdm_capture_commit(hal_tdm_capture *capture) { CAPTURE_FUNC_ENTRY(capture_commit); - return func_capture->capture_commit(capture); + + return capture_funcs->capture_commit(capture); } EXTERN hal_tdm_error hal_tdm_capture_set_done_handler(hal_tdm_capture *capture, hal_tdm_capture_done_handler func, void *user_data) { CAPTURE_FUNC_ENTRY(capture_set_done_handler); - return func_capture->capture_set_done_handler(capture, func, user_data); + + return capture_funcs->capture_set_done_handler(capture, func, user_data); } /* tdm_backend_func */ EXTERN hal_tdm_error -hal_tdm_backend_register_func_display(hal_tdm_display *dpy, hal_tdm_func_display *func_display) +hal_tdm_backend_register_display_funcs(hal_tdm_display *dpy, hal_tdm_display_funcs *display_funcs) { - if (!g_tdm_funcs) return HAL_TDM_ERROR_OPERATION_FAILED; - if (g_tdm_funcs->tdm_func_display) return HAL_TDM_ERROR_BAD_REQUEST; - if (!dpy || !func_display) return HAL_TDM_ERROR_INVALID_PARAMETER; - g_tdm_funcs->tdm_func_display = func_display; + if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_OPERATION_FAILED; + if (g_hal_tdm_backend_data->display_funcs) return HAL_TDM_ERROR_BAD_REQUEST; + if (!dpy || !display_funcs) return HAL_TDM_ERROR_INVALID_PARAMETER; + g_hal_tdm_backend_data->display_funcs = display_funcs; + return HAL_TDM_ERROR_NONE; } EXTERN hal_tdm_error -hal_tdm_backend_register_func_output(hal_tdm_display *dpy, hal_tdm_func_output *func_output) +hal_tdm_backend_register_output_funcs(hal_tdm_display *dpy, hal_tdm_output_funcs *output_funcs) { - if (!g_tdm_funcs) return HAL_TDM_ERROR_OPERATION_FAILED; - if (g_tdm_funcs->tdm_func_output) return HAL_TDM_ERROR_BAD_REQUEST; - if (!dpy || !func_output) return HAL_TDM_ERROR_INVALID_PARAMETER; - g_tdm_funcs->tdm_func_output = func_output; + if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_OPERATION_FAILED; + if (g_hal_tdm_backend_data->output_funcs) return HAL_TDM_ERROR_BAD_REQUEST; + if (!dpy || !output_funcs) return HAL_TDM_ERROR_INVALID_PARAMETER; + g_hal_tdm_backend_data->output_funcs = output_funcs; return HAL_TDM_ERROR_NONE; } EXTERN hal_tdm_error -hal_tdm_backend_register_func_voutput(hal_tdm_display *dpy, hal_tdm_func_voutput *func_voutput) +hal_tdm_backend_register_voutput_funcs(hal_tdm_display *dpy, hal_tdm_voutput_funcs *voutput_funcs) { - if (!g_tdm_funcs) return HAL_TDM_ERROR_OPERATION_FAILED; - if (g_tdm_funcs->tdm_func_voutput) return HAL_TDM_ERROR_BAD_REQUEST; - if (!dpy || !func_voutput) return HAL_TDM_ERROR_INVALID_PARAMETER; - g_tdm_funcs->tdm_func_voutput = func_voutput; + if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_OPERATION_FAILED; + if (g_hal_tdm_backend_data->voutput_funcs) return HAL_TDM_ERROR_BAD_REQUEST; + if (!dpy || !voutput_funcs) return HAL_TDM_ERROR_INVALID_PARAMETER; + g_hal_tdm_backend_data->voutput_funcs = voutput_funcs; return HAL_TDM_ERROR_NONE; } EXTERN hal_tdm_error -hal_tdm_backend_register_func_hwc(hal_tdm_display *dpy, hal_tdm_func_hwc *func_hwc) +hal_tdm_backend_register_hwc_funcs(hal_tdm_display *dpy, hal_tdm_hwc_funcs *hwc_funcs) { - if (!g_tdm_funcs) return HAL_TDM_ERROR_OPERATION_FAILED; - if (g_tdm_funcs->tdm_func_hwc) return HAL_TDM_ERROR_BAD_REQUEST; - if (!dpy || !func_hwc) return HAL_TDM_ERROR_INVALID_PARAMETER; - g_tdm_funcs->tdm_func_hwc = func_hwc; + if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_OPERATION_FAILED; + if (g_hal_tdm_backend_data->hwc_funcs) return HAL_TDM_ERROR_BAD_REQUEST; + if (!dpy || !hwc_funcs) return HAL_TDM_ERROR_INVALID_PARAMETER; + g_hal_tdm_backend_data->hwc_funcs = hwc_funcs; return HAL_TDM_ERROR_NONE; } EXTERN hal_tdm_error -hal_tdm_backend_register_func_hwc_window(hal_tdm_display *dpy, hal_tdm_func_hwc_window *func_hwc_window) +hal_tdm_backend_register_hwc_window_funcs(hal_tdm_display *dpy, hal_tdm_hwc_window_funcs *hwc_window_funcs) { - if (!g_tdm_funcs) return HAL_TDM_ERROR_OPERATION_FAILED; - if (g_tdm_funcs->tdm_func_hwc_window) return HAL_TDM_ERROR_BAD_REQUEST; - if (!dpy || !func_hwc_window) return HAL_TDM_ERROR_INVALID_PARAMETER; - g_tdm_funcs->tdm_func_hwc_window = func_hwc_window; + if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_OPERATION_FAILED; + if (g_hal_tdm_backend_data->hwc_window_funcs) return HAL_TDM_ERROR_BAD_REQUEST; + if (!dpy || !hwc_window_funcs) return HAL_TDM_ERROR_INVALID_PARAMETER; + g_hal_tdm_backend_data->hwc_window_funcs = hwc_window_funcs; return HAL_TDM_ERROR_NONE; } EXTERN hal_tdm_error -hal_tdm_backend_register_func_pp(hal_tdm_display *dpy, hal_tdm_func_pp *func_pp) +hal_tdm_backend_register_pp_funcs(hal_tdm_display *dpy, hal_tdm_pp_funcs *pp_funcs) { - if (!g_tdm_funcs) return HAL_TDM_ERROR_OPERATION_FAILED; - if (g_tdm_funcs->tdm_func_pp) return HAL_TDM_ERROR_BAD_REQUEST; - if (!dpy || !func_pp) return HAL_TDM_ERROR_INVALID_PARAMETER; - g_tdm_funcs->tdm_func_pp = func_pp; + if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_OPERATION_FAILED; + if (g_hal_tdm_backend_data->pp_funcs) return HAL_TDM_ERROR_BAD_REQUEST; + if (!dpy || !pp_funcs) return HAL_TDM_ERROR_INVALID_PARAMETER; + g_hal_tdm_backend_data->pp_funcs = pp_funcs; return HAL_TDM_ERROR_NONE; } EXTERN hal_tdm_error -hal_tdm_backend_register_func_capture(hal_tdm_display *dpy, hal_tdm_func_capture *func_capture) +hal_tdm_backend_register_capture_funcs(hal_tdm_display *dpy, hal_tdm_capture_funcs *capture_funcs) { - if (!g_tdm_funcs) return HAL_TDM_ERROR_OPERATION_FAILED; - if (g_tdm_funcs->tdm_func_capture) return HAL_TDM_ERROR_BAD_REQUEST; - if (!dpy || !func_capture) return HAL_TDM_ERROR_INVALID_PARAMETER; - g_tdm_funcs->tdm_func_capture = func_capture; + if (!g_hal_tdm_backend_data) return HAL_TDM_ERROR_OPERATION_FAILED; + if (g_hal_tdm_backend_data->capture_funcs) return HAL_TDM_ERROR_BAD_REQUEST; + if (!dpy || !capture_funcs) return HAL_TDM_ERROR_INVALID_PARAMETER; + g_hal_tdm_backend_data->capture_funcs = capture_funcs; return HAL_TDM_ERROR_NONE; } @@ -847,32 +994,3 @@ hal_tdm_buffer_remove_destroy_handler(tbm_surface_h buffer, hal_tdm_buffer_destr { // tdm_buffer_remove_destroy_handler(buffer, func, user_data); } - -EXTERN hal_tdm_event_loop_source * -hal_tdm_event_loop_add_fd_handler(hal_tdm_display *dpy, int fd, hal_tdm_event_loop_mask mask, - hal_tdm_event_loop_fd_handler func, void *user_data, hal_tdm_error *error) -{ -// return tdm_event_loop_add_fd_handler(dpy, fd, mask, func, user_data, error); - return NULL; -} - -EXTERN hal_tdm_event_loop_source * -hal_tdm_event_loop_add_timer_handler(hal_tdm_display *dpy, hal_tdm_event_loop_timer_handler func, - void *user_data, hal_tdm_error *error) -{ -// return tdm_event_loop_add_timer_handler(dpy, func, user_data, error); - return NULL; -} - -EXTERN hal_tdm_error -hal_tdm_event_loop_source_timer_update(hal_tdm_event_loop_source *source, unsigned int ms_delay) -{ -// return tdm_event_loop_source_timer_update(source, ms_delay); - return HAL_TDM_ERROR_NONE; -} - -EXTERN void -hal_tdm_event_loop_source_remove(hal_tdm_event_loop_source *source) -{ -// tdm_event_loop_source_remove(source); -} -- 2.34.1