libwebp_sys/
mux.rs

1use std::os::raw::*;
2
3#[cfg(feature = "0_5")]
4use crate::encode::{WebPConfig, WebPPicture};
5use crate::mux_types::*;
6
7pub const WEBP_MUX_ABI_VERSION: c_int = WEBP_MUX_ABI_VERSION_INTERNAL;
8
9cfg_if! {
10    if #[cfg(feature = "1_4")] {
11        const WEBP_MUX_ABI_VERSION_INTERNAL: c_int = 0x0109;
12    } else if #[cfg(feature = "0_6")] {
13        const WEBP_MUX_ABI_VERSION_INTERNAL: c_int = 0x0108;
14    } else if #[cfg(feature = "0_5")] {
15        const WEBP_MUX_ABI_VERSION_INTERNAL: c_int = 0x0106;
16    } else {
17        const WEBP_MUX_ABI_VERSION_INTERNAL: c_int = 0x0101;
18    }
19}
20
21#[cfg(feature = "extern-types")]
22#[cfg_attr(feature = "__doc_cfg", doc(cfg(feature = "mux")))]
23extern "C" {
24    pub type WebPMux;
25}
26
27#[cfg(not(feature = "extern-types"))]
28#[cfg_attr(feature = "__doc_cfg", doc(cfg(feature = "mux")))]
29#[repr(C)]
30pub struct WebPMux(c_void);
31
32#[allow(non_camel_case_types)]
33// #[cfg_attr(feature = "must-use", must_use)] // meaningless for type aliases
34pub type WebPMuxError = i32;
35
36pub const WEBP_MUX_OK: WebPMuxError = 1;
37pub const WEBP_MUX_NOT_FOUND: WebPMuxError = 0;
38pub const WEBP_MUX_INVALID_ARGUMENT: WebPMuxError = -1;
39pub const WEBP_MUX_BAD_DATA: WebPMuxError = -2;
40pub const WEBP_MUX_MEMORY_ERROR: WebPMuxError = -3;
41pub const WEBP_MUX_NOT_ENOUGH_DATA: WebPMuxError = -4;
42
43#[allow(non_camel_case_types)]
44pub type WebPChunkId = u32;
45
46pub const WEBP_CHUNK_VP8X: WebPChunkId = 0;
47pub const WEBP_CHUNK_ICCP: WebPChunkId = 1;
48pub const WEBP_CHUNK_ANIM: WebPChunkId = 2;
49pub const WEBP_CHUNK_ANMF: WebPChunkId = 3;
50#[cfg(not(feature = "0_6"))]
51#[deprecated(note = "Removed as of libwebp 0.6.0")]
52pub const WEBP_CHUNK_FRGM: WebPChunkId = 4;
53#[cfg(feature = "0_6")]
54pub const WEBP_CHUNK_DEPRECATED: WebPChunkId = 4;
55pub const WEBP_CHUNK_ALPHA: WebPChunkId = 5;
56pub const WEBP_CHUNK_IMAGE: WebPChunkId = 6;
57pub const WEBP_CHUNK_EXIF: WebPChunkId = 7;
58pub const WEBP_CHUNK_XMP: WebPChunkId = 8;
59pub const WEBP_CHUNK_UNKNOWN: WebPChunkId = 9;
60pub const WEBP_CHUNK_NIL: WebPChunkId = 10;
61
62#[repr(C)]
63#[derive(Debug, Clone, Copy)]
64pub struct WebPMuxFrameInfo {
65    pub bitstream: WebPData,
66    pub x_offset: c_int,
67    pub y_offset: c_int,
68    pub duration: c_int,
69    pub id: WebPChunkId,
70    pub dispose_method: WebPMuxAnimDispose,
71    pub blend_method: WebPMuxAnimBlend,
72    #[doc(hidden)]
73    pub pad: [u32; 1],
74}
75
76#[repr(C)]
77#[derive(Debug, Clone, Copy)]
78pub struct WebPMuxAnimParams {
79    pub bgcolor: u32,
80    pub loop_count: c_int,
81}
82
83#[cfg(all(feature = "0_5", feature = "extern-types"))]
84#[cfg_attr(feature = "__doc_cfg", doc(cfg(feature = "0_5")))]
85extern "C" {
86    pub type WebPAnimEncoder;
87}
88
89#[cfg(all(feature = "0_5", not(feature = "extern-types")))]
90#[cfg_attr(feature = "__doc_cfg", doc(cfg(feature = "0_5")))]
91#[repr(C)]
92pub struct WebPAnimEncoder(c_void);
93
94#[cfg(feature = "0_5")]
95#[repr(C)]
96#[derive(Debug, Clone, Copy)]
97pub struct WebPAnimEncoderOptions {
98    pub anim_params: WebPMuxAnimParams,
99    pub minimize_size: c_int,
100    pub kmin: c_int,
101    pub kmax: c_int,
102    pub allow_mixed: c_int,
103    pub verbose: c_int,
104    #[doc(hidden)]
105    pub padding: [u32; 4],
106}
107
108extern "C" {
109    pub fn WebPGetMuxVersion() -> c_int;
110    #[doc(hidden)]
111    #[cfg_attr(feature = "must-use", must_use)]
112    pub fn WebPNewInternal(_: c_int) -> *mut WebPMux;
113    pub fn WebPMuxDelete(mux: *mut WebPMux);
114    #[doc(hidden)]
115    #[cfg_attr(feature = "must-use", must_use)]
116    pub fn WebPMuxCreateInternal(_: *const WebPData, _: c_int, _: c_int) -> *mut WebPMux;
117    pub fn WebPMuxSetChunk(
118        mux: *mut WebPMux,
119        fourcc: *const c_char,
120        chunk_data: *const WebPData,
121        copy_data: c_int,
122    ) -> WebPMuxError;
123    pub fn WebPMuxGetChunk(
124        mux: *const WebPMux,
125        fourcc: *const c_char,
126        chunk_data: *mut WebPData,
127    ) -> WebPMuxError;
128    pub fn WebPMuxDeleteChunk(mux: *mut WebPMux, fourcc: *const c_char) -> WebPMuxError;
129    pub fn WebPMuxSetImage(
130        mux: *mut WebPMux,
131        bitstream: *const WebPData,
132        copy_data: c_int,
133    ) -> WebPMuxError;
134    pub fn WebPMuxPushFrame(
135        mux: *mut WebPMux,
136        frame: *const WebPMuxFrameInfo,
137        copy_data: c_int,
138    ) -> WebPMuxError;
139    pub fn WebPMuxGetFrame(
140        mux: *const WebPMux,
141        nth: u32,
142        frame: *mut WebPMuxFrameInfo,
143    ) -> WebPMuxError;
144    pub fn WebPMuxDeleteFrame(mux: *mut WebPMux, nth: u32) -> WebPMuxError;
145    pub fn WebPMuxSetAnimationParams(
146        mux: *mut WebPMux,
147        params: *const WebPMuxAnimParams,
148    ) -> WebPMuxError;
149    pub fn WebPMuxGetAnimationParams(
150        mux: *const WebPMux,
151        params: *mut WebPMuxAnimParams,
152    ) -> WebPMuxError;
153    #[cfg(feature = "0_5")]
154    pub fn WebPMuxSetCanvasSize(mux: *mut WebPMux, width: c_int, height: c_int) -> WebPMuxError;
155    pub fn WebPMuxGetCanvasSize(
156        mux: *const WebPMux,
157        width: *mut c_int,
158        height: *mut c_int,
159    ) -> WebPMuxError;
160    pub fn WebPMuxGetFeatures(mux: *const WebPMux, flags: *mut u32) -> WebPMuxError;
161    pub fn WebPMuxNumChunks(
162        mux: *const WebPMux,
163        id: WebPChunkId,
164        num_elements: *mut c_int,
165    ) -> WebPMuxError;
166    pub fn WebPMuxAssemble(mux: *mut WebPMux, assembled_data: *mut WebPData) -> WebPMuxError;
167    #[cfg(feature = "0_5")]
168    #[doc(hidden)]
169    pub fn WebPAnimEncoderOptionsInitInternal(_: *mut WebPAnimEncoderOptions, _: c_int) -> c_int;
170    #[cfg(feature = "0_5")]
171    #[doc(hidden)]
172    pub fn WebPAnimEncoderNewInternal(
173        _: c_int,
174        _: c_int,
175        _: *const WebPAnimEncoderOptions,
176        _: c_int,
177    ) -> *mut WebPAnimEncoder;
178    #[cfg(feature = "0_5")]
179    #[cfg_attr(feature = "must-use", must_use)]
180    pub fn WebPAnimEncoderAdd(
181        enc: *mut WebPAnimEncoder,
182        frame: *mut WebPPicture,
183        timestamp_ms: c_int,
184        config: *const WebPConfig,
185    ) -> c_int;
186    #[cfg(feature = "0_5")]
187    #[cfg_attr(feature = "must-use", must_use)]
188    pub fn WebPAnimEncoderAssemble(enc: *mut WebPAnimEncoder, webp_data: *mut WebPData) -> c_int;
189    #[cfg(feature = "0_5")]
190    pub fn WebPAnimEncoderGetError(enc: *mut WebPAnimEncoder) -> *const c_char;
191    #[cfg(feature = "0_5")]
192    pub fn WebPAnimEncoderDelete(enc: *mut WebPAnimEncoder);
193    #[cfg(feature = "1_4")]
194    pub fn WebPAnimEncoderSetChunk(
195        enc: *mut WebPAnimEncoder,
196        fourcc: *const c_char,
197        chunk_data: *const WebPData,
198        copy_data: c_int,
199    ) -> WebPMuxError;
200    #[cfg(feature = "1_4")]
201    pub fn WebPAnimEncoderGetChunk(
202        enc: *const WebPAnimEncoder,
203        fourcc: *const c_char,
204        chunk_data: *mut WebPData,
205    ) -> WebPMuxError;
206    #[cfg(feature = "1_4")]
207    pub fn WebPAnimEncoderDeleteChunk(
208        enc: *mut WebPAnimEncoder,
209        fourcc: *const c_char,
210    ) -> WebPMuxError;
211}
212
213#[allow(non_snake_case)]
214#[cfg_attr(feature = "must-use", must_use)]
215#[inline]
216pub unsafe extern "C" fn WebPMuxNew() -> *mut WebPMux {
217    WebPNewInternal(WEBP_MUX_ABI_VERSION)
218}
219
220#[allow(non_snake_case)]
221#[cfg_attr(feature = "must-use", must_use)]
222#[inline]
223pub unsafe extern "C" fn WebPMuxCreate(
224    bitstream: *const WebPData,
225    copy_data: c_int,
226) -> *mut WebPMux {
227    WebPMuxCreateInternal(bitstream, copy_data, WEBP_MUX_ABI_VERSION)
228}
229
230#[cfg(feature = "0_5")]
231#[allow(non_snake_case)]
232#[cfg_attr(feature = "must-use", must_use)]
233#[inline]
234pub unsafe extern "C" fn WebPAnimEncoderOptionsInit(
235    enc_options: *mut WebPAnimEncoderOptions,
236) -> c_int {
237    WebPAnimEncoderOptionsInitInternal(enc_options, WEBP_MUX_ABI_VERSION)
238}
239
240#[cfg(feature = "0_5")]
241#[allow(non_snake_case)]
242#[inline]
243pub unsafe extern "C" fn WebPAnimEncoderNew(
244    width: c_int,
245    height: c_int,
246    enc_options: *const WebPAnimEncoderOptions,
247) -> *mut WebPAnimEncoder {
248    WebPAnimEncoderNewInternal(width, height, enc_options, WEBP_MUX_ABI_VERSION)
249}