use crate::jpeg::obj::JpegObj;
use crate::jpeg::writer::JpegWriter;
#[derive(Debug, Clone)]
pub struct SosHeader {
pub jpeg_obj: JpegObj,
}
impl SosHeader {
pub fn new(jpeg_obj: JpegObj) -> Self {
SosHeader { jpeg_obj }
}
pub fn write(&self, writer: &mut dyn JpegWriter) {
let mut sos: Vec<u8> = vec![0xFF, 0xDA, 0x00, 12];
sos.push(self.jpeg_obj.number_of_components);
for i in 0..self
.jpeg_obj
.number_of_components
.min(self.jpeg_obj.comp_id.len() as u8) as usize
{
sos.push(self.jpeg_obj.comp_id[i]);
sos.push((self.jpeg_obj.dctable_number[i] << 4) + self.jpeg_obj.actable_number[i]);
}
sos.push(self.jpeg_obj.ss);
sos.push(self.jpeg_obj.se);
sos.push((self.jpeg_obj.ah << 4) + self.jpeg_obj.al);
writer.write_array(&sos);
}
}