Copyright (C) 1994, Digital Equipment Corp.
by Steve Freeman
MODULE; IMPORT Axis, IO, JVDecomp, JVSink, Rect, Region, Stdio, VBT, VBTClass; REVEAL T = Public BRANDED OBJECT width : INTEGER; height : INTEGER; fixedSize : BOOLEAN; statistics : JVDecomp.Statistics := NIL; OVERRIDES init := Init; repaint := Repaint; reshape := Reshape; shape := Shape; setQuality := SetQuality; setSize := SetSize; setMinFrameMSecs := SetMinFrameMSecs; setSynchronous := SetSynchronous; setFixedSize := SetFixedSize; getDecomp := GetDecomp; getSize := GetSize; setPaused := SetPaused; startStats := StartStats; stopStats := StopStats; getStats := GetStats; END; PROCEDURE VideoVBT Init ( v : T; <*UNUSED*> sourceHost : TEXT; <*UNUSED*> quality : JVSink.Quality; <*UNUSED*> ncolours : CARDINAL; width : CARDINAL; height : CARDINAL; <*UNUSED*> synchronous : BOOLEAN; fixedSize : BOOLEAN; <*UNUSED*> minFrameMSecs: CARDINAL): T = BEGIN v.width := width; v.height := height; v.fixedSize := fixedSize; RETURN v; END Init; PROCEDURERepaint (<*UNUSED*> v: T; <*UNUSED*> READONLY rgn: Region.T) = BEGIN END Repaint; PROCEDUREReshape (v: T; READONLY cd: VBT.ReshapeRec) = BEGIN IF Rect.Congruent(cd.prev, cd.new) OR v.st = NIL THEN (* there's no video work to do *) VBT.Leaf.reshape(v, cd); RETURN; END; IF cd.new = Rect.Empty THEN ELSE LOCK v DO IF NOT v.fixedSize THEN v.width := Rect.HorSize(cd.new); v.height := Rect.VerSize(cd.new); END; END; Start(v); END; VBT.Leaf.reshape(v, cd); END Reshape; PROCEDUREShape (v: T; ax: Axis.T; <*UNUSED*> n: CARDINAL): VBT.SizeRange = VAR res := VBT.DefaultShape; BEGIN IF v.st # NIL THEN LOCK v DO IF v.fixedSize THEN CASE ax OF | Axis.T.Hor => res.pref := v.width; | Axis.T.Ver => res.pref := v.height; END; END; END; END; RETURN res; END Shape; PROCEDURESetQuality (v: T; <*UNUSED*> quality: JVSink.Quality) = BEGIN SetPictureParams (v); END SetQuality; PROCEDURESetSize (v: T; <*UNUSED*> width, height: CARDINAL) = BEGIN SetPictureParams (v); END SetSize; PROCEDURESetMinFrameMSecs (<*UNUSED*> v: T; <*UNUSED*> msecs: CARDINAL) = BEGIN END SetMinFrameMSecs; PROCEDURESetSynchronous (<*UNUSED*> v: T; <*UNUSED*> synchronous: BOOLEAN) = BEGIN END SetSynchronous; PROCEDURESetFixedSize (v: T; fixedSize: BOOLEAN) = BEGIN LOCK v DO v.fixedSize := fixedSize; END; VBT.NewShape(v); END SetFixedSize; PROCEDUREGetDecomp (<*UNUSED*> v: T): JVDecomp.T = BEGIN RETURN NIL; END GetDecomp; PROCEDUREGetSize (v: T; VAR width, height: CARDINAL) = BEGIN LOCK v DO width := v.width; height := v.height; END; END GetSize; PROCEDURESetPaused (<*UNUSED*> v: T; <*UNUSED*> paused : BOOLEAN) = BEGIN END SetPaused; PROCEDUREStartStats (t: T) = BEGIN LOCK t DO IF t.statistics = NIL THEN t.statistics := NEW (JVDecomp.Statistics); END; WITH s = t.statistics DO s.framesStarted := 0; s.framesProcessed := 0; s.timesBlocked := 0; s.cumLatency := 0; END; END; END StartStats; PROCEDUREStopStats (t: T) = BEGIN LOCK t DO t.statistics := NIL; END; END StopStats; PROCEDUREGetStats (t: T): JVDecomp.Statistics = BEGIN RETURN t.statistics; END GetStats; PROCEDURESetPictureParams (v : T) = BEGIN IF NOT v.fixedSize THEN VBT.NewShape(v); ELSE Start(v); END; END SetPictureParams; PROCEDUREStart (<*UNUSED*> v: T) = BEGIN IO.Put ("JVideo not supported\n", Stdio.stderr); END Start; BEGIN END VideoVBT.