//! Minimal `OpenJPEG` 2.5 public ABI used by this crate. //! //! These declarations follow `openjpeg.h` from `OpenJPEG` 2.5.4. Keeping the //! bindings here avoids requiring libclang merely to enable the codec. use std::ffi::{c_char, c_int, c_uint, c_void}; pub type OPJ_BOOL = c_int; pub type OPJ_CHAR = c_char; pub type OPJ_UINT16 = u16; pub type OPJ_INT32 = i32; pub type OPJ_UINT32 = u32; pub type OPJ_UINT64 = u64; pub type OPJ_OFF_T = i64; pub type OPJ_SIZE_T = usize; pub type OPJ_RSIZ_CAPABILITIES = u32; pub type OPJ_CINEMA_MODE = u32; pub type OPJ_PROG_ORDER = i32; #[repr(transparent)] #[derive(Debug, Copy, Clone)] pub struct OPJ_COLOR_SPACE(i32); impl OPJ_COLOR_SPACE { pub const OPJ_CLRSPC_SRGB: Self = Self(1); pub const OPJ_CLRSPC_GRAY: Self = Self(2); } #[repr(transparent)] #[derive(Debug, Copy, Clone)] pub struct OPJ_CODEC_FORMAT(i32); impl OPJ_CODEC_FORMAT { pub const OPJ_CODEC_J2K: Self = Self(0); pub const OPJ_CODEC_JP2: Self = Self(2); } #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct opj_poc_t { pub resno0: OPJ_UINT32, pub compno0: OPJ_UINT32, pub layno1: OPJ_UINT32, pub resno1: OPJ_UINT32, pub compno1: OPJ_UINT32, pub layno0: OPJ_UINT32, pub precno0: OPJ_UINT32, pub precno1: OPJ_UINT32, pub prg1: OPJ_PROG_ORDER, pub prg: OPJ_PROG_ORDER, pub progorder: [OPJ_CHAR; 5], pub tile: OPJ_UINT32, pub tx0: OPJ_INT32, pub tx1: OPJ_INT32, pub ty0: OPJ_INT32, pub ty1: OPJ_INT32, pub layS: OPJ_UINT32, pub resS: OPJ_UINT32, pub compS: OPJ_UINT32, pub prcS: OPJ_UINT32, pub layE: OPJ_UINT32, pub resE: OPJ_UINT32, pub compE: OPJ_UINT32, pub prcE: OPJ_UINT32, pub txS: OPJ_UINT32, pub txE: OPJ_UINT32, pub tyS: OPJ_UINT32, pub tyE: OPJ_UINT32, pub dx: OPJ_UINT32, pub dy: OPJ_UINT32, pub lay_t: OPJ_UINT32, pub res_t: OPJ_UINT32, pub comp_t: OPJ_UINT32, pub prc_t: OPJ_UINT32, pub tx0_t: OPJ_UINT32, pub ty0_t: OPJ_UINT32, } #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct opj_cparameters_t { pub tile_size_on: OPJ_BOOL, pub cp_tx0: c_int, pub cp_ty0: c_int, pub cp_tdx: c_int, pub cp_tdy: c_int, pub cp_disto_alloc: c_int, pub cp_fixed_alloc: c_int, pub cp_fixed_quality: c_int, pub cp_matrice: *mut c_int, pub cp_comment: *mut c_char, pub csty: c_int, pub prog_order: OPJ_PROG_ORDER, pub POC: [opj_poc_t; 32], pub numpocs: OPJ_UINT32, pub tcp_numlayers: c_int, pub tcp_rates: [f32; 100], pub tcp_distoratio: [f32; 100], pub numresolution: c_int, pub cblockw_init: c_int, pub cblockh_init: c_int, pub mode: c_int, pub irreversible: c_int, pub roi_compno: c_int, pub roi_shift: c_int, pub res_spec: c_int, pub prcw_init: [c_int; 33], pub prch_init: [c_int; 33], pub infile: [c_char; 4096], pub outfile: [c_char; 4096], pub index_on: c_int, pub index: [c_char; 4096], pub image_offset_x0: c_int, pub image_offset_y0: c_int, pub subsampling_dx: c_int, pub subsampling_dy: c_int, pub decod_format: c_int, pub cod_format: c_int, pub jpwl_epc_on: OPJ_BOOL, pub jpwl_hprot_MH: c_int, pub jpwl_hprot_TPH_tileno: [c_int; 16], pub jpwl_hprot_TPH: [c_int; 16], pub jpwl_pprot_tileno: [c_int; 16], pub jpwl_pprot_packno: [c_int; 16], pub jpwl_pprot: [c_int; 16], pub jpwl_sens_size: c_int, pub jpwl_sens_addr: c_int, pub jpwl_sens_range: c_int, pub jpwl_sens_MH: c_int, pub jpwl_sens_TPH_tileno: [c_int; 16], pub jpwl_sens_TPH: [c_int; 16], pub cp_cinema: OPJ_CINEMA_MODE, pub max_comp_size: c_int, pub cp_rsiz: OPJ_RSIZ_CAPABILITIES, pub tp_on: c_char, pub tp_flag: c_char, pub tcp_mct: c_char, pub jpip_on: OPJ_BOOL, pub mct_data: *mut c_void, pub max_cs_size: c_int, pub rsiz: OPJ_UINT16, } #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct opj_dparameters_t { pub cp_reduce: OPJ_UINT32, pub cp_layer: OPJ_UINT32, pub infile: [c_char; 4096], pub outfile: [c_char; 4096], pub decod_format: c_int, pub cod_format: c_int, pub DA_x0: OPJ_UINT32, pub DA_x1: OPJ_UINT32, pub DA_y0: OPJ_UINT32, pub DA_y1: OPJ_UINT32, pub m_verbose: OPJ_BOOL, pub tile_index: OPJ_UINT32, pub nb_tile_to_decode: OPJ_UINT32, pub jpwl_correct: OPJ_BOOL, pub jpwl_exp_comps: c_int, pub jpwl_max_tiles: c_int, pub flags: c_uint, } pub type opj_codec_t = *mut c_void; pub type opj_stream_t = *mut c_void; pub type opj_stream_read_fn = Option OPJ_SIZE_T>; pub type opj_stream_write_fn = Option OPJ_SIZE_T>; pub type opj_stream_skip_fn = Option OPJ_OFF_T>; pub type opj_stream_seek_fn = Option OPJ_BOOL>; pub type opj_stream_free_user_data_fn = Option; #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct opj_image_comp_t { pub dx: OPJ_UINT32, pub dy: OPJ_UINT32, pub w: OPJ_UINT32, pub h: OPJ_UINT32, pub x0: OPJ_UINT32, pub y0: OPJ_UINT32, pub prec: OPJ_UINT32, pub bpp: OPJ_UINT32, pub sgnd: OPJ_UINT32, pub resno_decoded: OPJ_UINT32, pub factor: OPJ_UINT32, pub data: *mut OPJ_INT32, pub alpha: OPJ_UINT16, } #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct opj_image_t { pub x0: OPJ_UINT32, pub y0: OPJ_UINT32, pub x1: OPJ_UINT32, pub y1: OPJ_UINT32, pub numcomps: OPJ_UINT32, pub color_space: OPJ_COLOR_SPACE, pub comps: *mut opj_image_comp_t, pub icc_profile_buf: *mut u8, pub icc_profile_len: OPJ_UINT32, } #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct opj_image_cmptparm_t { pub dx: OPJ_UINT32, pub dy: OPJ_UINT32, pub w: OPJ_UINT32, pub h: OPJ_UINT32, pub x0: OPJ_UINT32, pub y0: OPJ_UINT32, pub prec: OPJ_UINT32, pub bpp: OPJ_UINT32, pub sgnd: OPJ_UINT32, } unsafe extern "C" { pub fn opj_version() -> *const c_char; pub fn opj_stream_default_create(is_input: OPJ_BOOL) -> *mut opj_stream_t; pub fn opj_stream_destroy(stream: *mut opj_stream_t); pub fn opj_stream_set_read_function(stream: *mut opj_stream_t, function: opj_stream_read_fn); pub fn opj_stream_set_write_function(stream: *mut opj_stream_t, function: opj_stream_write_fn); pub fn opj_stream_set_skip_function(stream: *mut opj_stream_t, function: opj_stream_skip_fn); pub fn opj_stream_set_seek_function(stream: *mut opj_stream_t, function: opj_stream_seek_fn); pub fn opj_stream_set_user_data( stream: *mut opj_stream_t, data: *mut c_void, free_function: opj_stream_free_user_data_fn, ); pub fn opj_stream_set_user_data_length(stream: *mut opj_stream_t, length: OPJ_UINT64); pub fn opj_create_decompress(format: OPJ_CODEC_FORMAT) -> *mut opj_codec_t; pub fn opj_create_compress(format: OPJ_CODEC_FORMAT) -> *mut opj_codec_t; pub fn opj_destroy_codec(codec: *mut opj_codec_t); pub fn opj_set_default_decoder_parameters(parameters: *mut opj_dparameters_t); pub fn opj_setup_decoder( codec: *mut opj_codec_t, parameters: *mut opj_dparameters_t, ) -> OPJ_BOOL; pub fn opj_decoder_set_strict_mode(codec: *mut opj_codec_t, strict: OPJ_BOOL) -> OPJ_BOOL; pub fn opj_read_header( stream: *mut opj_stream_t, codec: *mut opj_codec_t, image: *mut *mut opj_image_t, ) -> OPJ_BOOL; pub fn opj_decode( codec: *mut opj_codec_t, stream: *mut opj_stream_t, image: *mut opj_image_t, ) -> OPJ_BOOL; pub fn opj_end_decompress(codec: *mut opj_codec_t, stream: *mut opj_stream_t) -> OPJ_BOOL; pub fn opj_image_create( component_count: OPJ_UINT32, component_parameters: *mut opj_image_cmptparm_t, color_space: OPJ_COLOR_SPACE, ) -> *mut opj_image_t; pub fn opj_image_destroy(image: *mut opj_image_t); pub fn opj_set_default_encoder_parameters(parameters: *mut opj_cparameters_t); pub fn opj_setup_encoder( codec: *mut opj_codec_t, parameters: *mut opj_cparameters_t, image: *mut opj_image_t, ) -> OPJ_BOOL; pub fn opj_start_compress( codec: *mut opj_codec_t, image: *mut opj_image_t, stream: *mut opj_stream_t, ) -> OPJ_BOOL; pub fn opj_encode(codec: *mut opj_codec_t, stream: *mut opj_stream_t) -> OPJ_BOOL; pub fn opj_end_compress(codec: *mut opj_codec_t, stream: *mut opj_stream_t) -> OPJ_BOOL; }