Author: ArcRiley
Date: 2007-07-05 04:05:35 -0400 (Thu, 05 Jul 2007)
New Revision: 364
Added:
trunk/pysoy/tests/vid_canvas.py
Modified:
trunk/pysoy/src/textures/Video.pxi
Log:
getting closer to a working Video class
Modified: trunk/pysoy/src/textures/Video.pxi
===================================================================
--- trunk/pysoy/src/textures/Video.pxi 2007-07-05 08:02:36 UTC (rev 363)
+++ trunk/pysoy/src/textures/Video.pxi 2007-07-05 08:05:35 UTC (rev 364)
@@ -23,9 +23,19 @@
Renders an Ogg Theora stream to a texture
'''
cdef int _load(self, void *data) :
+ cdef int x, y
cdef ogg.ogg_page *_page
- cdef ogg.yuv_buffer _yuvbuf
+ cdef ogg.yuv_buffer _yuv
cdef ogg.ogg_packet _packet
+ if data == NULL :
+ stdio.printf('done?\n')
+ 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._stage == -1
+ return 0
_page = <ogg.ogg_page *> data
if self._stage == 0 :
ogg.ogg_stream_init(&self._stream, ogg.ogg_page_serialno(_page))
@@ -35,8 +45,9 @@
if self._stage > 0 :
if ogg.ogg_page_granulepos(_page) != 0 :
ogg.theora_decode_init(&self._decode, &self._info)
- self._resize(3, self._squareup(self._info.width),
+ self._resize(1, self._squareup(self._info.width),
self._squareup(self._info.height), 1)
+ stdio.printf('resized\n')
self._stage = 2
ogg.ogg_stream_pagein(&self._stream, _page)
if self._stage == 1 :
@@ -49,14 +60,14 @@
self._stage = -1
return 0
if self._stage == 2 :
- # We're not ready to do anything else yet
- ogg.ogg_stream_clear(&self._stream)
- ogg.theora_info_clear(&self._info)
- ogg.theora_comment_clear(&self._comment)
- ogg.theora_clear(&self._decode)
- self._stage = -1
- return 0
- #ogg.theora_decode_YUVout(&self._td,&yuv);
+ # Theora frames are 1:1 with Ogg packets, but packets != pages
+ while ogg.ogg_stream_packetout(&self._stream, &_packet) :
+ ogg.theora_decode_packetin(&self._decode, &_packet)
+ # _time=theora_granule_time(&self._decode, self._decode.granulepos)
+ ogg.theora_decode_YUVout(&self._decode, &_yuv)
+ for y from 0 <= y < _yuv.y_height :
+ for x from 0 <= x < _yuv.y_width :
+ self._texels[(y*self._width)+x] = _yuv.y[(_yuv.y_stride*y)+x]
return 1
cdef int _save(self, void *data) :
Copied: trunk/pysoy/tests/vid_canvas.py (from rev 345,
trunk/pysoy/tests/tex_canvas.py)
===================================================================
--- trunk/pysoy/tests/vid_canvas.py (rev 0)
+++ trunk/pysoy/tests/vid_canvas.py 2007-07-05 08:05:35 UTC (rev 364)
@@ -0,0 +1,15 @@
+#!/usr/bin/env python
+
+import soy
+from time import sleep
+
+vid = soy.transports.File('changeworld.ogg')['video']
+
+scr = soy.Screen()
+win = soy.Window(scr, 'Video Canvas')
+win.background.hex = '#fff'
+can = soy.widgets.Canvas(win, size=(300,220), position=(10,10), texture=vid)
+
+if __name__ == '__main__' :
+ while True:
+ sleep(10)
_______________________________________________
PySoy-SVN mailing list
[email protected]
http://www.pysoy.org/mailman/listinfo/pysoy-svn