summaryrefslogtreecommitdiff
path: root/module/grid/readjpg.m
diff options
context:
space:
mode:
Diffstat (limited to 'module/grid/readjpg.m')
-rw-r--r--module/grid/readjpg.m95
1 files changed, 95 insertions, 0 deletions
diff --git a/module/grid/readjpg.m b/module/grid/readjpg.m
new file mode 100644
index 00000000..4576381c
--- /dev/null
+++ b/module/grid/readjpg.m
@@ -0,0 +1,95 @@
+Readjpg: module
+{
+
+ PATH: con "/dis/grid/readjpg.dis";
+
+ ImageSource: adt
+ {
+ width: int;
+ height: int;
+ origw: int;
+ origh: int;
+ i: int;
+ jstate: ref Jpegstate;
+ data: array of byte;
+ };
+
+ Jpegstate: adt
+ {
+ # variables in i/o routines
+ sr: int; # shift register, right aligned
+ cnt: int; # # bits in right part of sr
+
+ Nf: int;
+ comp: array of Framecomp;
+ mode: byte;
+ X,Y: int;
+ qt: array of array of int; # quantization tables
+ dcht: array of ref Huffman;
+ acht: array of ref Huffman;
+ Ns: int;
+ scomp: array of Scancomp;
+ Ss: int;
+ Se: int;
+ Ah: int;
+ Al: int;
+ ri: int;
+ nseg: int;
+ nblock: array of int;
+
+ # progressive scan
+ dccoeff: array of array of int;
+ accoeff: array of array of array of int; # only need 8 bits plus quantization
+ nacross: int;
+ ndown: int;
+ Hmax: int;
+ Vmax: int;
+ };
+
+ Huffman: adt
+ {
+ bits: array of int;
+ size: array of int;
+ code: array of int;
+ val: array of int;
+ mincode: array of int;
+ maxcode: array of int;
+ valptr: array of int;
+ # fast lookup
+ value: array of int;
+ shift: array of int;
+ };
+
+ Framecomp: adt # Frame component specifier from SOF marker
+ {
+ C: int;
+ H: int;
+ V: int;
+ Tq: int;
+ };
+
+ Scancomp: adt # Frame component specifier from SOF marker
+ {
+ C: int;
+ tdc: int;
+ tac: int;
+ };
+
+ # Constants, all preceded by byte 16rFF
+ SOF: con 16rC0; # Start of Frame
+ SOF2: con 16rC2; # Start of Frame; progressive Huffman
+ DHT: con 16rC4; # Define Huffman Tables
+ RST: con 16rD0; # Restart interval termination
+ SOI: con 16rD8; # Start of Image
+ EOI: con 16rD9; # End of Image
+ SOS: con 16rDA; # Start of Scan
+ DQT: con 16rDB; # Define quantization tables
+ DNL: con 16rDC; # Define number of lines
+ DRI: con 16rDD; # Define restart interval
+ APPn: con 16rE0; # Reserved for application segments
+ COM: con 16rFE; # Comment
+
+ init : fn (disp: ref Draw->Display);
+ fjpg2img : fn (fd: ref sys->FD, cachepath: string, chanin, chanout: chan of string): ref Image;
+ jpg2img : fn (filename, cachepath: string, chanin, chanout: chan of string): ref Image;
+}; \ No newline at end of file