LCOV - code coverage report
Current view: top level - gfx/qcms - transform_util.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 16 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 4 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* vim: set ts=8 sw=8 noexpandtab: */
       2             : //  qcms
       3             : //  Copyright (C) 2009 Mozilla Foundation
       4             : //  Copyright (C) 1998-2007 Marti Maria
       5             : //
       6             : // Permission is hereby granted, free of charge, to any person obtaining 
       7             : // a copy of this software and associated documentation files (the "Software"), 
       8             : // to deal in the Software without restriction, including without limitation 
       9             : // the rights to use, copy, modify, merge, publish, distribute, sublicense, 
      10             : // and/or sell copies of the Software, and to permit persons to whom the Software 
      11             : // is furnished to do so, subject to the following conditions:
      12             : //
      13             : // The above copyright notice and this permission notice shall be included in 
      14             : // all copies or substantial portions of the Software.
      15             : //
      16             : // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
      17             : // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
      18             : // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
      19             : // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 
      20             : // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 
      21             : // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 
      22             : // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
      23             : 
      24             : #ifndef _QCMS_TRANSFORM_UTIL_H
      25             : #define _QCMS_TRANSFORM_UTIL_H
      26             : 
      27             : #include <stdlib.h>
      28             : #include <math.h>
      29             : 
      30             : #define CLU(table,x,y,z) table[(x*len + y*x_len + z*xy_len)*3]
      31             : 
      32             : //XXX: could use a bettername
      33             : typedef uint16_t uint16_fract_t;
      34             : 
      35             : float lut_interp_linear(double value, uint16_t *table, int length);
      36             : float lut_interp_linear_float(float value, float *table, int length);
      37             : uint16_t lut_interp_linear16(uint16_t input_value, uint16_t *table, int length);
      38             : 
      39             : 
      40           0 : static inline float lerp(float a, float b, float t)
      41             : {
      42           0 :         return a*(1.f-t) + b*t;
      43             : }
      44             : 
      45           0 : static inline unsigned char clamp_u8(float v)
      46             : {
      47           0 :   if (v > 255.)
      48           0 :     return 255;
      49           0 :   else if (v < 0)
      50           0 :     return 0;
      51             :   else
      52           0 :     return floorf(v+.5);
      53             : }
      54             : 
      55           0 : static inline float clamp_float(float a)
      56             : {
      57             :   /* One would naturally write this function as the following:
      58             :   if (a > 1.)
      59             :     return 1.;
      60             :   else if (a < 0)
      61             :     return 0;
      62             :   else
      63             :     return a;
      64             : 
      65             :   However, that version will let NaNs pass through which is undesirable
      66             :   for most consumers.
      67             :   */
      68             : 
      69           0 :   if (a > 1.)
      70           0 :     return 1.;
      71           0 :   else if (a >= 0)
      72           0 :     return a;
      73             :   else // a < 0 or a is NaN
      74           0 :     return 0;
      75             : }
      76             : 
      77           0 : static inline float u8Fixed8Number_to_float(uint16_t x)
      78             : {
      79             :   // 0x0000 = 0.
      80             :   // 0x0100 = 1.
      81             :   // 0xffff = 255  + 255/256
      82           0 :   return x/256.;
      83             : }
      84             : 
      85             : float *build_input_gamma_table(struct curveType *TRC);
      86             : struct matrix build_colorant_matrix(qcms_profile *p);
      87             : void build_output_lut(struct curveType *trc,
      88             :                       uint16_t **output_gamma_lut, size_t *output_gamma_lut_length);
      89             : 
      90             : struct matrix matrix_invert(struct matrix mat);
      91             : qcms_bool compute_precache(struct curveType *trc, uint8_t *output);
      92             : 
      93             : // Tested by GTest
      94             : #ifdef  __cplusplus
      95             : extern "C" {
      96             : #endif
      97             : 
      98             : uint16_fract_t lut_inverse_interp16(uint16_t Value, uint16_t LutTable[], int length);
      99             : 
     100             : #ifdef  __cplusplus
     101             : }
     102             : #endif
     103             : 
     104             : #endif

Generated by: LCOV version 1.13