## Summary Implement Nikon MakerNote parser for Epic #9 (Phase 2). ## Format Specification - 3 VARIANTS ### Type 1 (E990, D1) - **Header:** "Nikon" + 0x00 0x01 0x00 (8 bytes) - **IFD Offset:** +8 - **Byte Order:** Inherits from parent - **Offset Base:** Absolute ### Type 3 (D70, D100, D200+) - Most Common - **Header:** "Nikon" + 0x00 0x02 0x00 + embedded TIFF header (18 bytes) - **IFD Offset:** +18 - **Byte Order:** Embedded (check bytes 10-11 for II/MM) - **Offset Base:** Relative to MakerNote start ### Type 2 (E700-E950) - Legacy - **Header:** None - Uses Type 3 tag definitions - Absolute offsets ## Priority Tags (Phase 2) | Tag | Name | Type | |-----|------|------| | 0x0002 | ISO | Short array | | 0x001D | SerialNumber | ASCII | | 0x0025 | ShutterCount | Long | | 0x0084 | Lens | Rational array | | 0x00A7 | ShutterCount (alt) | Long | ## Encrypted Fields (skip initially) - 0x0098: LensData - encrypted with serial-based key - 0x00A8: FlashInfo - partially encrypted ## Acceptance Criteria - [ ] Detects all 3 Nikon variants - [ ] Handles embedded byte order (Type 3) - [ ] Decodes 15+ Nikon tags - [ ] Gracefully skips encrypted fields - [ ] Unit tests with real Nikon samples (NEF, JPG) Blocked by: MNI-2 (Canon) Parent: #9
Activity
rpuneet commentedon Feb 8, 2026
Completed in PR #27