@photivra/engine 2.21.0 → 2.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +150 -1
- package/CITATION.cff +1 -1
- package/README.md +6 -6
- package/SECURITY.md +1 -1
- package/THIRD_PARTY.md +11 -0
- package/dist/capture/c2pa-embed.d.ts +116 -0
- package/dist/capture/c2pa-embed.js +493 -0
- package/dist/capture/c2pa-embed.js.map +1 -0
- package/dist/capture/dng-import.d.ts +73 -8
- package/dist/capture/dng-import.js +315 -80
- package/dist/capture/dng-import.js.map +1 -1
- package/dist/capture/dng-opcodes.d.ts +96 -0
- package/dist/capture/dng-opcodes.js +391 -0
- package/dist/capture/dng-opcodes.js.map +1 -0
- package/dist/capture/dng-profile-maps.d.ts +99 -0
- package/dist/capture/dng-profile-maps.js +381 -0
- package/dist/capture/dng-profile-maps.js.map +1 -0
- package/dist/capture/dng-stage-image.d.ts +23 -0
- package/dist/capture/dng-stage-image.js +65 -0
- package/dist/capture/dng-stage-image.js.map +1 -0
- package/dist/capture/jpeg-xl-tiles.d.ts +22 -0
- package/dist/capture/jpeg-xl-tiles.js +151 -0
- package/dist/capture/jpeg-xl-tiles.js.map +1 -0
- package/dist/capture/lossy-jpeg.d.ts +17 -0
- package/dist/capture/lossy-jpeg.js +369 -0
- package/dist/capture/lossy-jpeg.js.map +1 -0
- package/dist/capture/native-raw-development.d.ts +2 -1
- package/dist/capture/native-raw-development.js.map +1 -1
- package/dist/color/neighbor-highlight-reconstruction.d.ts +76 -0
- package/dist/color/neighbor-highlight-reconstruction.js +257 -0
- package/dist/color/neighbor-highlight-reconstruction.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +5 -0
- package/dist/color/sensor-color-development.js +7 -1
- package/dist/color/sensor-color-development.js.map +1 -1
- package/dist/color/spectral-spikiness.d.ts +11 -0
- package/dist/color/spectral-spikiness.js +23 -0
- package/dist/color/spectral-spikiness.js.map +1 -0
- package/dist/core/execution-error.d.ts +21 -0
- package/dist/core/execution-error.js +12 -0
- package/dist/core/execution-error.js.map +1 -0
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/core/version.js.map +1 -1
- package/dist/facade/catalogue-lens-signal.d.ts +26 -1
- package/dist/facade/catalogue-lens-signal.js +25 -7
- package/dist/facade/catalogue-lens-signal.js.map +1 -1
- package/dist/facade/diffraction-provider.d.ts +1 -1
- package/dist/facade/diffraction-provider.js +4 -4
- package/dist/facade/diffraction-provider.js.map +1 -1
- package/dist/facade/display-view-gpu-session.js +38 -6
- package/dist/facade/display-view-gpu-session.js.map +1 -1
- package/dist/facade/display-view-gpu.d.ts +13 -5
- package/dist/facade/display-view-gpu.js.map +1 -1
- package/dist/facade/display-view-normal.d.ts +15 -0
- package/dist/facade/display-view-normal.js +44 -0
- package/dist/facade/display-view-normal.js.map +1 -0
- package/dist/facade/display-view-rendering.d.ts +102 -0
- package/dist/facade/display-view-rendering.js +633 -0
- package/dist/facade/display-view-rendering.js.map +1 -0
- package/dist/facade/display-view.d.ts +37 -65
- package/dist/facade/display-view.js +147 -476
- package/dist/facade/display-view.js.map +1 -1
- package/dist/facade/expected-signal-setup.js +2 -2
- package/dist/facade/expected-signal-setup.js.map +1 -1
- package/dist/facade/fast-methods.d.ts +1 -1
- package/dist/facade/fast-methods.js +37 -8
- package/dist/facade/fast-methods.js.map +1 -1
- package/dist/facade/generic-lens-capture.d.ts +1 -1
- package/dist/facade/generic-lens-capture.js +1 -1
- package/dist/facade/generic-lens-capture.js.map +1 -1
- package/dist/facade/image-plane.js +41 -10
- package/dist/facade/image-plane.js.map +1 -1
- package/dist/facade/on-demand-kits.d.ts +14 -0
- package/dist/facade/on-demand-kits.js +36 -0
- package/dist/facade/on-demand-kits.js.map +1 -0
- package/dist/facade/opt-in-kit.d.ts +9 -0
- package/dist/facade/opt-in-kit.js +11 -0
- package/dist/facade/opt-in-kit.js.map +1 -0
- package/dist/facade/quality-kit.d.ts +21 -0
- package/dist/facade/quality-kit.js +23 -0
- package/dist/facade/quality-kit.js.map +1 -0
- package/dist/facade/quality-paths.d.ts +22 -0
- package/dist/facade/quality-paths.js +44 -0
- package/dist/facade/quality-paths.js.map +1 -0
- package/dist/facade/scene-radiance.d.ts +18 -2
- package/dist/facade/scene-radiance.js +6 -4
- package/dist/facade/scene-radiance.js.map +1 -1
- package/dist/facade/simulate-capture.d.ts +32 -13
- package/dist/facade/simulate-capture.js +162 -69
- package/dist/facade/simulate-capture.js.map +1 -1
- package/dist/facade/simulate-display-view.d.ts +10 -12
- package/dist/facade/simulate-display-view.js +57 -48
- package/dist/facade/simulate-display-view.js.map +1 -1
- package/dist/gpu/display-view-gpu-renderer.d.ts +43 -0
- package/dist/gpu/display-view-gpu-renderer.js +134 -0
- package/dist/gpu/display-view-gpu-renderer.js.map +1 -0
- package/dist/gpu/display-view-image-material-module.d.ts +3 -2
- package/dist/gpu/display-view-image-material-module.js +25 -3
- package/dist/gpu/display-view-image-material-module.js.map +1 -1
- package/dist/gpu/display-view-image-quality.d.ts +43 -1
- package/dist/gpu/display-view-image-quality.js +256 -11
- package/dist/gpu/display-view-image-quality.js.map +1 -1
- package/dist/gpu/display-view-quality-gpu.d.ts +13 -64
- package/dist/gpu/display-view-quality-gpu.js +55 -240
- package/dist/gpu/display-view-quality-gpu.js.map +1 -1
- package/dist/gpu/display-view-speed-gpu.d.ts +16 -16
- package/dist/gpu/display-view-speed-gpu.js +62 -19
- package/dist/gpu/display-view-speed-gpu.js.map +1 -1
- package/dist/gpu/image-kernel-accelerator.js +3 -0
- package/dist/gpu/image-kernel-accelerator.js.map +1 -1
- package/dist/gpu/image-kernel-execution.d.ts +2 -13
- package/dist/gpu/image-kernel-execution.js +2 -10
- package/dist/gpu/image-kernel-execution.js.map +1 -1
- package/dist/gpu/wgsl-display-view-coupled-stub.d.ts +13 -0
- package/dist/gpu/wgsl-display-view-coupled-stub.js +29 -0
- package/dist/gpu/wgsl-display-view-coupled-stub.js.map +1 -0
- package/dist/gpu/wgsl-display-view-coupled.d.ts +91 -0
- package/dist/gpu/wgsl-display-view-coupled.js +365 -0
- package/dist/gpu/wgsl-display-view-coupled.js.map +1 -0
- package/dist/gpu/wgsl-display-view-neighbors.d.ts +46 -0
- package/dist/gpu/wgsl-display-view-neighbors.js +114 -0
- package/dist/gpu/wgsl-display-view-neighbors.js.map +1 -0
- package/dist/gpu/wgsl-display-view-quality-kernel.d.ts +6 -9
- package/dist/gpu/wgsl-display-view-quality-kernel.js +113 -113
- package/dist/gpu/wgsl-display-view-quality-kernel.js.map +1 -1
- package/dist/gpu/wgsl-display-view-speed-kernel.d.ts +1 -41
- package/dist/gpu/wgsl-display-view-speed-kernel.js +73 -10
- package/dist/gpu/wgsl-display-view-speed-kernel.js.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/output/camera-channel-response.d.ts +50 -0
- package/dist/output/camera-channel-response.js +69 -0
- package/dist/output/camera-channel-response.js.map +1 -0
- package/dist/output/native-capture-sdr.js +5 -2
- package/dist/output/native-capture-sdr.js.map +1 -1
- package/dist/output/sdr-rendering.d.ts +18 -1
- package/dist/output/sdr-rendering.js +39 -2
- package/dist/output/sdr-rendering.js.map +1 -1
- package/dist/sensor/native-sensor-report.d.ts +10 -0
- package/dist/sensor/native-sensor-report.js +16 -0
- package/dist/sensor/native-sensor-report.js.map +1 -0
- package/dist/sensor/sensor-characteristics.d.ts +81 -13
- package/dist/sensor/sensor-characteristics.js +10 -6
- package/dist/sensor/sensor-characteristics.js.map +1 -1
- package/docs/API_REFERENCE.md +117 -4
- package/docs/QUICK_START.md +37 -8
- package/docs/USAGE.md +105 -22
- package/docs/api/capture-c2pa-embed.md +177 -0
- package/docs/api/capture-dng-import.md +86 -10
- package/docs/api/capture-dng-opcodes.md +93 -0
- package/docs/api/capture-dng-profile-maps.md +141 -0
- package/docs/api/capture-dng-stage-image.md +43 -0
- package/docs/api/capture-jpeg-xl-tiles.md +33 -0
- package/docs/api/capture-lossy-jpeg.md +41 -0
- package/docs/api/capture-native-raw-development.md +2 -1
- package/docs/api/core-execution-error.md +43 -0
- package/docs/api/core-version.md +1 -1
- package/docs/api/exports.json +255 -5
- package/docs/api/facade-display-view-gpu.md +5 -2
- package/docs/api/facade-display-view.md +11 -15
- package/docs/api/facade-fast-methods.md +38 -9
- package/docs/api/facade-quality-paths.md +24 -0
- package/docs/api/facade-scene-radiance.md +1 -1
- package/docs/api/facade-simulate-capture.md +24 -7
- package/docs/api/facade-simulate-display-view.md +10 -12
- package/docs/api/gpu-image-kernel-execution.md +0 -36
- package/docs/api/output-camera-channel-response.md +55 -0
- package/docs/api/output-sdr-rendering.md +6 -1
- package/docs/api/sensor-sensor-characteristics.md +54 -2
- package/llms.txt +1 -0
- package/package.json +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dng-import.js","sourceRoot":"","sources":["../../src/capture/dng-import.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// This product includes DNG technology under license by Adobe.\n\n/**\n * Browser-safe reader for DNG and TIFF-EP raw files with a CFA (colour filter array) mosaic.\n *\n * It was written independently from the published TIFF 6.0 tag definitions, the Adobe Digital\n * Negative (DNG) Specification 1.7.1.0 and the Exif 2.32/3.0 CFAPattern definition (CIPA DC-008;\n * the TIFF/EP tags are also specified in ISO 12234-2). No third-party reader source was used.\n *\n * It returns the stored raw codes plus the metadata the engine's RAW development needs: CFA\n * pattern, black and white levels, active area, default crop, colour matrices, as-shot neutral,\n * calibration illuminants and orientation. It never applies linearization, black subtraction,\n * white balance, demosaicing or colour transforms.\n *\n * Input is untrusted. Every offset, count, IFD (image file directory) chain, strip or tile table\n * and decoded size is checked against the buffer and explicit limits before allocation. IFD loops,\n * IFDs that alias each other, oversized frames and over-long tag arrays fail with\n * `InvalidConfigurationError`.\n * @see docs/IMPORT_AND_PNG.md for supported subsets and limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { parseLosslessJpeg } from \"./lossless-jpeg.js\";\n\nexport const DNG_IMPORT_SCHEMA_VERSION = \"1.0.0\" as const;\n/** Upper bound for `maximumPixels`. 200 MP (megapixels) of 16-bit codes is 400 MB. */\nexport const DNG_IMPORT_LIMITS = /* @__PURE__ */ Object.freeze({ defaultMaximumPixels: 64_000_000, maximumPixels: 200_000_000, defaultMaximumIfds: 64, maximumIfds: 1024 });\nexport interface DngImportInput {\n bytes: Uint8Array;\n /** Pixel-count limit (width x height), checked before any decode allocation. Default 64 000 000, at most 200 000 000. */\n maximumPixels?: number;\n /** Total IFDs (main chain plus SubIFDs) visited. Default 64, at most 1024. */\n maximumIfds?: number;\n}\n/** Repeating CFA pattern. Its origin is the top-left corner of `activeArea` (DNG 1.7.1.0, PhotometricInterpretation). */\nexport interface ImportedDngCfa {\n repeatRows: number;\n repeatColumns: number;\n /** Row-major plane indices into `planeColors`, length repeatRows x repeatColumns. */\n pattern: number[];\n /** CFAPlaneColor: 0 red, 1 green, 2 blue, 3 cyan, 4 magenta, 5 yellow, 6 white. Default [0, 1, 2]. */\n planeColors: number[];\n}\n/** Black level (the code for zero light) pattern, from BlackLevel, BlackLevelRepeatDim and BlackLevelDeltaH/V. Origin is the active-area top-left. */\nexport interface ImportedDngBlackLevel {\n repeatRows: number;\n repeatColumns: number;\n /** Row-column-sample order, length repeatRows x repeatColumns x samplesPerPixel. */\n values: number[];\n /** Per active-area column offset, or null when absent (all zeros). */\n deltaH: number[] | null;\n /** Per active-area row offset, or null when absent (all zeros). */\n deltaV: number[] | null;\n}\n/** Half-open raster rectangle in stored-image pixel coordinates (+X right, +Y down). */\nexport interface ImportedDngRect { x: number; y: number; width: number; height: number }\nexport interface ImportedDngRaw {\n schemaVersion: typeof DNG_IMPORT_SCHEMA_VERSION;\n byteOrder: \"little-endian\" | \"big-endian\";\n /** DNGVersion bytes, or null for a TIFF-EP file without DNG tags. */\n dngVersion: [number, number, number, number] | null;\n make: string | null;\n model: string | null;\n uniqueCameraModel: string | null;\n /** TIFF/Exif Orientation 1..8 (default 1). Codes are returned in stored, not oriented, order. */\n orientation: number;\n width: number;\n height: number;\n samplesPerPixel: number;\n bitsPerSample: number;\n compression: \"uncompressed\" | \"lossless-jpeg\";\n photometricInterpretation: \"cfa\" | \"linear-raw\";\n /** Stored raw codes, row-major then sample, length width x height x samplesPerPixel. */\n codes: Uint16Array;\n cfa: ImportedDngCfa | null;\n /** LinearizationTable when present; not applied to `codes`. */\n linearizationTable: Uint16Array | null;\n blackLevel: ImportedDngBlackLevel;\n /** WhiteLevel per sample (default 2^bitsPerSample − 1). */\n whiteLevel: number[];\n /** ActiveArea as a rectangle (default the whole image). */\n activeArea: ImportedDngRect;\n /** DefaultCropOrigin/Size relative to the active-area origin; may be fractional (RATIONAL). */\n defaultCrop: ImportedDngRect;\n /** XYZ → camera (reference) matrices, row-major colorPlanes x 3, or null. */\n colorMatrix1: number[] | null;\n colorMatrix2: number[] | null;\n /** CalibrationIlluminant1/2 (Exif LightSource code), or null when absent. */\n calibrationIlluminant1: number | null;\n calibrationIlluminant2: number | null;\n /** AsShotNeutral in camera (reference) coordinates, or null. */\n asShotNeutral: number[] | null;\n /** RawDataUniqueID as 32 lowercase hex digits, or null. */\n rawDataUniqueId: string | null;\n}\n\nconst TYPE_SIZES = [0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8, 4] as const;\ninterface Entry { type: number; count: number; at: number }\ntype Ifd = Map<number, Entry>;\nfunction fail(message: string): never { throw new InvalidConfigurationError(\"DNG import: \" + message); }\nfunction limit(value: number | undefined, fallback: number, max: number, name: string): number {\n if (value === undefined) return fallback;\n if (!Number.isSafeInteger(value) || value < 1 || value > max) fail(name + \" must be an integer from 1 to \" + max + \".\");\n return value;\n}\n\n/**\n * Parse one DNG or TIFF-EP file and decode its primary CFA or LinearRaw image (the first IFD with\n * NewSubFileType 0 and PhotometricInterpretation 32803 or 34892, in IFD-chain then SubIFD order).\n *\n * Supported raw data: Compression 1 at 8..16 bits/sample (8 bits as bytes, 16 bits in the file byte\n * order, other depths packed MSB-first with byte-aligned rows, per DNG BitsPerSample) and Compression 7\n * lossless Huffman JPEG (T.81 Annex H) in strips or tiles, chunky planar configuration only.\n * @returns Owned typed arrays and plain metadata; nothing is applied to the codes.\n */\nexport function parseDngRawImage(input: DngImportInput): ImportedDngRaw {\n if (input === null || typeof input !== \"object\") fail(\"input must be an object.\");\n for (const key of Object.keys(input)) if (![\"bytes\", \"maximumPixels\", \"maximumIfds\"].includes(key)) fail(`unknown input field. Unknown field ${JSON.stringify(key)}.`);\n const bytes = input.bytes;\n if (!(bytes instanceof Uint8Array)) fail(\"bytes must be a Uint8Array.\");\n const maximumPixels = limit(input.maximumPixels, DNG_IMPORT_LIMITS.defaultMaximumPixels, DNG_IMPORT_LIMITS.maximumPixels, \"maximumPixels\");\n const maximumIfds = limit(input.maximumIfds, DNG_IMPORT_LIMITS.defaultMaximumIfds, DNG_IMPORT_LIMITS.maximumIfds, \"maximumIfds\");\n const n = bytes.length, view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n if (n < 8) fail(\"file is too short.\");\n const little = bytes[0] === 0x49 && bytes[1] === 0x49;\n if (!little && !(bytes[0] === 0x4d && bytes[1] === 0x4d)) fail(\"missing TIFF byte-order mark.\");\n const u16 = (o: number): number => view.getUint16(o, little), u32 = (o: number): number => view.getUint32(o, little);\n if (u16(2) === 43) fail(\"BigTIFF is not supported.\");\n if (u16(2) !== 42) fail(\"missing TIFF magic number.\");\n\n const visited = new Set<number>(), ifds: Ifd[] = [];\n const readIfd = (offset: number): { ifd: Ifd; next: number } => {\n if (offset < 8 || offset % 2 !== 0 || offset + 2 > n) fail(\"IFD offset out of range.\");\n if (visited.has(offset)) fail(\"IFD loop or aliased IFD.\");\n if (visited.size >= maximumIfds) fail(\"too many IFDs.\");\n visited.add(offset);\n const count = u16(offset), end = offset + 2 + count * 12;\n if (count === 0 || end + 4 > n) fail(\"IFD exceeds the file.\");\n const ifd: Ifd = new Map();\n for (let i = 0; i < count; i++) {\n const p = offset + 2 + i * 12, id = u16(p), type = u16(p + 2), c = u32(p + 4);\n if (ifd.has(id)) fail(\"duplicate tag in one IFD.\");\n if (type < 1 || type > 13) continue; // TIFF 6.0: readers skip fields of unknown type.\n const size = TYPE_SIZES[type]! * c, at = size <= 4 ? p + 8 : u32(p + 8);\n if (at + size > n) fail(\"tag value exceeds the file.\");\n ifd.set(id, { type, count: c, at });\n }\n return { ifd, next: u32(end) };\n };\n const walk = (offset: number, depth: number): void => {\n for (let next = offset; next !== 0;) {\n const { ifd, next: following } = readIfd(next);\n ifds.push(ifd);\n const sub = ifd.get(330);\n if (sub) {\n if (depth >= 3) fail(\"SubIFD nesting is too deep.\");\n if ((sub.type !== 4 && sub.type !== 13) || sub.count > maximumIfds) fail(\"invalid SubIFDs tag.\");\n for (let i = 0; i < sub.count; i++) walk(u32(sub.at + i * 4), depth + 1);\n }\n next = following;\n }\n };\n walk(u32(4), 0);\n\n const numbers = (entry: Entry | undefined, maximumCount: number): number[] | null => {\n if (!entry) return null;\n if (entry.count > maximumCount) fail(\"tag count exceeds its expected size.\");\n const out: number[] = [], { type, at } = entry;\n for (let i = 0; i < entry.count; i++) {\n switch (type) {\n case 1: case 7: out.push(bytes[at + i]!); break;\n case 6: out.push(view.getInt8(at + i)); break;\n case 3: out.push(u16(at + i * 2)); break;\n case 8: out.push(view.getInt16(at + i * 2, little)); break;\n case 4: case 13: out.push(u32(at + i * 4)); break;\n case 9: out.push(view.getInt32(at + i * 4, little)); break;\n case 5: case 10: {\n const num = type === 5 ? u32(at + i * 8) : view.getInt32(at + i * 8, little), den = type === 5 ? u32(at + i * 8 + 4) : view.getInt32(at + i * 8 + 4, little);\n if (den === 0) fail(\"rational with zero denominator.\");\n out.push(num / den); break;\n }\n case 11: out.push(view.getFloat32(at + i * 4, little)); break;\n case 12: out.push(view.getFloat64(at + i * 8, little)); break;\n default: fail(\"unsupported tag type.\");\n }\n if (!Number.isFinite(out[i])) fail(\"non-finite tag value.\");\n }\n return out;\n };\n const integers = (entry: Entry | undefined, maximumCount: number, types: readonly number[]): number[] | null => {\n if (entry && !types.includes(entry.type)) fail(\"tag has an unsupported field type.\");\n return numbers(entry, maximumCount);\n };\n const ascii = (entry: Entry | undefined): string | null => {\n if (!entry) return null;\n if (entry.type !== 2 || entry.count > 4096) fail(\"invalid ASCII tag.\");\n let s = \"\";\n for (let i = 0; i < entry.count && bytes[entry.at + i] !== 0; i++) s += String.fromCharCode(bytes[entry.at + i]!);\n return s;\n };\n const one = (ifd: Ifd, id: number, fallback: number): number => {\n const v = integers(ifd.get(id), 1, [3, 4]);\n return v ? v[0]! : fallback;\n };\n\n const raw = ifds.find((ifd) => one(ifd, 254, 0) === 0 && [32803, 34892].includes(one(ifd, 262, -1)));\n if (!raw) fail(\"no primary CFA or LinearRaw image IFD.\");\n const ifd0 = ifds[0]!;\n // DNG places camera-level tags in IFD 0; TIFF-EP files may carry them only in the raw IFD.\n const pick = (id: number): Entry | undefined => ifd0.get(id) ?? raw.get(id);\n\n const width = one(raw, 256, 0), height = one(raw, 257, 0), spp = one(raw, 277, 1), compressionCode = one(raw, 259, 1), photometric = one(raw, 262, 0);\n if (width < 1 || height < 1 || width > 65535 * 4 || height > 65535 * 4) fail(\"invalid image dimensions.\");\n if (width * height > maximumPixels) fail(\"image exceeds the pixel limit.\");\n const cfaImage = photometric === 32803;\n if (cfaImage ? spp !== 1 : spp < 1 || spp > 4) fail(\"unsupported SamplesPerPixel.\");\n if (spp > 1 && one(raw, 284, 1) !== 1) fail(\"only chunky PlanarConfiguration is supported.\");\n const bps = integers(raw.get(258), spp, [3]) ?? [1];\n if (bps.length !== spp || bps.some((b) => b !== bps[0])) fail(\"BitsPerSample must be equal for every sample.\");\n const bitsPerSample = bps[0]!;\n if (bitsPerSample < 8 || bitsPerSample > 16) fail(\"only 8 to 16 bits per sample are supported.\");\n if (one(raw, 339, 1) !== 1) fail(\"only unsigned integer samples are supported.\");\n if (compressionCode !== 1 && compressionCode !== 7) fail(\"only uncompressed and lossless JPEG raw data are supported.\");\n const dngVersionTag = integers(ifd0.get(50706), 4, [1]);\n const dngVersion = dngVersionTag && dngVersionTag.length === 4 ? dngVersionTag as [number, number, number, number] : null;\n if (dngVersionTag && !dngVersion) fail(\"invalid DNGVersion.\");\n\n // Strip or tile layout.\n const tiled = raw.has(322) || raw.has(324);\n const tileWidth = tiled ? one(raw, 322, 0) : width, tileLength = tiled ? one(raw, 323, 0) : Math.min(height, one(raw, 278, 0xffffffff));\n if (tileWidth < 1 || tileLength < 1 || tileWidth > 65535 * 4 || tileLength > 65535 * 4 || (tiled && tileWidth * tileLength > maximumPixels)) fail(\"invalid strip or tile size.\");\n const across = Math.ceil(width / tileWidth), down = Math.ceil(height / tileLength), chunks = across * down;\n const offsets = integers(raw.get(tiled ? 324 : 273), chunks, [3, 4]), counts = integers(raw.get(tiled ? 325 : 279), chunks, [3, 4]);\n if (!offsets || !counts || offsets.length !== chunks || counts.length !== chunks) fail(\"strip or tile tables do not match the image layout.\");\n for (let i = 0; i < chunks; i++) if (offsets[i]! + counts[i]! > n) fail(\"strip or tile data exceeds the file.\");\n\n const codes = new Uint16Array(width * height * spp), maxCode = 2 ** bitsPerSample - 1;\n for (let ty = 0; ty < down; ty++) for (let tx = 0; tx < across; tx++) {\n const index = ty * across + tx, start = offsets[index]!, data = bytes.subarray(start, start + counts[index]!);\n // Strips cover whole rows (the last may be short); tiles are always full-size and clipped on copy.\n const chunkWidth = tiled ? tileWidth : width, chunkRows = tiled ? tileLength : Math.min(tileLength, height - ty * tileLength);\n const chunkSamples = chunkWidth * chunkRows * spp, x0 = tx * tileWidth, y0 = ty * tileLength;\n let samples: Uint16Array;\n if (compressionCode === 7) {\n const image = parseLosslessJpeg(data, { maximumSamples: chunkSamples, legacySixteenBitDifference: dngVersion !== null && (dngVersion[0] < 1 || (dngVersion[0] === 1 && dngVersion[1] < 1)) });\n if (image.width * image.height * image.components !== chunkSamples) fail(\"lossless JPEG sample count does not match the strip or tile.\");\n samples = image.samples;\n } else samples = unpack(data, chunkWidth * spp, chunkRows, bitsPerSample, little);\n for (let y = 0; y < chunkRows && y0 + y < height; y++) {\n const columns = Math.min(chunkWidth, width - x0) * spp, from = y * chunkWidth * spp, to = ((y0 + y) * width + x0) * spp;\n for (let i = 0; i < columns; i++) {\n const v = samples[from + i]!;\n if (v > maxCode) fail(\"raw code exceeds BitsPerSample.\");\n codes[to + i] = v;\n }\n }\n }\n\n // CFA description.\n let cfa: ImportedDngCfa | null = null, colorPlanes = spp;\n if (cfaImage) {\n const dim = integers(raw.get(33421), 2, [3]), pattern = integers(raw.get(33422), 256, [1]);\n if (!dim || dim.length !== 2 || dim[0]! < 1 || dim[1]! < 1 || !pattern || pattern.length !== dim[0]! * dim[1]!) fail(\"CFA images require CFARepeatPatternDim and a matching CFAPattern.\");\n const planeColors = integers(raw.get(50710), 16, [1]) ?? [0, 1, 2];\n if (planeColors.length < 1 || planeColors.some((c) => c > 6) || new Set(planeColors).size !== planeColors.length) fail(\"invalid CFAPlaneColor.\");\n if (pattern.some((v) => v >= planeColors.length)) fail(\"CFAPattern references an undefined plane.\");\n if (one(raw, 50711, 1) !== 1) fail(\"only rectangular CFALayout is supported.\");\n cfa = { repeatRows: dim[0]!, repeatColumns: dim[1]!, pattern, planeColors };\n colorPlanes = planeColors.length;\n }\n\n // Active area, levels and crop.\n const area = integers(raw.get(50829), 4, [3, 4]) ?? [0, 0, height, width];\n if (area.length !== 4 || area[0]! >= area[2]! || area[1]! >= area[3]! || area[2]! > height || area[3]! > width) fail(\"ActiveArea is outside the image.\");\n const activeArea = { x: area[1]!, y: area[0]!, width: area[3]! - area[1]!, height: area[2]! - area[0]! };\n const repeat = integers(raw.get(50713), 2, [3]) ?? [1, 1];\n if (repeat.length !== 2 || repeat[0]! < 1 || repeat[1]! < 1 || repeat[0]! * repeat[1]! > 1024) fail(\"invalid BlackLevelRepeatDim.\");\n const levelCount = repeat[0]! * repeat[1]! * spp;\n const black = integers(raw.get(50714), levelCount, [3, 4, 5]) ?? Array<number>(levelCount).fill(0);\n if (black.length !== levelCount) fail(\"BlackLevel count does not match BlackLevelRepeatDim.\");\n const deltaH = integers(raw.get(50715), activeArea.width, [10]), deltaV = integers(raw.get(50716), activeArea.height, [10]);\n if ((deltaH && deltaH.length !== activeArea.width) || (deltaV && deltaV.length !== activeArea.height)) fail(\"BlackLevelDelta count does not match the ActiveArea.\");\n const whiteLevel = integers(raw.get(50717), spp, [3, 4]) ?? Array<number>(spp).fill(maxCode);\n if (whiteLevel.length !== spp) fail(\"WhiteLevel count does not match SamplesPerPixel.\");\n const origin = integers(raw.get(50719), 2, [3, 4, 5]) ?? [0, 0], size = integers(raw.get(50720), 2, [3, 4, 5]) ?? [width, height];\n if (origin.length !== 2 || size.length !== 2 || size[0]! <= 0 || size[1]! <= 0 || origin[0]! < 0 || origin[1]! < 0) fail(\"invalid default crop.\");\n const linear = integers(raw.get(50712), 65536, [3]);\n\n const matrix = (id: number): number[] | null => {\n const m = integers(pick(id), colorPlanes * 3, [10]);\n if (m && m.length !== colorPlanes * 3) fail(\"ColorMatrix count does not match the colour planes.\");\n return m;\n };\n const neutral = integers(pick(50728), colorPlanes, [3, 5]);\n if (neutral && (neutral.length !== colorPlanes || neutral.some((v) => v <= 0))) fail(\"invalid AsShotNeutral.\");\n const illuminant = (id: number): number | null => { const v = integers(pick(id), 1, [3]); return v ? v[0]! : null; };\n const uniqueId = integers(pick(50781), 16, [1]);\n if (uniqueId && uniqueId.length !== 16) fail(\"RawDataUniqueID must have 16 bytes.\");\n const orientation = one(ifd0.has(274) ? ifd0 : raw, 274, 1);\n if (orientation < 1 || orientation > 8) fail(\"invalid Orientation.\");\n\n return {\n schemaVersion: DNG_IMPORT_SCHEMA_VERSION, byteOrder: little ? \"little-endian\" : \"big-endian\", dngVersion,\n make: ascii(pick(271)), model: ascii(pick(272)), uniqueCameraModel: ascii(pick(50708)), orientation,\n width, height, samplesPerPixel: spp, bitsPerSample, compression: compressionCode === 1 ? \"uncompressed\" : \"lossless-jpeg\",\n photometricInterpretation: cfaImage ? \"cfa\" : \"linear-raw\", codes, cfa,\n linearizationTable: linear ? Uint16Array.from(linear) : null,\n blackLevel: { repeatRows: repeat[0]!, repeatColumns: repeat[1]!, values: black, deltaH, deltaV },\n whiteLevel, activeArea, defaultCrop: { x: origin[0]!, y: origin[1]!, width: size[0]!, height: size[1]! },\n colorMatrix1: matrix(50721), colorMatrix2: matrix(50722),\n calibrationIlluminant1: illuminant(50778), calibrationIlluminant2: illuminant(50779), asShotNeutral: neutral,\n rawDataUniqueId: uniqueId ? uniqueId.map((b) => b.toString(16).padStart(2, \"0\")).join(\"\") : null\n };\n}\n\n/** Unpack uncompressed rows: 8-bit bytes, 16-bit words in file byte order, other depths MSB-first with byte-aligned rows. */\nfunction unpack(data: Uint8Array, rowSamples: number, rows: number, bits: number, little: boolean): Uint16Array {\n const rowBytes = Math.ceil(rowSamples * bits / 8), out = new Uint16Array(rowSamples * rows);\n if (data.length < rowBytes * rows) fail(\"uncompressed strip or tile is truncated.\");\n for (let y = 0; y < rows; y++) {\n const base = y * rowBytes, o = y * rowSamples;\n if (bits === 8) for (let i = 0; i < rowSamples; i++) out[o + i] = data[base + i]!;\n else if (bits === 16) for (let i = 0; i < rowSamples; i++) {\n const a = data[base + i * 2]!, b = data[base + i * 2 + 1]!;\n out[o + i] = little ? a | (b << 8) : (a << 8) | b;\n } else {\n // Bit accumulator, most significant bit first. At most bits + 7 <= 23 bits are pending, well within 32-bit integer range.\n let accumulator = 0, pending = 0, next = base;\n const mask = (1 << bits) - 1;\n for (let i = 0; i < rowSamples; i++) {\n while (pending < bits) { accumulator = ((accumulator << 8) | data[next++]!) & 0xffffff; pending += 8; }\n pending -= bits;\n out[o + i] = (accumulator >>> pending) & mask;\n }\n }\n }\n return out;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dng-import.js","sourceRoot":"","sources":["../../src/capture/dng-import.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// This product includes DNG technology under license by Adobe.\n\n/**\n * Browser-safe reader for DNG and TIFF-EP raw files with a CFA (colour filter array) mosaic or LinearRaw data.\n *\n * It was written independently from the published TIFF 6.0 tag definitions, the Adobe Digital\n * Negative (DNG) Specification 1.7.1.0 and the Exif 2.32/3.0 CFAPattern definition (CIPA DC-008;\n * the TIFF/EP tags are also specified in ISO 12234-2). No third-party reader source was used.\n *\n * It returns the stored raw codes plus the metadata the engine's RAW development needs: CFA\n * pattern, black and white levels, active area, default crop, colour matrices, as-shot neutral,\n * calibration illuminants and orientation. It never applies linearization, black subtraction,\n * white balance, demosaicing or colour transforms (`developDngStageImage` does the DNG stages).\n *\n * 2.22.0 (#598, phone RAW files): lossy JPEG (Compression 34892, DNG 1.4.0.0) and JPEG XL (52546, DNG 1.7.0.0) raw data,\n * Row/ColumnInterleaveFactor, the opcode lists, the profile gain table map, RGBTables and semantic masks, a `maximumBytes` memory\n * pre-check and a half-size LinearRaw preview. Every DNG 1.5–1.7 tag that would change the rendering and is not returned or\n * applied is named in `assumptions`; none of them fails an import.\n *\n * Input is untrusted. Every offset, count, IFD (image file directory) chain, strip or tile table\n * and decoded size is checked against the buffer and explicit limits before allocation. IFD loops,\n * IFDs that alias each other, oversized frames and over-long tag arrays fail with\n * `InvalidConfigurationError`.\n * @see docs/IMPORT_AND_PNG.md for supported subsets and limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { parseLosslessJpeg } from \"./lossless-jpeg.js\";\nimport { parseLossyJpeg } from \"./lossy-jpeg.js\";\nimport { readJpegXlTilePng, type DngJpegXlDecoder } from \"./jpeg-xl-tiles.js\";\nimport { parseDngOpcodeList, type DngOpcode } from \"./dng-opcodes.js\";\nimport { parseDngProfileGainTableMap, parseDngRgbTables, type DngProfileGainTableMap, type DngRgbTables } from \"./dng-profile-maps.js\";\n\n/** 1.1.0 (2.22.0): lossy JPEG and JPEG XL raw data, opcode lists, profile maps, semantic masks, `scale`, `assumptions`. */\nexport const DNG_IMPORT_SCHEMA_VERSION = \"1.1.0\" as const;\n/**\n * Upper bound for `maximumPixels`: 200 MP (megapixels) of 16-bit codes is 400 MB. `maximumBytes` bounds the estimated peak memory\n * of the import (default 1 GiB, at most 4 GiB).\n */\nexport const DNG_IMPORT_LIMITS = /* @__PURE__ */ Object.freeze({ defaultMaximumPixels: 64_000_000, maximumPixels: 200_000_000, defaultMaximumIfds: 64, maximumIfds: 1024,\n defaultMaximumBytes: 1_073_741_824, maximumBytes: 4_294_967_296 });\nexport interface DngImportInput {\n bytes: Uint8Array;\n /** Pixel-count limit (width x height), checked before any decode allocation. Default 64 000 000, at most 200 000 000. */\n maximumPixels?: number;\n /** Total IFDs (main chain plus SubIFDs) visited. Default 64, at most 1024. */\n maximumIfds?: number;\n /**\n * Estimated peak memory of the import, bytes (the codes, the largest strip or tile's decode buffers and its decoder's working\n * memory; see docs/IMPORT_AND_PNG.md, \"Memory\"), checked before any image allocation. Default 1 073 741 824 (1 GiB), at most 4 GiB.\n */\n maximumBytes?: number;\n /**\n * \"half\": a half-size preview of a LinearRaw image, each output pixel the rounded mean of a 2 × 2 block of stored codes, decoded\n * strip by strip (a quarter of the codes' memory). Areas, crops and black-level deltas are halved; CFA images are refused.\n * Default \"full\".\n */\n size?: \"full\" | \"half\";\n}\n/** {@link importDngRawImage}'s input: {@link DngImportInput} plus the JPEG XL decoder a 52546 file needs. */\nexport interface DngImportAsyncInput extends DngImportInput {\n /** Decodes one JPEG XL strip or tile to PNG (`createJxlOxideDngDecoder`). Needed only for JPEG XL raw data or masks. */\n jpegXlDecoder?: DngJpegXlDecoder;\n}\n/** A decoded semantic mask (DNG 1.6 SemanticName, NewSubFileType 0x10004, PhotometricInterpretation 52527). */\nexport interface ImportedDngSemanticMask {\n name: string;\n /** SemanticInstanceID, or null. */\n instanceId: string | null;\n width: number;\n height: number;\n /** Mask values 0..1 (code / (2^bits − 1)), row-major. */\n data: Float32Array;\n}\n/** Repeating CFA pattern. Its origin is the top-left corner of `activeArea` (DNG 1.7.1.0, PhotometricInterpretation). */\nexport interface ImportedDngCfa {\n repeatRows: number;\n repeatColumns: number;\n /** Row-major plane indices into `planeColors`, length repeatRows x repeatColumns. */\n pattern: number[];\n /** CFAPlaneColor: 0 red, 1 green, 2 blue, 3 cyan, 4 magenta, 5 yellow, 6 white. Default [0, 1, 2]. */\n planeColors: number[];\n}\n/** Black level (the code for zero light) pattern, from BlackLevel, BlackLevelRepeatDim and BlackLevelDeltaH/V. Origin is the active-area top-left. */\nexport interface ImportedDngBlackLevel {\n repeatRows: number;\n repeatColumns: number;\n /** Row-column-sample order, length repeatRows x repeatColumns x samplesPerPixel. */\n values: number[];\n /** Per active-area column offset, or null when absent (all zeros). */\n deltaH: number[] | null;\n /** Per active-area row offset, or null when absent (all zeros). */\n deltaV: number[] | null;\n}\n/** Half-open raster rectangle in stored-image pixel coordinates (+X right, +Y down). */\nexport interface ImportedDngRect { x: number; y: number; width: number; height: number }\nexport interface ImportedDngRaw {\n schemaVersion: typeof DNG_IMPORT_SCHEMA_VERSION;\n byteOrder: \"little-endian\" | \"big-endian\";\n /** DNGVersion bytes, or null for a TIFF-EP file without DNG tags. */\n dngVersion: [number, number, number, number] | null;\n make: string | null;\n model: string | null;\n uniqueCameraModel: string | null;\n /** TIFF/Exif Orientation 1..8 (default 1). Codes are returned in stored, not oriented, order. */\n orientation: number;\n width: number;\n height: number;\n samplesPerPixel: number;\n bitsPerSample: number;\n compression: \"uncompressed\" | \"lossless-jpeg\" | \"lossy-jpeg\" | \"jpeg-xl\";\n /**\n * True when the raw data went through a lossy coder: lossy JPEG always; JPEG XL when JXLDistance (52553) is above 0 or absent\n * (the file then does not say it is lossless).\n */\n lossySource: boolean;\n /** 1, or 0.5 for a `size: \"half\"` preview (every geometry field is already halved). */\n scale: 1 | 0.5;\n photometricInterpretation: \"cfa\" | \"linear-raw\";\n /** Stored raw codes, row-major then sample, length width x height x samplesPerPixel. */\n codes: Uint16Array;\n cfa: ImportedDngCfa | null;\n /** LinearizationTable when present; not applied to `codes`. */\n linearizationTable: Uint16Array | null;\n blackLevel: ImportedDngBlackLevel;\n /** WhiteLevel per sample (default 2^bitsPerSample − 1). */\n whiteLevel: number[];\n /** ActiveArea as a rectangle (default the whole image). */\n activeArea: ImportedDngRect;\n /** DefaultCropOrigin/Size relative to the active-area origin; may be fractional (RATIONAL). */\n defaultCrop: ImportedDngRect;\n /** XYZ → camera (reference) matrices, row-major colorPlanes x 3, or null. */\n colorMatrix1: number[] | null;\n colorMatrix2: number[] | null;\n /** CalibrationIlluminant1/2 (Exif LightSource code), or null when absent. */\n calibrationIlluminant1: number | null;\n calibrationIlluminant2: number | null;\n /** AsShotNeutral in camera (reference) coordinates, or null. */\n asShotNeutral: number[] | null;\n /** RawDataUniqueID as 32 lowercase hex digits, or null. */\n rawDataUniqueId: string | null;\n /** ForwardMatrix1/2 (white-balanced camera → XYZ D50), row-major 3 x colorPlanes, or null. */\n forwardMatrix1: number[] | null;\n forwardMatrix2: number[] | null;\n /** BaselineExposure plus BaselineExposureOffset (stops), or null when neither is present. */\n baselineExposure: number | null;\n /** OpcodeList1/2/3 (raw IFD), parsed but not applied (`developDngStageImage` applies them), or null when absent. */\n opcodeList1: DngOpcode[] | null;\n opcodeList2: DngOpcode[] | null;\n opcodeList3: DngOpcode[] | null;\n /** ProfileGainTableMap2 (IFD 0), else ProfileGainTableMap (raw IFD), or null; applied by `applyDngProfileGainTableMap`. */\n profileGainTableMap: DngProfileGainTableMap | null;\n /** RGBTables (IFD 0), or null; applied by `applyDngRgbTables`. */\n rgbTables: DngRgbTables | null;\n /** Decoded semantic masks, for `applyDngRgbTables`. */\n semanticMasks: ImportedDngSemanticMask[];\n /** What the import did not do: tags present but not returned or applied, masks not decoded, lossy sources, inferred layouts. */\n assumptions: string[];\n}\n\nconst TYPE_SIZES = [0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8, 4] as const;\ninterface Entry { type: number; count: number; at: number }\ntype Ifd = Map<number, Entry>;\nfunction fail(message: string): never { throw new InvalidConfigurationError(\"DNG import: \" + message); }\nfunction limit(value: number | undefined, fallback: number, max: number, name: string): number {\n if (value === undefined) return fallback;\n if (!Number.isSafeInteger(value) || value < 1 || value > max) fail(name + \" must be an integer from 1 to \" + max + \".\");\n return value;\n}\n\n/** One strip or tile to decode into the image. */\ninterface Chunk { data: Uint8Array; x0: number; y0: number; width: number; rows: number }\n/** A planned image IFD: its layout, its chunks and how to decode one. */\ninterface ImagePlan { width: number; height: number; spp: number; bits: number; code: number; chunks: Chunk[]; jpegTables: Uint8Array | undefined; legacy: boolean }\n/** Rendering-relevant tags that are not returned or applied, by tag id (DNG 1.4–1.7 tag names). */\nconst UNAPPLIED_TAGS: readonly [number, string][] = [[50938, \"ProfileHueSatMapData1\"], [50939, \"ProfileHueSatMapData2\"], [50940, \"ProfileToneCurve\"], [50982, \"ProfileLookTableData\"],\n [51110, \"DefaultBlackRender\"], [52529, \"CalibrationIlluminant3\"], [52531, \"ColorMatrix3\"], [52532, \"ForwardMatrix3\"], [52533, \"IlluminantData1\"], [52534, \"IlluminantData2\"],\n [52535, \"IlluminantData3\"], [52551, \"ProfileDynamicRange\"], [51182, \"EnhanceParams\"], [52545, \"JUMBF (C2PA)\"], [52539, \"RGBTables (draft)\"]];\n/** Estimated JPEG XL decoder working memory per sample, bytes (an estimate, not measured: 32-bit channels, a float render and the PNG). */\nconst JXL_WORKING_BYTES_PER_SAMPLE = 16;\n\n/** The shared parser: walks the IFDs, plans the image and reads the metadata. Decoding is done by the sync or async caller. */\ninterface Prepared {\n image: ImagePlan; little: boolean; assumptions: string[];\n masks: { name: string; instanceId: string | null; ifd: Ifd }[];\n plan(ifd: Ifd, kind: \"raw\" | \"mask\"): ImagePlan;\n write(chunk: Chunk, samples: Uint16Array): void;\n finish(masks: ImportedDngSemanticMask[]): ImportedDngRaw;\n}\nfunction prepare(input: DngImportInput, keys: readonly string[]): Prepared {\n if (input === null || typeof input !== \"object\") fail(\"input must be an object.\");\n for (const key of Object.keys(input)) if (!keys.includes(key)) fail(`unknown input field. Unknown field ${JSON.stringify(key)}.`);\n const bytes = input.bytes;\n if (!(bytes instanceof Uint8Array)) fail(\"bytes must be a Uint8Array.\");\n const maximumPixels = limit(input.maximumPixels, DNG_IMPORT_LIMITS.defaultMaximumPixels, DNG_IMPORT_LIMITS.maximumPixels, \"maximumPixels\");\n const maximumIfds = limit(input.maximumIfds, DNG_IMPORT_LIMITS.defaultMaximumIfds, DNG_IMPORT_LIMITS.maximumIfds, \"maximumIfds\");\n const maximumBytes = limit(input.maximumBytes, DNG_IMPORT_LIMITS.defaultMaximumBytes, DNG_IMPORT_LIMITS.maximumBytes, \"maximumBytes\");\n if (input.size !== undefined && input.size !== \"full\" && input.size !== \"half\") fail('size must be \"full\" or \"half\".');\n const half = input.size === \"half\";\n const n = bytes.length, view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n if (n < 8) fail(\"file is too short.\");\n const little = bytes[0] === 0x49 && bytes[1] === 0x49;\n if (!little && !(bytes[0] === 0x4d && bytes[1] === 0x4d)) fail(\"missing TIFF byte-order mark.\");\n const u16 = (o: number): number => view.getUint16(o, little), u32 = (o: number): number => view.getUint32(o, little);\n if (u16(2) === 43) fail(\"BigTIFF is not supported.\");\n if (u16(2) !== 42) fail(\"missing TIFF magic number.\");\n\n const visited = new Set<number>(), ifds: Ifd[] = [];\n const readIfd = (offset: number): { ifd: Ifd; next: number } => {\n if (offset < 8 || offset % 2 !== 0 || offset + 2 > n) fail(\"IFD offset out of range.\");\n if (visited.has(offset)) fail(\"IFD loop or aliased IFD.\");\n if (visited.size >= maximumIfds) fail(\"too many IFDs.\");\n visited.add(offset);\n const count = u16(offset), end = offset + 2 + count * 12;\n if (count === 0 || end + 4 > n) fail(\"IFD exceeds the file.\");\n const ifd: Ifd = new Map();\n for (let i = 0; i < count; i++) {\n const p = offset + 2 + i * 12, id = u16(p), type = u16(p + 2), c = u32(p + 4);\n if (ifd.has(id)) fail(\"duplicate tag in one IFD.\");\n if (type < 1 || type > 13) continue; // TIFF 6.0: readers skip fields of unknown type.\n const size = TYPE_SIZES[type]! * c, at = size <= 4 ? p + 8 : u32(p + 8);\n if (at + size > n) fail(\"tag value exceeds the file.\");\n ifd.set(id, { type, count: c, at });\n }\n return { ifd, next: u32(end) };\n };\n const walk = (offset: number, depth: number): void => {\n for (let next = offset; next !== 0;) {\n const { ifd, next: following } = readIfd(next);\n ifds.push(ifd);\n const sub = ifd.get(330);\n if (sub) {\n if (depth >= 3) fail(\"SubIFD nesting is too deep.\");\n if ((sub.type !== 4 && sub.type !== 13) || sub.count > maximumIfds) fail(\"invalid SubIFDs tag.\");\n for (let i = 0; i < sub.count; i++) walk(u32(sub.at + i * 4), depth + 1);\n }\n next = following;\n }\n };\n walk(u32(4), 0);\n\n const numbers = (entry: Entry | undefined, maximumCount: number): number[] | null => {\n if (!entry) return null;\n if (entry.count > maximumCount) fail(\"tag count exceeds its expected size.\");\n const out: number[] = [], { type, at } = entry;\n for (let i = 0; i < entry.count; i++) {\n switch (type) {\n case 1: case 7: out.push(bytes[at + i]!); break;\n case 6: out.push(view.getInt8(at + i)); break;\n case 3: out.push(u16(at + i * 2)); break;\n case 8: out.push(view.getInt16(at + i * 2, little)); break;\n case 4: case 13: out.push(u32(at + i * 4)); break;\n case 9: out.push(view.getInt32(at + i * 4, little)); break;\n case 5: case 10: {\n const num = type === 5 ? u32(at + i * 8) : view.getInt32(at + i * 8, little), den = type === 5 ? u32(at + i * 8 + 4) : view.getInt32(at + i * 8 + 4, little);\n if (den === 0) fail(\"rational with zero denominator.\");\n out.push(num / den); break;\n }\n case 11: out.push(view.getFloat32(at + i * 4, little)); break;\n case 12: out.push(view.getFloat64(at + i * 8, little)); break;\n default: fail(\"unsupported tag type.\");\n }\n if (!Number.isFinite(out[i])) fail(\"non-finite tag value.\");\n }\n return out;\n };\n const integers = (entry: Entry | undefined, maximumCount: number, types: readonly number[]): number[] | null => {\n if (entry && !types.includes(entry.type)) fail(\"tag has an unsupported field type.\");\n return numbers(entry, maximumCount);\n };\n const ascii = (entry: Entry | undefined): string | null => {\n if (!entry) return null;\n if ((entry.type !== 2 && entry.type !== 1) || entry.count > 4096) fail(\"invalid ASCII tag.\");\n let s = \"\";\n for (let i = 0; i < entry.count && bytes[entry.at + i] !== 0; i++) s += String.fromCharCode(bytes[entry.at + i]!);\n return s;\n };\n const one = (ifd: Ifd, id: number, fallback: number): number => {\n const v = integers(ifd.get(id), 1, [3, 4]);\n return v ? v[0]! : fallback;\n };\n const blob = (entry: Entry | undefined): Uint8Array | null => entry ? bytes.subarray(entry.at, entry.at + entry.count * TYPE_SIZES[entry.type]!) : null;\n\n const raw = ifds.find((ifd) => one(ifd, 254, 0) === 0 && [32803, 34892].includes(one(ifd, 262, -1)));\n if (!raw) fail(\"no primary CFA or LinearRaw image IFD.\");\n const ifd0 = ifds[0]!;\n // DNG places camera-level tags in IFD 0; TIFF-EP files may carry them only in the raw IFD.\n const pick = (id: number): Entry | undefined => ifd0.get(id) ?? raw.get(id);\n const dngVersionTag = integers(ifd0.get(50706), 4, [1]);\n const dngVersion = dngVersionTag && dngVersionTag.length === 4 ? dngVersionTag as [number, number, number, number] : null;\n if (dngVersionTag && !dngVersion) fail(\"invalid DNGVersion.\");\n const assumptions: string[] = [];\n\n /** Plans one image IFD (the raw image or a mask): layout checks and the strip or tile table. */\n const plan = (ifd: Ifd, kind: \"raw\" | \"mask\"): ImagePlan => {\n const width = one(ifd, 256, 0), height = one(ifd, 257, 0), spp = one(ifd, 277, 1), code = one(ifd, 259, 1), photometric = one(ifd, 262, 0);\n if (width < 1 || height < 1 || width > 65535 * 4 || height > 65535 * 4) fail(\"invalid image dimensions.\");\n if (width * height > maximumPixels) fail(\"image exceeds the pixel limit.\");\n if (kind === \"mask\" ? spp !== 1 : photometric === 32803 ? spp !== 1 : spp < 1 || spp > 4) fail(\"unsupported SamplesPerPixel.\");\n if (spp > 1 && one(ifd, 284, 1) !== 1) fail(\"only chunky PlanarConfiguration is supported.\");\n const bps = integers(ifd.get(258), spp, [3]) ?? [1];\n if (bps.length !== spp || bps.some((b) => b !== bps[0])) fail(\"BitsPerSample must be equal for every sample.\");\n const bits = bps[0]!;\n if (bits < 8 || bits > 16) fail(\"only 8 to 16 bits per sample are supported.\");\n if (one(ifd, 339, 1) !== 1) fail(\"only unsigned integer samples are supported.\");\n if (![1, 7, 34892, 52546].includes(code)) fail(\"Compression \" + code + \" is not supported (supported: 1 uncompressed, 7 lossless JPEG, 34892 lossy JPEG, 52546 JPEG XL).\");\n if (code === 34892 && (bits !== 8 || photometric === 32803)) fail(\"lossy JPEG (Compression 34892) raw data must be 8-bit LinearRaw or a mask (DNG 1.4.0.0).\");\n const tiled = ifd.has(322) || ifd.has(324);\n const tileWidth = tiled ? one(ifd, 322, 0) : width, tileLength = tiled ? one(ifd, 323, 0) : Math.min(height, one(ifd, 278, 0xffffffff));\n if (tileWidth < 1 || tileLength < 1 || tileWidth > 65535 * 4 || tileLength > 65535 * 4 || (tiled && tileWidth * tileLength > maximumPixels)) fail(\"invalid strip or tile size.\");\n const across = Math.ceil(width / tileWidth), down = Math.ceil(height / tileLength), count = across * down;\n const offsets = integers(ifd.get(tiled ? 324 : 273), count, [3, 4]), counts = integers(ifd.get(tiled ? 325 : 279), count, [3, 4]);\n if (!offsets || !counts || offsets.length !== count || counts.length !== count) fail(\"strip or tile tables do not match the image layout.\");\n const chunks: Chunk[] = [];\n for (let i = 0; i < count; i++) {\n if (offsets[i]! + counts[i]! > n) fail(\"strip or tile data exceeds the file.\");\n const tx = i % across, ty = Math.floor(i / across);\n // Strips cover whole rows (the last may be short); tiles are always full-size and clipped on copy.\n chunks.push({ data: bytes.subarray(offsets[i]!, offsets[i]! + counts[i]!), x0: tx * tileWidth, y0: ty * tileLength, width: tiled ? tileWidth : width, rows: tiled ? tileLength : Math.min(tileLength, height - ty * tileLength) });\n }\n return { width, height, spp, bits, code, chunks, jpegTables: blob(ifd.get(347)) ?? undefined, legacy: dngVersion !== null && (dngVersion[0] < 1 || (dngVersion[0] === 1 && dngVersion[1] < 1)) };\n };\n\n const image = plan(raw, \"raw\"), { width, height, spp, bits: bitsPerSample, code: compressionCode } = image;\n const photometric = one(raw, 262, 0), cfaImage = photometric === 32803;\n const rowInterleave = one(raw, 50975, 1), columnInterleave = one(raw, 52547, 1);\n if (rowInterleave < 1 || rowInterleave > height || columnInterleave < 1 || columnInterleave > width) fail(\"invalid RowInterleaveFactor or ColumnInterleaveFactor.\");\n const interleaved = rowInterleave > 1 || columnInterleave > 1;\n if (half && cfaImage) fail('size \"half\" needs LinearRaw data; this file is a CFA mosaic.');\n if (half && interleaved) fail('size \"half\" is not available for row- or column-interleaved data.');\n if (interleaved) assumptions.push(\"dngImport.interleave: RowInterleaveFactor \" + rowInterleave + \" and ColumnInterleaveFactor \" + columnInterleave + \" undone; the stored order (each field of rows or columns stored together, field by field) is inferred from the DNG SDK, not yet verified on a phone file.\");\n\n // Memory pre-check (estimates, docs/IMPORT_AND_PNG.md \"Memory\"): output codes (plus the half-size sums), one chunk's decoded\n // samples twice (decode buffer and copy), and its decoder's working memory.\n const outWidth = half ? Math.ceil(width / 2) : width, outHeight = half ? Math.ceil(height / 2) : height;\n const largest = Math.max(...image.chunks.map((c) => c.width * c.rows)) * spp;\n const decoderBytes = compressionCode === 52546 ? largest * JXL_WORKING_BYTES_PER_SAMPLE : compressionCode === 34892 ? largest * 2 + largest : largest * 2;\n const estimate = outWidth * outHeight * spp * 2 + (half ? outWidth * outHeight * spp * 4 : 0) + (interleaved ? width * height * spp * 2 : 0) + largest * 4 + decoderBytes;\n if (estimate > maximumBytes) fail(\"the import needs an estimated \" + Math.ceil(estimate / 1048576) + \" MiB, above maximumBytes (\" + Math.floor(maximumBytes / 1048576) + \" MiB); raise maximumBytes or use size \\\"half\\\" for a LinearRaw preview.\");\n\n const maxCode = 2 ** bitsPerSample - 1, codes = new Uint16Array(outWidth * outHeight * spp), sums = half ? new Uint32Array(outWidth * outHeight * spp) : null;\n const write = (chunk: Chunk, samples: Uint16Array): void => {\n for (let y = 0; y < chunk.rows && chunk.y0 + y < height; y++) {\n const columns = Math.min(chunk.width, width - chunk.x0) * spp, from = y * chunk.width * spp;\n if (sums) {\n const row = ((chunk.y0 + y) >> 1) * outWidth;\n for (let i = 0; i < columns; i++) {\n const v = samples[from + i]!;\n if (v > maxCode) fail(\"raw code exceeds BitsPerSample.\");\n const x = chunk.x0 + Math.floor(i / spp), at = (row + (x >> 1)) * spp + (i % spp);\n sums[at] = sums[at]! + v;\n }\n continue;\n }\n const to = ((chunk.y0 + y) * width + chunk.x0) * spp;\n for (let i = 0; i < columns; i++) {\n const v = samples[from + i]!;\n if (v > maxCode) fail(\"raw code exceeds BitsPerSample.\");\n codes[to + i] = v;\n }\n }\n };\n\n // CFA description.\n let cfa: ImportedDngCfa | null = null, colorPlanes = spp;\n if (cfaImage) {\n const dim = integers(raw.get(33421), 2, [3]), pattern = integers(raw.get(33422), 256, [1]);\n if (!dim || dim.length !== 2 || dim[0]! < 1 || dim[1]! < 1 || !pattern || pattern.length !== dim[0]! * dim[1]!) fail(\"CFA images require CFARepeatPatternDim and a matching CFAPattern.\");\n const planeColors = integers(raw.get(50710), 16, [1]) ?? [0, 1, 2];\n if (planeColors.length < 1 || planeColors.some((c) => c > 6) || new Set(planeColors).size !== planeColors.length) fail(\"invalid CFAPlaneColor.\");\n if (pattern.some((v) => v >= planeColors.length)) fail(\"CFAPattern references an undefined plane.\");\n if (one(raw, 50711, 1) !== 1) fail(\"only rectangular CFALayout is supported.\");\n cfa = { repeatRows: dim[0]!, repeatColumns: dim[1]!, pattern, planeColors };\n colorPlanes = planeColors.length;\n }\n\n // Active area, levels and crop.\n const area = integers(raw.get(50829), 4, [3, 4]) ?? [0, 0, height, width];\n if (area.length !== 4 || area[0]! >= area[2]! || area[1]! >= area[3]! || area[2]! > height || area[3]! > width) fail(\"ActiveArea is outside the image.\");\n const activeArea = { x: area[1]!, y: area[0]!, width: area[3]! - area[1]!, height: area[2]! - area[0]! };\n const repeat = integers(raw.get(50713), 2, [3]) ?? [1, 1];\n if (repeat.length !== 2 || repeat[0]! < 1 || repeat[1]! < 1 || repeat[0]! * repeat[1]! > 1024) fail(\"invalid BlackLevelRepeatDim.\");\n const levelCount = repeat[0]! * repeat[1]! * spp;\n const black = integers(raw.get(50714), levelCount, [3, 4, 5]) ?? Array<number>(levelCount).fill(0);\n if (black.length !== levelCount) fail(\"BlackLevel count does not match BlackLevelRepeatDim.\");\n const deltaH = integers(raw.get(50715), activeArea.width, [10]), deltaV = integers(raw.get(50716), activeArea.height, [10]);\n if ((deltaH && deltaH.length !== activeArea.width) || (deltaV && deltaV.length !== activeArea.height)) fail(\"BlackLevelDelta count does not match the ActiveArea.\");\n const whiteLevel = integers(raw.get(50717), spp, [3, 4]) ?? Array<number>(spp).fill(maxCode);\n if (whiteLevel.length !== spp) fail(\"WhiteLevel count does not match SamplesPerPixel.\");\n const origin = integers(raw.get(50719), 2, [3, 4, 5]) ?? [0, 0], size = integers(raw.get(50720), 2, [3, 4, 5]) ?? [width, height];\n if (origin.length !== 2 || size.length !== 2 || size[0]! <= 0 || size[1]! <= 0 || origin[0]! < 0 || origin[1]! < 0) fail(\"invalid default crop.\");\n const linear = integers(raw.get(50712), 65536, [3]);\n\n const matrix = (id: number, transpose = false): number[] | null => {\n const m = integers(pick(id), colorPlanes * 3, [10]);\n if (m && m.length !== colorPlanes * 3) fail((transpose ? \"ForwardMatrix\" : \"ColorMatrix\") + \" count does not match the colour planes.\");\n return m;\n };\n const neutral = integers(pick(50728), colorPlanes, [3, 5]);\n if (neutral && (neutral.length !== colorPlanes || neutral.some((v) => v <= 0))) fail(\"invalid AsShotNeutral.\");\n const illuminant = (id: number): number | null => { const v = integers(pick(id), 1, [3]); return v ? v[0]! : null; };\n const uniqueId = integers(pick(50781), 16, [1]);\n if (uniqueId && uniqueId.length !== 16) fail(\"RawDataUniqueID must have 16 bytes.\");\n const orientation = one(ifd0.has(274) ? ifd0 : raw, 274, 1);\n if (orientation < 1 || orientation > 8) fail(\"invalid Orientation.\");\n\n // Phone tags (#598): parsed when present; a malformed one is reported, never a failure.\n const optional = <T>(name: string, read: () => T): T | null => {\n try { return read(); } catch (error) {\n if (!(error instanceof InvalidConfigurationError)) throw error;\n assumptions.push(\"dngImport.ignored: \" + name + \" is malformed and was ignored (\" + error.message + \").\");\n return null;\n }\n };\n const opcodes = (id: number, name: string): DngOpcode[] | null => { const b = blob(raw.get(id)); return b ? optional(name, () => parseDngOpcodeList(b)) : null; };\n const opcodeList1 = opcodes(51008, \"OpcodeList1\"), opcodeList2 = opcodes(51009, \"OpcodeList2\"), opcodeList3 = opcodes(51022, \"OpcodeList3\");\n const pgtm2 = blob(ifd0.get(52544)), pgtm1 = blob(raw.get(52525));\n const profileGainTableMap = (pgtm2 ? optional(\"ProfileGainTableMap2\", () => parseDngProfileGainTableMap(pgtm2, little, 2)) : null)\n ?? (pgtm1 ? optional(\"ProfileGainTableMap\", () => parseDngProfileGainTableMap(pgtm1, little, 1)) : null);\n const rgbBlob = blob(ifd0.get(52543)), rgbTables = rgbBlob ? optional(\"RGBTables\", () => parseDngRgbTables(rgbBlob, little)) : null;\n const exposure = integers(pick(50730), 1, [10]), exposureOffset = integers(pick(51109), 1, [10]);\n const baselineExposure = exposure || exposureOffset ? (exposure?.[0] ?? 0) + (exposureOffset?.[0] ?? 0) : null;\n for (const [id, name] of UNAPPLIED_TAGS) if (ifd0.has(id) || raw.has(id)) assumptions.push(\"dngImport.notApplied: \" + name + \" (\" + id + \") is present and not applied.\");\n for (const ifd of ifds) {\n const type = one(ifd, 254, 0);\n if (type === 8 || type === 9) assumptions.push(\"dngImport.notApplied: a depth map IFD is present and not decoded.\");\n if (type === 16) assumptions.push(\"dngImport.notApplied: an enhanced-image IFD (NewSubFileType 16) is present and not decoded; the raw image is used.\");\n if (type === 32 || one(ifd, 262, 0) === 52553) assumptions.push(\"dngImport.notApplied: a gain-map image IFD (NewSubFileType 32) is present and not applied.\");\n }\n if (compressionCode === 34892) assumptions.push(\"dngImport.lossySource: the raw data is lossy JPEG (Compression 34892), 8-bit and gamma-coded; OpcodeList2 or the LinearizationTable makes it linear.\");\n const jxlDistance = integers(ifd0.get(52553) ?? raw.get(52553), 1, [11, 12]);\n const lossyJxl = compressionCode === 52546 && !(jxlDistance && jxlDistance[0]! <= 0);\n if (lossyJxl) assumptions.push(\"dngImport.lossySource: the JPEG XL raw data is \" + (jxlDistance ? \"lossy (JXLDistance \" + jxlDistance[0] + \").\" : \"not marked lossless (no JXLDistance tag).\"));\n if (linear) assumptions.push(\"dngImport.linearizationTable: returned, not applied to codes (developDngStageImage applies it).\");\n if (opcodeList1 || opcodeList2 || opcodeList3) assumptions.push(\"dngImport.opcodes: the opcode lists are returned, not applied to codes (developDngStageImage applies them).\");\n if (profileGainTableMap) assumptions.push(\"dngImport.profileGainTableMap: returned (version \" + profileGainTableMap.version + \"); applyDngProfileGainTableMap applies it in a development.\");\n if (rgbTables) assumptions.push(\"dngImport.rgbTables: returned (\" + rgbTables.tables.length + \" tables); applyDngRgbTables applies them in a development.\");\n\n // Semantic masks (DNG 1.6): planned here, decoded with the image.\n const masks = ifds.filter((ifd) => one(ifd, 254, 0) === 0x10004 && one(ifd, 262, 0) === 52527).map((ifd) => {\n if (ifd.has(52536)) assumptions.push(\"dngImport.semanticMask: MaskSubArea is present; the mask is returned as stored and spans the whole image in applyDngRgbTables.\");\n return { name: ascii(ifd.get(52526)) ?? \"\", instanceId: ascii(ifd.get(52528)), ifd };\n });\n\n const halve = (r: ImportedDngRect): ImportedDngRect => half ? { x: r.x / 2, y: r.y / 2, width: r.width / 2, height: r.height / 2 } : r;\n const pairMean = (values: number[] | null): number[] | null => values && half ? Array.from({ length: Math.ceil(values.length / 2) }, (_, i) => (values[2 * i]! + (values[2 * i + 1] ?? values[2 * i]!)) / 2) : values;\n const halfActive = half ? { x: Math.floor(activeArea.x / 2), y: Math.floor(activeArea.y / 2), width: Math.ceil((activeArea.x + activeArea.width) / 2) - Math.floor(activeArea.x / 2), height: Math.ceil((activeArea.y + activeArea.height) / 2) - Math.floor(activeArea.y / 2) } : activeArea;\n let blackLevel: ImportedDngBlackLevel = { repeatRows: repeat[0]!, repeatColumns: repeat[1]!, values: black, deltaH, deltaV };\n if (half) {\n // Half size: the black pattern is averaged over its repeat (a LinearRaw file normally has a 1 x 1 repeat), the deltas pairwise.\n const mean = Array.from({ length: spp }, (_, s) => { let t = 0; for (let k = 0; k < repeat[0]! * repeat[1]!; k++) t += black[k * spp + s]!; return t / (repeat[0]! * repeat[1]!); });\n blackLevel = { repeatRows: 1, repeatColumns: 1, values: mean, deltaH: pairMean(deltaH), deltaV: pairMean(deltaV) };\n if (repeat[0]! * repeat[1]! > 1) assumptions.push(\"dngImport.halfSize: the BlackLevel repeat pattern was averaged to one value per sample.\");\n assumptions.push(\"dngImport.halfSize: a half-size preview; each code is the rounded mean of a 2 x 2 block of stored codes.\");\n }\n\n const finish = (semanticMasks: ImportedDngSemanticMask[]): ImportedDngRaw => {\n if (sums) for (let y = 0; y < outHeight; y++) for (let x = 0; x < outWidth; x++) {\n const count = (Math.min(2, height - 2 * y)) * (Math.min(2, width - 2 * x));\n for (let s = 0; s < spp; s++) { const at = (y * outWidth + x) * spp + s; codes[at] = Math.round(sums[at]! / count); }\n }\n const out = interleaved ? deinterleave(codes, width, height, spp, rowInterleave, columnInterleave) : codes;\n return {\n schemaVersion: DNG_IMPORT_SCHEMA_VERSION, byteOrder: little ? \"little-endian\" : \"big-endian\", dngVersion,\n make: ascii(pick(271)), model: ascii(pick(272)), uniqueCameraModel: ascii(pick(50708)), orientation,\n width: outWidth, height: outHeight, samplesPerPixel: spp, bitsPerSample,\n compression: compressionCode === 1 ? \"uncompressed\" : compressionCode === 7 ? \"lossless-jpeg\" : compressionCode === 34892 ? \"lossy-jpeg\" : \"jpeg-xl\",\n lossySource: compressionCode === 34892 || lossyJxl, scale: half ? 0.5 : 1,\n photometricInterpretation: cfaImage ? \"cfa\" : \"linear-raw\", codes: out, cfa,\n linearizationTable: linear ? Uint16Array.from(linear) : null,\n blackLevel, whiteLevel, activeArea: halfActive, defaultCrop: halve({ x: origin[0]!, y: origin[1]!, width: size[0]!, height: size[1]! }),\n colorMatrix1: matrix(50721), colorMatrix2: matrix(50722),\n calibrationIlluminant1: illuminant(50778), calibrationIlluminant2: illuminant(50779), asShotNeutral: neutral,\n rawDataUniqueId: uniqueId ? uniqueId.map((b) => b.toString(16).padStart(2, \"0\")).join(\"\") : null,\n forwardMatrix1: matrix(50964, true), forwardMatrix2: matrix(50965, true), baselineExposure,\n opcodeList1, opcodeList2, opcodeList3, profileGainTableMap, rgbTables, semanticMasks, assumptions\n };\n };\n return { image, write, finish, masks, plan, assumptions, little };\n}\n\n/** Decodes one chunk without a JPEG XL decoder; null for JPEG XL data. */\nfunction decodeChunkSync(p: ImagePlan, chunk: Chunk, little: boolean): Uint16Array | null {\n const samples = chunk.width * chunk.rows * p.spp;\n if (p.code === 7) {\n const image = parseLosslessJpeg(chunk.data, { maximumSamples: samples, legacySixteenBitDifference: p.legacy });\n if (image.width * image.height * image.components !== samples) fail(\"lossless JPEG sample count does not match the strip or tile.\");\n return image.samples;\n }\n if (p.code === 34892) {\n const image = parseLossyJpeg(chunk.data, { maximumSamples: samples, ...(p.jpegTables ? { tables: p.jpegTables } : {}) });\n if (image.width !== chunk.width || image.height !== chunk.rows || image.components !== p.spp) fail(\"lossy JPEG size or components do not match the strip or tile.\");\n return Uint16Array.from(image.samples);\n }\n if (p.code === 52546) return null;\n return unpack(chunk.data, chunk.width * p.spp, chunk.rows, p.bits, little);\n}\nasync function decodeChunk(p: ImagePlan, chunk: Chunk, little: boolean, decoder: DngJpegXlDecoder | undefined): Promise<Uint16Array> {\n const sync = decodeChunkSync(p, chunk, little);\n if (sync) return sync;\n if (!decoder) fail(\"JPEG XL (Compression 52546) data needs a jpegXlDecoder (importDngRawImage).\");\n return readJpegXlTilePng(await decoder(chunk.data), chunk.width, chunk.rows, p.spp, p.bits);\n}\n/** Copies decoded chunks into a mask's 0..1 values. */\nfunction maskValues(p: ImagePlan, decoded: Uint16Array[]): Float32Array {\n const out = new Float32Array(p.width * p.height), scale = 1 / (2 ** p.bits - 1);\n p.chunks.forEach((chunk, k) => {\n for (let y = 0; y < chunk.rows && chunk.y0 + y < p.height; y++) for (let x = 0; x < chunk.width && chunk.x0 + x < p.width; x++)\n out[(chunk.y0 + y) * p.width + chunk.x0 + x] = Math.min(1, decoded[k]![y * chunk.width + x]! * scale);\n });\n return out;\n}\n\n/**\n * Undoes Row/ColumnInterleaveFactor (DNG 1.7.0.0): stored row s of a factor-R image holds image row (s mod ⌈H/R⌉)·R + ⌊s/⌈H/R⌉⌋\n * (each field of every R-th row stored together, field by field), and likewise for columns. Inferred from the DNG SDK's\n * `Interleave2D`; to be verified on a phone file.\n */\nfunction deinterleave(codes: Uint16Array, width: number, height: number, spp: number, rows: number, columns: number): Uint16Array {\n const out = new Uint16Array(codes.length), fieldRows = Math.ceil(height / rows), fieldColumns = Math.ceil(width / columns);\n for (let s = 0; s < height; s++) {\n const y = (s % fieldRows) * rows + Math.floor(s / fieldRows);\n if (y >= height) fail(\"RowInterleaveFactor does not divide the stored rows into whole fields.\");\n for (let t = 0; t < width; t++) {\n const x = (t % fieldColumns) * columns + Math.floor(t / fieldColumns);\n if (x >= width) fail(\"ColumnInterleaveFactor does not divide the stored columns into whole fields.\");\n for (let c = 0; c < spp; c++) out[(y * width + x) * spp + c] = codes[(s * width + t) * spp + c]!;\n }\n }\n return out;\n}\n\n/**\n * Parse one DNG or TIFF-EP file and decode its primary CFA or LinearRaw image (the first IFD with NewSubFileType 0 and\n * PhotometricInterpretation 32803 or 34892, in IFD-chain then SubIFD order), synchronously.\n *\n * Supported raw data: Compression 1 at 8..16 bits/sample (8 bits as bytes, 16 bits in the file byte order, other depths packed\n * MSB-first with byte-aligned rows, per DNG BitsPerSample), Compression 7 lossless Huffman JPEG (T.81 Annex H) and Compression 34892\n * 8-bit lossy JPEG (T.81 sequential DCT), in strips or tiles, chunky planar configuration only. JPEG XL (52546) needs\n * {@link importDngRawImage}; a JPEG XL semantic mask is skipped here and named in `assumptions`.\n * @returns Owned typed arrays and plain metadata; nothing is applied to the codes.\n */\nexport function parseDngRawImage(input: DngImportInput): ImportedDngRaw {\n const ctx = prepare(input, [\"bytes\", \"maximumPixels\", \"maximumIfds\", \"maximumBytes\", \"size\"]);\n if (ctx.image.code === 52546) fail(\"JPEG XL (Compression 52546) raw data needs importDngRawImage with a jpegXlDecoder.\");\n for (const chunk of ctx.image.chunks) ctx.write(chunk, decodeChunkSync(ctx.image, chunk, ctx.little)!);\n const masks: ImportedDngSemanticMask[] = [];\n for (const m of ctx.masks) {\n const p = ctx.plan(m.ifd, \"mask\");\n if (p.code === 52546) { ctx.assumptions.push(\"dngImport.semanticMask: mask \" + JSON.stringify(m.name) + \" is JPEG XL and was not decoded (use importDngRawImage).\"); continue; }\n masks.push({ name: m.name, instanceId: m.instanceId, width: p.width, height: p.height, data: maskValues(p, p.chunks.map((c) => decodeChunkSync(p, c, ctx.little)!)) });\n }\n return ctx.finish(masks);\n}\n\n/**\n * {@link parseDngRawImage} for every supported compression, JPEG XL included: each JPEG XL strip or tile goes to `jpegXlDecoder` in\n * turn (one at a time, so only one tile's decoder memory is held), and its PNG is read at the DNG's bit depth (jpeg-xl-tiles.ts).\n */\nexport async function importDngRawImage(input: DngImportAsyncInput): Promise<ImportedDngRaw> {\n const ctx = prepare(input, [\"bytes\", \"maximumPixels\", \"maximumIfds\", \"maximumBytes\", \"size\", \"jpegXlDecoder\"]);\n const decoder = input.jpegXlDecoder;\n if (decoder !== undefined && typeof decoder !== \"function\") fail(\"jpegXlDecoder must be a function.\");\n for (const chunk of ctx.image.chunks) ctx.write(chunk, await decodeChunk(ctx.image, chunk, ctx.little, decoder));\n const masks: ImportedDngSemanticMask[] = [];\n for (const m of ctx.masks) {\n const p = ctx.plan(m.ifd, \"mask\");\n if (p.code === 52546 && !decoder) { ctx.assumptions.push(\"dngImport.semanticMask: mask \" + JSON.stringify(m.name) + \" is JPEG XL and no jpegXlDecoder was given.\"); continue; }\n const decoded: Uint16Array[] = [];\n for (const c of p.chunks) decoded.push(await decodeChunk(p, c, ctx.little, decoder));\n masks.push({ name: m.name, instanceId: m.instanceId, width: p.width, height: p.height, data: maskValues(p, decoded) });\n }\n return ctx.finish(masks);\n}\n\n/** Unpack uncompressed rows: 8-bit bytes, 16-bit words in file byte order, other depths MSB-first with byte-aligned rows. */\nfunction unpack(data: Uint8Array, rowSamples: number, rows: number, bits: number, little: boolean): Uint16Array {\n const rowBytes = Math.ceil(rowSamples * bits / 8), out = new Uint16Array(rowSamples * rows);\n if (data.length < rowBytes * rows) fail(\"uncompressed strip or tile is truncated.\");\n for (let y = 0; y < rows; y++) {\n const base = y * rowBytes, o = y * rowSamples;\n if (bits === 8) for (let i = 0; i < rowSamples; i++) out[o + i] = data[base + i]!;\n else if (bits === 16) for (let i = 0; i < rowSamples; i++) {\n const a = data[base + i * 2]!, b = data[base + i * 2 + 1]!;\n out[o + i] = little ? a | (b << 8) : (a << 8) | b;\n } else {\n // Bit accumulator, most significant bit first. At most bits + 7 <= 23 bits are pending, well within 32-bit integer range.\n let accumulator = 0, pending = 0, next = base;\n const mask = (1 << bits) - 1;\n for (let i = 0; i < rowSamples; i++) {\n while (pending < bits) { accumulator = ((accumulator << 8) | data[next++]!) & 0xffffff; pending += 8; }\n pending -= bits;\n out[o + i] = (accumulator >>> pending) & mask;\n }\n }\n }\n return out;\n}\n"]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/** The rectangle, plane range and pitch an area-based opcode acts on (stage pixel coordinates, bottom and right exclusive). */
|
|
2
|
+
export interface DngOpcodeArea {
|
|
3
|
+
top: number;
|
|
4
|
+
left: number;
|
|
5
|
+
bottom: number;
|
|
6
|
+
right: number;
|
|
7
|
+
plane: number;
|
|
8
|
+
planes: number;
|
|
9
|
+
rowPitch: number;
|
|
10
|
+
colPitch: number;
|
|
11
|
+
}
|
|
12
|
+
/** Opcode parameters, by opcode. */
|
|
13
|
+
export type DngOpcodeParameters = {
|
|
14
|
+
opcode: "WarpRectilinear";
|
|
15
|
+
planes: {
|
|
16
|
+
radial: [number, number, number, number];
|
|
17
|
+
tangential: [number, number];
|
|
18
|
+
}[];
|
|
19
|
+
centerX: number;
|
|
20
|
+
centerY: number;
|
|
21
|
+
} | {
|
|
22
|
+
opcode: "FixVignetteRadial";
|
|
23
|
+
coefficients: [number, number, number, number, number];
|
|
24
|
+
centerX: number;
|
|
25
|
+
centerY: number;
|
|
26
|
+
} | {
|
|
27
|
+
opcode: "FixBadPixelsConstant";
|
|
28
|
+
constant: number;
|
|
29
|
+
bayerPhase: number;
|
|
30
|
+
} | {
|
|
31
|
+
opcode: "FixBadPixelsList";
|
|
32
|
+
bayerPhase: number;
|
|
33
|
+
points: [number, number][];
|
|
34
|
+
rects: [number, number, number, number][];
|
|
35
|
+
} | {
|
|
36
|
+
opcode: "MapTable";
|
|
37
|
+
area: DngOpcodeArea;
|
|
38
|
+
table: Uint16Array;
|
|
39
|
+
} | {
|
|
40
|
+
opcode: "MapPolynomial";
|
|
41
|
+
area: DngOpcodeArea;
|
|
42
|
+
coefficients: number[];
|
|
43
|
+
} | {
|
|
44
|
+
opcode: "GainMap";
|
|
45
|
+
area: DngOpcodeArea;
|
|
46
|
+
pointsV: number;
|
|
47
|
+
pointsH: number;
|
|
48
|
+
spacingV: number;
|
|
49
|
+
spacingH: number;
|
|
50
|
+
originV: number;
|
|
51
|
+
originH: number;
|
|
52
|
+
mapPlanes: number;
|
|
53
|
+
gains: Float32Array;
|
|
54
|
+
} | {
|
|
55
|
+
opcode: "DeltaPerRow" | "DeltaPerColumn" | "ScalePerRow" | "ScalePerColumn";
|
|
56
|
+
area: DngOpcodeArea;
|
|
57
|
+
values: Float32Array;
|
|
58
|
+
};
|
|
59
|
+
export interface DngOpcode {
|
|
60
|
+
id: number;
|
|
61
|
+
/** The specification's name, or "Unknown". */
|
|
62
|
+
name: string;
|
|
63
|
+
dngVersion: [number, number, number, number];
|
|
64
|
+
/** Flag bit 0: a reader may skip it. */
|
|
65
|
+
optional: boolean;
|
|
66
|
+
/** Flag bit 1: may be skipped for preview-quality rendering. */
|
|
67
|
+
previewSkip: boolean;
|
|
68
|
+
/** Decoded parameters of an applied opcode; null for one this reader does not apply. */
|
|
69
|
+
parameters: DngOpcodeParameters | null;
|
|
70
|
+
}
|
|
71
|
+
/** A stage image: interleaved (row, column, plane), normalized values. */
|
|
72
|
+
export interface DngStageImage {
|
|
73
|
+
width: number;
|
|
74
|
+
height: number;
|
|
75
|
+
planes: number;
|
|
76
|
+
data: Float32Array;
|
|
77
|
+
}
|
|
78
|
+
/** Options of {@link applyDngOpcodes}. */
|
|
79
|
+
export interface ApplyDngOpcodesOptions {
|
|
80
|
+
/** 1, 2 or 3: the list's stage (for the report). */
|
|
81
|
+
stage: 1 | 2 | 3;
|
|
82
|
+
/**
|
|
83
|
+
* WarpRectilinear resampling: false (full quality) uses cubic convolution (Keys, a = −0.75, the DNG SDK's kernel); true uses
|
|
84
|
+
* bilinear interpolation (fast). Registered as "dngImport.warpRectilinear" in SIMULATE_CAPTURE_FAST_METHODS.
|
|
85
|
+
*/
|
|
86
|
+
fast: boolean;
|
|
87
|
+
/** 1, or 0.5 for a half-size image: pixel-coordinate parameters are scaled; pitched areas and bad pixels are then not applied. */
|
|
88
|
+
scale?: 1 | 0.5;
|
|
89
|
+
}
|
|
90
|
+
/** Parses an opcode list (the tag's bytes). Every count and length is checked against the bytes before allocation. */
|
|
91
|
+
export declare function parseDngOpcodeList(bytes: Uint8Array): DngOpcode[];
|
|
92
|
+
/**
|
|
93
|
+
* Applies an opcode list to a stage image in place (WarpRectilinear returns a new buffer in `image.data`). Returns one assumption
|
|
94
|
+
* per opcode: what was applied, or why it was not.
|
|
95
|
+
*/
|
|
96
|
+
export declare function applyDngOpcodes(image: DngStageImage, opcodes: readonly DngOpcode[], options: ApplyDngOpcodesOptions): string[];
|