aboutsummaryrefslogblamecommitdiffstats
path: root/src/lib/gamma-helper.h
blob: a15bf6baf3a0cab42b7ae67369f0ff29df4b4394 (plain) (tree)
1
2
3
   

                                                                          





















                                                                        
                                                   



                                      




                                
                        
     
                                  

     
                        



                                  
                        



                                  
                                        



                                       
                                        





                                       
   
                                                      
  

                                                 
                                                                        
                                                             
   


                                                                                   
   
                                                    
  

                                   
                                                                        
                                                             
   





                                                                            
                                                               
   

                                                                          
                                                                                     
                                                              
                                                                                            
                                                              

                                                                                          
                                                                
                                                                               
                                                                    
   

                                                                                   





                                                                   

                                                   
                                                                                     
                                                              
                                                                                            
                                                              

                                                                                          
                                                                
                                                                               
                                                                    
   

                                                                                   



                                                                   
                                                               
   

                                                                          
                                                                                     
                                                              
                                                                                            
                                                              

                                                                                          
                                                                
                                                                               
                                                                    







                                                                             
                                                       
   

                                                   
                                                                                     
                                                              
                                                                                            
                                                              

                                                                                          
                                                                
                                                                               
                                                                    








                                                                         
/**
 * libgamma -- Display server abstraction layer for gamma ramp adjustments
 * Copyright (C) 2014  Mattias Andrée (maandree@member.fsf.org)
 * 
 * This library is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this library.  If not, see <http://www.gnu.org/licenses/>.
 */
#ifndef LIBGAMMA_GAMMA_HELPER_H
#define LIBGAMMA_GAMMA_HELPER_H


#include "libgamma-method.h"


/**
 * Gamma ramp structure union for different depths.
 */
typedef union libgamma_gamma_ramps_any
{
  /**
   * 8-bit gamma ramps.
   */
  libgamma_gamma_ramps8_t bits8;
  
  /**
   * 16-bit gamma ramps.
   */
  libgamma_gamma_ramps16_t bits16;
  
  /**
   * 32-bit gamma ramps.
   */
  libgamma_gamma_ramps32_t bits32;
  
  /**
   * 64-bit gamma ramps.
   */
  libgamma_gamma_ramps64_t bits64;
  
  /**
   * Single precision float gamma ramps.
   */
  libgamma_gamma_rampsf_t float_single;
  
  /**
   * Double precision float gamma ramps.
   */
  libgamma_gamma_rampsd_t float_double;
  
} libgamma_gamma_ramps_any_t;


/**
 * A function for reading the gamma ramps from a CRTC.
 *
 * @param   this   The CRTC state.
 * @param   ramps  The store for the gamma ramps.
 * @return         Zero on success, otherwise (negative) the value of an
 *                 error identifier provided by this library.
 */
typedef int libgamma_get_ramps_any_fun(libgamma_crtc_state_t* restrict this,
				       libgamma_gamma_ramps_any_t* restrict ramps);

/**
 * A function for writing the gamma ramps to a CRTC.
 *
 * @param   this   The CRTC state.
 * @param   ramps  The gamma ramps.
 * @return         Zero on success, otherwise (negative) the value of an
 *                 error identifier provided by this library.
 */
typedef int libgamma_set_ramps_any_fun(libgamma_crtc_state_t* restrict this,
				       libgamma_gamma_ramps_any_t ramps);



/**
 * Get the current gamma ramps for a CRTC, re-encoding versio.n
 * 
 * @param   this          The CRTC state.
 * @param   ramps         The gamma ramps to fill with the current values.
 * @param   depth_user    The depth of the gamma ramps that are provided by the user,
 *                        `-1` for `float`, `-2` for `double`.
 * @param   depth_system  The depth of the gamma ramps as required by the adjustment method,
 *                        `-1` for `float`, `-2` for `double`.
 * @param   fun           Function that is to be used read the ramps, its parameters have
 *                        the same function as those of this function with the same names,
 *                        and the return value too is identical.
 * @return                Zero on success, otherwise (negative) the value of an
 *                        error identifier provided by this library.
 */
#define libgamma_translated_ramp_get(this, ramps, depth_user, depth_system, fun)  \
  libgamma_translated_ramp_get_(this, ramps, depth_user, depth_system,            \
				(libgamma_get_ramps_any_fun*)(fun))


/**
 * Set the gamma ramps for a CRTC, re-encoding version
 * 
 * @param   this          The CRTC state.
 * @param   ramps         The gamma ramps to apply.
 * @param   depth_user    The depth of the gamma ramps that are provided by the user,
 *                        `-1` for `float`, `-2` for `double`.
 * @param   depth_system  The depth of the gamma ramps as required by the adjustment method,
 *                        `-1` for `float`, `-2` for `double`.
 * @param   fun           Function that is to be used write the ramps, its parameters have
 *                        the same function as those of this function with the same names,
 *                        and the return value too is identical.
 * @return                Zero on success, otherwise (negative) the value of an
 *                        error identifier provided by this library.
 */
#define libgamma_translated_ramp_set(this, ramps, depth_user, depth_system, fun)  \
  libgamma_translated_ramp_set_(this, ramps, depth_user, depth_system,            \
				(libgamma_set_ramps_any_fun*)(fun))


/**
 * Get the current gamma ramps for a CRTC, re-encoding version.
 * 
 * @param   this          The CRTC state.
 * @param   ramps         The gamma ramps to fill with the current values.
 * @param   depth_user    The depth of the gamma ramps that are provided by the user,
 *                        `-1` for `float`, `-2` for `double`.
 * @param   depth_system  The depth of the gamma ramps as required by the adjustment method,
 *                        `-1` for `float`, `-2` for `double`.
 * @param   fun           Function that is to be used read the ramps, its parameters have
 *                        the same function as those of this function with the same names,
 *                        and the return value too is identical.
 * @return                Zero on success, otherwise (negative) the value of an
 *                        error identifier provided by this library.
 */
int libgamma_translated_ramp_get_(libgamma_crtc_state_t* restrict this,
				  libgamma_gamma_ramps_any_t* restrict ramps,
				  signed depth_user, signed depth_system,
				  libgamma_get_ramps_any_fun* fun);


/**
 * Set the gamma ramps for a CRTC, re-encoding version.
 * 
 * @param   this          The CRTC state.
 * @param   ramps         The gamma ramps to apply.
 * @param   depth_user    The depth of the gamma ramps that are provided by the user,
 *                        `-1` for `float`, `-2` for `double`.
 * @param   depth_system  The depth of the gamma ramps as required by the adjustment method,
 *                        `-1` for `float`, `-2` for `double`.
 * @param   fun           Function that is to be used write the ramps, its parameters have
 *                        the same function as those of this function with the same names,
 *                        and the return value too is identical.
 * @return                Zero on success, otherwise (negative) the value of an
 *                        error identifier provided by this library.
 */
int libgamma_translated_ramp_set_(libgamma_crtc_state_t* restrict this,
				  libgamma_gamma_ramps_any_t ramps,
				  signed depth_user, signed depth_system,
				  libgamma_set_ramps_any_fun* fun);


#endif