#[derive(Debug, Clone)]
pub struct DctStruct {
pub quantum: [[u16; 64]; 2],
}
impl Default for DctStruct {
fn default() -> Self {
DctStruct {
quantum: [[0; 64], [0; 64]],
}
}
}
impl DctStruct {
pub fn new(bytes: &[u8]) -> Result<Self, &'static str> {
if bytes.len() != 128 {
return Err("Invalid byte slice length for DctStruct");
}
let mut quantum = [[0; 64]; 2];
for (i, row) in quantum.iter_mut().enumerate() {
for (j, coeff) in row.iter_mut().enumerate() {
let index = i * 64 + j;
if index + 1 < bytes.len() {
*coeff = u16::from_be_bytes(bytes[index..(index + 2)].try_into().unwrap());
} else {
eprintln!("Invalid byte slice for DctStruct");
break;
}
}
}
Ok(DctStruct { quantum })
}
}