use crate::encode::encoder::Operations;
pub(crate) struct NeonOperations;
fn neon_fdct_enabled() -> bool {
use std::sync::OnceLock;
static V: OnceLock<bool> = OnceLock::new();
*V.get_or_init(|| {
std::env::var("RUSTY_JPEG_NEON_FDCT")
.map(|v| v != "0")
.unwrap_or(true)
})
}
impl Operations for NeonOperations {
#[inline(always)]
fn fdct(data: &mut [i16; 64]) {
if neon_fdct_enabled() {
crate::encode::fdct_simd::neon::fdct_neon(data);
} else {
crate::encode::fdct::fdct(data);
}
}
#[inline(always)]
fn quantize_block(
block: &[i16; 64],
q_block: &mut [i16; 64],
table: &crate::encode::quantization::QuantizationTable,
) {
unsafe {
crate::encode::quantization::neon::quantize_block_neon(block, q_block, table);
}
}
}