Progressive (SOF2) JPEG decoder for memory-constrained systems. Decodes at 1/1, 1/2, 1/4 or 1/8 in a single forward pass with no seeking, storing only the low-frequency corner of each block that a reduced-scale IDCT will read. Storage still scales with the SOURCE image and not with the output, but with a much smaller constant than a general-purpose decoder: on a 12 MP 4:2:0 progressive file the peak is 23.0 / 8.9 / 3.6 MB at 1/2 / 1/4 / 1/8, against libjpeg-turbo's ~36 MB coefficient array at every scale. Size the budget from the frame header, not from the output you want; PSRAM is the assumption at megapixel sizes. Portable C99; I/O, row output and allocation are caller callbacks, so the large buffers can be pointed at external RAM while the hot working state stays internal.