mirror of
https://github.com/subhobhai943/SUB-OS.git
synced 2026-10-26 00:52:50 +00:00
feat(lib): baseline JPEG decoder -- the browser shows photos
Adds a from-scratch baseline JPEG decoder (ITU-T T.81, SOF0 sequential DCT), so the Web app now displays the web's dominant photo format alongside PNG and BMP. image_decode dispatches on the JPEG magic, so the browser needs no change beyond that. lib/jpeg.c handles grayscale and YCbCr, arbitrary chroma subsampling (4:4:4/4:2:2/4:2:0), restart markers, and multiple DQT/DHT tables. Huffman uses canonical tables (counts + symbols, like the inflate decoder) to avoid a large fast-table; the transform is the standard fixed-point integer row/column IDCT; colour is integer YCbCr->RGB. All heap-allocated, no floating point, so it is safe in the freestanding kernel. Progressive (SOF2) and arithmetic-coded JPEGs are rejected rather than mis-decoded. Verified on the host against PIL-encoded references before going in the kernel, the same way the crypto and PNG decoders were: grayscale decodes at mean absolute error 0.9/channel, 4:4:4 at 1.7 (pure IDCT rounding vs libjpeg), and 4:2:0 at 4.3 (nearest-neighbour chroma upsampling softens colour edges -- a known, visually-fine artifact). In QEMU the Web app fetched a 400x260 JPEG over HTTP and rendered it correctly -- gradient, an antialiased red circle, a green box, a yellow diagonal. Builds clean on x86_64, aarch64 and armv8i. Limits: baseline only (no progressive), and chroma upsampling is nearest-neighbour rather than the smoother interpolation libjpeg uses. The browser still shows images by URL, not inline in a page. Co-Authored-By: Claude Opus 4.8 <[email protected]> Claude-Session: https://claude.ai/code/session_01Fh5z6V7nGPbHvqVG5p4CXX
This commit is contained in:
1 parent
fe33ddc79b
commit
db962de248
4 files changed
+486
-1
No files matched your search
@@ -129,7 +129,7 @@ CORE_SRCS = kernel/main.c kernel/task.c kernel/sync.c kernel/timer.c kernel/prin
|
||||
kernel/wait.c kernel/futex.c kernel/rcu.c kernel/ktest.c kernel/time/ktime.c \
|
||||
kernel/elf.c kernel/exec.c \
|
||||
lib/string.c lib/vsprintf.c lib/bitmap.c lib/rbtree.c lib/kfifo.c lib/hashtable.c lib/font8x8.c \
|
||||
lib/inflate.c lib/image.c \
|
||||
lib/inflate.c lib/image.c lib/jpeg.c \
|
||||
init/cmdline.c init/service.c init/bootlogo.c init/logo_data.c usr/initramfs.c block/block.c block/elevator.c \
|
||||
ipc/sem.c ipc/shm.c ipc/shm_posix.c ipc/pipe.c ipc/ipc.c ipc/msg.c \
|
||||
crypto/sha256.c crypto/md5.c crypto/crc32.c crypto/prng.c \
|
||||
|
||||
Reference in new issue
Block a user