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

Re: [pygame] Re: Movie module being merged



Hi,
not sure if this is related. GIL trouble anyway. Noticed this while I
was tinkering with ffmpeg for Symbian. It's probably too slow on the
phones, but I just want to see if I get it working... Anyway, there
are several lines like this one:
...
  if(threaded)
        GRABGIL
...
  if(threaded)
        RELEASEGIL
...

Might seem like nothing wrong, but once the preprocessor expands those macros:

if(threaded)    // GRABGIL
   PyEval_AcquireLock();
   _oldtstate = PyThreadState_Swap(movie->_tstate);

The PyThreadState_Swap is called even if 'threaded' is false, without
acquiring the lock, causing a crash. I suggest always using curly
braces with 'if' :) Hopefully this helps.

____________________
Jussi Toivola



2009/8/22 Tyler Laing <trinioler@xxxxxxxxx>:
> "tstate mix-up". I've looked, and there are no Python calls done without
> having the GIL. Like I said, its an extremely weird bug. It also occurs if
> you do five play throughs(play(0)) sequentially.
>
> -Tyler
>
> On Fri, Aug 21, 2009 at 6:11 PM, Lenard Lindstrom <len-l@xxxxxxxxx> wrote:
>>
>> Hi,
>>
>> Is it always a "tstate mix-up". If so, then it is likely a threading
>> problem. Absolutely no Python api calls should be made while the GIL is
>> released. If not then probably a memory problem.
>>
>> Lenard
>>
>> Tyler Laing wrote:
>>>
>>> Yeah I know about that. Its because of everything that is done to the
>>> video file in the example code. Its a very hard error to pindown. Sometimes
>>> it happens during debugging, sometimes not. It happens on various kinds of
>>> videos, so its not format dependent, and it only happens after stopping and
>>> restarting, and adding surfaces. I haven't found it happening any other way.
>>>
>>> Thanks for the feedback.
>>>
>>> -Tyler
>>>
>>> On Thu, Aug 20, 2009 at 2:05 PM, Lenard Lindstrom <len-l@xxxxxxxxx
>>> <mailto:len-l@xxxxxxxxx>> wrote:
>>>
>>>    Hi,
>>>
>>>    It builds and installs in Debian lenny now. The __movie_test.py
>>>    even works for the most part, though fails at the end with this error:
>>>
>>>    Unpausing...
>>>    True
>>>    True
>>>    Stopping..., sleeping for 3 seconds
>>>    Playing again...
>>>    done restart play...
>>>    Surface time...
>>>    ValueError: surface does not have the same aspect ratio as the
>>>    video. This would cause surface corruption.
>>>    Fatal Python error: ceval: tstate mix-up
>>>    Aborted
>>>
>>>    I was playing an .flv file, so maybe that had something to do with it.
>>>
>>>    Lenard
>>>
>>>    Tyler Laing wrote:
>>>
>>>        Fixed that, sorry. I should have done an else, but I did an
>>>        endif >.>
>>>
>>>        -Tyler
>>>
>>>        On Thu, Aug 20, 2009 at 1:09 PM, Lenard Lindstrom
>>>        <len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>
>>>        <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>> wrote:
>>>
>>>           Hi Tyler,
>>>
>>>           It is finding the headers, but now I am getting this
>>>        compiler error:
>>>
>>>           gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall
>>>           -Wstrict-prototypes -fPIC -D_REENTRANT -I/usr/X11R6/include
>>>           -I/usr/include/SDL -I/usr/include/ffmpeg -I/usr/include/ffmpeg
>>>           -I/usr/include/SDL -I/usr/include/python2.5 -c src/_gmovie.c -o
>>>           build/temp.linux-i686-2.5/src/_gmovie.o
>>>
>>>           src/_gmovie.c: In function ‘video_image_display’:
>>>           src/_gmovie.c:516: warning: unused variable ‘_oldtstate’
>>>           src/_gmovie.c: In function ‘queue_picture’:
>>>           src/_gmovie.c:826: warning: unused variable ‘_oldtstate’
>>>           src/_gmovie.c: In function ‘stream_open’:
>>>           src/_gmovie.c:1482: warning: unused variable
>>>        ‘wanted_subti_stream’
>>>
>>>           src/_gmovie.c: In function ‘video_render’:
>>>           src/_gmovie.c:2444: error: ‘AVCodecContext’ has no member named
>>>           ‘reordered_opaque’
>>>
>>>           error: command 'gcc' failed with exit status 1
>>>           l
>>>
>>>           Here is the version information returned by ffmpeg:
>>>
>>>           $/usr/bin/ffmpeg
>>>           FFmpeg version r11872+debian_0.svn20080206-17+lenny1, Copyright
>>>           (c) 2000-2008 Fabrice Bellard, et al.
>>>            configuration: --enable-gpl --enable-libfaad --enable-pp
>>>           --enable-swscaler --enable-x11grab --prefix=/usr
>>>        --enable-libgsm
>>>           --enable-libtheora --enable-libvorbis --enable-pthreads
>>>           --disable-strip --enable-libdc1394 --disable-armv5te
>>>           --disable-armv6 --disable-altivec --disable-vis --enable-shared
>>>           --disable-static
>>>            libavutil version: 49.6.0
>>>            libavcodec version: 51.50.0
>>>            libavformat version: 52.7.0
>>>            libavdevice version: 52.0.0
>>>            built on Apr 28 2009 02:12:01, gcc: 4.3.2
>>>
>>>           Though ffmpeg is statically linked I assume it use the same
>>>           library versions as the share libraries.
>>>
>>>           Lenard
>>>
>>>           Tyler Laing wrote:
>>>
>>>               And I've now committed a fix for throwing exceptions if the
>>>               surface given has the wrong aspect ratio.
>>>
>>>               -Tyler
>>>
>>>               On Thu, Aug 20, 2009 at 9:46 AM, Tyler Laing
>>>               <trinioler@xxxxxxxxx <mailto:trinioler@xxxxxxxxx>
>>>        <mailto:trinioler@xxxxxxxxx <mailto:trinioler@xxxxxxxxx>>
>>>               <mailto:trinioler@xxxxxxxxx
>>>        <mailto:trinioler@xxxxxxxxx> <mailto:trinioler@xxxxxxxxx
>>>        <mailto:trinioler@xxxxxxxxx>>>> wrote:
>>>
>>>                  I have this fixed, with it committed in revision
>>>        2628. I have a
>>>                  custom Dependency class that adds extra directories
>>>        to the
>>>               include
>>>                  search path(like libavformat or ffmpeg). This
>>>        prevents any
>>>                  accidental conflict of namespaces. Let me know if this
>>>               works or not.
>>>
>>>                  -Tyler
>>>
>>>
>>>                  On Tue, Aug 18, 2009 at 5:17 PM, Lenard Lindstrom
>>>               <len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>
>>>        <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>
>>>                  <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>
>>>        <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>>> wrote:
>>>
>>>                      Hi,
>>>
>>>                      No, I don't see any Debian specific predefined
>>>        compiler
>>>                      macros. ffmpeg library information is available
>>>        through
>>>                      pkg-config.
>>>
>>>                      Lenard
>>>
>>>                      Tyler Laing wrote:
>>>
>>>                          Does debian have a unique compile time flag
>>>        I can use?
>>>
>>>                          -Tyler
>>>
>>>                          On Tue, Aug 18, 2009 at 12:09 PM, Lenard
>>>        Lindstrom
>>>                          <len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>
>>>        <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>
>>>               <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>
>>>        <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>>
>>>                          <mailto:len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx> <mailto:len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx>>
>>>               <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>
>>>        <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>>>> wrote:
>>>
>>>                             Hi Tyler,
>>>
>>>                             /usr/include is included in the default
>>>        header
>>>               search
>>>                          paths. What
>>>                             is installed is
>>>        /usr/include/ffmpeg/avformat.h, not
>>>
>>> /usr/include/ffmpeg/libavformat/avformat.h. This
>>>               may be
>>>                          a quirk of
>>>                             the Debian dev package and not the
>>>        general case.
>>>
>>>                             Lenard
>>>
>>>                             Tyler Laing wrote:
>>>
>>>                                 You don't have -l/usr/include
>>>        actually. What
>>>               I will
>>>                          do is add
>>>                                 to the directories searched, for the
>>>        specific
>>>                          libraries to
>>>                                 search in /usr/include/ffmpeg &&
>>>               /usr/include/<relevant
>>>                                 library name> for if people install
>>>        from source.
>>>                          Does that
>>>                                 sound like a good solution?
>>>
>>>                                 -Tyler
>>>
>>>                                 On Tue, Aug 18, 2009 at 9:03 AM, Lenard
>>>               Lindstrom
>>>                                 <len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx> <mailto:len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx>>
>>>               <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>
>>>        <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>>
>>>                          <mailto:len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx> <mailto:len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx>>
>>>               <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>
>>>        <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>>>
>>>                                 <mailto:len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx>
>>>               <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>
>>>        <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>
>>>               <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>>
>>>                          <mailto:len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx> <mailto:len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx>>
>>>               <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>
>>>        <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>>>>> wrote:
>>>
>>>                                    Ok, when I add
>>>
>>>                                    _movie src/_gsound.c src/_gmovie.c
>>>                          src/_gcommand.c src/gmovie.c
>>>                                    $(SDL) $(AVFORMAT) $(SWSCALE) $(MIXER)
>>>               $(DEBUG)
>>>
>>>                                    to Setup I get these build errors:
>>>
>>>
>>>                                    building 'pygame._movie' extension
>>>                                    gcc -pthread -fno-strict-aliasing
>>>        -DNDEBUG -g
>>>                          -fwrapv -O2 -Wall
>>>                                    -Wstrict-prototypes -fPIC -D_REENTRANT
>>>                          -I/usr/X11R6/include
>>>                                    -I/usr/include/SDL -I/usr/include/SDL
>>>                                 -I/usr/include/python2.5 -c
>>>                                    src/_gsound.c -o
>>>                          build/temp.linux-i686-2.5/src/_gsound.o
>>>                                    In file included from
>>>        src/_gsound.c:35:
>>>                                    src/_gsound.h:36:34: error:
>>>                          libavformat/avformat.h: No such
>>>                                 file
>>>                                    or directory
>>>                                    src/_gsound.c: In function
>>>        ‘seekBuffer’:
>>>                                    src/_gsound.c:403: error:
>>>        ‘AV_NOPTS_VALUE’
>>>                          undeclared
>>>                                 (first use
>>>                                    in this function)
>>>                                    src/_gsound.c:403: error: (Each
>>>        undeclared
>>>                          identifier is
>>>                                 reported
>>>                                    only once
>>>                                    src/_gsound.c:403: error: for each
>>>               function it
>>>                          appears in.)
>>>                                    error: command 'gcc' failed with exit
>>>               status 1
>>>
>>>                                    The Debian dev package installs
>>>        avformat.h in
>>>                          ffmpeg, not
>>>                                 libavformat.
>>>
>>>                                    Lenard
>>>
>>>
>>>                                    Lenard Lindstrom wrote:
>>>
>>>                                        Hi René,
>>>
>>>                                        My mistake. I didn't pay
>>>        attention to
>>>               the error.
>>>                                 _movie.so was
>>>                                        not event built since the
>>>        _movie entry is
>>>                          missing in
>>>                                 Setup.in.
>>>                                        I had to manually enter it to
>>>        Setup
>>>               the last
>>>                          time, and that
>>>                                        was clobbered when I reran
>>>        config.py.
>>>
>>>                                        Lenard
>>>
>>>
>>>                                        René Dudfield wrote:
>>>
>>>                                            On Tue, Aug 18, 2009 at
>>>        4:47 PM,
>>>               Lenard
>>>                                            Lindstrom<len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx>
>>>               <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>
>>>                          <mailto:len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx> <mailto:len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx>>>
>>>               <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>
>>>        <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>
>>>                          <mailto:len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx> <mailto:len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx>>>>
>>>                                 <mailto:len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx>
>>>               <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>
>>>        <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>
>>>               <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>>
>>>                          <mailto:len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx> <mailto:len-l@xxxxxxxxx
>>>        <mailto:len-l@xxxxxxxxx>>
>>>               <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>
>>>        <mailto:len-l@xxxxxxxxx <mailto:len-l@xxxxxxxxx>>>>>> wrote:
>>>
>>>                                                Hi Tyler,
>>>
>>>                                                The module now builds,
>>>        but the
>>>                          _movie_test.py unit
>>>                                                tests fail:
>>>
>>>                                                ERROR:
>>>        MovieTypeTest.test_height
>>>
>>>  ----------------------------------------------------------------------
>>>                                                Traceback (most recent
>>>        call
>>>               last):
>>>                                                File
>>>
>>>  "/home/lenard/.local/lib/python2.5/site-packages/pygame/tests/_movie_test.py",
>>>
>>>                                                line 125, in test_height
>>>                                                movie =
>>>        gmovie.Movie(movie_file)
>>>                                                AttributeError: 'NoneType'
>>>               object has no
>>>                                 attribute 'Movie'
>>>
>>>                                                If "movie_file" is missing
>>>               shouldn't
>>>                          gmovie.Movie
>>>                                                raise an exception?
>>>
>>>                                                Lenard
>>>
>>>
>>>                                            hi,
>>>
>>>                                            check out the try/except
>>>        at the
>>>               top of
>>>                          that test...
>>>                                 maybe
>>>                                            it is
>>>                                            raising an exception, and
>>>               catching it.
>>>
>>>                                            that try/except was added
>>>        to try
>>>               and get
>>>                          the build
>>>                                 bot to
>>>                                            build again.
>>>
>>>                                            cheers,
>>>
>>>
>>>
>>>
>>>
>>>
>>>                                 --        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
>>>
>>>
>>>
>>>
>>>               --        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
>>
>
>
>
> --
> Visit my blog at http://oddco.ca/zeroth/zblog
>