Skip to content

Commit 5ff36ce

Browse files
committed
LibGfx/JPEG2000: Skip TLM, PLM, PLT markers
These markers are just for more efficient access into the codestream. We can just ignore them. Here's an actual file using a PLT marker: https://github.com/mozilla/pdf.js/files/6083044/njp.32101064480005_page_013.2.pdf Rendering that file now fails later (due to unsupported code block styles). I haven't found a way to to create a file with a PLM marker. The TLM and PLT inputs were created by running: ../openjpeg/build/bin/opj_compress -i ref.bmp \ -o openjpeg-lossless-rgba-u8-TLM.jp2 \ -TLM \ -C "opj_compress -TLM" ../openjpeg/build/bin/opj_compress -i ref.bmp \ -o openjpeg-lossless-rgba-u8-PLT.jp2 \ -PLT \ -C "opj_compress -PLT"
1 parent 71df028 commit 5ff36ce

File tree

4 files changed

+8
-0
lines changed

4 files changed

+8
-0
lines changed

Tests/LibGfx/TestImageDecoder.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,8 @@ TEST_CASE(test_jpeg2000_decode)
699699
TEST_INPUT("jpeg2000/openjpeg-lossless-rgba-u8-prog0-SOP.jp2"sv),
700700
TEST_INPUT("jpeg2000/openjpeg-lossless-rgba-u8-prog0-EPH.jp2"sv),
701701
TEST_INPUT("jpeg2000/openjpeg-lossless-rgba-u8-prog0-EPH-SOP.jp2"sv),
702+
TEST_INPUT("jpeg2000/openjpeg-lossless-rgba-u8-PLT.jp2"sv),
703+
TEST_INPUT("jpeg2000/openjpeg-lossless-rgba-u8-TLM.jp2"sv),
702704
};
703705

704706
for (auto test_input : test_inputs) {
Binary file not shown.
Binary file not shown.

Userland/Libraries/LibGfx/ImageFormats/JPEG2000Loader.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -966,6 +966,10 @@ static ErrorOr<void> parse_codestream_main_header(JPEG2000LoadingContext& contex
966966
context.qccs.append(TRY(read_quantization_component(marker.data.value(), context.siz.components.size())));
967967
} else if (marker.marker == J2K_COM) {
968968
context.coms.append(TRY(read_comment(marker.data.value())));
969+
} else if (marker.marker == J2K_TLM) {
970+
// TLM describes tile-part lengths, for random access. They can be ignored for now.
971+
} else if (marker.marker == J2K_PLM) {
972+
// PLM describes packet lengths, for random access. They can be ignored for now.
969973
} else {
970974
// FIXME: These are valid main header markers. Parse contents.
971975
dbgln("JPEG2000ImageDecoderPlugin: marker {:#04x} not yet implemented", marker.marker);
@@ -1057,6 +1061,8 @@ static ErrorOr<void> parse_codestream_tile_header(JPEG2000LoadingContext& contex
10571061
tile.qccs.append(TRY(read_quantization_component(marker.data.value(), context.siz.components.size())));
10581062
} else if (marker.marker == J2K_COM) {
10591063
tile_part.coms.append(TRY(read_comment(marker.data.value())));
1064+
} else if (marker.marker == J2K_PLT) {
1065+
// PLT describes packet lengths, for random access. They can be ignored for now.
10601066
} else {
10611067
// FIXME: These are valid main header markers. Parse contents.
10621068
dbgln("JPEG2000ImageDecoderPlugin: marker {:#04x} not yet implemented in tile header", marker.marker);

0 commit comments

Comments
 (0)