mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-19 02:10:25 -05:00
Merge PR #1108
# 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:
commit
6ab5e2b0d4
8 files changed
+271
-19
No files matched your search
@@ -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 |
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
@@ -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) |
|
||||
|
||||
@@ -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
@@ -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
@@ -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.
|
@@ -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.
|
@@ -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> {
|
||||
|
||||
Reference in new issue
Block a user