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

Reply via email to