pub mod bitreader;
pub mod box_parser;
pub mod decoder;
pub mod encoder;
pub mod marker_write;
pub mod markers;
pub mod mq_coder;
pub mod mq_encoder;
pub mod quantize_fwd;
pub mod tier1;
pub mod tier1_encode;
pub mod tier2;
pub mod tier2_encode;
pub mod wavelet;
pub use decoder::{DecodedImage, Jpeg2000Decoder};
pub use encoder::{Jpeg2000Encoder, Jpeg2000EncoderConfig};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum Jp2Error {
#[error("truncated JPEG 2000 data: expected {needed} bytes at {context}, had {available}")]
Truncated {
context: &'static str,
needed: usize,
available: usize,
},
#[error("invalid JPEG 2000 marker 0x{marker:04X} at offset {offset}")]
InvalidMarker {
marker: u16,
offset: usize,
},
#[error("unexpected JP2 box type '{box_type}' at offset {offset}")]
UnexpectedBox {
box_type: String,
offset: usize,
},
#[error("invalid JP2 file signature")]
InvalidSignature,
#[error("MQ coder out of input")]
MqOutOfInput,
#[error("unsupported JPEG 2000 parameter: {0}")]
Unsupported(String),
#[error("multi-layer codestreams are not supported (single layer only)")]
MultiTileOrLayer,
#[error("internal computation error: {0}")]
InternalError(String),
#[error("bit reader out of input")]
BitReaderOutOfInput,
}
pub type Jp2Result<T> = Result<T, Jp2Error>;