http://uploads.ungrounded.net/1000/1448_doughguy.swf
or http://www.newgrounds.com/portal/view/1448
Problem is still there, and the sound is awful (ffmpeg).
|
The test case, http://content.boredmuch.com/flash/568db6323c3109f.swf , is currently missing. Was planning to see if I could reproduce the problem, but this proved to be impossible.
|
cmusick wrote:
> Yes, I saw the tongue spitting, but this doesn't appear
> to be a morphing issue, as far as I can determine.
I tried with FORCE_REDRAW in gui.cpp and it doesn't fix the problem, rather it makes it worst (longer toungue)
|
Yes, much better, but there's still a problem in the first scene, in where the dough seems to spit out its toungue (shouldn't happen).
|
Yes, confirm it's fixed.
|
The SWF here wasn't malformed, but it included some hard edged bitmaps in a morph shape, which wasn't valid until v7. Should be fixed now.
|
More info, the http://content.boredmuch.com/flash/568db6323c3109f.swf case plays
fine with swfdec, so we can look at its code to handle it better.
|
For the record: a couple of testcases for this problem are
already in CVS:
samples/test_shape_tweening.swf
samples/test_shape_tweening-2.swf
Both fail currently (no aborts, just wrong display)
|
mmm... just seen the first testcase (I was using the second one).
In this case my workaround doesn't work very well.
It doesn't abort, but display seems wrong.
Talking about: http://content.boredmuch.com/flash/568db6323c3109f.swf
Reduced testcases are still good.
I changed the bug summary to a more correct wording,
but I won't work on this now. Feel free to jump in anyone.
|
I've provided some handling of the malformation.
Your specific test seems to work fine now, but I don't
have more tests to check if anything broke.
|
The problem seems to be with the start and end shape
not having the same number of paths defined.
First shape has 37 paths.
Last shape has 24 paths.
Number of total edges in the paths is the same (1942).
Could you try reproducing this situation with a smaller
testcase focused on shape morphing ?
Best would be doing this using Ming.
|
valgrind log on the second movie:
==29209== Use of uninitialised value of size 4
==29209== at 0x41801D8: gnash::morph2_character_def::display(gnash::character*) (morph2_character_def.cpp:95)
==29209== by 0x40BFF20: gnash::generic_character::display() (generic_character.h:68)
==29209== by 0x40FB2C9: gnash::DisplayList::display() (dlist.cpp:656)
==29209== by 0x40C5DFD: gnash::sprite_instance::display() (sprite_instance.cpp:2933)
==29209== by 0x40C195A: gnash::movie_root::display() (movie_root.cpp:519)
==29209== by 0x40301B5: gnash::Gui::display(gnash::movie_root*) (gui.cpp:323)
==29209== by 0x40304D3: gnash::Gui::advance_movie(gnash::Gui*) (gui.cpp:385)
==29209== by 0x576E215: (within /usr/lib/libglib-2.0.so.0.1200.9)
==29209== by 0x576DC41: g_main_context_dispatch (in /usr/lib/libglib-2.0.so.0.1200.9)
==29209== by 0x5770C1E: (within /usr/lib/libglib-2.0.so.0.1200.9)
==29209== by 0x5770FC8: g_main_loop_run (in /usr/lib/libglib-2.0.so.0.1200.9)
==29209== by 0x531CF83: gtk_main (in /usr/lib/libgtk-x11-2.0.so.0.1000.9)
==29209==
==29209== Invalid read of size 4
==29209== at 0x41801D8: gnash::morph2_character_def::display(gnash::character*) (morph2_character_def.cpp:95)
==29209== by 0x40BFF20: gnash::generic_character::display() (generic_character.h:68)
==29209== by 0x40FB2C9: gnash::DisplayList::display() (dlist.cpp:656)
==29209== by 0x40C5DFD: gnash::sprite_instance::display() (sprite_instance.cpp:2933)
==29209== by 0x40C195A: gnash::movie_root::display() (movie_root.cpp:519)
==29209== by 0x40301B5: gnash::Gui::display(gnash::movie_root*) (gui.cpp:323)
==29209== by 0x40304D3: gnash::Gui::advance_movie(gnash::Gui*) (gui.cpp:385)
==29209== by 0x576E215: (within /usr/lib/libglib-2.0.so.0.1200.9)
==29209== by 0x576DC41: g_main_context_dispatch (in /usr/lib/libglib-2.0.so.0.1200.9)
==29209== by 0x5770C1E: (within /usr/lib/libglib-2.0.so.0.1200.9)
==29209== by 0x5770FC8: g_main_loop_run (in /usr/lib/libglib-2.0.so.0.1200.9)
==29209== by 0x531CF83: gtk_main (in /usr/lib/libgtk-x11-2.0.so.0.1000.9)
==29209== Address 0x45A3A980 is not stack'd, malloc'd or (recently) free'd
==29209==
==29209== Process terminating with default action of signal 11 (SIGSEGV): dumping core
==29209== Access not within mapped region at address 0x45A3A980
==29209== at 0x41801D8: gnash::morph2_character_def::display(gnash::character*) (morph2_character_def.cpp:95)
==29209== by 0x40BFF20: gnash::generic_character::display() (generic_character.h:68)
==29209== by 0x40FB2C9: gnash::DisplayList::display() (dlist.cpp:656)
==29209== by 0x40C5DFD: gnash::sprite_instance::display() (sprite_instance.cpp:2933)
==29209== by 0x40C195A: gnash::movie_root::display() (movie_root.cpp:519)
==29209== by 0x40301B5: gnash::Gui::display(gnash::movie_root*) (gui.cpp:323)
==29209== by 0x40304D3: gnash::Gui::advance_movie(gnash::Gui*) (gui.cpp:385)
==29209== by 0x576E215: (within /usr/lib/libglib-2.0.so.0.1200.9)
==29209== by 0x576DC41: g_main_context_dispatch (in /usr/lib/libglib-2.0.so.0.1200.9)
==29209== by 0x5770C1E: (within /usr/lib/libglib-2.0.so.0.1200.9)
==29209== by 0x5770FC8: g_main_loop_run (in /usr/lib/libglib-2.0.so.0.1200.9)
==29209== by 0x531CF83: gtk_main (in /usr/lib/libgtk-x11-2.0.so.0.1000.9)
|
Just as a followup note, this bug is on a Feisty system. Feisty is the not yet released version of Ubuntu that follows Edgy. (6.10)
|
This file too. Same stack trace.
http://content.boredmuch.com/flash/505e567dd3d0be0.swf
|
gnash CVS randomly crash with that movie (see late for URL). By randomly, I mean that sometime it does, sometime it does not. But the stack trace is consistent.
The file is there:
http://content.boredmuch.com/flash/568db6323c3109f.swf
gdb stack trace:
#0 gnash::morph2_character_def::display (this=0x822a8c0, inst=0x847e360) at ../../../../gnash/server/parser/morph2_character_def.cpp:95
#1 0x400b8f21 in gnash::generic_character::display (this=0x847e360) at ../../../gnash/server/generic_character.h:68
#2 0x400f42ca in gnash::DisplayList::display (this=0x81bd924) at ../../../gnash/server/dlist.cpp:656
#3 0x400bedfe in gnash::sprite_instance::display (this=0x81bd868) at ../../../gnash/server/sprite_instance.cpp:2933
#4 0x400ba95b in gnash::movie_root::display (this=0x81c0fb0) at ../../../gnash/server/movie_root.cpp:519
#5 0x400291b6 in gnash::Gui::display (this=0x8051278, m=0x81c0fb0) at ../../../gnash/gui/gui.cpp:323
#6 0x400294d4 in gnash::Gui::advance_movie (gui=0x8051278) at ../../../gnash/gui/gui.cpp:385
Compiler is gcc 4.1.2. Linux Ubuntu Feisty.
|