{
const Evas_Map *m;
Evas_Point p[4];
- Eina_Rectangle input_r, output_r;
- Eina_Bool res = EINA_FALSE;
+ Eina_Rectangle output_r;
uint transform;
- double u1, v1, u2, v2;
int i;
EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE);
for (i = 0; i < 4; i++)
evas_map_point_coord_get(m, i, &p[i].x, &p[i].y, NULL);
- if (_e_video_hwc_coords_to_rectangle_convert(p, &output_r, &transform))
- {
- if (memcmp(&out->output_r, &output_r, sizeof(Eina_Rectangle)) != 0)
- {
- VDB("Evas_Map Changed: dst region (%d,%d %dx%d) => (%d,%d %dx%d)",
- ec, EINA_RECTANGLE_ARGS(&out->output_r),
- EINA_RECTANGLE_ARGS(&output_r));
- res = EINA_TRUE;
- out->output_r = output_r;
- }
-
- /* 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 (out->transform != transform)
- {
- VDB("Evas_Map Changed: transform (%d) => (%d)",
- ec, out->transform, transform);
- res = EINA_TRUE;
- out->transform = transform;
- }
- }
- else
+ if (!_e_video_hwc_coords_to_rectangle_convert(p, &output_r, &transform))
{
VIN("Cannot convert given coords to rectangle.\n"
"p1(%d %d) p2(%d %d) p3(%d %d) p4(%d %d)",
ec, p[0].x, p[0].y, p[1].x, p[1].y,
p[2].x, p[2].y, p[3].x, p[3].y);
+ return EINA_FALSE;
}
- /* In order to get source region accordingly for video client requesting
- * 'tizen_viewport(or wl_viewport).set_source' without attach new buffer,
- * 'wl_surface.commit' has to be handled.
- * Or another way, since 'tizen_viewport(or wl_viewport).set_source' must
- * set values of evas_map_point_image_uv, therefore, considering values of
- * evas_map_point_image_uv can get source region as well. */
- evas_map_point_image_uv_get(m, 0, &u1, &v1);
- evas_map_point_image_uv_get(m, 2, &u2, &v2);
+ /* 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);
- _coord_to_rectangle((Evas_Point[2]){{u1, v1}, {u2, v2}}, &input_r);
+ if ((!memcmp(&out->output_r, &output_r, sizeof(Eina_Rectangle))) &&
+ (out->transform == transform))
+ return EINA_FALSE;
- if (memcmp(&out->input_r, &input_r, sizeof(Eina_Rectangle)) != 0)
- {
- VDB("Evas_Map Changed: src region (%d,%d %dx%d) => (%d,%d %dx%d)", ec,
- EINA_RECTANGLE_ARGS(&out->input_r),
- EINA_RECTANGLE_ARGS(&input_r));
- res = EINA_TRUE;
- out->input_r = input_r;
- }
+ VDB("frame(%p) m(%p) output(%d,%d %dx%d) trans(%d) => (%d,%d %dx%d) trans(%d)",
+ ec, ec->frame, m, EINA_RECTANGLE_ARGS(&out->output_r), out->transform,
+ EINA_RECTANGLE_ARGS(&output_r), transform);
+
+ out->output_r = output_r;
+ out->transform = transform;
- if (res)
- _e_video_hwc_geometry_tdm_config_update(ec, out);
+ _e_video_hwc_geometry_tdm_config_update(ec, out);
- return res;
+ return EINA_TRUE;
}
static void