VFile.py: fix bogus getrandomframe().
Vedit.py, VeditForm.fd: added scroll bar, Trunc, layout rearrangement.
Viewer.py: added random access, qinfo() function.
diff --git a/Demo/sgi/video/Viewer.py b/Demo/sgi/video/Viewer.py
index 2a7b2eb..2b9607b 100755
--- a/Demo/sgi/video/Viewer.py
+++ b/Demo/sgi/video/Viewer.py
@@ -5,16 +5,17 @@
class InputViewer:
- def init(self, filename, title, qsize):
+ def init(self, filename, title, *args):
try:
self.vin = VFile.VinFile().init(filename)
except (EOFError, VFile.Error):
raise IOError, 'bad video input file'
+ self.vin.warmcache()
if not title:
title = os.path.split(filename)[1]
self.filename = filename
self.title = title
- self.qsize = qsize
+ self.qsize = len(self.vin.index)
gl.foreground()
gl.prefsize(self.vin.width, self.vin.height)
self.wid = -1
@@ -39,27 +40,7 @@
gl.winset(self.wid)
gl.clear()
self.vin.initcolormap()
- self.queue = []
self.qindex = 0
- self.lost = 0
- self.lastt = 0
- self.eofread = 0
-
- # Internal
- def fillq(self):
- if self.qindex < len(self.queue) or self.eofread: return
- try:
- t, d, cd = self.vin.getnextframe()
- except EOFError:
- self.eofread = 1
- return
- dt = t - self.lastt
- self.lastt = t
- self.queue.append(dt, d, cd)
- while len(self.queue) > self.qsize:
- del self.queue[0]
- self.qindex = self.qindex - 1
- self.lost = self.lost + 1
def show(self):
if self.wid < 0:
@@ -68,12 +49,11 @@
self.wid = gl.winopen(self.title)
gl.clear()
self.vin.initcolormap()
- self.fillq()
gl.winset(self.wid)
- if self.qindex >= len(self.queue):
+ if self.qindex >= self.qsize:
self.vin.clear()
return
- dt, d, cd = self.queue[self.qindex]
+ dt, d, cd = self.vin.getrandomframe(self.qindex)
self.vin.showframe(d, cd)
def redraw(self, wid):
@@ -84,13 +64,16 @@
self.show()
def get(self):
- if self.qindex >= len(self.queue):
- self.fillq()
- if self.eofread:
- return None
- item = self.queue[self.qindex]
+ if self.qindex >= self.qsize:
+ return None
+ if self.qindex > 0:
+ prevt, ds, cs = \
+ self.vin.getrandomframeheader(self.qindex-1)
+ else:
+ prevt = 0
+ t, data, cdata = self.vin.getrandomframe(self.qindex)
self.qindex = self.qindex + 1
- return item
+ return t-prevt, data, cdata
def backup(self):
if self.qindex == 0:
@@ -98,11 +81,20 @@
self.qindex = self.qindex - 1
return 1
+ def seek(self, i):
+ if not 0 <= i <= self.qsize:
+ return 0
+ self.qindex = i
+ return 1
+
def tell(self):
- return self.lost + self.qindex
+ return self.qindex
def qsizes(self):
- return self.qindex, len(self.queue) - self.qindex
+ return self.qindex, self.qsize - self.qindex
+
+ def qinfo(self):
+ return 0, self.qindex, self.qsize
class OutputViewer:
@@ -206,12 +198,33 @@
while len(self.queue) > self.qsize:
self.flushq()
+ def seek(self, i):
+ i = i - self.written
+ if not 0 <= i <= len(self.queue) + len(self.spares):
+ return 0
+ while i < len(self.queue):
+ if not self.backup():
+ return 0
+ while i > len(self.queue):
+ if not self.forward():
+ return 0
+ return 1
+
+ def trunc(self):
+ del self.spares[:]
+
def tell(self):
return self.written + len(self.queue)
def qsizes(self):
return len(self.queue), len(self.spares)
+ def qinfo(self):
+ first = self.written
+ pos = first + len(self.queue)
+ last = pos + len(self.spares)
+ return first, pos, last
+
def test():
import sys