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

Re: [pygame] Re: Movie module being merged



Well, let me see...

File: _gmovie.c

in stream_component_start
----------------------------------------
if (stream_index < 0 || stream_index >= ic->nb_streams)
    {
        if(threaded)
            GRABGIL
            Py_DECREF(movie);
        if(threaded)
            RELEASEGIL
            return -1;
    }

in stream_component_end
------------------------------------------
if (stream_index < 0 || stream_index >= ic->nb_streams)
    {
        if(threaded)
            GRABGIL
            if(movie->ob_refcnt!=0)
            {
                Py_DECREF(movie);
            }
        if(threaded)
            RELEASEGIL
            return;
    }


____________________
Jussi Toivola



2009/8/26 Tyler Laing <trinioler@xxxxxxxxx>:
> Thanks for the input. Could you tell me which lines you noticed this on?
>
> -Tyler
>
> On Tue, Aug 25, 2009 at 2:01 PM, Jussi Toivola <jtoivola@xxxxxxxxx> wrote:
>>
>> 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
>> >
>
>
>
> --
> Visit my blog at http://oddco.ca/zeroth/zblog
>