def jpeg.progressive.walk

gralha-jpeg-decode@0.1.0.1 · jpeg.bend:313

import gralha-jpeg-decode@0.1.0.1/jpeg.bend as Jpeg
import Base
import gralha-text-scan@0.1.0.1/scan.bend as U
import gralha-bytes@0.1.0.1/bytes.bend as Bin

313def jpeg.progressive.walk(+index: U32, +end: U32, +run: U32, +fresh: U32, +offset: U32, +p1: U32, +block: JPEGBlock) -> JPEGRefined:
314  JPEGBlock{stream, coefficients, predictor} = block
315  +at = (offset + jpeg.zigzag(index) : U32)
316  +nonzero = Bool.not(U32.is_eq(Bin.bytes.get(coefficients, at), 0))
317  +done = U32.is_gt(index, end) || (U32.is_eq(run, 0) && U32.is_eq(fresh, 0)) || Bool.not(jpeg.stream.valid(stream))
318  U.branch(JPEGRefined, done, _ => JPEGRefined{index, U.choose(JPEGBlock, U32.is_gt(index, end) && Bool.not(U32.is_eq(fresh, 0)), jpeg.block.invalid(block), block)},
319    _ => U.branch(JPEGRefined, nonzero,
320      _ => jpeg.progressive.walk(U32.inc(index), end, run, fresh, offset, p1, jpeg.progressive.refine.bit(jpeg.bits(stream, 1), coefficients, predictor, at, p1)),
321      _ => U.branch(JPEGRefined, U32.is_gt(run, 0), _ => jpeg.progressive.walk(U32.inc(index), end, (run - 1 : U32), fresh, offset, p1, block),
322        _ => JPEGRefined{U32.inc(index), JPEGBlock{stream, Bin.bytes.set(coefficients, at, fresh), predictor}})))

Uses (20)

Used by (4)