@@ -48,6 +48,7 @@ def usage():
4848 print '-M value : monochrome tresholded with value'
4949 print '-f : Capture fields (instead of frames)'
5050 print '-n number : Capture this many frames (default 60)'
51+ print '-N memsize : Capture frames fitting in this many kbytes'
5152 print 'moviefile : here goes the movie data (default film.video)'
5253
5354def help ():
@@ -75,10 +76,11 @@ def main():
7576 greybits = 0
7677 monotreshold = - 1
7778 fields = 0
78- number = 60
79+ number = 0
80+ memsize = 0
7981
8082 try :
81- opts , args = getopt .getopt (sys .argv [1 :], 'ar:w:dg:mM:Gfn:' )
83+ opts , args = getopt .getopt (sys .argv [1 :], 'ar:w:dg:mM:Gfn:N: ' )
8284 except getopt .error , msg :
8385 sys .stdout = sys .stderr
8486 print 'Error:' , msg , '\n '
@@ -117,11 +119,24 @@ def main():
117119 fields = 1
118120 elif opt == '-n' :
119121 number = string .atoi (arg )
122+ elif opt == '-N' :
123+ memsize = string .atoi (arg )
124+ if 0 < memsize < 1024 :
125+ memsize = memsize * 1024
126+ if 0 < memsize < 1024 * 1024 :
127+ memsize = memsize * 1024
128+ print 'memsize' , memsize
120129 except string .atoi_error :
121130 sys .stdout = sys .stderr
122131 print 'Option' , opt , 'requires integer argument'
123132 sys .exit (2 )
124133
134+ if number <> 0 and memsize <> 0 :
135+ sys .stderr .write ('-n and -N are mutually exclusive\n ' )
136+ sys .exit (2 )
137+ if number == 0 and memsize == 0 :
138+ number = 60
139+
125140 if not fields :
126141 print '-f option assumed until somebody fixes it'
127142 fields = 1
@@ -180,7 +195,9 @@ def main():
180195 gl .winconstraints ()
181196 x , y = gl .getsize ()
182197 print x , 'x' , y
183-
198+ if memsize :
199+ number = calcnumber (x , y , grey or mono , memsize )
200+ print number , 'frames'
184201 v .SetSize (x , y )
185202
186203 if drop :
@@ -215,6 +232,9 @@ def main():
215232 # Window resize (or move)
216233 x , y = gl .getsize ()
217234 print x , 'x' , y
235+ if memsize :
236+ number = calcnumber (x , y , grey or mono , memsize )
237+ print number , 'frames'
218238 v .SetSize (x , y )
219239 v .BindGLWindow (win , SV .IN_REPLACE )
220240 elif dev in (DEVICE .ESCKEY , DEVICE .WINQUIT , DEVICE .WINSHUT ):
@@ -224,6 +244,14 @@ def main():
224244 break
225245
226246
247+ def calcnumber (x , y , grey , memsize ):
248+ pixels = x * y
249+ pixels = pixels / 2 # XXX always assume fields
250+ if grey : n = memsize / pixels
251+ else : n = memsize / (4 * pixels )
252+ return max (1 , n )
253+
254+
227255# Record until the mouse is released (or any other GL event)
228256# XXX audio not yet supported
229257
@@ -318,11 +346,22 @@ def record(v, info, filename, audiofilename, \
318346 nskipped = 0
319347 realframeno = 0
320348 tpf = 1000 / 50.0 #XXXX
349+ # Trying to find the pattern in frame skipping
350+ okstretch = 0
351+ skipstretch = 0
321352 for frameno in range (0 , number * 2 ):
322353 if frameno <> 0 and \
323354 bitvec [frameno ] == bitvec [frameno - 1 ]:
324355 nskipped = nskipped + 1
356+ if okstretch :
357+ print okstretch , 'ok' ,
358+ okstretch = 0
359+ skipstretch = skipstretch + 1
325360 continue
361+ if skipstretch :
362+ print skipstretch , 'skipped'
363+ skipstretch = 0
364+ okstretch = okstretch + 1
326365 #
327366 # Save field.
328367 # XXXX Works only for fields and top-to-bottom
@@ -337,9 +376,11 @@ def record(v, info, filename, audiofilename, \
337376 elif mono :
338377 field = imageop .dither2mono ( \
339378 field , len (field ), 1 )
340- vout .writeframe (int (realframeno * tpf ), field , None )
341379 realframeno = realframeno + 1
342- print 'Skipped' ,nskipped ,'duplicate frames'
380+ vout .writeframe (int (realframeno * tpf ), field , None )
381+ print okstretch , 'ok' ,
382+ print skipstretch , 'skipped'
383+ print 'Skipped' , nskipped , 'duplicate frames'
343384 vout .close ()
344385
345386 gl .wintitle ('(done) ' + filename )
0 commit comments