Mmm, interesting, according to the documentation, the screen is a surface.
I had tried to render to a surface, but then the image was never displayed
(I had not tried to get the array).  Now that you suggested, I tried again,
I still can't see the video, but the array has information.  I guess I need
to tell the display to render that surface, but I still haven't found how
(I'll take another look).  This is a great advance indeed! Thanks.

Here is my new code:

import pygame, sys
from pygame.locals import *

filepath = "esponja.mpg"
pygame.init()
pygame.mixer.quit()
pygame.surfarray.use_arraytype("numpy")

movie = pygame.movie.Movie(filepath)
w, h = movie.get_size()
size = w, h
screen = pygame.display.set_mode(size)
screen2 = pygame.Surface(size)
movie.set_display(screen2, Rect((0, 0), size))

def play():
  i = 0
  frame_number = 0
  while(1):
    frame_number = movie.render_frame(i)
    frame = pygame.surfarray.array2d(screen2) #copies
    print frame
    ## I also tried by adding a call to display.flip()... I guess that is
not the way, it didn't work
    if frame_number < i:
      break
    i = i + 1
  movie.rewind()

Reply via email to