video: Use e_surface_buffer_source_box_get 14/320914/1
authorSeunghun Lee <shiin.lee@samsung.com>
Mon, 10 Feb 2025 03:11:33 +0000 (12:11 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 11 Mar 2025 04:41:13 +0000 (13:41 +0900)
Change-Id: I7ac2589cfc7fbae4a61c9a6348dd2bf267f5afab

src/bin/displaymgr/video/e_video_hwc.c

index f6593fd9442c08cc1ef3615f1d6b331702253e03..cc0902f83e67a44d61168c43f8c5d7d4aa206b07 100644 (file)
@@ -1540,120 +1540,19 @@ _e_video_hwc_comp_buffer_tbm_format_get(E_Comp_Wl_Buffer *comp_buffer)
    return tbm_surface_get_format(tbm_surf);
 }
 
-static tbm_surface_h
-_e_video_hwc_client_tbm_surface_get(E_Client *ec)
-{
-   E_Comp_Wl_Data *comp_wl;
-   E_Comp_Wl_Buffer *comp_buffer;
-   tbm_surface_h tbmsurf;
-
-   comp_buffer = e_pixmap_resource_get(ec->pixmap);
-   if (!comp_buffer)
-     {
-        /* No comp buffer */
-        return NULL;
-     }
-
-   comp_wl = e_comp_wl_get();
-   tbmsurf = wayland_tbm_server_get_surface(comp_wl->tbm.server,
-                                            comp_buffer->resource);
-
-   return tbmsurf;
-}
-
-static void
-buffer_transform(int width, int height, uint32_t transform, int32_t scale,
-                 int sx, int sy, int *dx, int *dy)
-{
-   switch (transform)
-     {
-      case WL_OUTPUT_TRANSFORM_NORMAL:
-      default:
-         *dx = sx, *dy = sy;
-         break;
-      case WL_OUTPUT_TRANSFORM_FLIPPED:
-         *dx = width - sx, *dy = sy;
-         break;
-      case WL_OUTPUT_TRANSFORM_90:
-         *dx = height - sy, *dy = sx;
-         break;
-      case WL_OUTPUT_TRANSFORM_FLIPPED_90:
-         *dx = height - sy, *dy = width - sx;
-         break;
-      case WL_OUTPUT_TRANSFORM_180:
-         *dx = width - sx, *dy = height - sy;
-         break;
-      case WL_OUTPUT_TRANSFORM_FLIPPED_180:
-         *dx = sx, *dy = height - sy;
-         break;
-      case WL_OUTPUT_TRANSFORM_270:
-         *dx = sy, *dy = width - sx;
-         break;
-      case WL_OUTPUT_TRANSFORM_FLIPPED_270:
-         *dx = sy, *dy = sx;
-         break;
-     }
-
-   *dx *= scale;
-   *dy *= scale;
-}
-
 static void
-_e_video_hwc_geometry_input_rect_get_with_viewport(tbm_surface_h tbm_surf, E_Comp_Wl_Buffer_Viewport *vp, Eina_Rectangle *out)
+_e_video_hwc_geometry_input_rect_get_with_viewport(E_Surface *surface, Eina_Rectangle *out)
 {
-   int bw, bh;
-   int x1, y1, x2, y2;
-   int tx1, ty1, tx2, ty2;
-   int width_from_buffer, height_from_buffer;
-
-   bw = tbm_surface_get_width(tbm_surf);
-   bh = tbm_surface_get_height(tbm_surf);
-   VDB("TBM buffer size %d %d", NULL, bw, bh);
-
-   switch (vp->buffer.transform)
-     {
-      case WL_OUTPUT_TRANSFORM_90:
-      case WL_OUTPUT_TRANSFORM_270:
-      case WL_OUTPUT_TRANSFORM_FLIPPED_90:
-      case WL_OUTPUT_TRANSFORM_FLIPPED_270:
-         width_from_buffer = bh / vp->buffer.scale;
-         height_from_buffer = bw / vp->buffer.scale;
-         break;
-      default:
-         width_from_buffer = bw / vp->buffer.scale;
-         height_from_buffer = bh / vp->buffer.scale;
-         break;
-     }
-
-   if (vp->buffer.src_width == wl_fixed_from_int(-1))
-     {
-        x1 = 0.0;
-        y1 = 0.0;
-        x2 = width_from_buffer;
-        y2 = height_from_buffer;
-     }
-   else
-     {
-        x1 = wl_fixed_to_int(vp->buffer.src_x);
-        y1 = wl_fixed_to_int(vp->buffer.src_y);
-        x2 = wl_fixed_to_int(vp->buffer.src_x + vp->buffer.src_width);
-        y2 = wl_fixed_to_int(vp->buffer.src_y + vp->buffer.src_height);
-     }
+   struct ds_fbox source_box;
 
-   VDB("transform(%d) scale(%d) buffer(%dx%d) src(%d,%d %d,%d)",
-       NULL, vp->buffer.transform, vp->buffer.scale,
-       width_from_buffer, height_from_buffer,
-       x1, y1, x2 - x1, y2 - y1);
+   e_surface_buffer_source_box_get(surface, &source_box);
 
-   buffer_transform(width_from_buffer, height_from_buffer,
-                    vp->buffer.transform, vp->buffer.scale, x1, y1, &tx1, &ty1);
-   buffer_transform(width_from_buffer, height_from_buffer,
-                    vp->buffer.transform, vp->buffer.scale, x2, y2, &tx2, &ty2);
+   out->x = (int)source_box.x;
+   out->y = (int)source_box.y;
+   out->w = (int)source_box.width;
+   out->h = (int)source_box.height;
 
-   out->x = (tx1 <= tx2) ? tx1 : tx2;
-   out->y = (ty1 <= ty2) ? ty1 : ty2;
-   out->w = (tx1 <= tx2) ? tx2 - tx1 : tx1 - tx2;
-   out->h = (ty1 <= ty2) ? ty2 - ty1 : ty1 - ty2;
+   VIN("buffer source box(%d %d %d %d)", e_surface_ec_get(surface), out->x, out->y, out->w, out->h);
 }
 
 static void
@@ -1681,24 +1580,11 @@ _e_video_hwc_geometry_output_rect_get(E_Client *ec, Eina_Rectangle *out)
 static Eina_Bool
 _e_video_hwc_geometry_viewport_apply(E_Client *ec, E_Video_Hwc_Geometry *out)
 {
-   E_Comp_Wl_Buffer_Viewport *vp;
-   tbm_surface_h tbm_surf;
-
-   EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(out, EINA_FALSE);
-
-   tbm_surf = _e_video_hwc_client_tbm_surface_get(ec);
-   if (!tbm_surf)
-     {
-        /* No tbm_surface */
-        return EINA_FALSE;
-     }
-
-   vp = &ec->comp_data->scaler.buffer_viewport;
-   _e_video_hwc_geometry_input_rect_get_with_viewport(tbm_surf, vp, &out->input_r);
+   E_Surface *surface = e_surface_from_ec(ec);
 
+   _e_video_hwc_geometry_input_rect_get_with_viewport(surface, &out->input_r);
    _e_video_hwc_geometry_output_rect_get(ec, &out->output_r);
-   out->transform = vp->buffer.transform;
+   out->transform = e_surface_buffer_transform_get(surface);
 
    VDB("geometry(%d,%d %dx%d  %d,%d %dx%d  %d)", ec,
        EINA_RECTANGLE_ARGS(&out->input_r),EINA_RECTANGLE_ARGS(&out->output_r),