rawloader/decoders/
nkd.rs1use crate::decoders::*;
2use crate::decoders::basics::*;
3use std::f32::NAN;
4
5pub struct NakedDecoder<'a> {
7 buffer: &'a [u8],
8 camera: Camera,
9}
10
11impl<'a> NakedDecoder<'a> {
12 pub fn new(buf: &'a [u8], cam: Camera, _rawloader: &'a RawLoader) -> NakedDecoder<'a> {
13 NakedDecoder {
14 buffer: buf,
15 camera: cam,
16 }
17 }
18}
19
20impl<'a> Decoder for NakedDecoder<'a> {
21 fn image(&self, dummy: bool) -> Result<RawImage,String> {
22 let width = self.camera.raw_width;
23 let height = self.camera.raw_height;
24 let size = self.camera.filesize;
25 let bits = size*8 / width / height;
26
27 let image = if self.camera.find_hint("12le_16bitaligned") {
28 decode_12le_16bitaligned(self.buffer, width, height, dummy)
29 } else {
30 match bits {
31 10 => decode_10le_lsb16(self.buffer, width, height, dummy),
32 12 => decode_12be_msb16(self.buffer, width, height, dummy),
33 _ => return Err(format!("Naked: Don't know about {} bps images", bits).to_string()),
34 }
35 };
36
37 ok_image(self.camera.clone(), width, height, [NAN,NAN,NAN,NAN], image)
38 }
39}