viewport: Replace wl_scaler with ds_tizen_scaler 83/295983/1
authorSeunghun Lee <shiin.lee@samsung.com>
Thu, 11 May 2023 09:34:45 +0000 (18:34 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 18 Jul 2023 04:40:27 +0000 (13:40 +0900)
Change-Id: I5fee031e2ee2e873184deb78cb79ad8f039b87c2

configure.ac
packaging/enlightenment.spec
src/bin/e_comp_wl_viewport.c

index 6f27486..abd871d 100755 (executable)
@@ -290,6 +290,7 @@ e_requires="\
   gobject-2.0 \
   libds \
   libds-tizen-tbm-server \
+  libds-tizen-scaler \
   "
 
 PKG_CHECK_MODULES(E_INFO, [
index 9c39a97..64be05c 100644 (file)
@@ -79,6 +79,7 @@ BuildRequires:  pkgconfig(capi-media-streamrecorder)
 
 BuildRequires:  pkgconfig(libds)
 BuildRequires:  pkgconfig(libds-tizen-tbm-server)
+BuildRequires:  pkgconfig(libds-tizen-scaler)
 
 %if "%{LIBGOMP}" == "use"
 Requires:       libgomp
index 3cc88ba..5c1bf9e 100644 (file)
@@ -7,6 +7,7 @@
 #include <wayland-tbm-server.h>
 #include <scaler-server-protocol.h>
 #include <tizen-extension-server-protocol.h>
+#include <libds-tizen/scaler.h>
 
 #define PER(fmt,arg...) ELOGF("VIEWPORT<E>", "viewport(%p) epc(%p): " \
                               fmt, viewport->ec, viewport, viewport->epc, ##arg)
@@ -1910,240 +1911,15 @@ _e_comp_wl_viewport_print(void *data, const char *log_path)
    fclose(log_fl);
 }
 
-static void
-_e_viewport_destroy(struct wl_resource *resource)
-{
-   E_Client *ec;
-
-   ec = wl_resource_get_user_data(resource);
-   if (!e_object_unref(E_OBJECT(ec))) return;
-   if (e_object_is_del(E_OBJECT(ec))) return;
-   if (!ec->comp_data) return;
-   if (!ec->comp_data->scaler.viewport) return;
-
-   ec->comp_data->scaler.viewport = NULL;
-   ec->comp_data->pending.buffer_viewport.buffer.src_width = wl_fixed_from_int(-1);
-   ec->comp_data->pending.buffer_viewport.surface.width = -1;
-   ec->comp_data->pending.buffer_viewport.changed = 1;
-}
-
-static void
-_e_viewport_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
-{
-   wl_resource_destroy(resource);
-}
-
-static void
-_e_viewport_cb_set(struct wl_client *client EINA_UNUSED,
-                   struct wl_resource *resource,
-                   wl_fixed_t src_x,
-                   wl_fixed_t src_y,
-                   wl_fixed_t src_width,
-                   wl_fixed_t src_height,
-                   int32_t dst_width,
-                   int32_t dst_height)
-{
-   E_Client *ec;
-
-   ec = wl_resource_get_user_data(resource);
-   if (e_object_is_del(E_OBJECT(ec))) return;
-
-   EINA_SAFETY_ON_NULL_RETURN(ec->comp_data);
-   EINA_SAFETY_ON_NULL_RETURN(ec->comp_data->scaler.viewport);
-
-   if (wl_fixed_to_double(src_width) < 0 || wl_fixed_to_double(src_height) < 0)
-     {
-        ERR("source dimensions must be non-negative (%fx%f)",
-            wl_fixed_to_double(src_width), wl_fixed_to_double(src_height));
-        struct wl_resource *surface = e_comp_wl_client_surface_get(ec);
-        wl_resource_post_error(resource,
-                               WL_VIEWPORT_ERROR_BAD_VALUE,
-                               "wl_surface@%d viewport source "
-                               "w=%f < 0 or h=%f < 0",
-                               wl_resource_get_id(surface),
-                               wl_fixed_to_double(src_width),
-                               wl_fixed_to_double(src_height));
-        return;
-     }
-
-   if (dst_width <= 0 || dst_height <= 0)
-     {
-        ERR("destination dimensions must be positive (%dx%d)", dst_width, dst_height);
-        wl_resource_post_error(resource,
-                               WL_VIEWPORT_ERROR_BAD_VALUE,
-                               "destination size must be positive (%dx%d)",
-                               dst_width, dst_height);
-        return;
-     }
-
-   ec->comp_data->pending.buffer_viewport.buffer.src_x = src_x;
-   ec->comp_data->pending.buffer_viewport.buffer.src_y = src_y;
-   ec->comp_data->pending.buffer_viewport.buffer.src_width = src_width;
-   ec->comp_data->pending.buffer_viewport.buffer.src_height = src_height;
-   ec->comp_data->pending.buffer_viewport.surface.width = dst_width;
-   ec->comp_data->pending.buffer_viewport.surface.height = dst_height;
-   ec->comp_data->pending.buffer_viewport.changed = 1;
-}
-
-static void
-_e_viewport_cb_set_source(struct wl_client *client EINA_UNUSED,
-                          struct wl_resource *resource,
-                          wl_fixed_t src_x,
-                          wl_fixed_t src_y,
-                          wl_fixed_t src_width,
-                          wl_fixed_t src_height)
-{
-   E_Client *ec;
-
-   ec = wl_resource_get_user_data(resource);
-   if (e_object_is_del(E_OBJECT(ec))) return;
-
-   EINA_SAFETY_ON_NULL_RETURN(ec->comp_data);
-   EINA_SAFETY_ON_NULL_RETURN(ec->comp_data->scaler.viewport);
-
-   if (src_width == wl_fixed_from_int(-1) && src_height == wl_fixed_from_int(-1))
-     {
-        /* unset source size */
-        ec->comp_data->pending.buffer_viewport.buffer.src_width = wl_fixed_from_int(-1);
-        ec->comp_data->pending.buffer_viewport.changed = 1;
-        return;
-     }
-
-   if (src_width <= 0 || src_height <= 0)
-     {
-        ERR("source size must be positive (%fx%f)",
-            wl_fixed_to_double(src_width), wl_fixed_to_double(src_height));
-        struct wl_resource *surface = e_comp_wl_client_surface_get(ec);
-        wl_resource_post_error(resource,
-                               WL_VIEWPORT_ERROR_BAD_VALUE,
-                               "wl_surface@%d viewport source "
-                               "w=%f <= 0 or h=%f <= 0",
-                               wl_resource_get_id(surface),
-                               wl_fixed_to_double(src_width),
-                               wl_fixed_to_double(src_height));
-        return;
-     }
-
-   ec->comp_data->pending.buffer_viewport.buffer.src_x = src_x;
-   ec->comp_data->pending.buffer_viewport.buffer.src_y = src_y;
-   ec->comp_data->pending.buffer_viewport.buffer.src_width = src_width;
-   ec->comp_data->pending.buffer_viewport.buffer.src_height = src_height;
-   ec->comp_data->pending.buffer_viewport.changed = 1;
-}
-
-static void
-_e_viewport_cb_set_destination(struct wl_client *client EINA_UNUSED,
-                               struct wl_resource *resource,
-                               int32_t dst_width,
-                               int32_t dst_height)
-{
-   E_Client *ec;
-
-   ec = wl_resource_get_user_data(resource);
-   if (e_object_is_del(E_OBJECT(ec))) return;
-
-   EINA_SAFETY_ON_NULL_RETURN(ec->comp_data);
-   EINA_SAFETY_ON_NULL_RETURN(ec->comp_data->scaler.viewport);
-
-   if (dst_width == -1 && dst_height == -1)
-     {
-        /* unset destination size */
-        ec->comp_data->pending.buffer_viewport.surface.width = -1;
-        ec->comp_data->pending.buffer_viewport.changed = 1;
-        return;
-     }
-
-   if (dst_width <= 0 || dst_height <= 0)
-     {
-        ERR("destination size must be positive (%dx%d)", dst_width, dst_height);
-        wl_resource_post_error(resource,
-                               WL_VIEWPORT_ERROR_BAD_VALUE,
-                               "destination size must be positive (%dx%d)",
-                               dst_width, dst_height);
-        return;
-     }
-
-   ec->comp_data->pending.buffer_viewport.surface.width = dst_width;
-   ec->comp_data->pending.buffer_viewport.surface.height = dst_height;
-   ec->comp_data->pending.buffer_viewport.changed = 1;
-}
-
-static const struct wl_viewport_interface _e_viewport_interface =
-{
-   _e_viewport_cb_destroy,
-   _e_viewport_cb_set,
-   _e_viewport_cb_set_source,
-   _e_viewport_cb_set_destination
-};
-
-static void
-_e_scaler_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
-{
-   wl_resource_destroy(resource);
-}
-
-static void
-_e_scaler_cb_get_viewport(struct wl_client *client EINA_UNUSED, struct wl_resource *scaler, uint32_t id, struct wl_resource *surface_resource)
-{
-   int version;
-   E_Client *ec;
-   struct wl_resource *res;
-
-   version = wl_resource_get_version(scaler);
-   if (!(ec = e_client_from_surface_resource(surface_resource))) return;
-   if (!ec->comp_data) return;
-
-   if (ec->comp_data && ec->comp_data->scaler.viewport)
-     {
-        wl_resource_post_error(scaler,
-                               WL_SCALER_ERROR_VIEWPORT_EXISTS,
-                               "a viewport for that surface already exists");
-        return;
-     }
-
-   res = wl_resource_create(client, &wl_viewport_interface, version, id);
-   if (res == NULL)
-     {
-        wl_client_post_no_memory(client);
-        return;
-     }
-
-   ec->comp_data->scaler.viewport = res;
-   wl_resource_set_implementation(res, &_e_viewport_interface, ec, _e_viewport_destroy);
-   e_object_ref(E_OBJECT(ec));
-}
-
-static const struct wl_scaler_interface _e_scaler_interface =
-{
-   _e_scaler_cb_destroy,
-   _e_scaler_cb_get_viewport
-};
-
-static void
-_e_scaler_cb_bind(struct wl_client *client, void *data, uint32_t version, uint32_t id)
-{
-   struct wl_resource *res;
-
-   if (!(res = wl_resource_create(client, &wl_scaler_interface, MIN(version, 2), id)))
-     {
-        ERR("Could not create scaler resource: %m");
-        wl_client_post_no_memory(client);
-        return;
-     }
-
-   wl_resource_set_implementation(res, &_e_scaler_interface, NULL, NULL);
-}
-
 EINTERN int
 e_comp_wl_viewport_init(void)
 {
    if (!e_comp_wl) return 0;
    if (!e_comp_wl->wl.disp) return 0;
 
-   if (!wl_global_create(e_comp_wl->wl.disp, &wl_scaler_interface, 2,
-                         e_comp->wl_comp_data, _e_scaler_cb_bind))
+   if (!ds_tizen_scaler_create(e_comp_wl->wl.disp))
      {
-        ERR("Could not add scaler to wayland globals: %m");
+        ERR("Could not create ds_tizen_scaler");
         return 0;
      }