52 pdfium::span<JBig2ArithCtx> grContexts) {
58 int32_t INITIAL_STRIPT;
60 if (pHuffmanDecoder->DecodeAValue(SBHUFFDT, &INITIAL_STRIPT) != 0)
67 uint32_t NINSTANCES = 0;
70 if (pHuffmanDecoder->DecodeAValue(SBHUFFDT, &INITIAL_DT) != 0)
81 if (pHuffmanDecoder->DecodeAValue(SBHUFFFS, &DFS) != 0)
89 int32_t nVal = pHuffmanDecoder->DecodeAValue(SBHUFFDS, &IDS);
102 while (
static_cast<uint32_t>(1 << nTmp) <
SBSTRIPS)
111 if (!SAFE_TI.IsValid())
114 int32_t TI = SAFE_TI.ValueOrDie();
124 if (!nSafeVal.IsValid())
129 const int32_t nVal = nSafeVal.ValueOrDie();
131 if (nBits == SBSYMCODES[IDI].codelen && nVal == SBSYMCODES[IDI].code)
141 MaybeOwned<CJBig2_Image> IBI;
150 if ((pHuffmanDecoder->DecodeAValue(SBHUFFRDW, &RDWI) != 0) ||
151 (pHuffmanDecoder->DecodeAValue(SBHUFFRDH, &RDHI) != 0) ||
152 (pHuffmanDecoder->DecodeAValue(SBHUFFRDX, &RDXI) != 0) ||
153 (pHuffmanDecoder->DecodeAValue(SBHUFFRDY, &RDYI) != 0) ||
154 (pHuffmanDecoder->DecodeAValue(SBHUFFRSIZE, &HUFFRSIZE) != 0)) {
163 std::optional<uint32_t> WOI = CheckTRDDimension(IBOI->width(), RDWI);
164 std::optional<uint32_t> HOI = CheckTRDDimension(IBOI->height(), RDHI);
165 if (!WOI.has_value() || !HOI.has_value())
168 std::optional<int32_t> GRREFERENCEDX =
169 CheckTRDReferenceDimension(RDWI, 2, RDXI);
170 std::optional<int32_t> GRREFERENCEDY =
171 CheckTRDReferenceDimension(RDHI, 2, RDYI);
172 if (!GRREFERENCEDX.has_value() || !GRREFERENCEDY.has_value())
176 pGRRD->GRW = WOI.value();
177 pGRRD->GRH = HOI.value();
179 pGRRD->GRREFERENCE = IBOI;
180 pGRRD->GRREFERENCEDX = GRREFERENCEDX.value();
181 pGRRD->GRREFERENCEDY = GRREFERENCEDY.value();
182 pGRRD->TPGRON =
false;
183 pGRRD->GRAT[0] = SBRAT[0];
184 pGRRD->GRAT[1] = SBRAT[1];
185 pGRRD->GRAT[2] = SBRAT[2];
186 pGRRD->GRAT[3] = SBRAT[3];
189 IBI = pGRRD->Decode(pArithDecoder.get(), grContexts);
195 if (
static_cast<uint32_t>(HUFFRSIZE) != (pStream
->getOffset() - nTmp))
201 uint32_t WI = IBI->width();
202 uint32_t HI = IBI->height();
213 int32_t SI = CURS.ValueOrDie();
214 ComposeData compose = GetComposeData(SI, TI, WI, HI);
215 IBI.Get()->ComposeTo(SBREG.get(), compose.x, compose.y,
SBCOMBOP);
216 if (compose.increment)
217 CURS += compose.increment;
226 pdfium::span<JBig2ArithCtx> grContexts,
232 MaybeOwned<CJBig2_ArithIntDecoder> pIADT;
237 int32_t INITIAL_STRIPT;
238 if (!pIADT->Decode(pArithDecoder, &INITIAL_STRIPT))
241 MaybeOwned<CJBig2_ArithIntDecoder> pIAFS;
242 MaybeOwned<CJBig2_ArithIntDecoder> pIADS;
243 MaybeOwned<CJBig2_ArithIntDecoder> pIAIT;
244 MaybeOwned<CJBig2_ArithIntDecoder> pIARI;
245 MaybeOwned<CJBig2_ArithIntDecoder> pIARDW;
246 MaybeOwned<CJBig2_ArithIntDecoder> pIARDH;
247 MaybeOwned<CJBig2_ArithIntDecoder> pIARDX;
248 MaybeOwned<CJBig2_ArithIntDecoder> pIARDY;
249 MaybeOwned<CJBig2_ArithIaidDecoder> pIAID;
255 pIARDW = pIDS->IARDW;
256 pIARDH = pIDS->IARDH;
257 pIARDX = pIDS->IARDX;
258 pIARDY = pIDS->IARDY;
278 uint32_t NINSTANCES = 0;
282 if (!pIADT->Decode(pArithDecoder, &INITIAL_DT))
292 pIAFS->Decode(pArithDecoder, &DFS);
298 if (!pIADS->Decode(pArithDecoder, &IDS))
309 pIAIT->Decode(pArithDecoder, &CURT);
312 if (!SAFE_TI.IsValid())
315 int32_t TI = SAFE_TI.ValueOrDie();
317 pIAID->Decode(pArithDecoder, &IDI);
325 pIARI->Decode(pArithDecoder, &RI);
327 MaybeOwned<CJBig2_Image> pIBI;
335 pIARDW->Decode(pArithDecoder, &RDWI);
336 pIARDH->Decode(pArithDecoder, &RDHI);
337 pIARDX->Decode(pArithDecoder, &RDXI);
338 pIARDY->Decode(pArithDecoder, &RDYI);
343 std::optional<uint32_t> WOI = CheckTRDDimension(IBOI->width(), RDWI);
344 std::optional<uint32_t> HOI = CheckTRDDimension(IBOI->height(), RDHI);
345 if (!WOI.has_value() || !HOI.has_value())
348 std::optional<int32_t> GRREFERENCEDX =
349 CheckTRDReferenceDimension(RDWI, 1, RDXI);
350 std::optional<int32_t> GRREFERENCEDY =
351 CheckTRDReferenceDimension(RDHI, 1, RDYI);
352 if (!GRREFERENCEDX.has_value() || !GRREFERENCEDY.has_value())
356 pGRRD->GRW = WOI.value();
357 pGRRD->GRH = HOI.value();
359 pGRRD->GRREFERENCE = IBOI;
360 pGRRD->GRREFERENCEDX = GRREFERENCEDX.value();
361 pGRRD->GRREFERENCEDY = GRREFERENCEDY.value();
362 pGRRD->TPGRON =
false;
363 pGRRD->GRAT[0] = SBRAT[0];
364 pGRRD->GRAT[1] = SBRAT[1];
365 pGRRD->GRAT[2] = SBRAT[2];
366 pGRRD->GRAT[3] = SBRAT[3];
367 pIBI = pGRRD->Decode(pArithDecoder, grContexts);
372 uint32_t WI = pIBI->width();
373 uint32_t HI = pIBI->height();
384 int32_t SI = CURS.ValueOrDie();
385 ComposeData compose = GetComposeData(SI, TI, WI, HI);
386 pIBI.Get()->ComposeTo(SBREG.get(), compose.x, compose.y,
SBCOMBOP);
387 if (compose.increment)
388 CURS += compose.increment;