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,
|
void wlr_output_set_gamma(struct wlr_output *output, size_t size,
|
||||||
const uint16_t *r, const uint16_t *g, const uint16_t *b) {
|
const uint16_t *r, const uint16_t *g, const uint16_t *b) {
|
||||||
|
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(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_state_clear_gamma_lut(&output->pending);
|
||||||
|
|
||||||
output->pending.gamma_lut_size = size;
|
output->pending.gamma_lut_size = size;
|
||||||
output->pending.gamma_lut = malloc(3 * size * sizeof(uint16_t));
|
output->pending.gamma_lut = gamma_lut;
|
||||||
if (output->pending.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));
|
|
||||||
|
|
||||||
output->pending.committed |= WLR_OUTPUT_STATE_GAMMA_LUT;
|
output->pending.committed |= WLR_OUTPUT_STATE_GAMMA_LUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue