video: Merge transform from evas_map with E_Comp_Wl_Buffer_Viewport's one. 46/216146/3
authorSeunghun Lee <shiin.lee@samsung.com>
Mon, 21 Oct 2019 10:25:27 +0000 (19:25 +0900)
committerSeunghun Lee <shiin.lee@samsung.com>
Tue, 22 Oct 2019 08:20:27 +0000 (08:20 +0000)
A transform of E_Comp_Wl_Buffer_Viewport isn't applied using Evas_Map.
So these transform has to be merged. Otherwise, a transform of
E_Comp_Wl_Buffer_Viewport will be ignored.

Change-Id: I891154cfed9909c4ad776c0095fae026ede2ad71

src/bin/video/iface/e_video_hwc.c

index 9a860903bc400b9a19f2ee479c5aab2f00262707..6ec86d9b2f5850805e91cbd2f76aeb86f237ab1a 100644 (file)
@@ -861,6 +861,23 @@ _e_video_hwc_coords_to_rectangle_convert(Evas_Point p[4], Eina_Rectangle *rect,
    return ret;
 }
 
+/**
+ * Merge transform value of E_Comp_Wl_Buffer_Viewport with given transform.
+ * @in   vp          A 'E_Comp_Wl_Buffer_Viewport' instance to be merged
+ *       transform   A transform operand to be merged
+ * @return merged result transform
+ */
+static uint
+_e_video_hwc_transform_merge_with_buffer_viewport(E_Comp_Wl_Buffer_Viewport *vp, uint transform)
+{
+   int vp_transform, flip;
+
+   vp_transform = vp->buffer.transform & 0x3;
+   flip = vp->buffer.transform & 0x4;
+
+   return (flip + (transform + vp_transform) % 4);
+}
+
 static Eina_Bool
 _e_video_hwc_geometry_map_apply(E_Client *ec, E_Video_Hwc_Geometry *out)
 {
@@ -893,6 +910,14 @@ _e_video_hwc_geometry_map_apply(E_Client *ec, E_Video_Hwc_Geometry *out)
         return EINA_FALSE;
      }
 
+   /* NOTE Merge transform value from evas_map with E_Comp_Wl_Buffer_Viewport's one.
+    * Since buffer.transform isn't applied using evas_map,
+    * it has to be taken into account here to apply buffer.transform
+    * and rotation of e_client_transform together. */
+   transform =
+      _e_video_hwc_transform_merge_with_buffer_viewport(&ec->comp_data->scaler.buffer_viewport,
+                                                        transform);
+
    if ((!memcmp(&out->output_r, &output_r, sizeof(Eina_Rectangle))) &&
        (out->transform == transform))
      return EINA_FALSE;