[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] SDL_ffmpeg vs ffmpeg



Sorry, I don't know how to synch up sound and image. Pyame uses SDL_mixer, which is a wrapper for sound support in SDL. I suppose smpeg takes care of sound internally. And one has to be careful using SDL directly if SDL_mixer is used. But I am unsure of the details. It may just be a matter of not directly initializing sound support in SDL if using SDL_mixer.

Lenard

Tyler Laing wrote:
Lenard,

Thanks for the advice and info. :) It looks like by default the pygame surfaces don't support YUV, but overlays do. The simple case will use the overlay module, via c, to play the movie. This is more than suitable for 90% of usecases, and will be transparent to most people. It also benefits from hardware acceleration.

For the other 10% of stuff that people want to do, it looks like a bit of a tougher technical challenge. I like Rene's idea of separate and manipulatable streams, which allows for some neat stuff to be done. If I use the ffmpeg api directly, then I am able to do this. Via ffmovie or ffplay, it is not possible. Do you have any information for how to do sound, any reccomendations on where to look? I'm already beginning to look at mixer.c for how it is done, via SDL.

-Tyler

On Thu, May 7, 2009 at 10:20 AM, Lenard Lindstrom <len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>> wrote:

    I have built the movie module for both Windows and Linux. It is
    included in the Windows distribution. movieext.c was a first
    attempt at using SDL_ffmpeg. I don't know about sdl surfaces and
    YUV, but the overlay.py example program does try to play a movie
    using YUV. Unfortunately it rejects the only pgm file in the
    examples/data directory so I have not gotten it to work. I only
    know about overlay because I have recently updated the module to
    Python 3. So I don't know if it will be of any help.

    Lenard

    Tyler Laing wrote:

        Hi Lenard,

        I'm looking at the movie module now. Are we compiling movie.c
        or movieext.c? I didn't think of the overlay module, I'll look
        at that as well, thanks. :) So thats a no, on sdl surfaces
        being able to playback YUV?

        And yes, it looks like smpeg does a direct copy to display.

        On Thu, May 7, 2009 at 9:36 AM, Lenard Lindstrom
        <len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>
        <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>> wrote:

           Hi Tyler,

           My opinion is the few dependencies the better. If
        SDL_ffmpeg can
           be left out that would be good. As for YUV playback have
        you had a
           look at the overlay module? It may be what is needed. Also, did
           you look at the existing movie module? Maybe smpeg does direct
           copy to display so it may not be a useful source of ideas
        in this
           case.

           Lenard



           Tyler Laing wrote:

               Hello all,

               I've been looking at SDL_ffmpeg and ffmpeg.

               There are some considerations for choosing each.
        SDL_ffmpeg is
               fairly simple to interact with, load, play, pause a
        movie. You
               can interact with each frame, and so on. However,
        SDL_ffmpeg
               converts every frame from YUV to RGB, to make it easier
        on the
               programmers to use image manipulation functions and so on.
               This is a performance hit, for sure. Considering Python's
               reputation already for being slow, having a movie
        module take
               that kind of hit will result in a further stain to the
               reputation, when sometimes, rarely, movies stutter or pause
               when they shouldn't. It can take a long time to recover
        from a
               negative reputation.

               For ffmpeg, it offers much the same capability, but without
               the SDL conveniences. It does offer far more capability
        with
               movie files than SDL_ffmpeg does though. I think, but
        I'm not
               sure, that the pygame surfaces do not need to have the
        frames
               of the movie be in YUV format? Or its a quick operation to
               convert the surface for YUV then back to RGB. Something
        like
               that, correct me if I'm wrong. So we don't need every
        frame to
               be converted to RGB, except when we do need it.

               If I went with ffmpeg, I was considering a design where we
               explicitly convert the movie from YUV to RGB, with a simple
               convert function. From the point its called, to the
        point it
               is called again, the movie is in RGB format. It fits
        with the
               python philosophy that "Explicit is better than implicit."
               (-The Zen of Python, by Tim Peters)

               Personally, I would prefer to work with ffmpeg, because
        of the
               greater functionality, and the lack of conversion
        performance hit.

               -Tyler

               --        Visit my blog at http://oddco.ca/zeroth/zblog





-- Visit my blog at http://oddco.ca/zeroth/zblog





--
Visit my blog at http://oddco.ca/zeroth/zblog