screen-share: align read_pixels call with screenshooter
authorStefan Agner <stefan@agner.ch>
Sun, 16 Jun 2019 19:24:21 +0000 (21:24 +0200)
committerSimon Ser <contact@emersion.fr>
Fri, 16 Aug 2019 07:51:20 +0000 (07:51 +0000)
Calculate y_orig separately first makes it easer to understand the
code and aligns with how pixels are read in screenshooter.c.

Signed-off-by: Stefan Agner <stefan@agner.ch>
compositor/screen-share.c

index 4decbaaedc2479beb0199cde295ab35e17e3951f..070d3938124f5d15e7c52e5109df51a20f547180 100644 (file)
@@ -818,7 +818,7 @@ shared_output_repainted(struct wl_listener *listener, void *data)
        pixman_region32_t damage;
        struct ss_shm_buffer *sb;
        int32_t x, y, width, height, stride;
-       int i, nrects, do_yflip;
+       int i, nrects, do_yflip, y_orig;
        pixman_box32_t *r;
        uint32_t *cache_data;
 
@@ -876,19 +876,19 @@ shared_output_repainted(struct wl_listener *listener, void *data)
                width = r[i].x2 - r[i].x1;
                height = r[i].y2 - r[i].y1;
 
-               if (do_yflip) {
-                       so->output->compositor->renderer->read_pixels(
-                               so->output, PIXMAN_a8r8g8b8, so->tmp_data,
-                               x, so->output->current_mode->height - r[i].y2,
-                               width, height);
+               if (do_yflip)
+                       y_orig = so->output->current_mode->height - r[i].y2;
+               else
+                       y_orig = y;
+
+               so->output->compositor->renderer->read_pixels(
+                       so->output, PIXMAN_a8r8g8b8, so->tmp_data,
+                       x, y_orig, width, height);
 
+               if (do_yflip) {
                        pixman_blt(so->tmp_data, cache_data, -width, stride,
                                   32, 32, 0, 1 - height, x, y, width, height);
                } else {
-                       so->output->compositor->renderer->read_pixels(
-                               so->output, PIXMAN_a8r8g8b8, so->tmp_data,
-                               x, y, width, height);
-
                        pixman_blt(so->tmp_data, cache_data, width, stride,
                                   32, 32, 0, 0, x, y, width, height);
                }