use crate::jpeg::huff::Huffman;
use crate::jpeg::writer::JpegWriter;
#[derive(Debug, Clone)]
pub struct DhtHeader {
pub huf: Huffman,
}
impl DhtHeader {
pub fn new(huf: Huffman) -> Self {
DhtHeader { huf }
}
pub fn write(&self, writer: &mut dyn JpegWriter) {
let mut dht: Vec<u8> = vec![0xFF, 0xC4];
let index = 4;
let mut old_index = 4;
for i in 0..4 {
let bytes = self.huf.bits[i][0];
dht.push(bytes as u8);
for j in 1..17 {
let temp = self.huf.bits[i][j];
dht.push(temp as u8);
}
let dht2: Vec<u8> = self.huf.val[i].iter().map(|&x| x as u8).collect();
dht.extend_from_slice(&dht2);
let mut dht3: Vec<u8> = vec![0xFF, 0xC4];
let end_index = old_index + 17 + bytes as usize;
dht3.extend_from_slice(&dht[old_index..end_index.min(index)]); dht = dht3;
old_index = index;
}
if dht.len() > 2 {
dht[2] = (((index - 2) >> 8) & 0xFF) as u8;
}
if dht.len() > 3 {
dht[3] = ((index - 2) & 0xFF) as u8;
}
writer.write_array(&dht);
}
}