fix(geotiff): decode big endian tiles in the platform's byte order - #687
Open
james-willis wants to merge 1 commit into
Open
james-willis wants to merge 1 commit into
james-willis wants to merge 1 commit into
Conversation
james-willis
force-pushed
the
jw/big-endian-decode
branch
from
October 1, 2026 18:14
7992696 to
7142d95
Compare
james-willis
marked this pull request as ready for review
October 1, 2026 18:18
Member
|
Thanks! Could you make a PR to add a big-endian TIFF to https://github.com/developmentseed/geotiff-test-data so that we have a known TIFF to test against? |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #686.
Big endian (
MM) TIFFs decoded to byte-swapped pixel values:toTypedArrayviews the decoded bytes in the platform's byte order, andDecoderMetadatadidn't carry the file's.Changes
DecoderMetadatagains an optionallittleEndian(defaulttrue, so existing callers ofdecode()are unaffected).fetch.tssets it fromimage.tiff.isLittleEndianfor both data and mask tiles.decode()byte-swaps samples wider than 8 bits from big endian files, beforeapplyPredictor, since horizontal differencing (predictor 2) has to accumulate native-order integers.decodeRowFloatingPointalready reassembles them in platform order.Tests
Three unit tests in
decode.test.tsbuild big endian tiles from known values:IIandMM, which must agreeThe first two fail on main; the third fails if the swap is applied to predictor 3.
pnpm typecheckandbiome checkare clean. Locally,integration-rasterio.test.tsfails on missing.npyreference files in my fixtures checkout, the same with and without this change.