pub mod cio {
pub const OPJ_STREAM_STATUS_OUTPUT: u32 = 0x1u32;
pub const OPJ_STREAM_STATUS_INPUT: u32 = 0x2u32;
pub const OPJ_STREAM_STATUS_END: u32 = 0x4u32;
pub const OPJ_STREAM_STATUS_ERROR: u32 = 0x8u32;
}
pub mod event {
#[derive(Copy, Clone)]
pub enum EventType {
Error = 1,
Warning = 2,
Info = 4,
}
impl EventType {
pub fn from_i32(v: i32) -> Option<Self> {
match v {
1 => Some(EventType::Error),
2 => Some(EventType::Warning),
4 => Some(EventType::Info),
_ => None,
}
}
}
pub const EVT_ERROR: EventType = EventType::Error;
pub const EVT_WARNING: EventType = EventType::Warning;
pub const EVT_INFO: EventType = EventType::Info;
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Default)]
pub enum JpipBoxType {
#[default]
None,
Cidx,
Cptr,
Manf,
Faix,
Mhix,
Tpix,
Thix,
Ppix,
Phix,
Fidx,
Fptr,
Prxy,
Iptr,
Phld,
Unknown(u32),
}
impl From<u32> for JpipBoxType {
fn from(value: u32) -> Self {
match value {
0x63696478 => JpipBoxType::Cidx,
0x63707472 => JpipBoxType::Cptr,
0x6d616e66 => JpipBoxType::Manf,
0x66616978 => JpipBoxType::Faix,
0x6d686978 => JpipBoxType::Mhix,
0x74706978 => JpipBoxType::Tpix,
0x74686978 => JpipBoxType::Thix,
0x70706978 => JpipBoxType::Ppix,
0x70686978 => JpipBoxType::Phix,
0x66696478 => JpipBoxType::Fidx,
0x66707472 => JpipBoxType::Fptr,
0x70727879 => JpipBoxType::Prxy,
0x69707472 => JpipBoxType::Iptr,
0x70686c64 => JpipBoxType::Phld,
_ => JpipBoxType::Unknown(value),
}
}
}
impl JpipBoxType {
pub fn to_u32(&self) -> u32 {
match self {
JpipBoxType::None => 0x00000000,
JpipBoxType::Cidx => 0x63696478,
JpipBoxType::Cptr => 0x63707472,
JpipBoxType::Manf => 0x6d616e66,
JpipBoxType::Faix => 0x66616978,
JpipBoxType::Mhix => 0x6d686978,
JpipBoxType::Tpix => 0x74706978,
JpipBoxType::Thix => 0x74686978,
JpipBoxType::Ppix => 0x70706978,
JpipBoxType::Phix => 0x70686978,
JpipBoxType::Fidx => 0x66696478,
JpipBoxType::Fptr => 0x66707472,
JpipBoxType::Prxy => 0x70727879,
JpipBoxType::Iptr => 0x69707472,
JpipBoxType::Phld => 0x70686c64,
JpipBoxType::Unknown(value) => *value,
}
}
}
pub mod j2k {
pub const J2K_CP_CSTY_PRT: u32 = 0x01;
pub const J2K_CP_CSTY_SOP: u32 = 0x02;
pub const J2K_CP_CSTY_EPH: u32 = 0x04;
pub const J2K_CCP_CSTY_PRT: u32 = 0x01;
pub const J2K_CCP_CBLKSTY_LAZY: u32 = 0x01;
pub const J2K_CCP_CBLKSTY_RESET: u32 = 0x02;
pub const J2K_CCP_CBLKSTY_TERMALL: u32 = 0x04;
pub const J2K_CCP_CBLKSTY_VSC: u32 = 0x08;
pub const J2K_CCP_CBLKSTY_PTERM: u32 = 0x10;
pub const J2K_CCP_CBLKSTY_SEGSYM: u32 = 0x20;
pub const J2K_CCP_CBLKSTY_HT: u32 = 0x40;
pub const J2K_CCP_CBLKSTY_HTMIXED: u32 = 0x80;
pub const J2K_CCP_QNTSTY_NOQNT: u32 = 0;
pub const J2K_CCP_QNTSTY_SIQNT: u32 = 1;
pub const J2K_CCP_QNTSTY_SEQNT: u32 = 2;
pub const J2K_MS_SOC: u32 = 0xff4f;
pub const J2K_MS_SOT: u32 = 0xff90;
pub const J2K_MS_SOD: u32 = 0xff93;
pub const J2K_MS_EOC: u32 = 0xffd9;
pub const J2K_MS_CAP: u32 = 0xff50;
pub const J2K_MS_SIZ: u32 = 0xff51;
pub const J2K_MS_COD: u32 = 0xff52;
pub const J2K_MS_COC: u32 = 0xff53;
pub const J2K_MS_CPF: u32 = 0xff59;
pub const J2K_MS_RGN: u32 = 0xff5e;
pub const J2K_MS_QCD: u32 = 0xff5c;
pub const J2K_MS_QCC: u32 = 0xff5d;
pub const J2K_MS_POC: u32 = 0xff5f;
pub const J2K_MS_TLM: u32 = 0xff55;
pub const J2K_MS_PLM: u32 = 0xff57;
pub const J2K_MS_PLT: u32 = 0xff58;
pub const J2K_MS_PPM: u32 = 0xff60;
pub const J2K_MS_PPT: u32 = 0xff61;
pub const J2K_MS_SOP: u32 = 0xff91;
pub const J2K_MS_EPH: u32 = 0xff92;
pub const J2K_MS_CRG: u32 = 0xff63;
pub const J2K_MS_COM: u32 = 0xff64;
pub const J2K_MS_CBD: u32 = 0xff78;
pub const J2K_MS_MCC: u32 = 0xff75;
pub const J2K_MS_MCT: u32 = 0xff74;
pub const J2K_MS_MCO: u32 = 0xff77;
pub const J2K_MS_UNK: u32 = 0;
pub const J2K_MS_EPC: u32 = 0xff68;
pub const J2K_MS_EPB: u32 = 0xff66;
pub const J2K_MS_ESD: u32 = 0xff67;
pub const J2K_MS_RED: u32 = 0xff69;
pub const J2K_MS_SEC: u32 = 0xff65;
pub const J2K_MS_INSEC: u32 = 0xff94;
pub const J2K_MAX_POCS: u32 = 32;
pub const J2K_TCD_MATRIX_MAX_LAYER_COUNT: i32 = 10;
pub const J2K_TCD_MATRIX_MAX_RESOLUTION_COUNT: i32 = 10;
}
#[derive(Copy, Clone, Default, Debug, Eq, PartialEq)]
pub enum Jp2BoxType {
#[default]
None,
JPIP,
JP,
FTYP,
JP2H,
IHDR,
COLR,
JP2C,
URL,
PCLR,
CMAP,
CDEF,
DTBL,
BPCC,
JP2,
RES,
JP2I,
XML,
UUID,
UINF,
Unknown(u32),
}
impl From<u32> for Jp2BoxType {
fn from(value: u32) -> Self {
match value {
0x6a706970 => Jp2BoxType::JPIP,
0x6a502020 => Jp2BoxType::JP,
0x66747970 => Jp2BoxType::FTYP,
0x6a703268 => Jp2BoxType::JP2H,
0x69686472 => Jp2BoxType::IHDR,
0x636f6c72 => Jp2BoxType::COLR,
0x6a703263 => Jp2BoxType::JP2C,
0x75726c20 => Jp2BoxType::URL,
0x70636c72 => Jp2BoxType::PCLR,
0x636d6170 => Jp2BoxType::CMAP,
0x63646566 => Jp2BoxType::CDEF,
0x6474626c => Jp2BoxType::DTBL,
0x62706363 => Jp2BoxType::BPCC,
0x6a703220 => Jp2BoxType::JP2,
0x72657320 => Jp2BoxType::RES,
0x6a703269 => Jp2BoxType::JP2I,
0x786d6c20 => Jp2BoxType::XML,
0x75756994 => Jp2BoxType::UUID,
0x75696e66 => Jp2BoxType::UINF,
_ => Jp2BoxType::Unknown(value),
}
}
}
impl Jp2BoxType {
pub fn is_file_header(&self) -> bool {
match self {
Jp2BoxType::JP => true,
Jp2BoxType::FTYP => true,
Jp2BoxType::JP2H => true,
_ => false,
}
}
pub fn is_image_header(&self) -> bool {
match self {
Jp2BoxType::IHDR => true,
Jp2BoxType::COLR => true,
Jp2BoxType::BPCC => true,
Jp2BoxType::PCLR => true,
Jp2BoxType::CMAP => true,
Jp2BoxType::CDEF => true,
_ => false,
}
}
pub fn to_u32(&self) -> Option<u32> {
match self {
Jp2BoxType::None => None,
Jp2BoxType::JPIP => Some(0x6a706970),
Jp2BoxType::JP => Some(0x6a502020),
Jp2BoxType::FTYP => Some(0x66747970),
Jp2BoxType::JP2H => Some(0x6a703268),
Jp2BoxType::IHDR => Some(0x69686472),
Jp2BoxType::COLR => Some(0x636f6c72),
Jp2BoxType::JP2C => Some(0x6a703263),
Jp2BoxType::URL => Some(0x75726c20),
Jp2BoxType::PCLR => Some(0x70636c72),
Jp2BoxType::CMAP => Some(0x636d6170),
Jp2BoxType::CDEF => Some(0x63646566),
Jp2BoxType::DTBL => Some(0x6474626c),
Jp2BoxType::BPCC => Some(0x62706363),
Jp2BoxType::JP2 => Some(0x6a703220),
Jp2BoxType::RES => Some(0x72657320),
Jp2BoxType::JP2I => Some(0x6a703269),
Jp2BoxType::XML => Some(0x786d6c20),
Jp2BoxType::UUID => Some(0x75756994),
Jp2BoxType::UINF => Some(0x75696e66),
Jp2BoxType::Unknown(value) => Some(*value),
}
}
}
pub mod mqc {
pub const MQC_NUMCTXS: usize = 19;
pub const BYPASS_CT_INIT: u32 = 0xDEADBEEF;
}
pub mod opj {
pub const OPJ_TRUE: u32 = 1;
pub const OPJ_FALSE: u32 = 0;
pub const OPJ_PATH_LEN: u32 = 4096;
pub const OPJ_J2K_MAXRLVLS: u32 = 33;
pub const OPJ_J2K_MAXBANDS: u32 = 3 * OPJ_J2K_MAXRLVLS - 2;
pub const OPJ_J2K_DEFAULT_NB_SEGS: u32 = 10;
pub const OPJ_J2K_STREAM_CHUNK_SIZE: u32 = 0x100000;
pub const OPJ_J2K_DEFAULT_HEADER_SIZE: u32 = 1000;
pub const OPJ_J2K_MCC_DEFAULT_NB_RECORDS: u32 = 10;
pub const OPJ_J2K_MCT_DEFAULT_NB_RECORDS: u32 = 10;
pub const JPWL_MAX_NO_TILESPECS: u32 = 16;
pub const JPWL_MAX_NO_PACKSPECS: u32 = 16;
pub const JPWL_MAX_NO_MARKERS: u32 = 512;
pub const JPWL_PRIVATEINDEX_NAME: &str = "jpwl_index_privatefilename";
pub const JPWL_EXPECTED_COMPONENTS: u32 = 3;
pub const JPWL_MAXIMUM_TILES: u32 = 8192;
pub const JPWL_MAXIMUM_HAMMING: u32 = 2;
pub const JPWL_MAXIMUM_EPB_ROOM: u32 = 65450;
pub const OPJ_IMG_INFO: u32 = 1;
pub const OPJ_J2K_MH_INFO: u32 = 2;
pub const OPJ_J2K_TH_INFO: u32 = 4;
pub const OPJ_J2K_TCH_INFO: u32 = 8;
pub const OPJ_J2K_MH_IND: u32 = 16;
pub const OPJ_J2K_TH_IND: u32 = 32;
pub const OPJ_JP2_INFO: u32 = 128;
pub const OPJ_JP2_IND: u32 = 256;
pub const OPJ_PROFILE_NONE: u32 = 0x0000;
pub const OPJ_PROFILE_0: u32 = 0x0001;
pub const OPJ_PROFILE_1: u32 = 0x0002;
pub const OPJ_PROFILE_PART2: u32 = 0x8000;
pub const OPJ_PROFILE_CINEMA_2K: u32 = 0x0003;
pub const OPJ_PROFILE_CINEMA_4K: u32 = 0x0004;
pub const OPJ_PROFILE_CINEMA_S2K: u32 = 0x0005;
pub const OPJ_PROFILE_CINEMA_S4K: u32 = 0x0006;
pub const OPJ_PROFILE_CINEMA_LTS: u32 = 0x0007;
pub const OPJ_PROFILE_BC_SINGLE: u32 = 0x0100;
pub const OPJ_PROFILE_BC_MULTI: u32 = 0x0200;
pub const OPJ_PROFILE_BC_MULTI_R: u32 = 0x0300;
pub const OPJ_PROFILE_IMF_2K: u32 = 0x0400;
pub const OPJ_PROFILE_IMF_4K: u32 = 0x0500;
pub const OPJ_PROFILE_IMF_8K: u32 = 0x0600;
pub const OPJ_PROFILE_IMF_2K_R: u32 = 0x0700;
pub const OPJ_PROFILE_IMF_4K_R: u32 = 0x0800;
pub const OPJ_PROFILE_IMF_8K_R: u32 = 0x0900;
pub const OPJ_EXTENSION_NONE: u32 = 0x0000;
pub const OPJ_EXTENSION_MCT: u32 = 0x0100;
pub fn opj_is_cinema(v: u32) -> bool {
(OPJ_PROFILE_CINEMA_2K..=OPJ_PROFILE_CINEMA_S4K).contains(&v)
}
pub fn opj_is_storage(v: u32) -> bool {
v == OPJ_PROFILE_CINEMA_LTS
}
pub fn opj_is_broadcast(v: u32) -> bool {
(OPJ_PROFILE_BC_SINGLE..=(OPJ_PROFILE_BC_MULTI_R | 0x000b)).contains(&v)
}
pub fn opj_is_imf(v: u32) -> bool {
(OPJ_PROFILE_IMF_2K..=(OPJ_PROFILE_IMF_8K_R | 0x009b)).contains(&v)
}
pub fn opj_is_part2(v: u32) -> bool {
v & OPJ_PROFILE_PART2 != 0
}
pub fn opj_get_imf_profile(v: u32) -> u32 {
v & 0xff00
}
pub fn opj_get_imf_mainlevel(v: u32) -> u32 {
v & 0xf
}
pub fn opj_get_imf_sublevel(v: u32) -> u32 {
(v >> 4) & 0xf
}
pub const OPJ_IMF_MAINLEVEL_MAX: u32 = 11;
pub const OPJ_IMF_MAINLEVEL_1_MSAMPLESEC: u32 = 65;
pub const OPJ_IMF_MAINLEVEL_2_MSAMPLESEC: u32 = 130;
pub const OPJ_IMF_MAINLEVEL_3_MSAMPLESEC: u32 = 195;
pub const OPJ_IMF_MAINLEVEL_4_MSAMPLESEC: u32 = 260;
pub const OPJ_IMF_MAINLEVEL_5_MSAMPLESEC: u32 = 520;
pub const OPJ_IMF_MAINLEVEL_6_MSAMPLESEC: u32 = 1200;
pub const OPJ_IMF_MAINLEVEL_7_MSAMPLESEC: u32 = 2400;
pub const OPJ_IMF_MAINLEVEL_8_MSAMPLESEC: u32 = 4800;
pub const OPJ_IMF_MAINLEVEL_9_MSAMPLESEC: u32 = 9600;
pub const OPJ_IMF_MAINLEVEL_10_MSAMPLESEC: u32 = 19200;
pub const OPJ_IMF_MAINLEVEL_11_MSAMPLESEC: u32 = 38400;
pub const OPJ_IMF_SUBLEVEL_1_MBITSSEC: u32 = 200;
pub const OPJ_IMF_SUBLEVEL_2_MBITSSEC: u32 = 400;
pub const OPJ_IMF_SUBLEVEL_3_MBITSSEC: u32 = 800;
pub const OPJ_IMF_SUBLEVEL_4_MBITSSEC: u32 = 1600;
pub const OPJ_IMF_SUBLEVEL_5_MBITSSEC: u32 = 3200;
pub const OPJ_IMF_SUBLEVEL_6_MBITSSEC: u32 = 6400;
pub const OPJ_IMF_SUBLEVEL_7_MBITSSEC: u32 = 12800;
pub const OPJ_IMF_SUBLEVEL_8_MBITSSEC: u32 = 25600;
pub const OPJ_IMF_SUBLEVEL_9_MBITSSEC: u32 = 51200;
pub const OPJ_CINEMA_24_CS: u32 = 1302083;
pub const OPJ_CINEMA_48_CS: u32 = 651041;
pub const OPJ_CINEMA_24_COMP: u32 = 1041666;
pub const OPJ_CINEMA_48_COMP: u32 = 520833;
pub const OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG: u32 = 0x0001;
pub const OPJ_DPARAMETERS_DUMP_FLAG: u32 = 0x0002;
pub const OPJ_STREAM_READ: u32 = OPJ_TRUE;
pub const OPJ_STREAM_WRITE: u32 = OPJ_FALSE;
}
pub mod common {
pub const OPJ_COMMON_CBLK_DATA_EXTRA: u32 = 2;
pub const OPJ_COMP_PARAM_DEFAULT_CBLOCKW: u32 = 64;
pub const OPJ_COMP_PARAM_DEFAULT_CBLOCKH: u32 = 64;
pub const OPJ_COMP_PARAM_DEFAULT_PROG_ORDER: i32 = crate::openjpeg::OPJ_LRCP;
pub const OPJ_COMP_PARAM_DEFAULT_NUMRESOLUTION: u32 = 6;
}
pub mod t1 {
pub const T1_NMSEDEC_BITS: u32 = 7;
pub const T1_NUMCTXS_ZC: u8 = 9;
pub const T1_NUMCTXS_SC: u8 = 5;
pub const T1_NUMCTXS_MAG: u8 = 3;
pub const T1_NUMCTXS_AGG: u8 = 1;
pub const T1_NUMCTXS_UNI: u8 = 1;
pub const T1_CTXNO_ZC: u8 = 0;
pub const T1_CTXNO_SC: u8 = T1_CTXNO_ZC + T1_NUMCTXS_ZC;
pub const T1_CTXNO_MAG: u8 = T1_CTXNO_SC + T1_NUMCTXS_SC;
pub const T1_CTXNO_AGG: u8 = T1_CTXNO_MAG + T1_NUMCTXS_MAG;
pub const T1_CTXNO_UNI: u8 = T1_CTXNO_AGG + T1_NUMCTXS_AGG;
pub const T1_NUMCTXS: u8 = T1_CTXNO_UNI + T1_NUMCTXS_UNI;
pub const T1_NMSEDEC_FRACBITS: i32 = (T1_NMSEDEC_BITS - 1) as i32;
pub const T1_TYPE_MQ: u8 = 0;
pub const T1_TYPE_RAW: u8 = 1;
pub const T1_SIGMA_0: u32 = 1u32 << 0;
pub const T1_SIGMA_1: u32 = 1u32 << 1;
pub const T1_SIGMA_2: u32 = 1u32 << 2;
pub const T1_SIGMA_3: u32 = 1u32 << 3;
pub const T1_SIGMA_4: u32 = 1u32 << 4;
pub const T1_SIGMA_5: u32 = 1u32 << 5;
pub const T1_SIGMA_6: u32 = 1u32 << 6;
pub const T1_SIGMA_7: u32 = 1u32 << 7;
pub const T1_SIGMA_8: u32 = 1u32 << 8;
pub const T1_SIGMA_9: u32 = 1u32 << 9;
pub const T1_SIGMA_10: u32 = 1u32 << 10;
pub const T1_SIGMA_11: u32 = 1u32 << 11;
pub const T1_SIGMA_12: u32 = 1u32 << 12;
pub const T1_SIGMA_13: u32 = 1u32 << 13;
pub const T1_SIGMA_14: u32 = 1u32 << 14;
pub const T1_SIGMA_15: u32 = 1u32 << 15;
pub const T1_SIGMA_16: u32 = 1u32 << 16;
pub const T1_SIGMA_17: u32 = 1u32 << 17;
pub const T1_CHI_0: u32 = 1u32 << 18;
pub const T1_CHI_0_I: u32 = 18;
pub const T1_CHI_1: u32 = 1u32 << 19;
pub const T1_CHI_1_I: u32 = 19;
pub const T1_MU_0: u32 = 1u32 << 20;
pub const T1_PI_0: u32 = 1u32 << 21;
pub const T1_CHI_2: u32 = 1u32 << 22;
pub const T1_CHI_2_I: u32 = 22;
pub const T1_MU_1: u32 = 1u32 << 23;
pub const T1_PI_1: u32 = 1u32 << 24;
pub const T1_CHI_3: u32 = 1u32 << 25;
pub const T1_MU_2: u32 = 1u32 << 26;
pub const T1_PI_2: u32 = 1u32 << 27;
pub const T1_CHI_4: u32 = 1u32 << 28;
pub const T1_MU_3: u32 = 1u32 << 29;
pub const T1_PI_3: u32 = 1u32 << 30;
pub const T1_CHI_5: u32 = 1u32 << 31;
pub const T1_CHI_5_I: u32 = 31;
pub const T1_SIGMA_NW: u32 = T1_SIGMA_0;
pub const T1_SIGMA_N: u32 = T1_SIGMA_1;
pub const T1_SIGMA_NE: u32 = T1_SIGMA_2;
pub const T1_SIGMA_W: u32 = T1_SIGMA_3;
pub const T1_SIGMA_THIS: u32 = T1_SIGMA_4;
pub const T1_SIGMA_E: u32 = T1_SIGMA_5;
pub const T1_SIGMA_SW: u32 = T1_SIGMA_6;
pub const T1_SIGMA_S: u32 = T1_SIGMA_7;
pub const T1_SIGMA_SE: u32 = T1_SIGMA_8;
pub const T1_SIGMA_NEIGHBOURS: u32 = T1_SIGMA_NW
| T1_SIGMA_N
| T1_SIGMA_NE
| T1_SIGMA_W
| T1_SIGMA_E
| T1_SIGMA_SW
| T1_SIGMA_S
| T1_SIGMA_SE;
pub const T1_CHI_THIS: u32 = T1_CHI_1;
pub const T1_CHI_THIS_I: u32 = T1_CHI_1_I;
pub const T1_MU_THIS: u32 = T1_MU_0;
pub const T1_PI_THIS: u32 = T1_PI_0;
pub const T1_CHI_S: u32 = T1_CHI_2;
pub const T1_LUT_SGN_W: u32 = 1u32 << 0;
pub const T1_LUT_SIG_N: u32 = 1u32 << 1;
pub const T1_LUT_SGN_E: u32 = 1u32 << 2;
pub const T1_LUT_SIG_W: u32 = 1u32 << 3;
pub const T1_LUT_SGN_N: u32 = 1u32 << 4;
pub const T1_LUT_SIG_E: u32 = 1u32 << 5;
pub const T1_LUT_SGN_S: u32 = 1u32 << 6;
pub const T1_LUT_SIG_S: u32 = 1u32 << 7;
}
pub use common::*;
pub use event::*;
pub use j2k::*;
pub use mqc::*;
pub use opj::*;
pub use t1::*;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_jpip_box_type_roundtrip() {
let values = [
JpipBoxType::Cidx,
JpipBoxType::Cptr,
JpipBoxType::Manf,
JpipBoxType::Faix,
JpipBoxType::Mhix,
JpipBoxType::Tpix,
JpipBoxType::Thix,
JpipBoxType::Ppix,
JpipBoxType::Phix,
JpipBoxType::Fidx,
JpipBoxType::Fptr,
JpipBoxType::Prxy,
JpipBoxType::Iptr,
JpipBoxType::Phld,
JpipBoxType::Unknown(123),
];
for value in values.iter() {
let u32_value = value.to_u32();
let converted_value = JpipBoxType::from(u32_value);
assert_eq!(*value, converted_value);
}
}
#[test]
fn test_jp2_box_type_roundtrip() {
let variants = [
Jp2BoxType::JPIP,
Jp2BoxType::JP,
Jp2BoxType::FTYP,
Jp2BoxType::JP2H,
Jp2BoxType::IHDR,
Jp2BoxType::COLR,
Jp2BoxType::JP2C,
Jp2BoxType::URL,
Jp2BoxType::PCLR,
Jp2BoxType::CMAP,
Jp2BoxType::CDEF,
Jp2BoxType::DTBL,
Jp2BoxType::BPCC,
Jp2BoxType::JP2,
Jp2BoxType::RES,
Jp2BoxType::JP2I,
Jp2BoxType::XML,
Jp2BoxType::UUID,
Jp2BoxType::UINF,
Jp2BoxType::Unknown(123),
];
for variant in &variants {
let value = variant.to_u32().unwrap();
let roundtrip_variant = Jp2BoxType::from(value);
assert_eq!(*variant, roundtrip_variant);
}
}
}