in src/main/java/org/apache/pdfbox/jbig2/segments/GenericRegion.java [460:526]
private void decodeTemplate1(final int lineNumber, int width, final int rowStride,
final int paddedWidth, int byteIndex, int idx) throws IOException
{
int context;
int overriddenContext;
int line1 = 0;
int line2 = 0;
if (lineNumber >= 1)
{
line1 = regionBitmap.getByteAsInteger(idx);
}
if (lineNumber >= 2)
{
line2 = regionBitmap.getByteAsInteger(idx - rowStride) << 5;
}
context = ((line1 >> 1) & 0x1f8) | ((line2 >> 1) & 0x1e00);
int nextByte;
for (int x = 0; x < paddedWidth; x = nextByte)
{
/* 6.2.5.7 3d */
byte result = 0;
nextByte = x + 8;
final int minorWidth = width - x > 8 ? 8 : width - x;
if (lineNumber >= 1)
{
line1 = (line1 << 8)
| (nextByte < width ? regionBitmap.getByteAsInteger(idx + 1) : 0);
}
if (lineNumber >= 2)
{
line2 = (line2 << 8) | (nextByte < width
? regionBitmap.getByteAsInteger(idx - rowStride + 1) << 5 : 0);
}
for (int minorX = 0; minorX < minorWidth; minorX++)
{
if (override)
{
overriddenContext = overrideAtTemplate1(context, x + minorX, lineNumber, result,
minorX);
cx.setIndex(overriddenContext);
}
else
{
cx.setIndex(context);
}
final int bit = arithDecoder.decode(cx);
result |= bit << 7 - minorX;
final int toShift = 8 - minorX;
context = ((context & 0xefb) << 1) | bit | ((line1 >> toShift) & 0x8)
| ((line2 >> toShift) & 0x200);
}
regionBitmap.setByte(byteIndex++, result);
idx++;
}
}