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