From 61b4ab5b541ec08bba82894d9fe3e4d98e9bd20b Mon Sep 17 00:00:00 2001 From: Seunghun Lee Date: Fri, 1 Sep 2023 16:11:10 +0900 Subject: [PATCH] Use ds_single_pixel_buffer_manager_v1 Instead of implementing single-pixel-buffer-manager-v1 protocol by itself, this uses ds_single_pixel_buffer_manager_v1 [1]. [1]: https://github.sec.samsung.net/TizenWS/libds/pull/134 Change-Id: I28c2c6e7a3a009f8f21d4c4329f60bb55dddd167 --- src/bin/Makefile.mk | 2 - src/bin/e_comp_wl.c | 4 +- src/bin/e_comp_wl.h | 1 - src/bin/e_comp_wl_buffer.c | 42 +++++++-- src/bin/e_comp_wl_buffer.h | 2 + src/bin/e_includes.h | 1 - src/bin/e_pixmap.c | 10 ++- src/bin/e_single_pixel_buffer.c | 152 -------------------------------- src/bin/e_single_pixel_buffer.h | 33 ------- 9 files changed, 47 insertions(+), 200 deletions(-) delete mode 100644 src/bin/e_single_pixel_buffer.c delete mode 100644 src/bin/e_single_pixel_buffer.h diff --git a/src/bin/Makefile.mk b/src/bin/Makefile.mk index acba64d198..f9566d3ce8 100644 --- a/src/bin/Makefile.mk +++ b/src/bin/Makefile.mk @@ -144,7 +144,6 @@ src/bin/e_map.h \ src/bin/e_wtz_shell.h \ src/bin/e_device.h \ src/bin/e_input_event.h \ -src/bin/e_single_pixel_buffer.h \ src/bin/e_blender.h enlightenment_src = \ @@ -281,7 +280,6 @@ src/bin/e_map.c \ src/bin/e_wtz_shell.c \ src/bin/e_device.c \ src/bin/e_input_event.c \ -src/bin/e_single_pixel_buffer.c \ src/bin/e_comp_wl_buffer.c \ src/bin/e_compositor.c \ src/bin/e_blender.c \ diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index cda46f064b..18a08d2369 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -11,6 +11,7 @@ #include #include +#include /* handle include for printing uint64_t */ #define __STDC_FORMAT_MACROS @@ -3816,7 +3817,7 @@ e_comp_wl_init(void) e_comp_wl_renderer_init(); _e_comp_wl_move_resize_init(); e_presentation_time_init(); - e_single_pixel_buffer_manager_init(); + ds_single_pixel_buffer_manager_v1_create(e_comp_wl->wl.disp); e_blender_init(); if (!e_foreign_global_init(e_comp_wl->wl.disp)) @@ -3866,7 +3867,6 @@ e_comp_wl_shutdown(void) _e_comp_wl_gl_shutdown(); e_blender_shutdown(); - e_single_pixel_buffer_manager_shutdown(); e_presentation_time_shutdown(); e_comp_wl_renderer_shutdown(); e_comp_wl_capture_shutdown(); diff --git a/src/bin/e_comp_wl.h b/src/bin/e_comp_wl.h index 72b3cc7944..51c2b9b1a7 100644 --- a/src/bin/e_comp_wl.h +++ b/src/bin/e_comp_wl.h @@ -129,7 +129,6 @@ struct _E_Comp_Wl_Buffer uint32_t busy; E_Explicit_Sync_Buffer_Release *buffer_release; - E_Single_Pixel_Buffer *single_pixel_buffer; }; struct _E_Comp_Wl_Buffer_Ref diff --git a/src/bin/e_comp_wl_buffer.c b/src/bin/e_comp_wl_buffer.c index 2f13888b9d..e0a0b06c0d 100644 --- a/src/bin/e_comp_wl_buffer.c +++ b/src/bin/e_comp_wl_buffer.c @@ -1,3 +1,5 @@ +#include + #include "e_comp_wl_private.h" typedef struct _E_Buffer E_Buffer; @@ -78,6 +80,33 @@ done: return &buffer->base; } +EINTERN void * +e_comp_wl_buffer_single_pixel_buffer_data_get(E_Comp_Wl_Buffer *comp_buffer) +{ + E_Buffer *buffer; + uint32_t format; + size_t stride; + void *data; + + EINA_SAFETY_ON_NULL_RETURN_VAL(comp_buffer, NULL); + EINA_SAFETY_ON_FALSE_RETURN_VAL(comp_buffer->type == E_COMP_WL_BUFFER_TYPE_SINGLE_PIXEL, NULL); + + buffer = _e_buffer_from_base(comp_buffer); + EINA_SAFETY_ON_NULL_RETURN_VAL(buffer, NULL); + + if (!ds_buffer_begin_data_ptr_access(buffer->ds_buffer, + DS_BUFFER_DATA_PTR_ACCESS_READ, + &data, &format, &stride)) + { + ERR("Could not access data of buffer(%p)", buffer); + return NULL; + } + + ds_buffer_end_data_ptr_access(buffer->ds_buffer); + + return data; +} + static void _e_comp_wl_buffer_ref(E_Comp_Wl_Buffer *base) { @@ -238,12 +267,13 @@ _e_comp_wl_buffer_tbm_type_get(E_Comp_Wl_Buffer *base, struct wl_resource *resou } static Eina_Bool -_e_comp_wl_buffer_init(E_Comp_Wl_Buffer *base, struct wl_resource *resource, E_Client *ec) +_e_comp_wl_buffer_init(E_Comp_Wl_Buffer *base, struct ds_buffer *ds_buffer, E_Client *ec) { struct wl_shm_buffer *shmbuff; - E_Single_Pixel_Buffer *single_pixel_buffer; + struct wl_resource *resource; Eina_Bool res; + resource = ds_buffer_get_resource(ds_buffer); shmbuff = wl_shm_buffer_get(resource); if (shmbuff) { @@ -256,14 +286,12 @@ _e_comp_wl_buffer_init(E_Comp_Wl_Buffer *base, struct wl_resource *resource, E_C if (!base->type) { - single_pixel_buffer = e_single_pixel_buffer_manager_buffer_get(resource); - if (single_pixel_buffer) + if (ds_single_pixel_buffer_v1_from_buffer(ds_buffer)) { base->type = E_COMP_WL_BUFFER_TYPE_SINGLE_PIXEL; base->w = 1; base->h = 1; base->format = WL_SHM_FORMAT_ARGB8888; - base->single_pixel_buffer = single_pixel_buffer; } } @@ -342,13 +370,13 @@ _e_buffer_create(struct ds_buffer *ds_buffer, E_Client *ec) buffer->ds_buffer = ds_buffer; - buffer_resource = ds_buffer_get_resource(ds_buffer); - if (!_e_comp_wl_buffer_init(&buffer->base, buffer_resource, ec)) + if (!_e_comp_wl_buffer_init(&buffer->base, ds_buffer, ec)) { free(buffer); return NULL; } + buffer_resource = ds_buffer_get_resource(ds_buffer); buffer->base.destroy_listener.notify = _e_buffer_cb_resource_destroy; wl_resource_add_destroy_listener(buffer_resource, &buffer->base.destroy_listener); diff --git a/src/bin/e_comp_wl_buffer.h b/src/bin/e_comp_wl_buffer.h index fda47a9aa8..0c0feda63a 100644 --- a/src/bin/e_comp_wl_buffer.h +++ b/src/bin/e_comp_wl_buffer.h @@ -2,7 +2,9 @@ #define E_COMP_WL_BUFFER_H #include +#include "e_comp_wl.h" EINTERN E_Comp_Wl_Buffer *e_comp_wl_buffer_get(struct ds_buffer *ds_buffer, E_Client *ec); +EINTERN void *e_comp_wl_buffer_single_pixel_buffer_data_get(E_Comp_Wl_Buffer *buffer); #endif diff --git a/src/bin/e_includes.h b/src/bin/e_includes.h index a1e8016ccf..722bd50c4e 100644 --- a/src/bin/e_includes.h +++ b/src/bin/e_includes.h @@ -88,5 +88,4 @@ #include "e_comp_wl_tizen_hwc.h" #include "e_comp_wl_renderer.h" #include "e_map.h" -#include "e_single_pixel_buffer.h" #include "e_blender.h" diff --git a/src/bin/e_pixmap.c b/src/bin/e_pixmap.c index 1537230f52..6dcad28913 100644 --- a/src/bin/e_pixmap.c +++ b/src/bin/e_pixmap.c @@ -1,6 +1,7 @@ #include "e.h" #include "e_comp_wl.h" +#include "e_comp_wl_buffer.h" #include #include #include @@ -697,6 +698,7 @@ e_pixmap_image_refresh(E_Pixmap *cp) E_Comp_Wl_Buffer *buffer = NULL; struct wl_shm_buffer *shm_buffer = NULL; int bw, bh; + void *data; if (!cp) { @@ -811,8 +813,12 @@ e_pixmap_image_refresh(E_Pixmap *cp) cp->w = 1; cp->h = 1; cp->image_argb = EINA_TRUE; - cp->single_pixel = buffer->single_pixel_buffer->data; - cp->data = &cp->single_pixel; + data = e_comp_wl_buffer_single_pixel_buffer_data_get(buffer); + if (data) + { + cp->single_pixel = *((uint32_t *)data); + cp->data = &cp->single_pixel; + } cp->shm_buffer = NULL; } else diff --git a/src/bin/e_single_pixel_buffer.c b/src/bin/e_single_pixel_buffer.c deleted file mode 100644 index cd8830231b..0000000000 --- a/src/bin/e_single_pixel_buffer.c +++ /dev/null @@ -1,152 +0,0 @@ -#include "e.h" -#include - -static E_Single_Pixel_Buffer_Manager *_single_pixel_buffer_mgr = NULL; - -static void -_single_pixel_buffer_manager_destroy(struct wl_client *client, struct wl_resource *resource) -{ - wl_resource_destroy(resource); -} - -static void -_single_pixel_buffer_cb_resource_destroy(struct wl_resource *resource) -{ - E_Single_Pixel_Buffer *single_pixel_buffer; - - single_pixel_buffer = wl_resource_get_user_data(resource); - if (!single_pixel_buffer) return; - - free(single_pixel_buffer); -} - -static void -_single_pixel_buffer_destroy(struct wl_client *client, struct wl_resource *resource) -{ - wl_resource_destroy(resource); -} - -static const struct wl_buffer_interface single_pixel_buffer_implementation = { - _single_pixel_buffer_destroy, -}; - -static void -_single_pixel_buffer_manager_create_u32_rgba_buffer(struct wl_client *client, - struct wl_resource *resource, - uint32_t id, - uint32_t r, - uint32_t g, - uint32_t b, - uint32_t a) -{ - E_Single_Pixel_Buffer *single_pixel_buffer; - - single_pixel_buffer = E_NEW(E_Single_Pixel_Buffer, 1); - if (!single_pixel_buffer) - { - wl_client_post_no_memory(client); - return; - } - - single_pixel_buffer->buffer = wl_resource_create(client, &wl_buffer_interface, 1, id); - if (!single_pixel_buffer->buffer) - { - free(single_pixel_buffer); - wl_client_post_no_memory(client); - return; - } - - wl_resource_set_implementation(single_pixel_buffer->buffer, &single_pixel_buffer_implementation, - single_pixel_buffer, _single_pixel_buffer_cb_resource_destroy); - - single_pixel_buffer->r = r; - single_pixel_buffer->g = g; - single_pixel_buffer->b = b; - single_pixel_buffer->a = a; - - single_pixel_buffer->data = (((uint32_t)((a / (double)0xffffffff) * 255)) << 24) | - (((uint32_t)((r / (double)0xffffffff) * 255)) << 16) | - (((uint32_t)((g / (double)0xffffffff) * 255)) << 8) | - ((uint32_t)((b / (double)0xffffffff) * 255)); - - ELOGF("SPBUF", "Create Single Pixel Buffer:%p r(%x) g(%x) b(%x) a(%x) data(%x)", - NULL, single_pixel_buffer, r, g, b, a, single_pixel_buffer->data); -} - -static const struct wp_single_pixel_buffer_manager_v1_interface single_pixel_buffer_manager_implementation = { - _single_pixel_buffer_manager_destroy, - _single_pixel_buffer_manager_create_u32_rgba_buffer -}; - -static void -_single_pixel_buffer_manager_cb_bind(struct wl_client *client, void *data, uint32_t version, uint32_t id) -{ - struct wl_resource *resource; - - resource = wl_resource_create(client, &wp_single_pixel_buffer_manager_v1_interface, version, id); - if (!resource) - { - wl_client_post_no_memory(client); - return; - } - - wl_resource_set_implementation(resource, &single_pixel_buffer_manager_implementation, - NULL, NULL); -} - -EINTERN Eina_Bool -e_single_pixel_buffer_manager_init(void) -{ - E_Single_Pixel_Buffer_Manager *single_pixel_buffer_mgr; - - EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl->wl.disp, EINA_FALSE); - - if (_single_pixel_buffer_mgr) return EINA_TRUE; - - single_pixel_buffer_mgr = E_NEW(E_Single_Pixel_Buffer_Manager, 1); - EINA_SAFETY_ON_NULL_GOTO(single_pixel_buffer_mgr, fail); - - single_pixel_buffer_mgr->global = wl_global_create(e_comp_wl->wl.disp, - &wp_single_pixel_buffer_manager_v1_interface, - 1, - NULL, - _single_pixel_buffer_manager_cb_bind); - EINA_SAFETY_ON_NULL_GOTO(single_pixel_buffer_mgr->global, fail); - - _single_pixel_buffer_mgr = single_pixel_buffer_mgr; - - return EINA_TRUE; - -fail: - if (single_pixel_buffer_mgr) - free(single_pixel_buffer_mgr); - - return EINA_FALSE; -} - -EINTERN void -e_single_pixel_buffer_manager_shutdown(void) -{ - E_Single_Pixel_Buffer_Manager *single_pixel_buffer_mgr; - - single_pixel_buffer_mgr = _single_pixel_buffer_mgr; - if (!single_pixel_buffer_mgr) return; - - wl_global_destroy(single_pixel_buffer_mgr->global); - free(single_pixel_buffer_mgr); - - _single_pixel_buffer_mgr = NULL; -} - -EINTERN E_Single_Pixel_Buffer * -e_single_pixel_buffer_manager_buffer_get(struct wl_resource *resource) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(resource, NULL); - - if (wl_resource_instance_of(resource, &wl_buffer_interface, - &single_pixel_buffer_implementation)) - return wl_resource_get_user_data(resource); - else - return NULL; -} diff --git a/src/bin/e_single_pixel_buffer.h b/src/bin/e_single_pixel_buffer.h deleted file mode 100644 index c20467230b..0000000000 --- a/src/bin/e_single_pixel_buffer.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifdef E_TYPEDEFS - -typedef struct _E_Single_Pixel_Buffer_Manager E_Single_Pixel_Buffer_Manager; -typedef struct _E_Single_Pixel_Buffer E_Single_Pixel_Buffer; - -#else -#ifndef E_SINGLE_PIXEL_BUFFER_H -#define E_SINGLE_PIXEL_BUFFER_H - -struct _E_Single_Pixel_Buffer_Manager -{ - struct wl_global *global; -}; - -struct _E_Single_Pixel_Buffer -{ - struct wl_resource *buffer; - - uint32_t r; - uint32_t g; - uint32_t b; - uint32_t a; - - uint32_t data; -}; - -EINTERN Eina_Bool e_single_pixel_buffer_manager_init(void); -EINTERN void e_single_pixel_buffer_manager_shutdown(void); - -EINTERN E_Single_Pixel_Buffer *e_single_pixel_buffer_manager_buffer_get(struct wl_resource *resource); - -#endif // E_SINGLE_PIXEL_BUFFER_H -#endif -- 2.34.1