[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv... |
Date: |
Mon, 17 Sep 2007 12:21:48 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/09/17 12:21:47
Modified files:
. : ChangeLog
server : sprite_instance.cpp
server/parser : BitmapMovieDefinition.cpp
BitmapMovieDefinition.h movie_def_impl.cpp
movie_def_impl.h movie_definition.h
sprite_definition.cpp sprite_definition.h
Log message:
* server/parser/movie_definition.h: changed signature of
get_playlist:
rename to getPlaylist, return by pointer, have the default
implementation return 0.
* server/parser/BitmapMovieDefinition.{cpp,h}: don't build a
dummy
PlayList just for implementing the get_playlist abstract
method,
it's not needed anymore (the default implementation does
fine).
* server/parser/movie_def_impl.{cpp,h}: use a std::map instead
of a
std::vector to contain PlayList of each frame. This reduced
memory
use for movies that don't have actions in *each* frame and
removes
race conditions due to unexpected growth of frames while
parsing
(when number of frames advertised in header doesn't match
number
of SHOWFRAME found in the stream); (add_frame_name): don't
insist
in _frames_loaded being less then advertised frame count.
* server/parser/sprite_definition.{cpp,h}: use a std::map
instead
of a std::vector for PlayList of frames. Cleanup construction
of dynamic sprite definitions now that we don't need to create
a fake PlayList only to store a dummy execute tag.
* server/sprite_instance.cpp: update calls to getPlaylist.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4331&r2=1.4332
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.342&r2=1.343
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/BitmapMovieDefinition.cpp?cvsroot=gnash&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/BitmapMovieDefinition.h?cvsroot=gnash&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/movie_def_impl.cpp?cvsroot=gnash&r1=1.80&r2=1.81
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/movie_def_impl.h?cvsroot=gnash&r1=1.52&r2=1.53
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/movie_definition.h?cvsroot=gnash&r1=1.29&r2=1.30
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/sprite_definition.cpp?cvsroot=gnash&r1=1.19&r2=1.20
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/sprite_definition.h?cvsroot=gnash&r1=1.28&r2=1.29
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4331
retrieving revision 1.4332
diff -u -b -r1.4331 -r1.4332
--- ChangeLog 17 Sep 2007 11:04:17 -0000 1.4331
+++ ChangeLog 17 Sep 2007 12:21:46 -0000 1.4332
@@ -1,3 +1,24 @@
+2007-09-17 Sandro Santilli <address@hidden>
+
+ * server/parser/movie_definition.h: changed signature of get_playlist:
+ rename to getPlaylist, return by pointer, have the default
+ implementation return 0.
+ * server/parser/BitmapMovieDefinition.{cpp,h}: don't build a dummy
+ PlayList just for implementing the get_playlist abstract method,
+ it's not needed anymore (the default implementation does fine).
+ * server/parser/movie_def_impl.{cpp,h}: use a std::map instead of a
+ std::vector to contain PlayList of each frame. This reduced memory
+ use for movies that don't have actions in *each* frame and removes
+ race conditions due to unexpected growth of frames while parsing
+ (when number of frames advertised in header doesn't match number
+ of SHOWFRAME found in the stream); (add_frame_name): don't insist
+ in _frames_loaded being less then advertised frame count.
+ * server/parser/sprite_definition.{cpp,h}: use a std::map instead
+ of a std::vector for PlayList of frames. Cleanup construction
+ of dynamic sprite definitions now that we don't need to create
+ a fake PlayList only to store a dummy execute tag.
+ * server/sprite_instance.cpp: update calls to getPlaylist.
+
2007-09-17 Zou Lunkai <address@hidden>
* server/gnash.h: another code map for proper key handling.
Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.342
retrieving revision 1.343
diff -u -b -r1.342 -r1.343
--- server/sprite_instance.cpp 16 Sep 2007 16:48:13 -0000 1.342
+++ server/sprite_instance.cpp 17 Sep 2007 12:21:47 -0000 1.343
@@ -1930,9 +1930,12 @@
// to properly queue actions back on the global queue.
//
_callingFrameActions=true;
- const PlayList& playlist = m_def->get_playlist(frame_number);
- std::for_each(playlist.begin(), playlist.end(),
+ const PlayList* playlist = m_def->getPlaylist(frame_number);
+ if ( playlist )
+ {
+ std::for_each(playlist->begin(), playlist->end(),
boost::bind(&execute_tag::execute_action, _1, this));
+ }
_callingFrameActions=false;
}
@@ -2438,23 +2441,25 @@
}
}
- const PlayList& playlist = m_def->get_playlist(frame);
-
+ const PlayList* playlist = m_def->getPlaylist(frame);
+ if ( playlist )
+ {
IF_VERBOSE_ACTION(
// Use 1-based frame numbers
log_action(_("Executing " SIZET_FMT " tags in frame "
SIZET_FMT "/" SIZET_FMT " of sprite %s"),
- playlist.size(), frame+1, get_frame_count(),
+ playlist->size(), frame+1, get_frame_count(),
getTargetPath().c_str());
);
- for (PlayList::const_iterator it=playlist.begin(), itEnd=playlist.end();
+ for (PlayList::const_iterator it=playlist->begin(),
itEnd=playlist->end();
it != itEnd; ++it)
{
execute_tag* tag = *it;
if ( typeflags & TAG_DLIST ) tag->execute_state(this);
if ( typeflags & TAG_ACTION ) tag->execute_action(this);
}
+ }
testInvariant();
}
Index: server/parser/BitmapMovieDefinition.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/parser/BitmapMovieDefinition.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- server/parser/BitmapMovieDefinition.cpp 10 Sep 2007 16:53:30 -0000
1.12
+++ server/parser/BitmapMovieDefinition.cpp 17 Sep 2007 12:21:47 -0000
1.13
@@ -84,7 +84,6 @@
// image::rgb size is in pixels
_framesize(0, 0, image->width()*20, image->height()*20),
_framecount(1),
- _playlist(_framecount),
_framerate(12),
_url(url),
_image(image)
Index: server/parser/BitmapMovieDefinition.h
===================================================================
RCS file: /sources/gnash/gnash/server/parser/BitmapMovieDefinition.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- server/parser/BitmapMovieDefinition.h 1 Jul 2007 10:54:33 -0000
1.8
+++ server/parser/BitmapMovieDefinition.h 17 Sep 2007 12:21:47 -0000
1.9
@@ -48,7 +48,6 @@
int _version;
rect _framesize;
size_t _framecount;
- std::vector<PlayList> _playlist;
float _framerate;
std::string _url;
@@ -146,12 +145,6 @@
return new BitmapMovieInstance(this);
}
- virtual const PlayList& get_playlist(size_t frame_number) const
- {
- assert ( frame_number < _playlist.size() );
- return _playlist[frame_number];
- }
-
virtual const std::string& get_url() const {
return _url;
}
Index: server/parser/movie_def_impl.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/parser/movie_def_impl.cpp,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -b -r1.80 -r1.81
--- server/parser/movie_def_impl.cpp 18 Aug 2007 08:05:00 -0000 1.80
+++ server/parser/movie_def_impl.cpp 17 Sep 2007 12:21:47 -0000 1.81
@@ -226,23 +226,33 @@
// Request cancelation of the loading thread
_loadingCanceled = true;
- // Release our playlist data.
- {for (size_t i = m_playlist.size() - 1; i != static_cast<size_t>(-1); i--)
// Optimized
+ // Release frame tags
+ for (PlayListMap::iterator i=m_playlist.begin(), e=m_playlist.end();
i!=e; ++i)
{
- for (size_t j = m_playlist[i].size()-1; j !=
static_cast<size_t>(-1); j--)
+ PlayList& pl = i->second;
+
+ for (PlayList::iterator j=pl.begin(), je=pl.end(); j!=je; ++j)
{
- delete m_playlist[i][j];
+ delete *j;
+ }
+
+ //pl.clear(); // useless, as we're going to clean the whole map
}
- }}
+ //m_playlist.clear(); // useless, as we're going to call it's
destructor next
// Release init action data.
- {for (size_t i = m_init_action_list.size() - 1; i !=
static_cast<size_t>(-1); i--) //Optimized
+ for (PlayListMap::iterator i=m_init_action_list.begin(),
e=m_init_action_list.end(); i!=e; ++i)
{
- for (size_t j = m_init_action_list[i].size()-1; j !=
static_cast<size_t>(-1); j--)
+ PlayList& pl = i->second;
+
+ for (PlayList::iterator j=pl.begin(), je=pl.end(); j!=je; ++j)
{
- delete m_init_action_list[i][j];
+ delete *j;
+ }
+
+ //pl.clear(); // useless, as we're going to clean the whole map
}
- }}
+ //m_init_action_list.clear(); // useless, as we're going to call it's
destructor next
// It's supposed to be cleaned up in read()
// TODO: join with loader thread instead ?
@@ -499,8 +509,8 @@
// Allocate 1 more then the expected slots
// for actions, to make handling malformed SWF easier.
- m_playlist.resize(m_frame_count+1);
- m_init_action_list.resize(m_frame_count+1);
+ //m_playlist.resize(m_frame_count+1);
+ //m_init_action_list.resize(m_frame_count+1);
IF_VERBOSE_PARSE(
m_frame_size.print();
@@ -991,8 +1001,8 @@
get_url().c_str(), _frames_loaded,
m_frame_count);
);
- m_playlist.resize(_frames_loaded+1);
- m_init_action_list.resize(_frames_loaded+1);
+ //m_playlist.resize(_frames_loaded+1);
+ //m_init_action_list.resize(_frames_loaded+1);
}
#ifdef DEBUG_FRAMES_LOAD
@@ -1116,7 +1126,8 @@
movie_def_impl::add_frame_name(const std::string& n)
{
//log_msg(_("labelframe: frame %d, name %s"), _frames_loaded, name);
- assert(_frames_loaded < m_frame_count);
+ //why do we care about m_frame_count here ?
+ //assert(_frames_loaded < m_frame_count);
m_named_frames[n] = _frames_loaded;
}
Index: server/parser/movie_def_impl.h
===================================================================
RCS file: /sources/gnash/gnash/server/parser/movie_def_impl.h,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -b -r1.52 -r1.53
--- server/parser/movie_def_impl.h 18 Aug 2007 08:05:00 -0000 1.52
+++ server/parser/movie_def_impl.h 17 Sep 2007 12:21:47 -0000 1.53
@@ -209,11 +209,13 @@
typedef std::map<int, boost::intrusive_ptr<sound_sample> >
SoundSampleMap;
SoundSampleMap m_sound_samples;
- /// A list of movie control events for each frame.
- std::vector<PlayList> m_playlist;
+ typedef std::map<size_t, PlayList> PlayListMap;
+
+ /// Movie control events for each frame.
+ PlayListMap m_playlist;
/// Init actions for each frame.
- std::vector<PlayList> m_init_action_list;
+ PlayListMap m_init_action_list;
/// 0-based frame #'s
typedef std::map<std::string, size_t> NamedFrameMap;
@@ -477,17 +479,14 @@
void add_execute_tag(execute_tag* tag)
{
assert(tag);
- if (_frames_loaded < m_playlist.size()) {
m_playlist[_frames_loaded].push_back(tag);
}
- }
/// Need to execute the given tag before entering the
/// currently-loading frame for the first time.
void add_init_action(execute_tag* e)
{
assert(e);
- assert(_frames_loaded < m_init_action_list.size());
m_init_action_list[_frames_loaded].push_back(e);
}
@@ -508,17 +507,22 @@
return m_jpeg_in.get();
}
- virtual const PlayList& get_playlist(size_t frame_number) const
+ virtual const PlayList* getPlaylist(size_t frame_number) const
{
assert(frame_number <= _frames_loaded);
- return m_playlist[frame_number];
+
+ PlayListMap::const_iterator it = m_playlist.find(frame_number);
+ if ( it == m_playlist.end() ) return NULL;
+ else return &(it->second);
}
virtual const PlayList* get_init_actions(size_t frame_number)
{
assert(frame_number <= _frames_loaded);
- //ensure_frame_loaded(frame_number);
- return &m_init_action_list[frame_number];
+
+ PlayListMap::iterator it =
m_init_action_list.find(frame_number);
+ if ( it == m_init_action_list.end() ) return NULL;
+ else return &(it->second);
}
/// Calls readHeader() and completeLoad() in sequence.
Index: server/parser/movie_definition.h
===================================================================
RCS file: /sources/gnash/gnash/server/parser/movie_definition.h,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -b -r1.29 -r1.30
--- server/parser/movie_definition.h 18 Aug 2007 08:05:00 -0000 1.29
+++ server/parser/movie_definition.h 17 Sep 2007 12:21:47 -0000 1.30
@@ -232,7 +232,13 @@
/// @param frame_number
/// Frame number, 0-based (ie: first frame is 0)
///
- virtual const PlayList& get_playlist(size_t frame_number) const = 0;
+ /// @return NULL if no execute tags are defined for the given frame
number
+ /// (the default implementation) or a pointer to the vector of
them (PlayList)
+ ///
+ virtual const PlayList* getPlaylist(size_t /*frame_number*/) const
+ {
+ return 0;
+ }
/// Return the list of init actions for given frame number
//
Index: server/parser/sprite_definition.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/parser/sprite_definition.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -r1.19 -r1.20
--- server/parser/sprite_definition.cpp 4 Sep 2007 23:09:33 -0000 1.19
+++ server/parser/sprite_definition.cpp 17 Sep 2007 12:21:47 -0000 1.20
@@ -48,11 +48,13 @@
sprite_definition::~sprite_definition()
{
// Release our playlist data.
- for (int i = 0, n = m_playlist.size(); i < n; i++)
+ for (PlayListMap::iterator i=m_playlist.begin(), e=m_playlist.end();
i!=e; ++i)
{
- for (int j = 0, m = m_playlist[i].size(); j < m; j++)
+ PlayList& pl = i->second;
+
+ for (PlayList::iterator j=pl.begin(), je=pl.end(); j!=je; ++j)
{
- delete m_playlist[i][j];
+ delete *j;
}
}
}
@@ -73,9 +75,6 @@
m_frame_count = 1;
}
- // need a playlist for each frame
- m_playlist.resize(m_frame_count);
-
IF_VERBOSE_PARSE (
log_parse(_(" frames = " SIZET_FMT), m_frame_count);
);
@@ -187,9 +186,6 @@
{
m_frame_count = 1;
m_loading_frame = 1;
-
- m_playlist.resize(1);
- m_playlist[0].push_back(new execute_tag());
}
else
{
Index: server/parser/sprite_definition.h
===================================================================
RCS file: /sources/gnash/gnash/server/parser/sprite_definition.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- server/parser/sprite_definition.h 18 Aug 2007 08:05:00 -0000 1.28
+++ server/parser/sprite_definition.h 17 Sep 2007 12:21:47 -0000 1.29
@@ -122,8 +122,10 @@
/// (the definition read from SWF stream)
movie_definition* m_movie_def;
+ typedef std::map<size_t, PlayList> PlayListMap;
+
/// movie control events for each frame.
- std::vector<PlayList> m_playlist;
+ PlayListMap m_playlist;
// stores 0-based frame #'s
typedef std::map<std::string, size_t> NamedFrameMap;
@@ -131,6 +133,7 @@
size_t m_frame_count;
+ // Number of frames completely parsed
size_t m_loading_frame;
// overloads from movie_definition
@@ -314,9 +317,15 @@
bool get_labeled_frame(const std::string& label, size_t& frame_number);
/// frame_number is 0-based
- const PlayList& get_playlist(size_t frame_number) const
+ const PlayList* getPlaylist(size_t frame_number) const
{
- return m_playlist[frame_number];
+ // Don't access playlist of a frame which has not been
+ // completely parsed yet.
+ assert(frame_number < m_loading_frame);
+
+ PlayListMap::const_iterator it = m_playlist.find(frame_number);
+ if ( it == m_playlist.end() ) return NULL;
+ else return &(it->second);
}
// Sprites do not have init actions in their
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv..., Sandro Santilli, 2007/09/04
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv..., Sandro Santilli, 2007/09/07
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv..., Sandro Santilli, 2007/09/13
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv...,
Sandro Santilli <=
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv..., Sandro Santilli, 2007/09/18
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv..., Sandro Santilli, 2007/09/19
- [Gnash-commit] gnash ChangeLog server/sprite_instance.cpp serv..., Sandro Santilli, 2007/09/24