compositor-drm: Disable planes when zoomed or capturing
When the entire output is transformed or we're capturing the output
for screenshot or video, disable all output specific overlays
(drm planes, hw cursors etc) and move all surfaces into the primary
plane.
diff --git a/src/screenshooter.c b/src/screenshooter.c
index aa8d0c0..ba80ce5 100644
--- a/src/screenshooter.c
+++ b/src/screenshooter.c
@@ -101,6 +101,7 @@
int32_t stride;
uint8_t *pixels, *d, *s;
+ output->disable_planes--;
wl_list_remove(&listener->link);
stride = l->buffer->width * 4;
pixels = malloc(stride * l->buffer->height);
@@ -165,6 +166,7 @@
l->listener.notify = screenshooter_frame_notify;
wl_signal_add(&output->frame_signal, &l->listener);
+ output->disable_planes++;
weston_output_schedule_repaint(output);
}
@@ -212,6 +214,7 @@
}
struct weston_recorder {
+ struct weston_output *output;
uint32_t *frame, *rect;
uint32_t total;
int fd;
@@ -346,6 +349,7 @@
recorder->rect = malloc(size);
recorder->total = 0;
recorder->count = 0;
+ recorder->output = output;
memset(recorder->frame, 0, size);
recorder->fd = open(filename,
@@ -368,6 +372,7 @@
recorder->frame_listener.notify = weston_recorder_frame_notify;
wl_signal_add(&output->frame_signal, &recorder->frame_listener);
+ output->disable_planes++;
weston_output_damage(output);
}
@@ -378,6 +383,7 @@
close(recorder->fd);
free(recorder->frame);
free(recorder->rect);
+ recorder->output->disable_planes--;
free(recorder);
}