use j2k_core::DEFAULT_MAX_HOST_ALLOCATION_BYTES;
use super::super::super::JpegPlanCache;
use crate::adapter::fast_packet::{JpegCachedPlan, JpegCachedPlanBuildError};
use crate::decoder::{Decoder, JpegView};
impl JpegPlanCache {
pub fn resolve(&mut self, input: &[u8]) -> Result<JpegCachedPlan, JpegCachedPlanBuildError> {
self.resolve_with_external_live(input, 0)
}
pub fn resolve_with_external_live(
&mut self,
input: &[u8],
external_live_bytes: usize,
) -> Result<JpegCachedPlan, JpegCachedPlanBuildError> {
if let Some(plan) = self.get(input) {
return Ok(plan);
}
let (plan, decoder) = self.resolve_miss_with_decoder(
input,
external_live_bytes,
DEFAULT_MAX_HOST_ALLOCATION_BYTES,
)?;
drop(decoder);
Ok(plan)
}
pub fn resolve_with_decoder_and_external_live<'a>(
&mut self,
input: &'a [u8],
external_live_bytes: usize,
) -> Result<(JpegCachedPlan, Decoder<'a>), JpegCachedPlanBuildError> {
if let Some(plan) = self.get(input) {
let live_bytes = self.operation_live_bytes(external_live_bytes)?;
let view = JpegView::parse_with_external_live(input, live_bytes)?;
let decoder = Decoder::from_view_with_external_live(view, live_bytes)?;
return Ok((plan, decoder));
}
self.resolve_miss_with_decoder(
input,
external_live_bytes,
DEFAULT_MAX_HOST_ALLOCATION_BYTES,
)
}
}