1use std::mem;
2use std::os::raw::*;
3
4use libc::{memcpy, memset};
5
6#[cfg(feature = "1_1")]
7use crate::{WebPFree, WebPMalloc};
8#[cfg(not(feature = "1_1"))]
9use libc::{free as WebPFree, malloc as WebPMalloc};
10
11#[allow(non_camel_case_types)]
12pub type WebPFeatureFlags = u32;
13
14#[cfg(not(feature = "0_6"))]
15#[deprecated(note = "Removed as of libwebp 0.6.0")]
16pub const FRAGMENTS_FLAG: WebPFeatureFlags = 0x00000001;
17pub const ANIMATION_FLAG: WebPFeatureFlags = 0x00000002;
18pub const XMP_FLAG: WebPFeatureFlags = 0x00000004;
19pub const EXIF_FLAG: WebPFeatureFlags = 0x00000008;
20pub const ALPHA_FLAG: WebPFeatureFlags = 0x00000010;
21pub const ICCP_FLAG: WebPFeatureFlags = 0x00000020;
22#[cfg(feature = "0_6")]
23pub const ALL_VALID_FLAGS: WebPFeatureFlags = 0x0000003E;
24
25#[allow(non_camel_case_types)]
26pub type WebPMuxAnimDispose = u32;
27
28pub const WEBP_MUX_DISPOSE_NONE: WebPMuxAnimDispose = 0;
29pub const WEBP_MUX_DISPOSE_BACKGROUND: WebPMuxAnimDispose = 1;
30
31#[allow(non_camel_case_types)]
32pub type WebPMuxAnimBlend = u32;
33
34pub const WEBP_MUX_BLEND: WebPMuxAnimBlend = 0;
35pub const WEBP_MUX_NO_BLEND: WebPMuxAnimBlend = 1;
36
37#[repr(C)]
38#[derive(Debug, Clone, Copy)]
39pub struct WebPData {
40 pub bytes: *const u8,
41 pub size: usize,
42}
43
44#[allow(non_snake_case)]
45#[inline]
46pub unsafe extern "C" fn WebPDataInit(webp_data: *mut WebPData) {
47 if !webp_data.is_null() {
48 unsafe { memset(webp_data as *mut c_void, 0, mem::size_of::<WebPData>()) };
49 }
50}
51
52#[allow(non_snake_case)]
55#[inline]
56pub unsafe extern "C" fn WebPDataClear(webp_data: *mut WebPData) {
57 if !webp_data.is_null() {
58 unsafe { WebPFree((*webp_data).bytes as *mut c_void) };
59 unsafe { WebPDataInit(webp_data) };
60 }
61}
62
63#[allow(non_snake_case)]
66#[must_use]
67#[inline]
68pub unsafe extern "C" fn WebPDataCopy(src: *const WebPData, dst: *mut WebPData) -> c_int {
69 if src.is_null() || dst.is_null() {
70 return 0;
71 }
72 unsafe {
73 WebPDataInit(dst);
74 if !(*src).bytes.is_null() && (*src).size != 0 {
75 (*dst).bytes = WebPMalloc((*src).size) as *mut u8;
76 if (*dst).bytes.is_null() {
77 return 0;
78 }
79 memcpy(
80 (*dst).bytes as *mut c_void,
81 (*src).bytes as *const c_void,
82 (*src).size,
83 );
84 (*dst).size = (*src).size;
85 }
86 }
87 return 1;
88}