use crate::tiff::file::TiffRead; | |
use crate::tiff::tags::{Make, Model, Tag}; | |
use crate::tiff::{Ifd, TiffError}; | |
use rawkit_proc_macros::Tag; | |
use std::io::{Read, Seek}; | |
const COMPANY_NAMES: [&str; 22] = [ | |
"AgfaPhoto", | |
"Canon", | |
"Casio", | |
"Epson", | |
"Fujifilm", | |
"Mamiya", | |
"Minolta", | |
"Motorola", | |
"Kodak", | |
"Konica", | |
"Leica", | |
"Nikon", | |
"Nokia", | |
"Olympus", | |
"Ricoh", | |
"Pentax", | |
"Phase One", | |
"Samsung", | |
"Sigma", | |
"Sinar", | |
"Sony", | |
"YI", | |
]; | |
struct CameraModelIfd { | |
make: Make, | |
model: Model, | |
} | |
pub struct CameraModel { | |
pub make: String, | |
pub model: String, | |
} | |
pub fn identify_camera_model<R: Read + Seek>(ifd: &Ifd, file: &mut TiffRead<R>) -> Option<CameraModel> { | |
let mut ifd = ifd.get_value::<CameraModelIfd, _>(file).unwrap(); | |
ifd.make.make_ascii_lowercase(); | |
for company_name in COMPANY_NAMES { | |
let lowercase_company_name = company_name.to_ascii_lowercase(); | |
if ifd.make.contains(&lowercase_company_name) { | |
return Some(CameraModel { | |
make: company_name.to_string(), | |
model: ifd.model, | |
}); | |
} | |
} | |
None | |
} | |