# ppm_dv.b
PPM_dv : module {
PATH : con "/dis/lib/ppm_dv.dis";
init: fn(nil: ref Draw->Context, nil: list of string);
Pixel : adt {
frame : big;
x, y, v, channel : int;
};
write_to_pixel : fn(s : ref Sequence, c : chan of ref Pixel);
Sequence : adt {
headersize : int;
directory : string;
framecount : big;
width, height, maxvalue, bpp : int;
info : fn(s : self ref Sequence) : string;
scan : fn(s : self ref Sequence);
sample : fn(s : self ref Sequence, frame, offset : big) : int;
frame_pixel : fn(s : self ref Sequence, startframe : big, samplesize, x, y, channel : int) : array of int;
# one int per frame specified for pixel at coords x,y - rgb is the extra pixel offset into the actual data i.e. data[i+rgb]
offset : fn(s : self ref Sequence, x, y, channel : int) : big;
sample_set : fn(s : self ref Sequence, startframe, endframe : big, x, y, channel : int) : ref Samples;
};
Samples : adt {
frame : big; # last frame read
firstr : int; # start of ring buffer
r : array of real; # ring buffer
offset : big; # housekeeping pointer into ppm data y * width + x
print : fn(s : self ref Samples);
readnext : fn(s : self ref Samples, seq : ref Sequence) : int; # read next sample into ring
advance_to : fn(s : self ref Samples, seq : ref Sequence, frame:big) : int;
in_sequence: fn(s : self ref Samples) : array of real;
};
new_sequence : fn(directory : string) : ref Sequence;
};
|