screen-share: align read_pixels call with screenshooter

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>
dev
Stefan Agner 5 years ago committed by Simon Ser
parent 45f5e536ec
commit 2b2c9a6f7f
  1. 20
      compositor/screen-share.c

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

Loading…
Cancel
Save