# Conflicts:
#	ROADMAP.md
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/raw-parity.md
#	docs/raw/evidence.tsv
#	xtask/src/main.rs
This commit is contained in:
Brandon Thomas committed 2026-10-14 21:59:28 -04:00
commit 6ab5e2b0d4
8 files changed
+271 -19

No files matched your search

+1
View File
@@ -177,6 +177,7 @@ Ranked toward beta; detail in [docs/roadmap.md](docs/roadmap.md), gaps in [docs/
| 2026-10-14 | minor | Localization ~52% → ~55% (mean of the 12 key languages): de, es, fr, ja and uk catalogs filled |
| 2026-10-14 | minor | 21 Sony and Leica models verified (258 models, 18%); headline numbers unchanged |
| 2026-10-12 | minor | UI/UX remaining 34–58 h → 32–54 h (canvas tools by keyboard); headline numbers unchanged |
| 2026-10-14 | minor | 17 uncompressed Olympus and Samsung models verified on one CC0 file each (254 models verified, 18%); headline numbers unchanged |
| 2026-10-12 | minor | UI/UX remaining 40–70 h → 34–58 h (accessibility audit landed); headline numbers unchanged |
| 2026-10-12 | minor | 22 more CR3 bodies verified, EOS R6 Mark III white balance: RAW decoding 77% → 83%, RAW ~56% → ~60%; mainstream 49% → 51%, essentials 64% → 65%; full unchanged at ~61% |
| 2026-10-12 | minor | 117 Nikon and Fujifilm bodies verified (354 models, 24%); headline numbers unchanged |
+114
View File
@@ -0,0 +1,114 @@
//! One CC0 file per uncompressed Olympus ORF and Samsung SRW body from raw.pixls.us (URLs and SHA-256 in `RAW_SAMPLES`,
//! xtask/src/main.rs; downloaded into the gitignored corpus/raw by `cargo xtask corpus --download`).
//!
//! No external decoder was run on these: the FNV-1a hashes over the decoded u16 samples (row-major,
//! little-endian, masked borders included) pin LightCraft's own decode, and the check against the camera is
//! black-box: the green sites of the active area, on a 24 × 16 grid, must follow the camera's own embedded
//! JPEG (gamma-encoded Pearson r; 0.70–1.00 on these files, a misread layout or stream gives r near 0). The E-10 is
//! pinned only (its small JPEG gives r 0.59); its render was inspected by eye.
//! Missing files are reported as skipped.
use lightcraft_raw::{RawData, decode, embedded_preview, probe_info};
use std::path::{Path, PathBuf};
fn corpus() -> PathBuf {
std::env::var_os("LIGHTCRAFT_CORPUS").map(PathBuf::from).unwrap_or_else(|| Path::new(env!("CARGO_MANIFEST_DIR")).join("../../corpus"))
}
/// Green of the decoded mosaic against the camera's embedded JPEG on a `gw × gh` grid of the active area.
fn green_vs_camera_jpeg(raw: &lightcraft_raw::RawImage, jpeg: &[u8], gw: usize, gh: usize) -> f64 {
use zune_core::{bytestream::ZCursor, colorspace::ColorSpace, options::DecoderOptions};
let opts = DecoderOptions::default().jpeg_set_out_colorspace(ColorSpace::RGB);
let mut d = zune_jpeg::JpegDecoder::new_with_options(ZCursor::new(jpeg), opts);
let px = d.decode().unwrap();
let info = d.info().unwrap();
let (jw, jh) = (info.width as usize, info.height as usize);
let mean = |sum: Vec<f64>, n: Vec<f64>| sum.iter().zip(&n).map(|(s, n)| s / n.max(1.0)).collect::<Vec<f64>>();
let (mut js, mut jn) = (vec![0f64; gw * gh], vec![0f64; gw * gh]);
for y in 0..jh {
for x in 0..jw {
let i = (y * gh / jh) * gw + x * gw / jw;
js[i] += f64::from(px[(y * jw + x) * 3 + 1]);
jn[i] += 1.0;
}
}
let RawData::U16(samples) = &raw.data else { panic!("integer sensor data expected") };
let cfa = raw.cfa.clone().expect("colour-filter layout");
let (a, black, white) = (raw.active_area, f64::from(raw.black.mean()), f64::from(raw.white_at(0)));
let (mut rs, mut rn) = (vec![0f64; gw * gh], vec![0f64; gw * gh]);
for y in a.y..a.y + a.height {
for x in a.x..a.x + a.width {
if cfa.color_at(x, y) == 1 {
let i = ((y - a.y) * gh / a.height) * gw + (x - a.x) * gw / a.width;
rs[i] += ((f64::from(samples[y * raw.width + x]) - black).max(0.0) / (white - black)).powf(1.0 / 2.2);
rn[i] += 1.0;
}
}
}
let (r, j) = (mean(rs, rn), mean(js, jn));
let n = r.len() as f64;
let (mr, mj) = (r.iter().sum::<f64>() / n, j.iter().sum::<f64>() / n);
let cov: f64 = r.iter().zip(&j).map(|(x, y)| (x - mr) * (y - mj)).sum();
let vr: f64 = r.iter().map(|x| (x - mr).powi(2)).sum();
let vj: f64 = j.iter().map(|y| (y - mj).powi(2)).sum();
cov / (vr * vj).sqrt()
}
#[test]
fn olympus_and_samsung_bodies_decode_like_the_camera_jpeg() {
// (file, sensor width × height, pinned FNV-1a of the sensor samples, compare with the camera JPEG)
let cases: &[(&str, (usize, usize), u64, bool)] = &[
("dng-samsung-gx10.dng", (3936, 2624), 0x25d5_1c29_e67f_99e8, true),
("dng-samsung-gx20.dng", (4864, 3136), 0x516f_3df8_c879_a2c7, true),
("orf-olympus-c5060wz.orf", (2608, 1949), 0x4185_d439_e31d_72bf, true),
("orf-olympus-c7070wz.orf", (3088, 2309), 0x016a_f9d1_89e5_4aaf, true),
("orf-olympus-e-10.orf", (2256, 1684), 0x1029_c758_4810_f56b, false),
("orf-olympus-e-300.orf", (3360, 2504), 0xa9b4_e783_03a4_45c2, true),
("orf-olympus-e-330.orf", (3280, 2450), 0xc938_38fa_9822_c81a, true),
("orf-olympus-e-500.orf", (3360, 2504), 0x5e22_2ac8_17ed_89d9, true),
("orf-olympus-e-m5-mark-ii.orf", (9280, 6932), 0xa222_be38_c767_7782, true),
("orf-olympus-pen-f.orf", (10400, 7796), 0x415e_bf27_092e_9897, true),
("orf-olympus-sh-2.orf", (4624, 3470), 0xb25b_8d24_4ade_1f3d, true),
("orf-olympus-sp510uz.orf", (3088, 2309), 0xa885_b7ca_83ba_02f1, true),
("orf-olympus-sp550uz.orf", (3088, 2309), 0x30ac_5e9f_34b9_8645, true),
("orf-olympus-sp565uz.orf", (3664, 2741), 0x0962_c436_052d_efa8, true),
("orf-olympus-sp570uz.orf", (3664, 2741), 0xdd62_06d6_17d0_8a46, true),
("orf-olympus-xz-10.orf", (3984, 2990), 0x6274_1a67_cd42_40f7, true),
("srw-samsung-nx1000.srw", (5632, 3720), 0xd99f_f1d0_e3d6_435f, true),
("srw-samsung-nx11.srw", (4704, 3124), 0x29b5_58f8_09e4_85cb, true),
("srw-samsung-nx1100.srw", (5632, 3720), 0x69cd_048b_c8a1_dd7a, true),
("srw-samsung-nx200.srw", (5632, 3720), 0x61ef_6100_b9f6_dabd, true),
("srw-samsung-nx210.srw", (5632, 3720), 0x50d5_e55e_6ec7_7faa, true),
("srw-samsung-nx5.srw", (4704, 3124), 0xf20d_905b_41b3_32f6, true),
("srw-samsung-wb2000.srw", (3728, 2781), 0xe40f_1c19_41ce_9000, true),
];
let mut seen = 0;
for &(name, sensor, hash, jpeg_check) in cases {
let path = corpus().join("raw").join(name);
let Ok(bytes) = std::fs::read(&path) else {
eprintln!("skip: {} absent", path.display());
continue;
};
let raw = decode(&bytes).unwrap_or_else(|e| panic!("{name}: {e}"));
raw.validate().unwrap();
assert_eq!((raw.width, raw.height, raw.cpp), (sensor.0, sensor.1, 1), "{name}: sensor size");
assert_eq!(raw.info(), probe_info(&bytes).unwrap(), "{name}: probe and decode disagree");
let RawData::U16(samples) = &raw.data else { panic!("{name}: integer sensor data expected") };
let actual = samples
.iter()
.flat_map(|v| v.to_le_bytes())
.fold(0xcbf2_9ce4_8422_2325u64, |h, byte| (h ^ u64::from(byte)).wrapping_mul(0x100_0000_01b3));
assert_eq!(actual, hash, "{name}: sensor pixels differ from the pinned decode");
assert!(raw.white_at(0) > raw.black.mean(), "{name}: invalid black/white levels");
if !jpeg_check {
seen += 1;
continue;
}
let jpeg = embedded_preview(&bytes).unwrap_or_else(|| panic!("{name}: no camera JPEG"));
let r = green_vs_camera_jpeg(&raw, &jpeg, 24, 16);
eprintln!("{name:40} {}x{}: green follows the camera JPEG, r = {r:.3}", raw.width, raw.height);
assert!(r > 0.6, "{name}: decoded mosaic does not follow the camera JPEG (r = {r:.3})");
seen += 1;
}
eprintln!("Olympus / Samsung bodies checked on {seen} files");
}
+1
View File
@@ -74,6 +74,7 @@ Beta-blocking gaps (B) total **~230–430 h**; with the stability and platform w
| Date | Change | Summary |
|---|---|---|
| 2026-10-14 | minor | Gap 21: de, es, fr, ja and uk catalogs filled (97–99%); 55–90 h → 40–70 h |
| 2026-10-14 | minor | Gap 10: 17 uncompressed Olympus and Samsung models verified on one CC0 file each (254 models) |
| 2026-10-13 | patch | Gaps 10, 22 and 23 each had two rows (two branches edited them; the merges kept both): the older copies are removed, and `cargo xtask parity` (in `ci`) now fails when a gap number is listed twice |
| 2026-10-13 | minor | Closed recently: Sony ILCA-99M2 profile |
| 2026-10-14 | minor | Gap 10: 21 Sony and Leica models verified on one CC0 file each (258 models) |
+1
View File
@@ -793,6 +793,7 @@ Latin stays upright. Advanced Japanese composition remains open. Regression cove
| Date | Change | Summary |
|---|---|---|
| 2026-10-14 | minor | LR-IMP-CAMERA-COVERAGE: 17 uncompressed Olympus and Samsung Adobe models verified on one CC0 file each; status unchanged (🟡) |
| 2026-10-13 | patch | LR-VIEW-COMPARE, LRC-LIB-COMPARE: ⌘/Ctrl- and Shift-clicks on the filmstrip in Compare change the selection as in the grid; the two photos shown stay selected and the active photo is unchanged (#187); statuses unchanged |
| 2026-10-13 | minor | KEYC-SELECTONLYACTIVE: Edit → Select Only Active Photo (⌘⇧D) lands as a new row; status 🟡 (headless-tested, native macOS menu path unverified) |
| 2026-10-13 | patch | LRC-LIB-CATALOG-IMPORT: a catalog whose tables are all still in its `-wal` file (main file schema format 0) opens instead of failing as an unsupported schema format; status unchanged |
+3 -2
View File
@@ -69,7 +69,7 @@ committed table is stale.
|---|---:|---:|---:|---:|---:|---|
| Sony | 149 | 86 | 51 | 10 | 2 | DSLR-A200…A390 and A850 12-bit compressed ARW (preview, #535); A100 preview-only and DSC-F828 refused (#702 fixed the regression; their raws aren't decoded); SRF not imported |
| Canon | 134 | 12 | 99 | 21 | 2 | CRW (2000–2004 bodies) preview; EOS-1D / 1Ds TIFF raws not imported |
| Samsung | 128 | 1 | 118 | 9 | 0 | compressed SRW (NX1, NX30, NX300, NX500, NX2000, NX3000, NX3300, NX mini, Galaxy NX) |
| Samsung | 128 | 4 | 115 | 9 | 0 | compressed SRW (NX1, NX30, NX300, NX500, NX2000, NX3000, NX3300, NX mini, Galaxy NX) |
| Apple | 113 | 1 | 112 | 0 | 0 | — (DNG / ProRAW) |
| Panasonic | 104 | 93 | 11 | 0 | 0 | — |
| Nikon | 99 | 73 | 23 | 0 | 3 | COOLPIX 5700 / 8400 / 8800 decode wrongly (two stacked half-height fields, CMYG read as RGB); HE / HE★ is a per-shot setting, preview-only |
@@ -96,7 +96,7 @@ committed table is stale.
| Nikon | 16% | 98% | 83% | decoders cover every NEF coding but HE; 73 bodies verified |
| Fujifilm | 10% | 94% | 92% | |
| Panasonic | 4% | 100% | 98% | bulk-checked |
| OM / Olympus | 3% | 3% | 1% | compressed ORF |
| OM / Olympus | 3% | 6% | 5% | compressed ORF |
| Phones | 3% | 93% | 1% | DNG |
| Pentax / Ricoh | 1.5% | 94% | 14% | |
| Leica | 1% | 99% | 72% | the Q3 verified, 13 more bodies pinned on CC0 files |
@@ -274,6 +274,7 @@ Beyond decoding:
|---|---|---|
| 2026-10-13 | minor | Bundled camera profiles 4 → 5 (ILCA-99M2) |
| 2026-10-14 | minor | 21 Sony and Leica models verified (one CC0 raw.pixls.us file each, pinned; `sony_leica_corpus.rs`): 258 verified, 920 unverified; Leica on a verified body 21% → 72%, Sony 91% → 92%, use-weighted 85% and 43% |
| 2026-10-14 | minor | 17 uncompressed Olympus and Samsung models verified on one CC0 file each (`olympus_samsung_corpus.rs`): 254 verified, 932 unverified, 224 preview; OM / Olympus 3% → 6% (5% on verified bodies); use-weighted 85% and 42% unchanged; duplicated summary rows from a merge removed |
| 2026-10-11 | minor | Leica Q3 verified by a recorded check of 38 private DNGs (no decode failure; mean ΔE to the camera JPEG 6.3–13.9): 236 verified, 941 unverified, Leica bucket on a verified body 5% → 21%, weighted shares unchanged |
| 2026-10-12 | patch | CR2 white level from the active area, not the saturated masked rows above it (#1272: EOS 50D, 60D, 450D (Rebel XSi), 500D (Rebel T1i), 550D (Rebel T2i), 1200D (Rebel T5) and 100D (Rebel SL1)); scores unchanged |
| 2026-10-12 | minor | Canon PowerShot G9: as-shot white balance from WBInfo (`0x0029`, the row of the preset in ShotInfo), issue #1273; render unchanged (the camera-look fit already absorbed it), As Shot now the camera's; counts unchanged |
+17 -17
View File
@@ -788,13 +788,13 @@ OM Digital Solutions OM-5 Mark II ORF 2024 preview compressed ORF is not decoded
OM Digital Solutions OM-3 Astro ORF 2025 preview compressed ORF is not decoded
Olympus AIR A01 ORF 2015 preview compressed ORF is not decoded
Olympus Camedia C-5050 Zoom ORF 2003 unverified uncompressed / packed ORF
Olympus Camedia C-5060 Zoom ORF 2003 unverified uncompressed / packed ORF
Olympus Camedia C-7070 Wide Zoom ORF 2005 unverified uncompressed / packed ORF
Olympus Camedia C-5060 Zoom ORF 2003 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus Camedia C-7070 Wide Zoom ORF 2005 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus Camedia C-8080 Wide Zoom ORF 2003 unverified uncompressed / packed ORF
Olympus E-1 ORF 2003 verified corpus: crates/raw/tests/corpus.rs (xtask RAW_SAMPLES)
Olympus E-3 ORF 2007 preview compressed ORF is not decoded
Olympus E-5 ORF 2010 preview compressed ORF is not decoded
Olympus E-10 ORF 2003 unverified uncompressed / packed ORF
Olympus E-10 ORF 2003 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash)
Olympus E-20 ORF 2003 unverified uncompressed / packed ORF
Olympus E-30 ORF 2008 preview compressed ORF is not decoded
Olympus E-420 ORF 2008 preview compressed ORF is not decoded
@@ -802,18 +802,18 @@ Olympus E-450 ORF 2008 preview compressed ORF is not decoded
Olympus E-520 ORF 2008 preview compressed ORF is not decoded
Olympus E-600 ORF 2010 preview compressed ORF is not decoded
Olympus E-620 ORF 2008 preview compressed ORF is not decoded
Olympus EVOLT E-300 ORF 2005 unverified uncompressed / packed ORF
Olympus EVOLT E-330 ORF 2005 unverified uncompressed / packed ORF
Olympus EVOLT E-300 ORF 2005 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus EVOLT E-330 ORF 2005 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus EVOLT E-400 ORF 2005 verified corpus: crates/raw/tests/corpus.rs (xtask RAW_SAMPLES)
Olympus EVOLT E-410 ORF 2007 preview compressed ORF is not decoded
Olympus EVOLT E-500 ORF 2005 unverified uncompressed / packed ORF
Olympus EVOLT E-500 ORF 2005 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus EVOLT E-510 ORF 2007 preview compressed ORF is not decoded
Olympus OM-D E-M1 ORF 2013 preview compressed ORF is not decoded
Olympus OM-D E-M1X ORF 2018 preview compressed ORF is not decoded
Olympus OM-D E-M1 Mark II ORF 2015 preview compressed ORF is not decoded
Olympus OM-D E-M1 Mark III ORF 2019 preview compressed ORF is not decoded
Olympus OM-D E-M5 ORF 2012 preview compressed ORF is not decoded
Olympus OM-D E-M5 Mark II ORF 2015 preview compressed ORF is not decoded
Olympus OM-D E-M5 Mark II ORF 2015 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus OM-D E-M5 Mark III ORF 2019 preview compressed ORF is not decoded
Olympus OM-D E-M10 ORF 2013 preview compressed ORF is not decoded
Olympus OM-D E-M10 Mark II ORF 2015 preview compressed ORF is not decoded
@@ -837,25 +837,25 @@ Olympus PEN E-PL8 ORF 2015 preview compressed ORF is not decoded
Olympus PEN E-PL9 ORF 2017 preview compressed ORF is not decoded
Olympus PEN E-PM1 ORF 2010 preview compressed ORF is not decoded
Olympus PEN E-PM2 ORF 2012 preview compressed ORF is not decoded
Olympus PEN-F ORF 2015 preview compressed ORF is not decoded
Olympus PEN-F ORF 2015 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus SP-310 ORF 2005 preview compressed ORF is not decoded
Olympus SP-320 ORF 2005 preview compressed ORF is not decoded
Olympus SP-350 ORF 2005 preview compressed ORF is not decoded
Olympus SP-500 UZ ORF 2005 preview compressed ORF is not decoded
Olympus SP-510 UZ ORF 2005 preview compressed ORF is not decoded
Olympus SP-550 UZ ORF 2007 preview compressed ORF is not decoded
Olympus SP-510 UZ ORF 2005 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus SP-550 UZ ORF 2007 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus SP-560 UZ ORF 2007 preview compressed ORF is not decoded
Olympus SP-565 UZ ORF 2008 preview compressed ORF is not decoded
Olympus SP-570 UZ ORF 2007 preview compressed ORF is not decoded
Olympus SP-565 UZ ORF 2008 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus SP-570 UZ ORF 2007 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus Stylus 1 ORF 2013 preview compressed ORF is not decoded
Olympus Stylus 1s ORF 2013 preview compressed ORF is not decoded
Olympus Stylus SH-2 ORF 2015 preview compressed ORF is not decoded
Olympus Stylus SH-2 ORF 2015 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus Stylus SH-3 ORF 2015 preview compressed ORF is not decoded
Olympus Stylus Tough TG-4 ORF 2015 preview compressed ORF is not decoded
Olympus Stylus Tough TG-5 ORF 2015 preview compressed ORF is not decoded
Olympus Stylus Tough TG-6 ORF 2018 preview compressed ORF is not decoded
Olympus Stylus XZ-2 iHS ORF 2012 verified corpus: crates/raw/tests/corpus.rs (xtask RAW_SAMPLES)
Olympus Stylus XZ-10 ORF 2012 preview compressed ORF is not decoded
Olympus Stylus XZ-10 ORF 2012 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus XZ-1 ORF 2010 preview compressed ORF is not decoded
OnePlus 7T Front Camera DNG 2019 unverified DNG decoder (uncompressed, LJ92, lossy, Deflate, JPEG XL, LinearRaw)
OnePlus 7T Rear Main Camera DNG 2019 unverified DNG decoder (uncompressed, LJ92, lossy, Deflate, JPEG XL, LinearRaw)
@@ -1105,14 +1105,14 @@ Samsung EK-KN120 SRW 2012 preview compressed SRW is not decoded
Samsung EX2F SRW 2012 unverified uncompressed / packed SRW
Samsung NX300 SRW 2012 preview compressed SRW is not decoded
Samsung NX500 SRW 2015 preview compressed SRW is not decoded
Samsung NX1000 SRW 2012 unverified uncompressed / packed SRW
Samsung NX1100 SRW 2012 unverified uncompressed / packed SRW
Samsung NX1000 SRW 2012 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Samsung NX1100 SRW 2012 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Samsung NX2000 SRW 2012 preview compressed SRW is not decoded
Samsung NX3000 SRW 2013 preview compressed SRW is not decoded
Samsung NX3300 SRW 2015 preview compressed SRW is not decoded
Samsung NX U SRW 2012 unverified uncompressed / packed SRW
Samsung Pro 815 DNG 2003 unverified DNG decoder (uncompressed, LJ92, lossy, Deflate, JPEG XL, LinearRaw)
Samsung TL350 (WB2000) SRW 2010 unverified uncompressed / packed SRW
Samsung TL350 (WB2000) SRW 2010 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Samsung TL500 (EX1) SRW 2010 verified corpus: crates/raw/tests/corpus.rs (xtask RAW_SAMPLES)
Samsung Galaxy Note 9 DNG 2018 unverified DNG decoder (uncompressed, LJ92, lossy, Deflate, JPEG XL, LinearRaw)
Samsung Galaxy Note 20 Rear Main Camera DNG 2020 unverified DNG decoder (uncompressed, LJ92, lossy, Deflate, JPEG XL, LinearRaw)
Can't render this file because it contains an unexpected character in line 86 and column 19.
+19
View File
@@ -413,3 +413,22 @@ Sony DSC-RX100M7A verified corpus: crates/raw/tests/sony_leica_corpus.rs (pinned
Sony A7 V (ILCE-7M5) (** see note) verified corpus: crates/raw/tests/sony_leica_corpus.rs (pinned sensor hash, camera-JPEG check)
Sony FX2 (ILMEFX2) (** see note) verified corpus: crates/raw/tests/sony_leica_corpus.rs (pinned sensor hash, camera-JPEG check)
Sony ILCE - 6400A verified corpus: crates/raw/tests/sony_leica_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus SP-550 UZ verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus E-10 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash)
Olympus Camedia C-5060 Zoom verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus SP-565 UZ verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus OM-D E-M5 Mark II verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus EVOLT E-300 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus Stylus SH-2 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus Camedia C-7070 Wide Zoom verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus Stylus XZ-10 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus EVOLT E-330 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus SP-570 UZ verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus SP-510 UZ verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus PEN-F verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Olympus EVOLT E-500 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Samsung TL350 (WB2000) verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Samsung NX1000 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Samsung NX1100 verified corpus: crates/raw/tests/olympus_samsung_corpus.rs (pinned sensor hash, camera-JPEG check)
Sony A100 (DSLR-A100) unsupported issue #702: regression, refused as not a readable photo
Sony DSC-F828 unsupported issue #702 (SRF refused); SRF not in the import list
Can't render this file because it contains an unexpected character in line 2 and column 3.
+115
View File
@@ -1728,6 +1728,121 @@ const RAW_SAMPLES: &[(&str, &str, &str)] = &[
"https://raw.pixls.us/getfile.php/1797/nice/Leica%20-%20Q%20%28Typ%20116%29%20-%2014bit%20%283:2%29.DNG",
"f7b2a6b6d7684536511cf2db2e2bfa46fae1ad7e52214093714f35e7ca60acbf",
),
(
"srw-samsung-nx200.srw",
"https://raw.pixls.us/getfile.php/839/nice/Samsung%20-%20NX200%20-%2012bit%20%283:2%29.srw",
"03563eadfe4ef32b5bf2a2850abb40b29fcc1f8d56b3b2ed92ef307b90d7d9dc",
),
(
"orf-olympus-sp550uz.orf",
"https://raw.pixls.us/getfile.php/8609/nice/Olympus%20-%20SP550UZ%20-%2012bit%20%284:3%29.ORF",
"05f49918e1b1894c3abd2b5451b356f7a00adb1c8568abc5babff33fcade1bb2",
),
(
"orf-olympus-e-10.orf",
"https://raw.pixls.us/getfile.php/5424/nice/Olympus%20-%20E-10%20-%2016bit%20%284:3%29.ORF",
"2bfdade72439017a60a47aad1e5bbcb1aca36f2be7a21e94a4257a678fb6f4da",
),
(
"orf-olympus-c5060wz.orf",
"https://raw.pixls.us/getfile.php/1799/nice/Olympus%20-%20C5060WZ%20-%2012bit%20%284:3%29.ORF",
"3fc12bc3f6320cfab456111d7805b446e329fdd1907680be55e2e163e5e084bd",
),
(
"dng-samsung-gx10.dng",
"https://raw.pixls.us/getfile.php/1165/nice/Samsung%20-%20GX10%20-%2012bit%20%283:2%29.DNG",
"44cbb7980b320c0920d999758eb8a3f27e6b98dd14afc3dfc135bc8526abda58",
),
(
"orf-olympus-sp565uz.orf",
"https://raw.pixls.us/getfile.php/3438/nice/Olympus%20-%20SP565UZ%20-%2012bit%20%284:3%29.ORF",
"5088771f83ce08a001b44672e1dd9f013e603933c37ce1bfb7030a02abbe801c",
),
(
"dng-samsung-gx20.dng",
"https://raw.pixls.us/getfile.php/1537/nice/Samsung%20-%20GX20%20-%2012bit%20%283:2%29.DNG",
"5557016b2712b621befdb05731923562a802beafd13e0f366737390a8f7b3286",
),
(
"orf-olympus-e-m5-mark-ii.orf",
"https://raw.pixls.us/getfile.php/2856/nice/Olympus%20-%20E-M5%20Mark%20II%20-%2016bit%2016bit%20%22high-res%22%20%284:3%29.ORF",
"5c42fa75d6b549514b722e2c50726c03e34fac4909ec3640e147ea7fa825fc8d",
),
(
"orf-olympus-e-300.orf",
"https://raw.pixls.us/getfile.php/2878/nice/Olympus%20-%20E-300%20-%2016bit%20%284:3%29.ORF",
"6d818dbff78b3e2efa4835f568d04733052b9211e6bc65b0a3748a841170e95b",
),
(
"orf-olympus-sh-2.orf",
"https://raw.pixls.us/getfile.php/792/nice/Olympus%20-%20SH-2%20-%2012bit%20%284:3%29.ORF",
"6e6b9b7dd9ded7c4b364b83116c817ca2d6daac15f2e9ef7796159b08c3288a1",
),
(
"srw-samsung-nx5.srw",
"https://raw.pixls.us/getfile.php/5684/nice/Samsung%20-%20NX5%20-%2012bit%20%283:2%29.SRW",
"908fc61d5bbc1f0d0a5cea4f4e39e7753060c1af8673f7a4a9199284b70930f7",
),
(
"orf-olympus-c7070wz.orf",
"https://raw.pixls.us/getfile.php/780/nice/Olympus%20-%20C7070WZ%20-%2012bit%20%284:3%29.ORF",
"9d55506f9d6ee31d2d4c4b6df0dcd1d016d358b3e5eb4ed31edd7227dfefd5f8",
),
(
"orf-olympus-xz-10.orf",
"https://raw.pixls.us/getfile.php/2431/nice/Olympus%20-%20XZ-10%20-%2012bit%20%284:3%29.ORF",
"a25383acad9b5bb0bb404715e0957f2eb80aa1aaad6c448a71025c03cfa631be",
),
(
"srw-samsung-wb2000.srw",
"https://raw.pixls.us/getfile.php/4262/nice/Samsung%20-%20WB2000%20-%2014bit%20%284:3%29.SRW",
"b9a1149fb0dda9d23aee0ad8c402bf2f9ba42832366d46c4c1b739c0b0f48497",
),
(
"orf-olympus-e-330.orf",
"https://raw.pixls.us/getfile.php/3624/nice/Olympus%20-%20E-330%20-%2016bit%20%284:3%29.ORF",
"ba11eb970ab32e1e9cf3d0176041e4bd11c501d445720c0a344217e785ad65a6",
),
(
"orf-olympus-sp570uz.orf",
"https://raw.pixls.us/getfile.php/5491/nice/Olympus%20-%20SP570UZ%20-%2012bit%20%284:3%29.ORF",
"baab92391834076b427e406e98da79aaba48fb87243d6ccae60e08e299cfccf7",
),
(
"srw-samsung-nx11.srw",
"https://raw.pixls.us/getfile.php/5985/nice/Samsung%20-%20NX11%20-%2012bit%20%283:2%29.SRW",
"bdce6179b4180478057f4971b512e0303da71528db454cb3f399ab10e05b68fe",
),
(
"srw-samsung-nx1000.srw",
"https://raw.pixls.us/getfile.php/2588/nice/Samsung%20-%20NX1000%20-%2012bit%20%283:2%29.SRW",
"beef4d1e6f25ff28fb20bb3ad00ffadb62ab57d7041237e295b0b62f7de5309c",
),
(
"srw-samsung-nx1100.srw",
"https://raw.pixls.us/getfile.php/4422/nice/Samsung%20-%20NX1100%20-%2012bit%20%283:2%29.srw",
"d230af65ee55314792c5337ea8e0e757626a8541e7a25ed03d63b8df202ed9cb",
),
(
"srw-samsung-nx210.srw",
"https://raw.pixls.us/getfile.php/1831/nice/Samsung%20-%20NX210%20-%2012bit%20%283:2%29.SRW",
"d613503ddf9bedd2d2e84708749b1a94f0cccd4fa15492e01242368c5c07cfad",
),
(
"orf-olympus-sp510uz.orf",
"https://raw.pixls.us/getfile.php/2420/nice/Olympus%20-%20SP510UZ%20-%2012bit%20%284:3%29.ORF",
"f0737d78bb2e588963a3d5038fab493cdff1c9c48475704de96d797bbb81e62a",
),
(
"orf-olympus-pen-f.orf",
"https://raw.pixls.us/getfile.php/2977/nice/Olympus%20-%20PEN-F%20-%2016bit%20%284:3%29.orf",
"f87a5f3295aeb4d6ab27bb5b41c5e0f3a211ec9b4e3b1d9f105a650bee1a2f13",
),
(
"orf-olympus-e-500.orf",
"https://raw.pixls.us/getfile.php/3540/nice/Olympus%20-%20E-500%20-%2016bit%20%284:3%29.ORF",
"fa5a4759b2de2b573f59629ad1baf64ad04a85fb8fe1fb3cbf68e08a42fff4f0",
),
];
fn cmd_corpus(download: bool) -> Result<(), String> {