diff options
| author | Mattias Andrée <maandree@kth.se> | 2016-07-17 16:42:49 +0200 | 
|---|---|---|
| committer | Mattias Andrée <maandree@kth.se> | 2016-07-17 16:42:49 +0200 | 
| commit | 671efca852ff4aefe653579136ee9b43dbc88324 (patch) | |
| tree | 2b4739606b6b82a4256fbf41668cc7c556748bdf /src/coopgamma-server | |
| parent | Restructure (diff) | |
| download | coopgammad-671efca852ff4aefe653579136ee9b43dbc88324.tar.gz coopgammad-671efca852ff4aefe653579136ee9b43dbc88324.tar.bz2 coopgammad-671efca852ff4aefe653579136ee9b43dbc88324.tar.xz | |
Continue restructure
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to '')
| -rw-r--r-- | src/coopgamma-server/server.c | 39 | ||||
| -rw-r--r-- | src/coopgamma-server/server.h | 8 | 
2 files changed, 47 insertions, 0 deletions
| diff --git a/src/coopgamma-server/server.c b/src/coopgamma-server/server.c index 8d56119..e0a5188 100644 --- a/src/coopgamma-server/server.c +++ b/src/coopgamma-server/server.c @@ -333,3 +333,42 @@ int flush_filters(struct output* restrict output, size_t first_updated)    return 0;  } + + +/** + * Preserve current gamma ramps at priority 0 for all outputs + *  + * @return  Zero on success, -1 on error + */ +int preserve_gamma(void) +{ +  size_t i; +   +  for (i = 0; i < outputs_n; i++) +    { +      struct filter filter = { +	.client   = -1, +	.priority = 0, +	.class    = NULL, +	.lifespan = LIFESPAN_UNTIL_REMOVAL, +	.ramps    = NULL +      }; +      outputs[i].table_filters = calloc(4, sizeof(*(outputs[i].table_filters))); +      outputs[i].table_sums = calloc(4, sizeof(*(outputs[i].table_sums))); +      outputs[i].table_alloc = 4; +      outputs[i].table_size = 1; +      filter.class = memdup(PKGNAME "::" COMMAND "::preserved", sizeof(PKGNAME "::" COMMAND "::preserved")); +      if (filter.class == NULL) +	return -1; +      filter.ramps = memdup(outputs[i].saved_ramps.u8.red, outputs[i].ramps_size); +      if (filter.ramps == NULL) +	return -1; +      outputs[i].table_filters[0] = filter; +      COPY_RAMP_SIZES(&(outputs[i].table_sums[0].u8), outputs + i); +      if (!gamma_ramps_unmarshal(outputs[i].table_sums, outputs[i].saved_ramps.u8.red, outputs[i].ramps_size)) +	return -1; +    } +   +  return 0; +} + diff --git a/src/coopgamma-server/server.h b/src/coopgamma-server/server.h index 971f7df..4e3bed6 100644 --- a/src/coopgamma-server/server.h +++ b/src/coopgamma-server/server.h @@ -89,5 +89,13 @@ GCC_ONLY(__attribute__((nonnull)))  int flush_filters(struct output* restrict output, size_t first_updated); +/** + * Preserve current gamma ramps at priority 0 for all outputs + *  + * @return  Zero on success, -1 on error + */ +int preserve_gamma(void); + +  #endif | 
