ref: 02ac617541ca1a7bf82b1615fb5a58235469b5d3
dir: /appl/wm/mpeg/mpegio.m/
#
# MPEG ISO 11172 IO module.
#
Mpegio: module
{
PATH: con "/dis/mpeg/mpegio.dis";
MBSZ: con Sys->ATOMICIO;
PICTURE_SC: con 16r100;
SLICE1_SC: con 16r101;
SLICEN_SC: con 16r1AF;
USER_SC: con 16r1B2;
SEQUENCE_SC: con 16r1B3;
EXTENSION_SC: con 16r1B5;
SEQUENCE_EC: con 16r1B7;
GROUP_SC: con 16r1B8;
STREAM_EC: con 16r1B9;
PACK_SC: con 16r1BA;
SYSHD_SC: con 16r1BB;
STREAM_BASE: con 16r1BC;
PRIVSTREAM2: con 16r1BF;
AUDIO_STR0: con 16r1C0;
VIDEO_STR0: con 16r1E0;
MEXCEPT: con "mpeg: ";
X_FORMAT: con "fmt error";
X_READ: con "read error";
X_WRITE: con "write error";
X_EOF: con "premature eof";
UNDEF: con 100;
CONSTRAINED, CLOSED, BROKEN: con 1 << iota;
FPFV, FPBV, GSTART: con 1 << iota;
IPIC: con 1;
PPIC: con 2;
BPIC: con 3;
DPIC: con 4;
ptypes: con "0IPBD";
MB_Q, MB_MF, MB_MB, MB_P, MB_I: con 1 << iota;
Stream: adt
{
id: byte;
scale: byte;
bound: int;
fd: ref Sys->FD;
};
Picture: adt
{
seek: int;
eos: int;
temporal: int;
ptype: int;
vbvdelay: int;
flags: int;
forwfc: int;
backfc: int;
slices: array of ref Slice;
addr: int;
};
Slice: adt
{
blocks: array of ref MacroBlock;
};
MacroBlock: adt
{
flags: int;
qscale: int;
mhfc, mhfr, mvfc, mvfr: int;
mhbc, mhbr, mvbc, mvbr: int;
pcode: int;
rls: array of array of Pair;
addr: int;
};
YCbCr: adt
{
Y, Cb, Cr: array of byte;
};
Pair: type (int, int);
Triple: type (int, int, int);
Mpegi: adt
{
fd: ref Sys->FD;
name: string;
error: string;
looked: int;
value: int;
# info
width: int;
height: int;
aspect: int;
frames: int;
rate: int;
vbv: int;
flags: int;
intra: array of int;
nintra: array of int;
smpte: int;
# real buffer
seek: int;
index: int;
size: int;
buff: array of byte;
# stream buffer
sid: int; # stream id
slim: int; # stream limit <= size
sresid: int; # stream residual (-1 entire file)
sbits: int; # bits remaining
svalue: int; # current value
packt0: int;
packt1: int;
packmr: int;
syssz: int;
boundmr: int;
syspar: int;
nstream: int;
streams: array of Stream;
log: ref Sys->FD;
startsys: fn(m: self ref Mpegi);
packhdr: fn(m: self ref Mpegi);
syshdr: fn(m: self ref Mpegi);
packetcp: fn(m: self ref Mpegi): int;
getfd: fn(m: self ref Mpegi, c: int): ref Sys->FD;
stamps: fn(m: self ref Mpegi): int;
streaminit: fn(m: self ref Mpegi, c: int);
inittables: fn();
sseek: fn(m: self ref Mpegi);
seqhdr: fn(m: self ref Mpegi);
grphdr: fn(m: self ref Mpegi);
getquant: fn(m: self ref Mpegi): array of int;
getpicture: fn(m: self ref Mpegi, detail: int): ref Picture;
picture: fn(m: self ref Mpegi, detail: int): ref Picture;
detail: fn(m: self ref Mpegi, p: ref Picture);
skipdetail: fn(m: self ref Mpegi);
slice: fn(m: self ref Mpegi, p: ref Picture): ref Slice;
cpn: fn(m: self ref Mpegi, fd: ref Sys->FD, n: int);
fill: fn(m: self ref Mpegi);
tell: fn(m: self ref Mpegi): int;
skipn: fn(m: self ref Mpegi, n: int);
getb: fn(m: self ref Mpegi): int;
getw: fn(m: self ref Mpegi): int;
get22: fn(m: self ref Mpegi, s: string): int;
getsc: fn(m: self ref Mpegi): int;
nextsc: fn(m: self ref Mpegi): int;
peeksc: fn(m: self ref Mpegi): int;
xnextsc: fn(m: self ref Mpegi, code: int);
sfill: fn(m: self ref Mpegi);
sgetb: fn(m: self ref Mpegi): int;
sgetn: fn(m: self ref Mpegi, n: int): int;
sdiffn: fn(m: self ref Mpegi, n: int): int;
sdct: fn(m: self ref Mpegi, a: array of Triple, s: string): Pair;
speekn: fn(m: self ref Mpegi, n: int): int;
smarker: fn(m: self ref Mpegi);
sgetsc: fn(m: self ref Mpegi): int;
snextsc: fn(m: self ref Mpegi): int;
speeksc: fn(m: self ref Mpegi): int;
sseeksc: fn(m: self ref Mpegi);
svlc: fn(m: self ref Mpegi, a: array of Pair, n: int, s: string): int;
fmterr: fn(m: self ref Mpegi, s: string);
};
init: fn();
prepare: fn(fd: ref Sys->FD, name: string): ref Mpegi;
raisex: fn(s: string);
};
Mpegd: module
{
PATH: con "/dis/mpeg/decode.dis";
PATH4: con "/dis/mpeg/decode4.dis";
init: fn(m: ref Mpegio->Mpegi);
Idecode: fn(p: ref Mpegio->Picture): ref Mpegio->YCbCr;
Pdecode: fn(p: ref Mpegio->Picture): ref Mpegio->YCbCr;
Bdecode: fn(p: ref Mpegio->Picture): ref Mpegio->YCbCr;
Bdecode2: fn(p: ref Mpegio->Picture, f0, f1: ref Mpegio->YCbCr): ref Mpegio->YCbCr;
};
IDCT: module
{
FPATH: con "/dis/mpeg/fltidct.dis"; # based on rob's jpeg
RPATH: con "/dis/mpeg/refidct.dis"; # reference (full idct)
SPATH: con "/dis/mpeg/scidct.dis"; # scaled integer implementation
XPATH: con "/dis/mpeg/fixidct.dis"; # nasty fixed point
PATH: con SPATH;
init: fn();
idct: fn(block: array of int);
};
Remap: module
{
PATH: con "/dis/mpeg/remap.dis";
PATH1: con "/dis/mpeg/remap1.dis";
PATH2: con "/dis/mpeg/remap2.dis";
PATH4: con "/dis/mpeg/remap4.dis";
PATH24: con "/dis/mpeg/remap24.dis";
init: fn(m: ref Mpegio->Mpegi);
remap: fn(p: ref Mpegio->YCbCr): array of byte;
};