1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
use std::{ffi::c_void, os::raw::c_int};
use crate::common::*;
#[repr(C)]
pub struct JxlEncoder {
_unused: [u8; 0],
}
#[repr(C)]
pub struct JxlEncoderOptions {
_unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, PartialEq)]
pub enum JxlEncoderStatus {
Success = 0,
Error = 1,
NeedMoreOutput = 2,
NotSupported = 3,
}
extern "C" {
pub fn JxlEncoderVersion() -> u32;
pub fn JxlEncoderCreate(memory_manager: *const JxlMemoryManager) -> *mut JxlEncoder;
pub fn JxlEncoderReset(enc: *mut JxlEncoder);
pub fn JxlEncoderDestroy(enc: *mut JxlEncoder);
pub fn JxlEncoderSetParallelRunner(
enc: *mut JxlEncoder,
parallel_runner: JxlParallelRunner,
parallel_runner_opaque: *mut c_void,
) -> JxlEncoderStatus;
pub fn JxlEncoderProcessOutput(
enc: *mut JxlEncoder,
next_out: *mut *mut u8,
avail_out: *mut usize,
) -> JxlEncoderStatus;
pub fn JxlEncoderAddJPEGFrame(
options: *const JxlEncoderOptions,
buffer: *const u8,
size: usize,
) -> JxlEncoderStatus;
pub fn JxlEncoderAddImageFrame(
options: *const JxlEncoderOptions,
pixel_format: *const JxlPixelFormat,
buffer: *const c_void,
size: usize,
) -> JxlEncoderStatus;
pub fn JxlEncoderCloseInput(enc: *mut JxlEncoder);
pub fn JxlEncoderSetColorEncoding(
enc: *mut JxlEncoder,
color: *const JxlColorEncoding,
) -> JxlEncoderStatus;
pub fn JxlEncoderSetICCProfile(
enc: *mut JxlEncoder,
icc_profile: *const u8,
size: usize,
) -> JxlEncoderStatus;
pub fn JxlEncoderInitBasicInfo(info: *mut JxlBasicInfo);
pub fn JxlEncoderSetBasicInfo(
enc: *mut JxlEncoder,
info: *const JxlBasicInfo,
) -> JxlEncoderStatus;
pub fn JxlEncoderStoreJPEGMetadata(
enc: *mut JxlEncoder,
store_jpeg_metadata: bool,
) -> JxlEncoderStatus;
pub fn JxlEncoderUseContainer(enc: *mut JxlEncoder, use_container: bool) -> JxlEncoderStatus;
pub fn JxlEncoderOptionsSetLossless(
options: *mut JxlEncoderOptions,
lossless: bool,
) -> JxlEncoderStatus;
pub fn JxlEncoderOptionsSetDecodingSpeed(
options: *mut JxlEncoderOptions,
tier: i32,
) -> JxlEncoderStatus;
pub fn JxlEncoderOptionsSetEffort(
options: *mut JxlEncoderOptions,
effort: c_int,
) -> JxlEncoderStatus;
pub fn JxlEncoderOptionsSetDistance(
options: *mut JxlEncoderOptions,
distance: f32,
) -> JxlEncoderStatus;
pub fn JxlEncoderOptionsCreate(
enc: *mut JxlEncoder,
source: *const JxlEncoderOptions,
) -> *mut JxlEncoderOptions;
pub fn JxlColorEncodingSetToSRGB(color_encoding: *mut JxlColorEncoding, is_gray: bool);
pub fn JxlColorEncodingSetToLinearSRGB(color_encoding: *mut JxlColorEncoding, is_gray: bool);
}