From 5cfcb0a49008a975b458b3205cd69e3bc290b7a8 Mon Sep 17 00:00:00 2001 From: Andri Yngvason Date: Fri, 12 Jan 2024 16:25:47 +0000 Subject: [PATCH] output: Add color format to output state --- include/wlr/types/wlr_output.h | 25 +++++++++++++++++++++++++ types/output/output.c | 5 +++++ types/output/state.c | 5 +++++ 3 files changed, 35 insertions(+) diff --git a/include/wlr/types/wlr_output.h b/include/wlr/types/wlr_output.h index 55182ae53..a9088fb3c 100644 --- a/include/wlr/types/wlr_output.h +++ b/include/wlr/types/wlr_output.h @@ -26,6 +26,14 @@ enum wlr_output_mode_aspect_ratio { WLR_OUTPUT_MODE_ASPECT_RATIO_256_135, }; +enum wlr_output_color_format { + WLR_OUTPUT_COLOR_FORMAT_UNSPEC, + WLR_OUTPUT_COLOR_FORMAT_RGB, + WLR_OUTPUT_COLOR_FORMAT_YCBCR444, + WLR_OUTPUT_COLOR_FORMAT_YCBCR422, + WLR_OUTPUT_COLOR_FORMAT_YCBCR420, +}; + struct wlr_output_mode { int32_t width, height; int32_t refresh; // mHz @@ -108,6 +116,8 @@ struct wlr_output_state { struct wlr_output_layer_state *layers; size_t layers_len; + + enum wlr_output_color_format color_format; }; struct wlr_output_impl; @@ -423,6 +433,14 @@ void wlr_output_set_damage(struct wlr_output *output, */ void wlr_output_set_layers(struct wlr_output *output, struct wlr_output_layer_state *layers, size_t layers_len); + +/** + * Set the output color format. This is the color encoding the signal that + * goes out to the wire. + */ +void wlr_output_set_color_format(struct wlr_output *output, + enum wlr_output_color_format value); + /** * Test whether the pending output state would be accepted by the backend. If * this function returns true, wlr_output_commit() can only fail due to a @@ -676,6 +694,13 @@ void wlr_output_state_set_damage(struct wlr_output_state *state, void wlr_output_state_set_layers(struct wlr_output_state *state, struct wlr_output_layer_state *layers, size_t layers_len); +/** + * Set the output color format. This is the color encoding the signal that + * goes out to the wire. + */ +void wlr_output_state_set_color_format(struct wlr_output_state *state, + enum wlr_output_color_format value); + /** * Copies the output state from src to dst. It is safe to then * wlr_output_state_finish() src and have dst still be valid. diff --git a/types/output/output.c b/types/output/output.c index a97eae773..15218dc1b 100644 --- a/types/output/output.c +++ b/types/output/output.c @@ -544,6 +544,11 @@ void wlr_output_set_layers(struct wlr_output *output, wlr_output_state_set_layers(&output->pending, layers, layers_len); } +void wlr_output_set_color_format(struct wlr_output *output, + enum wlr_output_color_format value) { + wlr_output_state_set_color_format(&output->pending, value); +} + static void output_state_clear_gamma_lut(struct wlr_output_state *state) { free(state->gamma_lut); state->gamma_lut = NULL; diff --git a/types/output/state.c b/types/output/state.c index 0909b3e8a..8e843f40f 100644 --- a/types/output/state.c +++ b/types/output/state.c @@ -114,6 +114,11 @@ void wlr_output_state_set_layers(struct wlr_output_state *state, state->layers_len = layers_len; } +void wlr_output_state_set_color_format(struct wlr_output_state *state, + enum wlr_output_color_format value) { + state->color_format = value; +} + bool wlr_output_state_copy(struct wlr_output_state *dst, const struct wlr_output_state *src) { struct wlr_output_state copy = *src;