gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/ActionExec.cpp server/mo...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/ActionExec.cpp server/mo...
Date: Sat, 05 Aug 2006 18:10:26 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  06/08/05 18:10:26

Modified files:
        .              : ChangeLog 
        server         : ActionExec.cpp movie_def_impl.cpp 
                         sprite_definition.h sprite_instance.cpp 
                         sprite_instance.h 
        server/swf     : ASHandlers.cpp 

Log message:
                * server/ActionExec.cpp: handled case where pc gets far after 
stop_pc
                * server/movie_def_impl.cpp: added comments about assertion in
                  ensure_frame_loaded() for target frame < loaded frame case.
                * server/sprite_definition.h: fixed ensure_frame_loaded() to not
                  proxy to movie_definition but rather always return true 
(includes
                  comment about it)
                * server/sprite_instance.cpp: added FRAMELOAD_CHUNK define to 
load
                  frames in chunks in advance_root(); reintroduced 
ensure_frame_loaded()
                  call in goto_frame()
                * server/sprite_instance.h: added get_loaded_frame() public 
method.
                * server/swf/ASHandlers.cpp: simplified WaitForFrame action 
handlers
                  to use the new sprite_instance::get_loaded_frame() method.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.590&r2=1.591
http://cvs.savannah.gnu.org/viewcvs/gnash/server/ActionExec.cpp?cvsroot=gnash&r1=1.19&r2=1.20
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_def_impl.cpp?cvsroot=gnash&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_definition.h?cvsroot=gnash&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.27&r2=1.28
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.h?cvsroot=gnash&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/gnash/server/swf/ASHandlers.cpp?cvsroot=gnash&r1=1.43&r2=1.44

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.590
retrieving revision 1.591
diff -u -b -r1.590 -r1.591
--- ChangeLog   4 Aug 2006 17:23:49 -0000       1.590
+++ ChangeLog   5 Aug 2006 18:10:26 -0000       1.591
@@ -1,3 +1,18 @@
+2006-08-05 Sandro Santilli <address@hidden>
+
+       * server/ActionExec.cpp: handled case where pc gets far after stop_pc
+       * server/movie_def_impl.cpp: added comments about assertion in
+         ensure_frame_loaded() for target frame < loaded frame case.
+       * server/sprite_definition.h: fixed ensure_frame_loaded() to not
+         proxy to movie_definition but rather always return true (includes
+         comment about it)
+       * server/sprite_instance.cpp: added FRAMELOAD_CHUNK define to load
+         frames in chunks in advance_root(); reintroduced ensure_frame_loaded()
+         call in goto_frame()
+       * server/sprite_instance.h: added get_loaded_frame() public method.
+       * server/swf/ASHandlers.cpp: simplified WaitForFrame action handlers
+         to use the new sprite_instance::get_loaded_frame() method.
+
 2006-08-04 Sandro Santilli <address@hidden>
 
        * server/swf/ASHandlers.cpp: implemented ActionWaitForFrame

Index: server/ActionExec.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/ActionExec.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -r1.19 -r1.20
--- server/ActionExec.cpp       4 Aug 2006 17:23:49 -0000       1.19
+++ server/ActionExec.cpp       5 Aug 2006 18:10:26 -0000       1.20
@@ -207,7 +207,7 @@
        {
                // we need to check at every iteration because
                // an action can be longer then a single byte
-               if ( pc == stop_pc )
+               if ( pc >= stop_pc )
                {
                        log_error("End of DoAction block hit while skipping "
                                " %u action tags - "

Index: server/movie_def_impl.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/movie_def_impl.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- server/movie_def_impl.cpp   4 Aug 2006 15:30:36 -0000       1.16
+++ server/movie_def_impl.cpp   5 Aug 2006 18:10:26 -0000       1.17
@@ -429,11 +429,17 @@
        assert(framenum <= m_frame_count);
 
        // We already loaded that frame...
+       // (could turn into an assertion directly)
        if ( framenum <= m_loading_frame )
        {
                log_msg("Frame %u already loaded (we loaded %u/%u)",
                        framenum, m_loading_frame, m_frame_count);
+
+               // we make this an assertion to catch callers
+               // that might check for this condition themself
+               // rather then rely on this function.
                assert(0);
+
                return true;
        }
 #if 0 // debugging

Index: server/sprite_definition.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_definition.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- server/sprite_definition.h  4 Aug 2006 15:30:36 -0000       1.13
+++ server/sprite_definition.h  5 Aug 2006 18:10:26 -0000       1.14
@@ -330,12 +330,17 @@
        }
 
        /// \brief
-       /// Ensure framenum frames of top-level movie_definition 
-       /// are loaded (not frames of current sprite!)
+       /// Ensure framenum frames of this sprite 
+       /// have been loaded.
        ///
        virtual bool ensure_frame_loaded(size_t framenum)
        {
-               return m_movie_def->ensure_frame_loaded(framenum);
+               /// We load full sprite definitions at once, so
+               /// this function always returns true.
+               log_msg("sprite_definition: ensure_frame_loaded(%u) called (we 
are at %u", framenum, m_frame_count);
+               assert(framenum <= m_frame_count);
+               return true;
+               //return m_movie_def->ensure_frame_loaded(framenum);
        }
 
        /// Return the top-level movie definition

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -b -r1.27 -r1.28
--- server/sprite_instance.cpp  4 Aug 2006 17:23:49 -0000       1.27
+++ server/sprite_instance.cpp  5 Aug 2006 18:10:26 -0000       1.28
@@ -1233,6 +1233,12 @@
        size_t framecount = md->get_frame_count();
        size_t lastloaded = md->get_loading_frame();
        size_t nextframe = lastloaded+1;
+// If != 0 this is the number of frames to load at each iteration
+// of the main loop
+#define FRAMELOAD_CHUNK 0
+#if FRAMELOAD_CHUNK
+       nextframe += FRAMELOAD_CHUNK; // load in chunks of 10 frames 
+#endif
        //log_msg("Framecount: %u, Lastloaded: %u", framecount, lastloaded);
        if ( nextframe <= framecount )
        {
@@ -1470,17 +1476,18 @@
        target_frame_number = iclamp(target_frame_number, 0,
                        m_def->get_frame_count() - 1);
 
-#if 0 // this should only be done if this instance is a movie_instance
-       // target_frame_number is 0-based !
-       if ( ! m_def->ensure_frame_loaded(target_frame_number+1) )
+       size_t loaded_frames = get_loaded_frames();
+       if ( target_frame_number > loaded_frames )
        {
-               log_error("Could not advance to frame %d (for goto_frame).",
-                       target_frame_number+1);
-               // these kind of errors should be handled by callers
-               assert(0);
-       
-       }
+#if 0 // debugging
+               log_msg("loaded frames: %u, target frame number: %u",
+                       loaded_frames, target_frame_number);
 #endif
+               // we might be asking for an already loaded frame
+               // (consider a backward goto and then a forward goto)
+               m_def->ensure_frame_loaded(target_frame_number);
+       }
+
 
        if (target_frame_number < m_current_frame)
        {
@@ -1503,6 +1510,7 @@
                execute_frame_tags(target_frame_number, false);
                //we don't have the concept of a DisplayList update anymore
                //m_display_list.update();
+
        }
 
        m_current_frame = target_frame_number;      

Index: server/sprite_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- server/sprite_instance.h    4 Aug 2006 17:23:49 -0000       1.14
+++ server/sprite_instance.h    5 Aug 2006 18:10:26 -0000       1.15
@@ -127,6 +127,16 @@
                return m_def->get_frame_count();
        }
 
+       /// Return number of completely loaded frames of this sprite/movie
+       //
+       /// Note: the number is also the last frame accessible (frames
+       /// numberes are 1-based)
+       ///
+       size_t get_loaded_frames() const
+       {
+               return m_def->get_loading_frame();
+       }
+
        /// Return total number of bytes in the movie
        /// (not sprite!)
        size_t get_bytes_total() const

Index: server/swf/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/swf/ASHandlers.cpp,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -b -r1.43 -r1.44
--- server/swf/ASHandlers.cpp   4 Aug 2006 17:23:49 -0000       1.43
+++ server/swf/ASHandlers.cpp   5 Aug 2006 18:10:26 -0000       1.44
@@ -663,10 +663,10 @@
                return;
        }
 
-       movie_definition* sd = target_sprite->get_movie_definition();
-
-       if ( sd->get_loading_frame() < framenum )
+       size_t lastloaded = target_sprite->get_loaded_frames();
+       if ( lastloaded < framenum )
        {
+               log_msg("ActionWaitForFrame: frame %u not reached yet (loaded 
%u), skipping next %u actions", framenum, lastloaded, skip);
                // better delegate this to ActionExec
                thread.skip_actions(skip);
        }
@@ -1312,12 +1312,12 @@
                return;
        }
 
-       movie_definition* sd = target_sprite->get_movie_definition();
-
        size_t framenum = target_sprite->get_frame_number(framespec);
 
-       if ( sd->get_loading_frame() < framenum )
+       size_t lastloaded = target_sprite->get_loaded_frames();
+       if ( lastloaded < framenum )
        {
+               log_msg("ActionWaitForFrameExpression: frame %u not reached yet 
(loaded %u), skipping next %u actions", framenum, lastloaded, skip);
                // better delegate this to ActionExec
                thread.skip_actions(skip);
        }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]