[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/character.h server/movie...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/character.h server/movie... |
Date: |
Fri, 04 Aug 2006 15:30:37 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 06/08/04 15:30:36
Modified files:
. : ChangeLog
server : character.h movie_def_impl.cpp movie_def_impl.h
movie_definition.h movie_interface.h
movie_root.cpp movie_root.h sprite_definition.h
sprite_instance.cpp sprite_instance.h
Log message:
* server/character.h, server/movie_def_impl.cpp,
server/movie_def_impl.h, server/movie_definition.h,
server/movie_interface.h, server/movie_root.cpp,
server/movie_root.h, server/sprite_definition.h,
server/sprite_instance.cpp, server/sprite_instance.h:
Fixed more frame number types to be size_t rather then int;
added some doxygen comments; fixed ensure_frame_loaded calls
to not erroneusly using sprite frames rather then movie
frames;
removed ensure_frame_loaded calls from goto_frame (will need
further thinking about it).
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.587&r2=1.588
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.h?cvsroot=gnash&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_def_impl.cpp?cvsroot=gnash&r1=1.15&r2=1.16
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_def_impl.h?cvsroot=gnash&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_definition.h?cvsroot=gnash&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_interface.h?cvsroot=gnash&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.cpp?cvsroot=gnash&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.h?cvsroot=gnash&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_definition.h?cvsroot=gnash&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.25&r2=1.26
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.h?cvsroot=gnash&r1=1.12&r2=1.13
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.587
retrieving revision 1.588
diff -u -b -r1.587 -r1.588
--- ChangeLog 4 Aug 2006 15:20:23 -0000 1.587
+++ ChangeLog 4 Aug 2006 15:30:36 -0000 1.588
@@ -1,5 +1,18 @@
2006-08-04 Sandro Santilli <address@hidden>
+ * server/character.h, server/movie_def_impl.cpp,
+ server/movie_def_impl.h, server/movie_definition.h,
+ server/movie_interface.h, server/movie_root.cpp,
+ server/movie_root.h, server/sprite_definition.h,
+ server/sprite_instance.cpp, server/sprite_instance.h:
+ Fixed more frame number types to be size_t rather then int;
+ added some doxygen comments; fixed ensure_frame_loaded calls
+ to not erroneusly using sprite frames rather then movie frames;
+ removed ensure_frame_loaded calls from goto_frame (will need
+ further thinking about it).
+
+2006-08-04 Sandro Santilli <address@hidden>
+
* testsuite/actionscript.all/Makefile.am: added rule to cleanup
temporary files created by new ming versions.
* server/sprite_instance.cpp (init_builtins): don't init builtins
Index: server/character.h
===================================================================
RCS file: /sources/gnash/gnash/server/character.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- server/character.h 4 Aug 2006 14:45:52 -0000 1.10
+++ server/character.h 4 Aug 2006 15:30:36 -0000 1.11
@@ -207,7 +207,7 @@
return get_relative_target_common(name);
}
- virtual int get_current_frame() const { assert(0); return 0; }
+ virtual size_t get_current_frame() const { assert(0); return 0; }
virtual bool has_looped() const { assert(0); return false; }
virtual void restart() { /*assert(0);*/ }
Index: server/movie_def_impl.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/movie_def_impl.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- server/movie_def_impl.cpp 3 Aug 2006 22:19:59 -0000 1.15
+++ server/movie_def_impl.cpp 4 Aug 2006 15:30:36 -0000 1.16
@@ -382,15 +382,15 @@
log_parse("frame rate = %f, frames = %d\n",
m_frame_rate, m_frame_count);
- // Only load first frame (what if the movie contains 0 frames ?)
- // Other parts of the code will need to call ensure_frame_loaded(#)
- // whenever in need to access a new frame
#if 0
size_t startup_frames = m_frame_count;
#else
+ // Don't load any frame
+ // Other parts of the code will need to call ensure_frame_loaded(#)
+ // whenever in need to access a new frame
size_t startup_frames = 1; // always load first frame (must try w/out)
#endif
- if ( ! ensure_frame_loaded(startup_frames) )
+ if ( startup_frames && ! ensure_frame_loaded(startup_frames) )
{
log_error("Could not load to frame %u !", startup_frames);
return false;
@@ -421,8 +421,29 @@
movie_def_impl::ensure_frame_loaded(size_t framenum)
{
assert(_str.get() != NULL);
+
+ // Don't ask me to load more then available frames !
+ // (this might be due to malformed SWF (header reporting
+ // less frames then available - still, check for it should
+ // be implemented in tag loaders (possibly action executors).
assert(framenum <= m_frame_count);
+ // We already loaded that frame...
+ if ( framenum <= m_loading_frame )
+ {
+ log_msg("Frame %u already loaded (we loaded %u/%u)",
+ framenum, m_loading_frame, m_frame_count);
+ assert(0);
+ return true;
+ }
+#if 0 // debugging
+ else
+ {
+ log_msg("Loading of frame %u requested (we are at %u/%u)",
+ framenum, m_loading_frame, m_frame_count);
+ }
+#endif
+
stream& str=*_str;
// when m_loading_frame is 1 we've read frame 1
while ( m_loading_frame < framenum )
@@ -442,7 +463,11 @@
{
// show frame tag -- advance to the next frame.
log_parse(" show_frame\n");
- m_loading_frame++;
+ ++m_loading_frame;
+#if 0 // debugging
+ log_msg("Loaded frame %u/%u",
+ m_loading_frame, m_frame_count);
+#endif
}
else if (_tag_loaders.get(tag_type, &lf))
{
@@ -467,6 +492,7 @@
log_warning("hit SWF::END before reaching "
"requested frame number %u",
framenum);
+ _loaded_bytes = str.get_position();
return false;
}
@@ -482,6 +508,23 @@
}
}
+ size_t cur_pos = (size_t)str.get_position();
+ //assert( _loaded_bytes < cur_pos )
+ if ( cur_pos < _loaded_bytes )
+ {
+ log_warning("After load of frame %u:\n"
+ " current stream position: %u\n"
+ " _loaded_bytes=%u\n"
+ "(some tag triggered a seek-back?!)",
+ m_loading_frame,
+ cur_pos,
+ _loaded_bytes);
+ }
+ else
+ {
+ _loaded_bytes = cur_pos;
+ }
+
return true;
}
Index: server/movie_def_impl.h
===================================================================
RCS file: /sources/gnash/gnash/server/movie_def_impl.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- server/movie_def_impl.h 3 Aug 2006 22:19:59 -0000 1.13
+++ server/movie_def_impl.h 4 Aug 2006 15:30:36 -0000 1.14
@@ -50,6 +50,7 @@
#include "character_def.h" // for smart_ptr visibility of dtor
#include "bitmap_character_def.h" // for smart_ptr visibility of dtor
#include "resource.h" // for smart_ptr visibility of dtor
+#include "stream.h" // for get_bytes_loaded
#include <map> // for CharacterDictionary
#include <string>
@@ -195,6 +196,7 @@
size_t m_loading_frame;
int m_loading_sound_stream;
uint32 m_file_length;
+ size_t _loaded_bytes;
jpeg::input* m_jpeg_in;
@@ -220,6 +222,7 @@
m_frame_count(0u),
m_version(0),
m_loading_frame(0u),
+ _loaded_bytes(0u),
m_jpeg_in(0)
{
}
@@ -248,7 +251,29 @@
return m_loading_frame;
}
- uint32 get_file_bytes() const { return m_file_length; }
+#if 0 // renamed to get_bytes_total
+ uint32 get_file_bytes() const {
+ return m_file_length;
+ }
+#endif
+
+ /// Get number of bytes loaded from input stream
+ uint32 get_bytes_loaded() const {
+#if 0 // temporarly disabled because broken
+ uint32 ret = _loaded_bytes;
+#else
+ uint32 ret = m_file_length;
+#endif
+ log_msg("get_bytes_loaded returning %u (loaded frame: %u/%u)",
+ ret, m_loading_frame, m_frame_count);
+ return ret;
+ }
+
+ /// Get total number of bytes in input stream
+ uint32 get_bytes_total() const {
+ log_msg("get_bytes_total returning %u", m_file_length);
+ return m_file_length;
+ }
/// Returns DO_CREATE_BITMAPS if we're supposed to
/// initialize our bitmap infos, or DO_NOT_INIT_BITMAPS
@@ -408,7 +433,8 @@
virtual const std::vector<execute_tag*>* get_init_actions(size_t
frame_number)
{
- ensure_frame_loaded(frame_number);
+ assert(frame_number <= m_loading_frame);
+ //ensure_frame_loaded(frame_number);
return &m_init_action_list[frame_number];
}
Index: server/movie_definition.h
===================================================================
RCS file: /sources/gnash/gnash/server/movie_definition.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- server/movie_definition.h 3 Aug 2006 22:19:59 -0000 1.7
+++ server/movie_definition.h 4 Aug 2006 15:30:36 -0000 1.8
@@ -88,6 +88,9 @@
virtual size_t get_frame_count() const = 0;
virtual float get_frame_rate() const = 0;
+ virtual size_t get_bytes_loaded() const = 0;
+ virtual size_t get_bytes_total() const = 0;
+
/// Create a playable movie instance from a def.
//
/// This calls add_ref() on the movie_interface internally.
Index: server/movie_interface.h
===================================================================
RCS file: /sources/gnash/gnash/server/movie_interface.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- server/movie_interface.h 3 Aug 2006 22:19:59 -0000 1.5
+++ server/movie_interface.h 4 Aug 2006 15:30:36 -0000 1.6
@@ -70,7 +70,7 @@
virtual movie_definition* get_movie_definition() = 0;
/// Frame counts in this API are 0-based (unlike ActionScript)
- virtual int get_current_frame() const = 0;
+ virtual size_t get_current_frame() const = 0;
virtual bool has_looped() const = 0;
virtual void restart() = 0;
Index: server/movie_root.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- server/movie_root.cpp 3 Aug 2006 22:19:59 -0000 1.10
+++ server/movie_root.cpp 4 Aug 2006 15:30:36 -0000 1.11
@@ -220,6 +220,7 @@
{
// GNASH_REPORT_FUNCTION;
+
// if (m_on_event_load_called == false)
// {
// Must do loading events. For child sprites this is
Index: server/movie_root.h
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- server/movie_root.h 3 Aug 2006 22:19:59 -0000 1.9
+++ server/movie_root.h 4 Aug 2006 15:30:36 -0000 1.10
@@ -137,9 +137,21 @@
return m_movie->get_movie_definition();
}
+#if 0 // renamed to get_bytes_total
uint32 get_file_bytes() const {
return m_def->get_file_bytes();
}
+#endif
+
+ /// Get number of bytes loaded from input stream
+ uint32 get_bytes_loaded() const {
+ return m_def->get_bytes_loaded();
+ }
+
+ /// Get total number of bytes in input stream
+ uint32 get_bytes_total() const {
+ return m_def->get_bytes_total();
+ }
virtual void get_url(const char *url) {
// SWFHandlers::ActionGetUrl calls get_url
@@ -155,7 +167,7 @@
virtual void do_something(void *timer);
/// 0-based!!
- int get_current_frame() const {
+ size_t get_current_frame() const {
return m_movie->get_current_frame();
}
Index: server/sprite_definition.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_definition.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- server/sprite_definition.h 3 Aug 2006 22:19:59 -0000 1.12
+++ server/sprite_definition.h 4 Aug 2006 15:30:36 -0000 1.13
@@ -68,6 +68,13 @@
/// A sprite definition consists of a series control tags.
///
/// @param m
+ /// the Top-Level movie_definition this sprite is read
+ /// from (not a sprite_definition!)
+ ///
+ /// @param in
+ /// The stream associated with the sprite. It is assumed
+ /// to be already positioned right before the frame count
+ ///
sprite_definition(movie_definition* m, stream* in);
/// Destructor, releases playlist data
@@ -82,8 +89,8 @@
/// TODO: make it a static member, specific to sprite_definition
SWF::TagLoadersTable& _tag_loaders;
- /// Top-level movie (the one with a character_def)
- /// (or is it just the parent?)
+ /// Top-level movie definition
+ /// (the definition read from SWF stream)
movie_definition* m_movie_def;
/// movie control events for each frame.
@@ -92,7 +99,7 @@
// stores 0-based frame #'s
stringi_hash<size_t> m_named_frames;
- int m_frame_count;
+ size_t m_frame_count;
size_t m_loading_frame;
@@ -105,8 +112,29 @@
return m_frame_count;
}
+ /// \brief
+ /// Return total bytes of the movie from which this sprite
+ /// has been read.
+ ///
+ virtual size_t get_bytes_total() const
+ {
+ return m_movie_def->get_bytes_total();
+ }
+
+ /// \brief
+ /// Return the number of bytes loaded from the stream of the
+ /// the movie from which this sprite is being read.
+ ///
+ virtual size_t get_bytes_loaded() const
+ {
+ return m_movie_def->get_bytes_loaded();
+ }
+
virtual float get_frame_rate() const { return
m_movie_def->get_frame_rate(); }
+
+ // Return number of frames loaded (of current sprite)
virtual size_t get_loading_frame() const { return m_loading_frame; }
+
virtual int get_version() const { return
m_movie_def->get_version(); }
virtual void add_font(int /*id*/, font* /*ch*/)
@@ -302,7 +330,7 @@
}
/// \brief
- /// Ensure framenum frames of parent movie_definition
+ /// Ensure framenum frames of top-level movie_definition
/// are loaded (not frames of current sprite!)
///
virtual bool ensure_frame_loaded(size_t framenum)
@@ -310,6 +338,11 @@
return m_movie_def->ensure_frame_loaded(framenum);
}
+ /// Return the top-level movie definition
+ /// (the definition read from SWF stream)
+ movie_definition* get_movie_definition() {
+ return m_movie_def;
+ }
};
Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -b -r1.25 -r1.26
--- server/sprite_instance.cpp 4 Aug 2006 15:16:10 -0000 1.25
+++ server/sprite_instance.cpp 4 Aug 2006 15:30:36 -0000 1.26
@@ -57,6 +57,7 @@
#include "gnash.h"
#include "Sprite.h"
#include "sprite_instance.h"
+#include "movie_definition.h"
#include "MovieClipLoader.h" // @@ temp hack for loading tests
#include "as_function.h"
#include "text.h"
@@ -203,7 +204,7 @@
}
assert(sprite);
- fn.result->set_int(sprite->get_root()->get_file_bytes());
+ fn.result->set_int(sprite->get_bytes_loaded());
}
static void sprite_get_bytes_total(const fn_call& fn)
@@ -216,7 +217,8 @@
}
assert(sprite);
- fn.result->set_int(sprite->get_root()->get_file_bytes());
+ // @@ horrible uh ?
+ fn.result->set_int(sprite->get_bytes_total());
}
static void sprite_load_movie(const fn_call& fn)
@@ -1163,6 +1165,8 @@
void sprite_instance::advance_sprite(float delta_time)
{
+ //GNASH_REPORT_FUNCTION;
+
// mouse drag.
character::do_mouse_drag();
@@ -1171,12 +1175,13 @@
on_event(event_id::ENTER_FRAME);
}
+ size_t frame_count = m_def->get_frame_count();
+
// Update current and next frames.
if (m_play_state == PLAY)
{
int prev_frame = m_current_frame;
- int frame_count = m_def->get_frame_count();
if ( (m_current_frame + 1) == frame_count && frame_count > 1 )
{
// m_display_list.reset();
@@ -1204,6 +1209,37 @@
// _root movieclip advance
void sprite_instance::advance_root(float delta_time)
{
+ //GNASH_REPORT_FUNCTION;
+
+ assert ( get_root()->get_root_movie() == this );
+
+ // Load one more frame if available (even if not needed for
+ // display of the next one) - this is to use idle time for loading.
+ //
+ // We do this inside advance_root to make sure
+ // it's only for a root sprite (not a sprite defined
+ // by DefineSprite!)
+ //
+ movie_definition* md = get_movie_definition();
+ size_t framecount = md->get_frame_count();
+ size_t lastloaded = md->get_loading_frame();
+ size_t nextframe = lastloaded+1;
+ //log_msg("Framecount: %u, Lastloaded: %u", framecount, lastloaded);
+ if ( nextframe <= framecount )
+ {
+#if 0 // debugging
+ log_msg("Ensure load of frame %u/%u (last loaded is: %u)",
+ nextframe, framecount, lastloaded);
+#endif
+ if ( ! md->ensure_frame_loaded(nextframe) )
+ {
+ log_error("Could not advance to frame %d!",
+ nextframe);
+ // these kind of errors should be handled by callers
+ assert(0);
+ }
+ }
+
m_time_remainder += delta_time;
// Check for the end of frame
@@ -1226,6 +1262,10 @@
m_time_remainder = fmod(m_time_remainder, m_frame_time);
}
+ else
+ {
+ log_msg("no time remained");
+ }
}
// child movieclip advance
@@ -1421,6 +1461,7 @@
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) )
{
@@ -1430,6 +1471,7 @@
assert(0);
}
+#endif
if (target_frame_number < m_current_frame)
{
@@ -1634,7 +1676,7 @@
{
//GNASH_REPORT_FUNCTION;
- int frame_count = m_def->get_frame_count();
+ size_t frame_count = m_def->get_frame_count();
if ( ++m_current_frame >= frame_count )
{
// Loop.
@@ -1646,16 +1688,11 @@
}
}
- // m_current_frame is 0-based !
- if ( ! m_def->ensure_frame_loaded(m_current_frame+1) )
- {
- log_error("Could not advance to frame %d!",
- m_current_frame+1);
- // these kind of errors should be handled by callers
- assert(0);
- }
-
- //log_msg("Frame %d/%d", m_current_frame, frame_count);
+#if 0 // debugging
+ log_msg("Frame %u/%u, bytes %u/%u",
+ m_current_frame, frame_count,
+ get_bytes_loaded(), get_bytes_total());
+#endif
}
/// Find a character hit by the given coordinates.
Index: server/sprite_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- server/sprite_instance.h 3 Aug 2006 22:19:59 -0000 1.12
+++ server/sprite_instance.h 4 Aug 2006 15:30:36 -0000 1.13
@@ -106,6 +106,9 @@
/// Get a pointer to the root sprite
sprite_instance* get_root_movie();
+ /// \brief
+ /// Return the sprite_definition (or movie_definition)
+ /// from which this sprite_instance has been created
movie_definition* get_movie_definition() {
return m_def.get_ptr();
}
@@ -114,7 +117,7 @@
float get_height();
- int get_current_frame() const
+ size_t get_current_frame() const
{
return m_current_frame;
}
@@ -124,6 +127,20 @@
return m_def->get_frame_count();
}
+ /// Return total number of bytes in the movie
+ /// (not sprite!)
+ size_t get_bytes_total() const
+ {
+ return m_def->get_bytes_total();
+ }
+
+ /// Return number of loaded bytes in the movie
+ /// (not sprite!)
+ size_t get_bytes_loaded() const
+ {
+ return m_def->get_bytes_loaded();
+ }
+
/// Stop or play the sprite.
void set_play_state(play_state s)
{
@@ -443,7 +460,11 @@
mouse_state m_mouse_state;
+ /// \brief
+ /// This is either sprite_definition (for sprites defined by
+ /// DefineSprite tag) or movie_def_impl (for the top-level movie).
smart_ptr<movie_definition> m_def;
+
movie_root* m_root;
DisplayList m_display_list;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/character.h server/movie...,
Sandro Santilli <=