ref: d1540c7f666e3c5d636b48c956b444205b50502d
dir: /module/grid/readjpg.m/
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;
};