/*
 * this code is auto generated. do not edit. change the sources in tools/introspection/ instead.
 *
 * the parse tree:
 *
 * typedef
 *   struct dt_iop_agx_params_t
 *     float
 *     look_lift 
 *       description: lift
 *       default: 0.f
 *       range: -1.f .. 1.f
 * 
 *     float
 *     look_slope 
 *       description: slope
 *       default: 1.f
 *       range: 0.f .. 10.f
 * 
 *     float
 *     look_brightness 
 *       description: brightness
 *       default: 1.f
 *       range: 0.f .. 100.f
 * 
 *     float
 *     look_saturation 
 *       description: saturation
 *       default: 1.f
 *       range: 0.f .. 10.f
 * 
 *     float
 *     look_original_hue_mix_ratio 
 *       description: preserve hue
 *       default: 0.6f
 *       range: 0.f .. 1.f
 * 
 *     float
 *     range_black_relative_ev 
 *       description: black relative exposure
 *       default: -10.f
 *       range: -20.f .. -0.1f
 * 
 *     float
 *     range_white_relative_ev 
 *       description: white relative exposure
 *       default: 6.5f
 *       range: 0.1f .. 20.f
 * 
 *     float
 *     dynamic_range_scaling 
 *       description: dynamic range scaling
 *       default: 0.1f
 *       range: -0.5f .. 2.f
 * 
 *     float
 *     curve_pivot_x 
 *       description: pivot relative exposure
 *       default: 0.606060606061f
 *       range: 0.f .. 1.f
 * 
 *     float
 *     curve_pivot_y_linear_output 
 *       description: pivot target output
 *       default: 0.18f
 *       range: 0.f .. 1.f
 * 
 *     float
 *     curve_contrast_around_pivot 
 *       description: contrast
 *       default: 3.0f
 *       range: 0.1f .. 10.f
 * 
 *     float
 *     curve_linear_ratio_below_pivot 
 *       description: toe start
 *       default: 0.f
 *       range: 0.f .. 1.f
 * 
 *     float
 *     curve_linear_ratio_above_pivot 
 *       description: shoulder start
 *       default: 0.f
 *       range: 0.f .. 1.f
 * 
 *     float
 *     curve_toe_power 
 *       description: toe power
 *       default: 1.5f
 *       range: 0.f .. 10.f
 * 
 *     float
 *     curve_shoulder_power 
 *       description: shoulder power
 *       default: 3.3f
 *       range: 0.f .. 10.f
 * 
 *     float
 *     curve_gamma 
 *       description: curve y gamma
 *       default: 2.2f
 *       range: 0.01f .. 100.f
 * 
 *     boolean
 *     auto_gamma 
 *       description: keep the pivot on the diagonal
 *       default: FALSE
 * 
 *     float
 *     curve_target_display_black_ratio 
 *       description: target black
 *       default: 0.f
 *       range: 0.f .. 0.15f
 * 
 *     float
 *     curve_target_display_white_ratio 
 *       description: target white
 *       default: 1.f
 *       range: 0.2f .. 1.f
 * 
 *     enum dt_iop_agx_base_primaries_t
 *       DT_AGX_EXPORT_PROFILE : export profile
 *       DT_AGX_WORK_PROFILE : working profile
 *       DT_AGX_REC2020 : Rec2020
 *       DT_AGX_DISPLAY_P3 : Display P3
 *       DT_AGX_ADOBE_RGB : Adobe RGB (compatible)
 *       DT_AGX_SRGB : sRGB
 *     base_primaries 
 *       description: base primaries
 *       default: DT_AGX_REC2020
 * 
 *     boolean
 *     disable_primaries_adjustments 
 *       description: disable adjustments
 *       default: FALSE
 * 
 *     float
 *     red_inset 
 *       description: red attenuation
 *       default: 0.f
 *       range: 0.f .. 0.99f
 * 
 *     float
 *     red_rotation 
 *       description: red rotation
 *       default: 0.f
 *       range: -0.5236f .. 0.5236f
 * 
 *     float
 *     green_inset 
 *       description: green attenuation
 *       default: 0.f
 *       range: 0.f .. 0.99f
 * 
 *     float
 *     green_rotation 
 *       description: green rotation
 *       default: 0.f
 *       range: -0.5236f .. 0.5236f
 * 
 *     float
 *     blue_inset 
 *       description: blue attenuation
 *       default: 0.f
 *       range: 0.f .. 0.99f
 * 
 *     float
 *     blue_rotation 
 *       description: blue rotation
 *       default: 0.f
 *       range: -0.5236f .. 0.5236f
 * 
 *     float
 *     master_outset_ratio 
 *       description: master purity boost
 *       default: 1.f
 *       range: 0.f .. 2.f
 * 
 *     float
 *     master_unrotation_ratio 
 *       description: master rotation reversal
 *       default: 1.f
 *       range: 0.f .. 2.f
 * 
 *     float
 *     red_outset 
 *       description: red purity boost
 *       default: 0.f
 *       range: 0.f .. 0.99f
 * 
 *     float
 *     red_unrotation 
 *       description: red reverse rotation
 *       default: 0.f
 *       range: -0.5236f .. 0.5236f
 * 
 *     float
 *     green_outset 
 *       description: green purity boost
 *       default: 0.f
 *       range: 0.f .. 0.99f
 * 
 *     float
 *     green_unrotation 
 *       description: green reverse rotation
 *       default: 0.f
 *       range: -0.5236f .. 0.5236f
 * 
 *     float
 *     blue_outset 
 *       description: blue purity boost
 *       default: 0.f
 *       range: 0.f .. 0.99f
 * 
 *     float
 *     blue_unrotation 
 *       description: blue reverse rotation
 *       default: 0.f
 *       range: -0.5236f .. 0.5236f
 * 
 *     boolean
 *     completely_reverse_primaries 
 *       description: reverse all
 *       default: FALSE
 * 
 * dt_iop_agx_params_t
 *
 */

#include "/build/darktable/src/darktable-5.6.0/src/iop/agx.c"

#ifdef __cplusplus
extern "C"
{
#endif

#include <string.h>
#include "common/introspection.h"

static dt_introspection_field_t introspection_linear[37+1]
#if !( defined(__cplusplus) && !defined(__clang__) && defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) <= 406) )
= {
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"look_lift", (char*)"look_lift", N_((char*)"lift"), sizeof(((dt_iop_agx_params_t*)NULL)->look_lift), G_STRUCT_OFFSET(dt_iop_agx_params_t, look_lift), NULL },
    /*Min*/ -1.f, /*Max*/ 1.f, /*Default*/ 0.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"look_slope", (char*)"look_slope", N_((char*)"slope"), sizeof(((dt_iop_agx_params_t*)NULL)->look_slope), G_STRUCT_OFFSET(dt_iop_agx_params_t, look_slope), NULL },
    /*Min*/ 0.f, /*Max*/ 10.f, /*Default*/ 1.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"look_brightness", (char*)"look_brightness", N_((char*)"brightness"), sizeof(((dt_iop_agx_params_t*)NULL)->look_brightness), G_STRUCT_OFFSET(dt_iop_agx_params_t, look_brightness), NULL },
    /*Min*/ 0.f, /*Max*/ 100.f, /*Default*/ 1.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"look_saturation", (char*)"look_saturation", N_((char*)"saturation"), sizeof(((dt_iop_agx_params_t*)NULL)->look_saturation), G_STRUCT_OFFSET(dt_iop_agx_params_t, look_saturation), NULL },
    /*Min*/ 0.f, /*Max*/ 10.f, /*Default*/ 1.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"look_original_hue_mix_ratio", (char*)"look_original_hue_mix_ratio", N_((char*)"preserve hue"), sizeof(((dt_iop_agx_params_t*)NULL)->look_original_hue_mix_ratio), G_STRUCT_OFFSET(dt_iop_agx_params_t, look_original_hue_mix_ratio), NULL },
    /*Min*/ 0.f, /*Max*/ 1.f, /*Default*/ 0.6f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"range_black_relative_ev", (char*)"range_black_relative_ev", N_((char*)"black relative exposure"), sizeof(((dt_iop_agx_params_t*)NULL)->range_black_relative_ev), G_STRUCT_OFFSET(dt_iop_agx_params_t, range_black_relative_ev), NULL },
    /*Min*/ -20.f, /*Max*/ -0.1f, /*Default*/ -10.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"range_white_relative_ev", (char*)"range_white_relative_ev", N_((char*)"white relative exposure"), sizeof(((dt_iop_agx_params_t*)NULL)->range_white_relative_ev), G_STRUCT_OFFSET(dt_iop_agx_params_t, range_white_relative_ev), NULL },
    /*Min*/ 0.1f, /*Max*/ 20.f, /*Default*/ 6.5f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"dynamic_range_scaling", (char*)"dynamic_range_scaling", N_((char*)"dynamic range scaling"), sizeof(((dt_iop_agx_params_t*)NULL)->dynamic_range_scaling), G_STRUCT_OFFSET(dt_iop_agx_params_t, dynamic_range_scaling), NULL },
    /*Min*/ -0.5f, /*Max*/ 2.f, /*Default*/ 0.1f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_pivot_x", (char*)"curve_pivot_x", N_((char*)"pivot relative exposure"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_pivot_x), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_pivot_x), NULL },
    /*Min*/ 0.f, /*Max*/ 1.f, /*Default*/ 0.606060606061f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_pivot_y_linear_output", (char*)"curve_pivot_y_linear_output", N_((char*)"pivot target output"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_pivot_y_linear_output), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_pivot_y_linear_output), NULL },
    /*Min*/ 0.f, /*Max*/ 1.f, /*Default*/ 0.18f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_contrast_around_pivot", (char*)"curve_contrast_around_pivot", N_((char*)"contrast"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_contrast_around_pivot), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_contrast_around_pivot), NULL },
    /*Min*/ 0.1f, /*Max*/ 10.f, /*Default*/ 3.0f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_linear_ratio_below_pivot", (char*)"curve_linear_ratio_below_pivot", N_((char*)"toe start"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_linear_ratio_below_pivot), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_linear_ratio_below_pivot), NULL },
    /*Min*/ 0.f, /*Max*/ 1.f, /*Default*/ 0.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_linear_ratio_above_pivot", (char*)"curve_linear_ratio_above_pivot", N_((char*)"shoulder start"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_linear_ratio_above_pivot), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_linear_ratio_above_pivot), NULL },
    /*Min*/ 0.f, /*Max*/ 1.f, /*Default*/ 0.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_toe_power", (char*)"curve_toe_power", N_((char*)"toe power"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_toe_power), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_toe_power), NULL },
    /*Min*/ 0.f, /*Max*/ 10.f, /*Default*/ 1.5f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_shoulder_power", (char*)"curve_shoulder_power", N_((char*)"shoulder power"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_shoulder_power), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_shoulder_power), NULL },
    /*Min*/ 0.f, /*Max*/ 10.f, /*Default*/ 3.3f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_gamma", (char*)"curve_gamma", N_((char*)"curve y gamma"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_gamma), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_gamma), NULL },
    /*Min*/ 0.01f, /*Max*/ 100.f, /*Default*/ 2.2f
  }
},
{
  .Bool = {
    { DT_INTROSPECTION_TYPE_BOOL, (char*)"bool", (char*)"auto_gamma", (char*)"auto_gamma", N_((char*)"keep the pivot on the diagonal"), sizeof(((dt_iop_agx_params_t*)NULL)->auto_gamma), G_STRUCT_OFFSET(dt_iop_agx_params_t, auto_gamma), NULL },
    /*Default*/ FALSE
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_target_display_black_ratio", (char*)"curve_target_display_black_ratio", N_((char*)"target black"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_target_display_black_ratio), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_target_display_black_ratio), NULL },
    /*Min*/ 0.f, /*Max*/ 0.15f, /*Default*/ 0.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_target_display_white_ratio", (char*)"curve_target_display_white_ratio", N_((char*)"target white"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_target_display_white_ratio), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_target_display_white_ratio), NULL },
    /*Min*/ 0.2f, /*Max*/ 1.f, /*Default*/ 1.f
  }
},
{
  .Enum = {
    { DT_INTROSPECTION_TYPE_ENUM, (char*)"dt_iop_agx_base_primaries_t", (char*)"base_primaries", (char*)"base_primaries", N_((char*)"base primaries"), sizeof(((dt_iop_agx_params_t*)NULL)->base_primaries), G_STRUCT_OFFSET(dt_iop_agx_params_t, base_primaries), NULL },
    /*entries*/ 6, /*values*/ NULL, /*Default*/ DT_AGX_REC2020
  }
},
{
  .Bool = {
    { DT_INTROSPECTION_TYPE_BOOL, (char*)"bool", (char*)"disable_primaries_adjustments", (char*)"disable_primaries_adjustments", N_((char*)"disable adjustments"), sizeof(((dt_iop_agx_params_t*)NULL)->disable_primaries_adjustments), G_STRUCT_OFFSET(dt_iop_agx_params_t, disable_primaries_adjustments), NULL },
    /*Default*/ FALSE
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"red_inset", (char*)"red_inset", N_((char*)"red attenuation"), sizeof(((dt_iop_agx_params_t*)NULL)->red_inset), G_STRUCT_OFFSET(dt_iop_agx_params_t, red_inset), NULL },
    /*Min*/ 0.f, /*Max*/ 0.99f, /*Default*/ 0.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"red_rotation", (char*)"red_rotation", N_((char*)"red rotation"), sizeof(((dt_iop_agx_params_t*)NULL)->red_rotation), G_STRUCT_OFFSET(dt_iop_agx_params_t, red_rotation), NULL },
    /*Min*/ -0.5236f, /*Max*/ 0.5236f, /*Default*/ 0.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"green_inset", (char*)"green_inset", N_((char*)"green attenuation"), sizeof(((dt_iop_agx_params_t*)NULL)->green_inset), G_STRUCT_OFFSET(dt_iop_agx_params_t, green_inset), NULL },
    /*Min*/ 0.f, /*Max*/ 0.99f, /*Default*/ 0.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"green_rotation", (char*)"green_rotation", N_((char*)"green rotation"), sizeof(((dt_iop_agx_params_t*)NULL)->green_rotation), G_STRUCT_OFFSET(dt_iop_agx_params_t, green_rotation), NULL },
    /*Min*/ -0.5236f, /*Max*/ 0.5236f, /*Default*/ 0.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"blue_inset", (char*)"blue_inset", N_((char*)"blue attenuation"), sizeof(((dt_iop_agx_params_t*)NULL)->blue_inset), G_STRUCT_OFFSET(dt_iop_agx_params_t, blue_inset), NULL },
    /*Min*/ 0.f, /*Max*/ 0.99f, /*Default*/ 0.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"blue_rotation", (char*)"blue_rotation", N_((char*)"blue rotation"), sizeof(((dt_iop_agx_params_t*)NULL)->blue_rotation), G_STRUCT_OFFSET(dt_iop_agx_params_t, blue_rotation), NULL },
    /*Min*/ -0.5236f, /*Max*/ 0.5236f, /*Default*/ 0.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"master_outset_ratio", (char*)"master_outset_ratio", N_((char*)"master purity boost"), sizeof(((dt_iop_agx_params_t*)NULL)->master_outset_ratio), G_STRUCT_OFFSET(dt_iop_agx_params_t, master_outset_ratio), NULL },
    /*Min*/ 0.f, /*Max*/ 2.f, /*Default*/ 1.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"master_unrotation_ratio", (char*)"master_unrotation_ratio", N_((char*)"master rotation reversal"), sizeof(((dt_iop_agx_params_t*)NULL)->master_unrotation_ratio), G_STRUCT_OFFSET(dt_iop_agx_params_t, master_unrotation_ratio), NULL },
    /*Min*/ 0.f, /*Max*/ 2.f, /*Default*/ 1.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"red_outset", (char*)"red_outset", N_((char*)"red purity boost"), sizeof(((dt_iop_agx_params_t*)NULL)->red_outset), G_STRUCT_OFFSET(dt_iop_agx_params_t, red_outset), NULL },
    /*Min*/ 0.f, /*Max*/ 0.99f, /*Default*/ 0.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"red_unrotation", (char*)"red_unrotation", N_((char*)"red reverse rotation"), sizeof(((dt_iop_agx_params_t*)NULL)->red_unrotation), G_STRUCT_OFFSET(dt_iop_agx_params_t, red_unrotation), NULL },
    /*Min*/ -0.5236f, /*Max*/ 0.5236f, /*Default*/ 0.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"green_outset", (char*)"green_outset", N_((char*)"green purity boost"), sizeof(((dt_iop_agx_params_t*)NULL)->green_outset), G_STRUCT_OFFSET(dt_iop_agx_params_t, green_outset), NULL },
    /*Min*/ 0.f, /*Max*/ 0.99f, /*Default*/ 0.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"green_unrotation", (char*)"green_unrotation", N_((char*)"green reverse rotation"), sizeof(((dt_iop_agx_params_t*)NULL)->green_unrotation), G_STRUCT_OFFSET(dt_iop_agx_params_t, green_unrotation), NULL },
    /*Min*/ -0.5236f, /*Max*/ 0.5236f, /*Default*/ 0.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"blue_outset", (char*)"blue_outset", N_((char*)"blue purity boost"), sizeof(((dt_iop_agx_params_t*)NULL)->blue_outset), G_STRUCT_OFFSET(dt_iop_agx_params_t, blue_outset), NULL },
    /*Min*/ 0.f, /*Max*/ 0.99f, /*Default*/ 0.f
  }
},
{
  .Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"blue_unrotation", (char*)"blue_unrotation", N_((char*)"blue reverse rotation"), sizeof(((dt_iop_agx_params_t*)NULL)->blue_unrotation), G_STRUCT_OFFSET(dt_iop_agx_params_t, blue_unrotation), NULL },
    /*Min*/ -0.5236f, /*Max*/ 0.5236f, /*Default*/ 0.f
  }
},
{
  .Bool = {
    { DT_INTROSPECTION_TYPE_BOOL, (char*)"bool", (char*)"completely_reverse_primaries", (char*)"completely_reverse_primaries", N_((char*)"reverse all"), sizeof(((dt_iop_agx_params_t*)NULL)->completely_reverse_primaries), G_STRUCT_OFFSET(dt_iop_agx_params_t, completely_reverse_primaries), NULL },
    /*Default*/ FALSE
  }
},
{
  .Struct = {
    { DT_INTROSPECTION_TYPE_STRUCT, (char*)"dt_iop_agx_params_t", (char*)"", (char*)"", (char*)"", sizeof(dt_iop_agx_params_t), 0, NULL },
    /*entries*/ 36, /*fields*/ NULL
  }
},
  { .header = {DT_INTROSPECTION_TYPE_NONE, NULL, NULL, NULL, NULL, 0, 0, NULL} }
}
#endif
;

static dt_introspection_t introspection = {
  8,
  7,
  "dt_iop_agx_params_t",
  sizeof(dt_iop_agx_params_t),
  &introspection_linear[37-1],
  sizeof(dt_iop_module_t),
  G_STRUCT_OFFSET(dt_iop_module_t, default_params)
};

dt_introspection_field_t* get_introspection_linear()
{
  return introspection_linear;
}

dt_introspection_t* get_introspection()
{
  return &introspection;
}

int introspection_init(struct dt_iop_module_so_t *self, int api_version)
{
  // here we check that the generated code matches the api at compile time and also at runtime
  if(introspection.api_version != DT_INTROSPECTION_VERSION || api_version != DT_INTROSPECTION_VERSION)
    return 1;

#if defined(__cplusplus) && !defined(__clang__) && defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) <= 406)
  introspection_linear[0].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"look_lift", (char*)"look_lift", N_((char*)"lift"), sizeof(((dt_iop_agx_params_t*)NULL)->look_lift), G_STRUCT_OFFSET(dt_iop_agx_params_t, look_lift), NULL },
    /*Min*/ -1.f, /*Max*/ 1.f, /*Default*/ 0.f
  };
  introspection_linear[1].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"look_slope", (char*)"look_slope", N_((char*)"slope"), sizeof(((dt_iop_agx_params_t*)NULL)->look_slope), G_STRUCT_OFFSET(dt_iop_agx_params_t, look_slope), NULL },
    /*Min*/ 0.f, /*Max*/ 10.f, /*Default*/ 1.f
  };
  introspection_linear[2].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"look_brightness", (char*)"look_brightness", N_((char*)"brightness"), sizeof(((dt_iop_agx_params_t*)NULL)->look_brightness), G_STRUCT_OFFSET(dt_iop_agx_params_t, look_brightness), NULL },
    /*Min*/ 0.f, /*Max*/ 100.f, /*Default*/ 1.f
  };
  introspection_linear[3].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"look_saturation", (char*)"look_saturation", N_((char*)"saturation"), sizeof(((dt_iop_agx_params_t*)NULL)->look_saturation), G_STRUCT_OFFSET(dt_iop_agx_params_t, look_saturation), NULL },
    /*Min*/ 0.f, /*Max*/ 10.f, /*Default*/ 1.f
  };
  introspection_linear[4].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"look_original_hue_mix_ratio", (char*)"look_original_hue_mix_ratio", N_((char*)"preserve hue"), sizeof(((dt_iop_agx_params_t*)NULL)->look_original_hue_mix_ratio), G_STRUCT_OFFSET(dt_iop_agx_params_t, look_original_hue_mix_ratio), NULL },
    /*Min*/ 0.f, /*Max*/ 1.f, /*Default*/ 0.6f
  };
  introspection_linear[5].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"range_black_relative_ev", (char*)"range_black_relative_ev", N_((char*)"black relative exposure"), sizeof(((dt_iop_agx_params_t*)NULL)->range_black_relative_ev), G_STRUCT_OFFSET(dt_iop_agx_params_t, range_black_relative_ev), NULL },
    /*Min*/ -20.f, /*Max*/ -0.1f, /*Default*/ -10.f
  };
  introspection_linear[6].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"range_white_relative_ev", (char*)"range_white_relative_ev", N_((char*)"white relative exposure"), sizeof(((dt_iop_agx_params_t*)NULL)->range_white_relative_ev), G_STRUCT_OFFSET(dt_iop_agx_params_t, range_white_relative_ev), NULL },
    /*Min*/ 0.1f, /*Max*/ 20.f, /*Default*/ 6.5f
  };
  introspection_linear[7].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"dynamic_range_scaling", (char*)"dynamic_range_scaling", N_((char*)"dynamic range scaling"), sizeof(((dt_iop_agx_params_t*)NULL)->dynamic_range_scaling), G_STRUCT_OFFSET(dt_iop_agx_params_t, dynamic_range_scaling), NULL },
    /*Min*/ -0.5f, /*Max*/ 2.f, /*Default*/ 0.1f
  };
  introspection_linear[8].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_pivot_x", (char*)"curve_pivot_x", N_((char*)"pivot relative exposure"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_pivot_x), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_pivot_x), NULL },
    /*Min*/ 0.f, /*Max*/ 1.f, /*Default*/ 0.606060606061f
  };
  introspection_linear[9].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_pivot_y_linear_output", (char*)"curve_pivot_y_linear_output", N_((char*)"pivot target output"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_pivot_y_linear_output), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_pivot_y_linear_output), NULL },
    /*Min*/ 0.f, /*Max*/ 1.f, /*Default*/ 0.18f
  };
  introspection_linear[10].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_contrast_around_pivot", (char*)"curve_contrast_around_pivot", N_((char*)"contrast"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_contrast_around_pivot), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_contrast_around_pivot), NULL },
    /*Min*/ 0.1f, /*Max*/ 10.f, /*Default*/ 3.0f
  };
  introspection_linear[11].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_linear_ratio_below_pivot", (char*)"curve_linear_ratio_below_pivot", N_((char*)"toe start"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_linear_ratio_below_pivot), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_linear_ratio_below_pivot), NULL },
    /*Min*/ 0.f, /*Max*/ 1.f, /*Default*/ 0.f
  };
  introspection_linear[12].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_linear_ratio_above_pivot", (char*)"curve_linear_ratio_above_pivot", N_((char*)"shoulder start"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_linear_ratio_above_pivot), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_linear_ratio_above_pivot), NULL },
    /*Min*/ 0.f, /*Max*/ 1.f, /*Default*/ 0.f
  };
  introspection_linear[13].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_toe_power", (char*)"curve_toe_power", N_((char*)"toe power"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_toe_power), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_toe_power), NULL },
    /*Min*/ 0.f, /*Max*/ 10.f, /*Default*/ 1.5f
  };
  introspection_linear[14].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_shoulder_power", (char*)"curve_shoulder_power", N_((char*)"shoulder power"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_shoulder_power), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_shoulder_power), NULL },
    /*Min*/ 0.f, /*Max*/ 10.f, /*Default*/ 3.3f
  };
  introspection_linear[15].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_gamma", (char*)"curve_gamma", N_((char*)"curve y gamma"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_gamma), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_gamma), NULL },
    /*Min*/ 0.01f, /*Max*/ 100.f, /*Default*/ 2.2f
  };
  introspection_linear[16].Bool = {
    { DT_INTROSPECTION_TYPE_BOOL, (char*)"bool", (char*)"auto_gamma", (char*)"auto_gamma", N_((char*)"keep the pivot on the diagonal"), sizeof(((dt_iop_agx_params_t*)NULL)->auto_gamma), G_STRUCT_OFFSET(dt_iop_agx_params_t, auto_gamma), NULL },
    /*Default*/ FALSE
  };
  introspection_linear[17].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_target_display_black_ratio", (char*)"curve_target_display_black_ratio", N_((char*)"target black"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_target_display_black_ratio), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_target_display_black_ratio), NULL },
    /*Min*/ 0.f, /*Max*/ 0.15f, /*Default*/ 0.f
  };
  introspection_linear[18].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"curve_target_display_white_ratio", (char*)"curve_target_display_white_ratio", N_((char*)"target white"), sizeof(((dt_iop_agx_params_t*)NULL)->curve_target_display_white_ratio), G_STRUCT_OFFSET(dt_iop_agx_params_t, curve_target_display_white_ratio), NULL },
    /*Min*/ 0.2f, /*Max*/ 1.f, /*Default*/ 1.f
  };
  introspection_linear[19].Enum = {
    { DT_INTROSPECTION_TYPE_ENUM, (char*)"dt_iop_agx_base_primaries_t", (char*)"base_primaries", (char*)"base_primaries", N_((char*)"base primaries"), sizeof(((dt_iop_agx_params_t*)NULL)->base_primaries), G_STRUCT_OFFSET(dt_iop_agx_params_t, base_primaries), NULL },
    /*entries*/ 6, /*values*/ NULL, /*Default*/ DT_AGX_REC2020
  };
  introspection_linear[20].Bool = {
    { DT_INTROSPECTION_TYPE_BOOL, (char*)"bool", (char*)"disable_primaries_adjustments", (char*)"disable_primaries_adjustments", N_((char*)"disable adjustments"), sizeof(((dt_iop_agx_params_t*)NULL)->disable_primaries_adjustments), G_STRUCT_OFFSET(dt_iop_agx_params_t, disable_primaries_adjustments), NULL },
    /*Default*/ FALSE
  };
  introspection_linear[21].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"red_inset", (char*)"red_inset", N_((char*)"red attenuation"), sizeof(((dt_iop_agx_params_t*)NULL)->red_inset), G_STRUCT_OFFSET(dt_iop_agx_params_t, red_inset), NULL },
    /*Min*/ 0.f, /*Max*/ 0.99f, /*Default*/ 0.f
  };
  introspection_linear[22].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"red_rotation", (char*)"red_rotation", N_((char*)"red rotation"), sizeof(((dt_iop_agx_params_t*)NULL)->red_rotation), G_STRUCT_OFFSET(dt_iop_agx_params_t, red_rotation), NULL },
    /*Min*/ -0.5236f, /*Max*/ 0.5236f, /*Default*/ 0.f
  };
  introspection_linear[23].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"green_inset", (char*)"green_inset", N_((char*)"green attenuation"), sizeof(((dt_iop_agx_params_t*)NULL)->green_inset), G_STRUCT_OFFSET(dt_iop_agx_params_t, green_inset), NULL },
    /*Min*/ 0.f, /*Max*/ 0.99f, /*Default*/ 0.f
  };
  introspection_linear[24].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"green_rotation", (char*)"green_rotation", N_((char*)"green rotation"), sizeof(((dt_iop_agx_params_t*)NULL)->green_rotation), G_STRUCT_OFFSET(dt_iop_agx_params_t, green_rotation), NULL },
    /*Min*/ -0.5236f, /*Max*/ 0.5236f, /*Default*/ 0.f
  };
  introspection_linear[25].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"blue_inset", (char*)"blue_inset", N_((char*)"blue attenuation"), sizeof(((dt_iop_agx_params_t*)NULL)->blue_inset), G_STRUCT_OFFSET(dt_iop_agx_params_t, blue_inset), NULL },
    /*Min*/ 0.f, /*Max*/ 0.99f, /*Default*/ 0.f
  };
  introspection_linear[26].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"blue_rotation", (char*)"blue_rotation", N_((char*)"blue rotation"), sizeof(((dt_iop_agx_params_t*)NULL)->blue_rotation), G_STRUCT_OFFSET(dt_iop_agx_params_t, blue_rotation), NULL },
    /*Min*/ -0.5236f, /*Max*/ 0.5236f, /*Default*/ 0.f
  };
  introspection_linear[27].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"master_outset_ratio", (char*)"master_outset_ratio", N_((char*)"master purity boost"), sizeof(((dt_iop_agx_params_t*)NULL)->master_outset_ratio), G_STRUCT_OFFSET(dt_iop_agx_params_t, master_outset_ratio), NULL },
    /*Min*/ 0.f, /*Max*/ 2.f, /*Default*/ 1.f
  };
  introspection_linear[28].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"master_unrotation_ratio", (char*)"master_unrotation_ratio", N_((char*)"master rotation reversal"), sizeof(((dt_iop_agx_params_t*)NULL)->master_unrotation_ratio), G_STRUCT_OFFSET(dt_iop_agx_params_t, master_unrotation_ratio), NULL },
    /*Min*/ 0.f, /*Max*/ 2.f, /*Default*/ 1.f
  };
  introspection_linear[29].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"red_outset", (char*)"red_outset", N_((char*)"red purity boost"), sizeof(((dt_iop_agx_params_t*)NULL)->red_outset), G_STRUCT_OFFSET(dt_iop_agx_params_t, red_outset), NULL },
    /*Min*/ 0.f, /*Max*/ 0.99f, /*Default*/ 0.f
  };
  introspection_linear[30].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"red_unrotation", (char*)"red_unrotation", N_((char*)"red reverse rotation"), sizeof(((dt_iop_agx_params_t*)NULL)->red_unrotation), G_STRUCT_OFFSET(dt_iop_agx_params_t, red_unrotation), NULL },
    /*Min*/ -0.5236f, /*Max*/ 0.5236f, /*Default*/ 0.f
  };
  introspection_linear[31].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"green_outset", (char*)"green_outset", N_((char*)"green purity boost"), sizeof(((dt_iop_agx_params_t*)NULL)->green_outset), G_STRUCT_OFFSET(dt_iop_agx_params_t, green_outset), NULL },
    /*Min*/ 0.f, /*Max*/ 0.99f, /*Default*/ 0.f
  };
  introspection_linear[32].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"green_unrotation", (char*)"green_unrotation", N_((char*)"green reverse rotation"), sizeof(((dt_iop_agx_params_t*)NULL)->green_unrotation), G_STRUCT_OFFSET(dt_iop_agx_params_t, green_unrotation), NULL },
    /*Min*/ -0.5236f, /*Max*/ 0.5236f, /*Default*/ 0.f
  };
  introspection_linear[33].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"blue_outset", (char*)"blue_outset", N_((char*)"blue purity boost"), sizeof(((dt_iop_agx_params_t*)NULL)->blue_outset), G_STRUCT_OFFSET(dt_iop_agx_params_t, blue_outset), NULL },
    /*Min*/ 0.f, /*Max*/ 0.99f, /*Default*/ 0.f
  };
  introspection_linear[34].Float = {
    { DT_INTROSPECTION_TYPE_FLOAT, (char*)"float", (char*)"blue_unrotation", (char*)"blue_unrotation", N_((char*)"blue reverse rotation"), sizeof(((dt_iop_agx_params_t*)NULL)->blue_unrotation), G_STRUCT_OFFSET(dt_iop_agx_params_t, blue_unrotation), NULL },
    /*Min*/ -0.5236f, /*Max*/ 0.5236f, /*Default*/ 0.f
  };
  introspection_linear[35].Bool = {
    { DT_INTROSPECTION_TYPE_BOOL, (char*)"bool", (char*)"completely_reverse_primaries", (char*)"completely_reverse_primaries", N_((char*)"reverse all"), sizeof(((dt_iop_agx_params_t*)NULL)->completely_reverse_primaries), G_STRUCT_OFFSET(dt_iop_agx_params_t, completely_reverse_primaries), NULL },
    /*Default*/ FALSE
  };
  introspection_linear[36].Struct = {
    { DT_INTROSPECTION_TYPE_STRUCT, (char*)"dt_iop_agx_params_t", (char*)"", (char*)"", (char*)"", sizeof(dt_iop_agx_params_t), 0, NULL },
    /*entries*/ 36, /*fields*/ NULL
  };
  introspection_linear[37].header = {DT_INTROSPECTION_TYPE_NONE, NULL, NULL, NULL, NULL, 0, 0, NULL};
#endif

  for(int i = 0; i <= 37; i++)
    introspection_linear[i].header.so = self;

  static dt_introspection_type_enum_tuple_t f19[] = { 
    { "DT_AGX_EXPORT_PROFILE", DT_AGX_EXPORT_PROFILE, N_((char*)"export profile") },
    { "DT_AGX_WORK_PROFILE", DT_AGX_WORK_PROFILE, N_((char*)"working profile") },
    { "DT_AGX_REC2020", DT_AGX_REC2020, N_((char*)"Rec2020") },
    { "DT_AGX_DISPLAY_P3", DT_AGX_DISPLAY_P3, N_((char*)"Display P3") },
    { "DT_AGX_ADOBE_RGB", DT_AGX_ADOBE_RGB, N_((char*)"Adobe RGB (compatible)") },
    { "DT_AGX_SRGB", DT_AGX_SRGB, N_((char*)"sRGB") },
    { NULL, 0 },
  };
  static dt_introspection_field_t *f36[] = {
    &introspection_linear[0],
    &introspection_linear[1],
    &introspection_linear[2],
    &introspection_linear[3],
    &introspection_linear[4],
    &introspection_linear[5],
    &introspection_linear[6],
    &introspection_linear[7],
    &introspection_linear[8],
    &introspection_linear[9],
    &introspection_linear[10],
    &introspection_linear[11],
    &introspection_linear[12],
    &introspection_linear[13],
    &introspection_linear[14],
    &introspection_linear[15],
    &introspection_linear[16],
    &introspection_linear[17],
    &introspection_linear[18],
    &introspection_linear[19],
    &introspection_linear[20],
    &introspection_linear[21],
    &introspection_linear[22],
    &introspection_linear[23],
    &introspection_linear[24],
    &introspection_linear[25],
    &introspection_linear[26],
    &introspection_linear[27],
    &introspection_linear[28],
    &introspection_linear[29],
    &introspection_linear[30],
    &introspection_linear[31],
    &introspection_linear[32],
    &introspection_linear[33],
    &introspection_linear[34],
    &introspection_linear[35],
    NULL
  };

  introspection_linear[19].Enum.values = f19;
  introspection_linear[36].Struct.fields = f36;

  return 0;
}

void * get_p(const void * param, const char * name)
{
  dt_iop_agx_params_t * p = (dt_iop_agx_params_t*)param;
  if(!strcmp(name, "look_lift"))
    return &(p->look_lift);
  else if(!strcmp(name, "look_slope"))
    return &(p->look_slope);
  else if(!strcmp(name, "look_brightness"))
    return &(p->look_brightness);
  else if(!strcmp(name, "look_saturation"))
    return &(p->look_saturation);
  else if(!strcmp(name, "look_original_hue_mix_ratio"))
    return &(p->look_original_hue_mix_ratio);
  else if(!strcmp(name, "range_black_relative_ev"))
    return &(p->range_black_relative_ev);
  else if(!strcmp(name, "range_white_relative_ev"))
    return &(p->range_white_relative_ev);
  else if(!strcmp(name, "dynamic_range_scaling"))
    return &(p->dynamic_range_scaling);
  else if(!strcmp(name, "curve_pivot_x"))
    return &(p->curve_pivot_x);
  else if(!strcmp(name, "curve_pivot_y_linear_output"))
    return &(p->curve_pivot_y_linear_output);
  else if(!strcmp(name, "curve_contrast_around_pivot"))
    return &(p->curve_contrast_around_pivot);
  else if(!strcmp(name, "curve_linear_ratio_below_pivot"))
    return &(p->curve_linear_ratio_below_pivot);
  else if(!strcmp(name, "curve_linear_ratio_above_pivot"))
    return &(p->curve_linear_ratio_above_pivot);
  else if(!strcmp(name, "curve_toe_power"))
    return &(p->curve_toe_power);
  else if(!strcmp(name, "curve_shoulder_power"))
    return &(p->curve_shoulder_power);
  else if(!strcmp(name, "curve_gamma"))
    return &(p->curve_gamma);
  else if(!strcmp(name, "auto_gamma"))
    return &(p->auto_gamma);
  else if(!strcmp(name, "curve_target_display_black_ratio"))
    return &(p->curve_target_display_black_ratio);
  else if(!strcmp(name, "curve_target_display_white_ratio"))
    return &(p->curve_target_display_white_ratio);
  else if(!strcmp(name, "base_primaries"))
    return &(p->base_primaries);
  else if(!strcmp(name, "disable_primaries_adjustments"))
    return &(p->disable_primaries_adjustments);
  else if(!strcmp(name, "red_inset"))
    return &(p->red_inset);
  else if(!strcmp(name, "red_rotation"))
    return &(p->red_rotation);
  else if(!strcmp(name, "green_inset"))
    return &(p->green_inset);
  else if(!strcmp(name, "green_rotation"))
    return &(p->green_rotation);
  else if(!strcmp(name, "blue_inset"))
    return &(p->blue_inset);
  else if(!strcmp(name, "blue_rotation"))
    return &(p->blue_rotation);
  else if(!strcmp(name, "master_outset_ratio"))
    return &(p->master_outset_ratio);
  else if(!strcmp(name, "master_unrotation_ratio"))
    return &(p->master_unrotation_ratio);
  else if(!strcmp(name, "red_outset"))
    return &(p->red_outset);
  else if(!strcmp(name, "red_unrotation"))
    return &(p->red_unrotation);
  else if(!strcmp(name, "green_outset"))
    return &(p->green_outset);
  else if(!strcmp(name, "green_unrotation"))
    return &(p->green_unrotation);
  else if(!strcmp(name, "blue_outset"))
    return &(p->blue_outset);
  else if(!strcmp(name, "blue_unrotation"))
    return &(p->blue_unrotation);
  else if(!strcmp(name, "completely_reverse_primaries"))
    return &(p->completely_reverse_primaries);
  else
    return NULL;
}

dt_introspection_field_t * get_f(const char * name)
{
  if(!g_ascii_strcasecmp(name, "look_lift"))
    return &(introspection_linear[0]);
  else if(!g_ascii_strcasecmp(name, "look_slope"))
    return &(introspection_linear[1]);
  else if(!g_ascii_strcasecmp(name, "look_brightness"))
    return &(introspection_linear[2]);
  else if(!g_ascii_strcasecmp(name, "look_saturation"))
    return &(introspection_linear[3]);
  else if(!g_ascii_strcasecmp(name, "look_original_hue_mix_ratio"))
    return &(introspection_linear[4]);
  else if(!g_ascii_strcasecmp(name, "range_black_relative_ev"))
    return &(introspection_linear[5]);
  else if(!g_ascii_strcasecmp(name, "range_white_relative_ev"))
    return &(introspection_linear[6]);
  else if(!g_ascii_strcasecmp(name, "dynamic_range_scaling"))
    return &(introspection_linear[7]);
  else if(!g_ascii_strcasecmp(name, "curve_pivot_x"))
    return &(introspection_linear[8]);
  else if(!g_ascii_strcasecmp(name, "curve_pivot_y_linear_output"))
    return &(introspection_linear[9]);
  else if(!g_ascii_strcasecmp(name, "curve_contrast_around_pivot"))
    return &(introspection_linear[10]);
  else if(!g_ascii_strcasecmp(name, "curve_linear_ratio_below_pivot"))
    return &(introspection_linear[11]);
  else if(!g_ascii_strcasecmp(name, "curve_linear_ratio_above_pivot"))
    return &(introspection_linear[12]);
  else if(!g_ascii_strcasecmp(name, "curve_toe_power"))
    return &(introspection_linear[13]);
  else if(!g_ascii_strcasecmp(name, "curve_shoulder_power"))
    return &(introspection_linear[14]);
  else if(!g_ascii_strcasecmp(name, "curve_gamma"))
    return &(introspection_linear[15]);
  else if(!g_ascii_strcasecmp(name, "auto_gamma"))
    return &(introspection_linear[16]);
  else if(!g_ascii_strcasecmp(name, "curve_target_display_black_ratio"))
    return &(introspection_linear[17]);
  else if(!g_ascii_strcasecmp(name, "curve_target_display_white_ratio"))
    return &(introspection_linear[18]);
  else if(!g_ascii_strcasecmp(name, "base_primaries"))
    return &(introspection_linear[19]);
  else if(!g_ascii_strcasecmp(name, "disable_primaries_adjustments"))
    return &(introspection_linear[20]);
  else if(!g_ascii_strcasecmp(name, "red_inset"))
    return &(introspection_linear[21]);
  else if(!g_ascii_strcasecmp(name, "red_rotation"))
    return &(introspection_linear[22]);
  else if(!g_ascii_strcasecmp(name, "green_inset"))
    return &(introspection_linear[23]);
  else if(!g_ascii_strcasecmp(name, "green_rotation"))
    return &(introspection_linear[24]);
  else if(!g_ascii_strcasecmp(name, "blue_inset"))
    return &(introspection_linear[25]);
  else if(!g_ascii_strcasecmp(name, "blue_rotation"))
    return &(introspection_linear[26]);
  else if(!g_ascii_strcasecmp(name, "master_outset_ratio"))
    return &(introspection_linear[27]);
  else if(!g_ascii_strcasecmp(name, "master_unrotation_ratio"))
    return &(introspection_linear[28]);
  else if(!g_ascii_strcasecmp(name, "red_outset"))
    return &(introspection_linear[29]);
  else if(!g_ascii_strcasecmp(name, "red_unrotation"))
    return &(introspection_linear[30]);
  else if(!g_ascii_strcasecmp(name, "green_outset"))
    return &(introspection_linear[31]);
  else if(!g_ascii_strcasecmp(name, "green_unrotation"))
    return &(introspection_linear[32]);
  else if(!g_ascii_strcasecmp(name, "blue_outset"))
    return &(introspection_linear[33]);
  else if(!g_ascii_strcasecmp(name, "blue_unrotation"))
    return &(introspection_linear[34]);
  else if(!g_ascii_strcasecmp(name, "completely_reverse_primaries"))
    return &(introspection_linear[35]);
  else
    return NULL;
}

#ifdef __cplusplus
}
#endif

