Author: ArcRiley
Date: 2007-07-07 19:08:36 -0400 (Sat, 07 Jul 2007)
New Revision: 406

Modified:
   trunk/pysoy/src/textures/Texture.pxi
   trunk/pysoy/src/textures/Video.pxi
   trunk/pysoy/src/transports/Transport.pxi
   trunk/pysoy/src/transports/soy.transports.pxd
Log:
Ticket #275 - Ogg Theora (and eventually other codecs) now loop


Modified: trunk/pysoy/src/textures/Texture.pxi
===================================================================
--- trunk/pysoy/src/textures/Texture.pxi        2007-07-07 13:43:57 UTC (rev 
405)
+++ trunk/pysoy/src/textures/Texture.pxi        2007-07-07 23:08:36 UTC (rev 
406)
@@ -67,6 +67,7 @@
     def __get__(self) :
       return <char *> self._texels
 
+
   cdef void _bind(self) :
     if self._textureTarget == gl.GL_TEXTURE_1D :
       gl.glEnable(gl.GL_TEXTURE_1D)
@@ -144,7 +145,8 @@
       self._textureTarget = gl.GL_TEXTURE_3D
     if _size :
       if self._width :
-        self._texels = <gl.GLubyte *> py.PyMem_Realloc(self._texels, _size)
+        if self._chans*self._width*self._height*self._depth != _size :
+          self._texels = <gl.GLubyte *> py.PyMem_Realloc(self._texels, _size)
       else :
         self._texels = <gl.GLubyte *> py.PyMem_Malloc(_size)
     self._chans  = c

Modified: trunk/pysoy/src/textures/Video.pxi
===================================================================
--- trunk/pysoy/src/textures/Video.pxi  2007-07-07 13:43:57 UTC (rev 405)
+++ trunk/pysoy/src/textures/Video.pxi  2007-07-07 23:08:36 UTC (rev 406)
@@ -32,7 +32,7 @@
     cdef timeval         _tv
     cdef double          _start  # for benchmarking
     if data == NULL :
-      stdio.printf('done?\n')
+      stdio.printf('done decoding.\n')
       if self._stage > 0 :
         ogg.ogg_stream_clear(&self._stream)
         ogg.theora_info_clear(&self._info)
@@ -41,6 +41,21 @@
       self._stage == -1
       return 0
     _page = <ogg.ogg_page *> data
+    #
+    # For Chaining/Looping
+    if ogg.ogg_page_bos(_page) :
+      if self._stage > 0 :
+        ogg.ogg_stream_clear(&self._stream)
+        ogg.theora_info_clear(&self._info)
+        ogg.theora_comment_clear(&self._comment)
+        ogg.theora_clear(&self._decode)
+        self._startTime = self._startTime + self._frameTime
+        self._frameTime = 0
+      else :
+        gettimeofday(&_tv, NULL)
+        self._startTime = _tv.tv_sec + ( <double> _tv.tv_usec / 1000000.0 )
+      self._stage = 0
+    #
     # Read Page 0
     if self._stage == 0 :
       ogg.ogg_stream_init(&self._stream, ogg.ogg_page_serialno(_page))
@@ -72,8 +87,6 @@
                            <float> self._info.aspect_denominator )
       else :
         ogg.theora_decode_init(&self._decode, &self._info)
-        gettimeofday(&_tv, NULL)
-        self._startTime = _tv.tv_sec + ( <double> _tv.tv_usec / 1000000.0 )
         self._stage = 2
     if self._stage == 2 :
       # Theora frames are 1:1 with Ogg packets, but packets != pages

Modified: trunk/pysoy/src/transports/Transport.pxi
===================================================================
--- trunk/pysoy/src/transports/Transport.pxi    2007-07-07 13:43:57 UTC (rev 
405)
+++ trunk/pysoy/src/transports/Transport.pxi    2007-07-07 23:08:36 UTC (rev 
406)
@@ -24,7 +24,7 @@
 
     This class provides the basic data stream parsing for all transports.
   '''
-  def __init__(self, path, *args, **keywords) :
+  def __init__(self, path, loop=1, *args, **keywords) :
     cdef char _magic[4]
     cdef soy._internals.Children _transports
     self._objs = <Stored *> py.PyMem_Malloc(sizeof(Stored) * 4)
@@ -35,6 +35,7 @@
         self._vers = -1
       else :
         if _magic[:4] == 'OggS' :
+          self._loop = loop
           self._headOgg()
         #elif _magic == 'Soy0' :
         else :
@@ -196,7 +197,12 @@
       i = self._findSrno(_sn)
       if i >= 0 :
         (<soy._internals.Loadable> self._objs[i].object)._load(&_page)
-        
+    else :
+      if self._loop :
+        self._rewind()
+      else :
+        self._mode = 0
+    
 
   cdef int _readOggPage(self, ogg.ogg_page *_oggPage) :
     cdef char *_buffer

Modified: trunk/pysoy/src/transports/soy.transports.pxd
===================================================================
--- trunk/pysoy/src/transports/soy.transports.pxd       2007-07-07 13:43:57 UTC 
(rev 405)
+++ trunk/pysoy/src/transports/soy.transports.pxd       2007-07-07 23:08:36 UTC 
(rev 406)
@@ -37,6 +37,7 @@
   cdef int                     _nobj
   cdef int                     _vers      # <-9=error, -1=empty, 0=ogg, >0=soy
   cdef int                     _mode      # 0 = idle, 1 = load, 2 = save
+  cdef int                     _loop      # for Ogg, loop playback
   cdef ogg.ogg_sync_state      _sync
   #
   # General Functions

_______________________________________________
PySoy-SVN mailing list
[email protected]
http://www.pysoy.org/mailman/listinfo/pysoy-svn

Reply via email to