def jpeg.file.marker

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

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

597def jpeg.file.marker(marker: JPEGMarker, +src: Bin.Bytes, +frame: JPEGFrame, +seen: Bool, next: U32 -> JPEGFrame -> Bool -> JPEGFrame) -> JPEGFrame:
598  JPEGMarker{tag, at, valid} = marker
599  +kind = tag
600  +pos = at
601  +ok = valid
602  +size = Bin.bytes.be(src, pos, 2n, 0)
603  +end = (pos + size : U32)
604  +done = U32.is_eq(kind, 217)
605  +invalid = Bool.not(ok) || Bool.not(jpeg.frame.valid(frame)) || U32.is_lt(kind, 192) || (U32.is_ge(kind, 208) && U32.is_le(kind, 216)) || (Bool.not(done) && (U32.is_lt(size, 2) || U32.is_gt(end, Bin.bytes.size(src))))
606  +stop = done || invalid
607  +result = U.branch(JPEGDecoded, stop, _ => JPEGDecoded{U.choose(JPEGFrame, done && seen && Bool.not(invalid), frame, jpeg.frame.invalid(frame)), pos}, _ => jpeg.file.segment(src, (pos + 2 : U32), end, kind, frame))
608  jpeg.file.continue(result, stop, seen || U32.is_eq(kind, 218), next)
609
610@unsafe

Uses (23)

Used by (1)