rawloader/decoders/
nkd.rs

1use crate::decoders::*;
2use crate::decoders::basics::*;
3use std::f32::NAN;
4
5//#[derive(Debug, Clone)]
6pub 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}