| // Copyright 2022 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| library fuchsia.ui.display.color; |
| using zx; |
| |
| /// The properties required to apply color conversion to the display. |
| /// The conversion is applied to each pixel of the display according to the formula: |
| /// |
| /// [coefficients * (pixel + preoffsets) + postoffsets]. |
| /// |
| /// where pixel is a column vector consisting of the pixel's 3 RGB components. |
| type ConversionProperties = table { |
| /// The |coefficients| param represents a 3x3 matrix, where the values are given in |
| /// row-major order: |
| /// |
| /// | 0 1 2 | |
| /// | 3 4 5 | |
| /// | 6 7 8 | |
| 1: coefficients array<float32, 9>; |
| /// Preoffsets and postoffsets represent a [3x1] vector each of RGB values. |
| 2: preoffsets array<float32, 3>; |
| 3: postoffsets array<float32, 3>; |
| }; |
| |
| @discoverable |
| protocol Converter { |
| |
| /// Modifies the color of final display output of rendered content. The sole parameter is a |
| /// table of |ConversionProperties|, which contains the parameters required to apply the |
| /// color conversion formula to the display. Please see |ConversionProperties| defined |
| /// above for more information. |
| /// |
| /// All parameters in the properties table must be normal 32-bit floating point values. |
| /// If any of the values do not meet this specification, the new color conversion values |
| /// will not be applied and a value of ZX_ERR_INVALID_ARGS will be returned. Otherwise, |
| /// the return value will be ZX_OK: https://en.wikipedia.org/wiki/Normal_number_%28computing%29. |
| /// |
| /// Hardware that support color conversion generally accept a limited range of coefficient |
| /// values. Coefficients in the range of [-2, 2] inclusive will be accepted by most |
| /// hardware. The hardware driver will clamp values that are outside its acceptable range. |
| /// |
| /// `preoffsets`, `postoffsets`: Clients are encourged to produce color conversion values that |
| /// do not depend on pre and post offsets since some hardware do not have support for that. |
| /// For cases where pre and post offset values need to be used, the range should be limited to |
| /// (-1, 1). |
| SetValues(resource struct { |
| properties ConversionProperties; |
| }) -> (struct { |
| res zx.status; |
| }); |
| }; |