mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-07 05:55:58 +01:00
output: fix wlr_output_set_gamma() with zero size
This is documented to reset the gamma LUT, but we don't handle this properly. While at it, make sure we leave wlr_output.pending in a good state on allocation failure.
This commit is contained in:
parent
ebd4c83cd6
commit
2ad25b1460
1 changed files with 13 additions and 9 deletions
|
@ -925,18 +925,22 @@ void wlr_output_send_present(struct wlr_output *output,
|
|||
|
||||
void wlr_output_set_gamma(struct wlr_output *output, size_t size,
|
||||
const uint16_t *r, const uint16_t *g, const uint16_t *b) {
|
||||
output_state_clear_gamma_lut(&output->pending);
|
||||
|
||||
output->pending.gamma_lut_size = size;
|
||||
output->pending.gamma_lut = malloc(3 * size * sizeof(uint16_t));
|
||||
if (output->pending.gamma_lut == NULL) {
|
||||
uint16_t *gamma_lut = NULL;
|
||||
if (size > 0) {
|
||||
gamma_lut = malloc(3 * size * sizeof(uint16_t));
|
||||
if (gamma_lut == NULL) {
|
||||
wlr_log_errno(WLR_ERROR, "Allocation failed");
|
||||
return;
|
||||
}
|
||||
memcpy(output->pending.gamma_lut, r, size * sizeof(uint16_t));
|
||||
memcpy(output->pending.gamma_lut + size, g, size * sizeof(uint16_t));
|
||||
memcpy(output->pending.gamma_lut + 2 * size, b, size * sizeof(uint16_t));
|
||||
memcpy(gamma_lut, r, size * sizeof(uint16_t));
|
||||
memcpy(gamma_lut + size, g, size * sizeof(uint16_t));
|
||||
memcpy(gamma_lut + 2 * size, b, size * sizeof(uint16_t));
|
||||
}
|
||||
|
||||
output_state_clear_gamma_lut(&output->pending);
|
||||
|
||||
output->pending.gamma_lut_size = size;
|
||||
output->pending.gamma_lut = gamma_lut;
|
||||
output->pending.committed |= WLR_OUTPUT_STATE_GAMMA_LUT;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue