babl_sys/
lib.rs

1#![allow(non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4
5use libc::{c_char, c_int, c_long, c_uint, c_void};
6
7pub const BABL_MAJOR_VERSION: u32 = 0;
8pub const BABL_MINOR_VERSION: u32 = 1;
9pub const BABL_MICRO_VERSION: u32 = 73;
10pub const BABL_ALPHA_FLOOR: f64 = 0.0000152587890625;
11pub const BABL_ALPHA_FLOOR_F: f64 = 0.0000152587890625;
12
13pub const BablSpaceFlags_BABL_SPACE_FLAG_NONE: BablSpaceFlags = 0;
14pub const BablSpaceFlags_BABL_SPACE_FLAG_EQUALIZE: BablSpaceFlags = 1;
15
16pub type BablSpaceFlags = c_uint;
17
18pub const BablModelFlag_BABL_MODEL_FLAG_ALPHA: BablModelFlag = 2;
19pub const BablModelFlag_BABL_MODEL_FLAG_ASSOCIATED: BablModelFlag = 4;
20pub const BablModelFlag_BABL_MODEL_FLAG_INVERTED: BablModelFlag = 8;
21pub const BablModelFlag_BABL_MODEL_FLAG_LINEAR: BablModelFlag = 1024;
22pub const BablModelFlag_BABL_MODEL_FLAG_NONLINEAR: BablModelFlag = 2048;
23pub const BablModelFlag_BABL_MODEL_FLAG_PERCEPTUAL: BablModelFlag = 4096;
24pub const BablModelFlag_BABL_MODEL_FLAG_GRAY: BablModelFlag = 1048576;
25pub const BablModelFlag_BABL_MODEL_FLAG_RGB: BablModelFlag = 2097152;
26pub const BablModelFlag_BABL_MODEL_FLAG_CIE: BablModelFlag = 8388608;
27pub const BablModelFlag_BABL_MODEL_FLAG_CMYK: BablModelFlag = 16777216;
28
29pub type BablModelFlag = c_uint;
30
31pub const BablIccIntent_BABL_ICC_INTENT_PERCEPTUAL: BablIccIntent = 0;
32pub const BablIccIntent_BABL_ICC_INTENT_RELATIVE_COLORIMETRIC: BablIccIntent = 1;
33pub const BablIccIntent_BABL_ICC_INTENT_SATURATION: BablIccIntent = 2;
34pub const BablIccIntent_BABL_ICC_INTENT_ABSOLUTE_COLORIMETRIC: BablIccIntent = 3;
35pub const BablIccIntent_BABL_ICC_INTENT_PERFORMANCE: BablIccIntent = 32;
36pub type BablIccIntent = c_uint;
37
38#[repr(C)]
39#[derive(Copy, Clone)]
40pub struct _Babl {
41    _unused: [u8; 0],
42}
43pub type Babl = _Babl;
44
45pub type BablFuncLinear = Option<
46    unsafe extern "C" fn(
47        conversion: *const Babl,
48        src: *const c_char,
49        dst: *mut c_char,
50        n: c_long,
51        user_data: *mut c_void,
52    ),
53>;
54
55pub type BablFuncPlanar = Option<
56    unsafe extern "C" fn(
57        conversion: *const Babl,
58        src_bands: c_int,
59        src: *mut *const c_char,
60        src_pitch: *mut c_int,
61        dst_bands: c_int,
62        dst: *mut *mut c_char,
63        dst_pitch: *mut c_int,
64        n: c_long,
65        user_data: *mut c_void,
66    ),
67>;
68
69extern "C" {
70    //=========================================================================
71    // Other functions
72    //=========================================================================
73    pub fn babl_get_version(major: *mut c_int, minor: *mut c_int, micro: *mut c_int);
74    pub fn babl_init();
75    pub fn babl_exit();
76
77    pub fn babl_type(name: *const c_char) -> *const Babl;
78    pub fn babl_introspect(babl: *const Babl);
79
80    pub fn babl_sampling(horizontal: c_int, vertical: c_int) -> *const Babl;
81    pub fn babl_icc_get_key(
82        icc_data: *const c_char,
83        icc_length: c_int,
84        key: *const c_char,
85        language: *const c_char,
86        country: *const c_char,
87    ) -> *mut c_char;
88    pub fn babl_fish(
89        source_format: *const c_void,
90        destination_format: *const c_void,
91    ) -> *const Babl;
92    pub fn babl_fast_fish(
93        source_format: *const c_void,
94        destination_format: *const c_void,
95        performance: *const c_char,
96    ) -> *const Babl;
97    pub fn babl_process(
98        babl_fish: *const Babl,
99        source: *const c_void,
100        destination: *mut c_void,
101        n: c_long,
102    ) -> c_long;
103    pub fn babl_process_rows(
104        babl_fish: *const Babl,
105        source: *const c_void,
106        source_stride: c_int,
107        dest: *mut c_void,
108        dest_stride: c_int,
109        n: c_long,
110        rows: c_int,
111    ) -> c_long;
112    pub fn babl_get_name(babl: *const Babl) -> *const c_char;
113    pub fn babl_type_new(first_arg: *mut c_void, ...) -> *const Babl;
114    pub fn babl_new_palette(
115        name: *const c_char,
116        format_u8: *mut *const Babl,
117        format_u8_with_alpha: *mut *const Babl,
118    ) -> *const Babl;
119    pub fn babl_new_palette_with_space(
120        name: *const c_char,
121        space: *const Babl,
122        format_u8: *mut *const Babl,
123        format_u8_with_alpha: *mut *const Babl,
124    ) -> *const Babl;
125    pub fn babl_palette_set_palette(
126        babl: *const Babl,
127        format: *const Babl,
128        data: *mut c_void,
129        count: c_int,
130    );
131    pub fn babl_palette_reset(babl: *const Babl);
132    pub fn babl_set_user_data(babl: *const Babl, data: *mut c_void);
133    pub fn babl_get_user_data(babl: *const Babl) -> *mut c_void;
134
135    //=========================================================================
136    // BablConversion
137    //=========================================================================
138    pub fn babl_conversion_new(first_arg: *const c_void, ...) -> *const Babl;
139    pub fn babl_conversion_get_source_space(conversion: *const Babl) -> *const Babl;
140    pub fn babl_conversion_get_destination_space(conversion: *const Babl) -> *const Babl;
141
142    //=========================================================================
143    // BablComponent
144    //=========================================================================
145    pub fn babl_component_new(first_arg: *mut c_void, ...) -> *const Babl;
146    pub fn babl_component(name: *const c_char) -> *const Babl;
147
148    //=========================================================================
149    // BablModel
150    //=========================================================================
151    pub fn babl_model(name: *const c_char) -> *const Babl;
152    pub fn babl_model_with_space(name: *const c_char, space: *const Babl) -> *const Babl;
153    pub fn babl_model_new(first_arg: *mut c_void, ...) -> *const Babl;
154    pub fn babl_model_is(babl: *const Babl, model_name: *const c_char) -> c_int;
155    pub fn babl_get_model_flags(model: *const Babl) -> BablModelFlag;
156
157    //=========================================================================
158    // BablFormat
159    //=========================================================================
160    pub fn babl_format_get_encoding(babl: *const Babl) -> *const c_char;
161    pub fn babl_format_is_palette(format: *const Babl) -> c_int;
162    pub fn babl_format_new(first_arg: *const c_void, ...) -> *const Babl;
163    pub fn babl_format_n(type_: *const Babl, components: c_int) -> *const Babl;
164    pub fn babl_format_is_format_n(format: *const Babl) -> c_int;
165    pub fn babl_format_get_n_components(format: *const Babl) -> c_int;
166    pub fn babl_format_get_type(format: *const Babl, component_index: c_int) -> *const Babl;
167    pub fn babl_format_has_alpha(format: *const Babl) -> c_int;
168    pub fn babl_format_get_bytes_per_pixel(format: *const Babl) -> c_int;
169    pub fn babl_format_get_model(format: *const Babl) -> *const Babl;
170    pub fn babl_format(encoding: *const c_char) -> *const Babl;
171    pub fn babl_format_with_space(encoding: *const c_char, space: *const Babl) -> *const Babl;
172    pub fn babl_format_exists(name: *const c_char) -> c_int;
173    pub fn babl_format_get_space(format: *const Babl) -> *const Babl;
174
175    //=========================================================================
176    // BablTrc
177    //=========================================================================
178    pub fn babl_trc_gamma(gamma: f64) -> *const Babl;
179    pub fn babl_trc(name: *const c_char) -> *const Babl;
180
181    //=========================================================================
182    // BablSpace
183    //=========================================================================
184    pub fn babl_space(name: *const c_char) -> *const Babl;
185    pub fn babl_space_from_icc(
186        icc_data: *const c_char,
187        icc_length: c_int,
188        intent: BablIccIntent,
189        error: *mut *const c_char,
190    ) -> *const Babl;
191    // Deprecated
192    pub fn babl_icc_make_space(
193        icc_data: *const c_char,
194        icc_length: c_int,
195        intent: BablIccIntent,
196        error: *mut *const c_char,
197    ) -> *const Babl;
198    pub fn babl_space_from_chromaticities(
199        name: *const c_char,
200        wx: f64,
201        wy: f64,
202        rx: f64,
203        ry: f64,
204        gx: f64,
205        gy: f64,
206        bx: f64,
207        by: f64,
208        trc_red: *const Babl,
209        trc_green: *const Babl,
210        trc_blue: *const Babl,
211        flags: BablSpaceFlags,
212    ) -> *const Babl;
213    pub fn babl_space_with_trc(space: *const Babl, trc: *const Babl) -> *const Babl;
214    pub fn babl_space_get(
215        space: *const Babl,
216        xw: *mut f64,
217        yw: *mut f64,
218        xr: *mut f64,
219        yr: *mut f64,
220        xg: *mut f64,
221        yg: *mut f64,
222        xb: *mut f64,
223        yb: *mut f64,
224        red_trc: *mut *const Babl,
225        green_trc: *mut *const Babl,
226        blue_trc: *mut *const Babl,
227    );
228    pub fn babl_space_get_rgb_luminance(
229        space: *const Babl,
230        red_luminance: *mut f64,
231        green_luminance: *mut f64,
232        blue_luminance: *mut f64,
233    );
234    pub fn babl_space_get_gamma(space: *const Babl) -> f64;
235    pub fn babl_space_get_icc(babl: *const Babl, length: *mut c_int) -> *const c_char;
236    pub fn babl_space_from_rgbxyz_matrix(
237        name: *const c_char,
238        wx: f64,
239        wy: f64,
240        wz: f64,
241        rx: f64,
242        gx: f64,
243        bx: f64,
244        ry: f64,
245        gy: f64,
246        by: f64,
247        rz: f64,
248        gz: f64,
249        bz: f64,
250        trc_red: *const Babl,
251        trc_green: *const Babl,
252        trc_blue: *const Babl,
253    ) -> *const Babl;
254    pub fn babl_space_is_cmyk(space: *const Babl) -> c_int;
255    pub fn babl_space_is_gray(space: *const Babl) -> c_int;
256}