def jpeg.block.ac.symbol

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

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

380def jpeg.block.ac.symbol(read: JPEGRead, +coefficients: Bin.Bytes, +predictor: U32, +offset: U32, +index: U32, next: U32 -> JPEGBlock -> JPEGBlock) -> JPEGBlock:
381  JPEGRead{symbol, stream} = read
382  +rs = symbol
383  +input = stream
384  +count = (rs % 16 : U32)
385  +pos = (index + rs / 16 : U32)
386  +end = U32.is_eq(rs, 0)
387  +zero = U32.is_eq(rs, 240)
388  +ok = jpeg.stream.valid(input) && (end || (zero && U32.is_le((index + 16 : U32), 64)) || (U32.is_gt(count, 0) && U32.is_le(count, 10) && U32.is_lt(pos, 64)))
389  +skip = end || Bool.not(ok)
390  +result = U.branch(JPEGBlock, skip || zero, _ => JPEGBlock{U.choose(JPEGStream, ok, input, jpeg.stream.invalid(input)), coefficients, predictor},
391    _ => jpeg.block.ac.bits(jpeg.bits(input, count), count, coefficients, predictor, offset, pos, _ => block => block))
392  next(U.choose(U32, skip, 64, U.choose(U32, zero, (index + 16 : U32), U32.inc(pos))))(result)
393
394@unsafe

Uses (22)

Used by (1)