LibGfx/JBIG2: Call decode_immediate_generic_region for lossless regions

It seems to do the right thing already, and nothing in the spec says
not to do this as far as I can tell.

With this, we can finally decode
Tests/LibGfx/test-inputs/jbig2/bitmap.jbig2 and add a test for
decoding simple arithmetic-coded images.
This commit is contained in:
Nico Weber 2024-03-14 22:00:01 -04:00 committed by Tim Flynn
commit f391c7822d
Notes: sideshowbarker 2024-07-16 22:24:48 +09:00
2 changed files with 23 additions and 8 deletions

View file

@ -922,11 +922,6 @@ static ErrorOr<void> decode_immediate_generic_region(JBIG2LoadingContext& contex
return {};
}
static ErrorOr<void> decode_immediate_lossless_generic_region(JBIG2LoadingContext&, SegmentData const&)
{
return Error::from_string_literal("JBIG2ImageDecoderPlugin: Cannot decode immediate lossless generic region yet");
}
static ErrorOr<void> decode_intermediate_generic_refinement_region(JBIG2LoadingContext&, SegmentData const&)
{
return Error::from_string_literal("JBIG2ImageDecoderPlugin: Cannot decode intermediate generic refinement region yet");
@ -1118,10 +1113,13 @@ static ErrorOr<void> decode_data(JBIG2LoadingContext& context)
TRY(decode_intermediate_generic_region(context, segment));
break;
case SegmentType::ImmediateGenericRegion:
TRY(decode_immediate_generic_region(context, segment));
break;
case SegmentType::ImmediateLosslessGenericRegion:
TRY(decode_immediate_lossless_generic_region(context, segment));
// 7.4.6 Generic region segment syntax
// "The data parts of all three of the generic region segment types ("intermediate generic region", "immediate generic region" and
// "immediate lossless generic region") are coded identically, but are acted upon differently, see 8.2."
// But 8.2 only describes a difference between intermediate and immediate regions as far as I can tell,
// and calling the immediate generic region handler for immediate generic lossless regions seems to do the right thing (?).
TRY(decode_immediate_generic_region(context, segment));
break;
case SegmentType::IntermediateGenericRefinementRegion:
TRY(decode_intermediate_generic_refinement_region(context, segment));