gnash-commit
[Top][All Lists]
Advanced

[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: Wed, 19 Mar 2008 20:50:56 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  08/03/19 20:50:56

Modified files:
        .              : ChangeLog 
        server         : sprite_instance.cpp sprite_instance.h 
        server/parser  : sound_definition.cpp 
        server/vm      : ASHandlers.cpp 

Log message:
        always stop any streaming sound when the sprite is stopped or unloaded.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5980&r2=1.5981
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.487&r2=1.488
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.h?cvsroot=gnash&r1=1.171&r2=1.172
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/sound_definition.cpp?cvsroot=gnash&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.219&r2=1.220

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5980
retrieving revision 1.5981
diff -u -b -r1.5980 -r1.5981
--- ChangeLog   19 Mar 2008 18:27:48 -0000      1.5980
+++ ChangeLog   19 Mar 2008 20:50:55 -0000      1.5981
@@ -1,3 +1,11 @@
+2008-03-19 Sandro Santilli <address@hidden>
+
+       * server/sprite_instance.{cpp,h}: always stop any streaming
+         sound when the sprite is stopped or unloaded.
+       * server/parser/sound_definition.cpp, server/vm/ASHandlers.cpp:
+         update calls to cleaned up streaming sound interface of
+         sprite_instance.
+
 2008-03-19 Benjamin Wolsey <address@hidden>
 
        * testsuite/swfdec/swfdec_gnash_tester: use more complicated 

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.487
retrieving revision 1.488
diff -u -b -r1.487 -r1.488
--- server/sprite_instance.cpp  18 Mar 2008 11:27:51 -0000      1.487
+++ server/sprite_instance.cpp  19 Mar 2008 20:50:55 -0000      1.488
@@ -180,16 +180,6 @@
 
   sprite->set_play_state(sprite_instance::STOP);
 
-  // Stop sound stream as well, if such exist
-  int stream_id = sprite->get_sound_stream_id();
-  if (sprite->get_sound_stream_id() != -1) {
-    media::sound_handler* sh = get_sound_handler();
-    if (sh != NULL) sh->stop_sound(stream_id);
-    sprite->set_sound_stream_id(-1);
-  }
-
-/*  media::sound_handler* sh = get_sound_handler();
-  if (sh != NULL) sh->stop_all_sounds();*/
   return as_value();
 }
 
@@ -2235,6 +2225,8 @@
 
 sprite_instance::~sprite_instance()
 {
+  stopStreamSound();
+
   // We might have been deleted by Quit... 
   //assert(isDestroyed());
 
@@ -2419,10 +2411,12 @@
     return;
   }
 
+#if 0 // why would we want to do this ?
   // Set the current sound_stream_id to -1, meaning that no stream are
   // active. If there are an active stream it will be updated while
   // executing the ControlTags.
   set_sound_stream_id(-1);
+#endif
 
   // Execute the ControlTag actions
   // We set _callingFrameActions to true so that add_action_buffer
@@ -3037,12 +3031,9 @@
   }
 
   // Unless the target frame is the next one, stop playback of soundstream
-  int stream_id = get_sound_stream_id();
-  if (target_frame_number != m_current_frame+1 && stream_id != -1) 
+  if (target_frame_number != m_current_frame+1 )
   {
-    media::sound_handler* sh = get_sound_handler();
-    if (sh != NULL) sh->stop_sound(stream_id);
-    set_sound_stream_id(-1);
+       stopStreamSound();
   }
 
   size_t loaded_frames = get_loaded_frames();
@@ -4152,6 +4143,9 @@
   log_debug(_("Unloading sprite '%s'"), getTargetPath().c_str());
 #endif
 
+  // stop any pending streaming sounds
+  stopStreamSound();
+
   bool childHaveUnloadHandler = m_display_list.unload();
 
   // We won't be displayed again, so worth releasing
@@ -4494,6 +4488,8 @@
 void
 sprite_instance::destroy()
 {
+  stopStreamSound();
+
   m_display_list.destroy();
 
   /// We don't need these anymore
@@ -4551,4 +4547,37 @@
 
 }
 
+void
+sprite_instance::setStreamSoundId(int id)
+{
+       if ( id != m_sound_stream_id )
+       {
+               log_debug("Stream sound id from %d to %d, stopping old", 
m_sound_stream_id, id);
+               stopStreamSound();
+       }
+       m_sound_stream_id = id;
+}
+
+void
+sprite_instance::stopStreamSound()
+{
+       if ( m_sound_stream_id == -1 ) return; // nothing to do
+
+       media::sound_handler* handler = get_sound_handler(); // TODO: chache ?
+       if (handler)
+       {
+               handler->stop_sound(m_sound_stream_id);
+       }
+
+       m_sound_stream_id = -1;
+}
+
+void
+sprite_instance::set_play_state(play_state s)
+{
+       if ( s == m_play_state ) return; // nothing to do
+       if ( s == sprite_instance::STOP ) stopStreamSound();
+       m_play_state = s;
+}
+
 } // namespace gnash

Index: server/sprite_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.h,v
retrieving revision 1.171
retrieving revision 1.172
diff -u -b -r1.171 -r1.172
--- server/sprite_instance.h    20 Feb 2008 14:46:28 -0000      1.171
+++ server/sprite_instance.h    19 Mar 2008 20:50:56 -0000      1.172
@@ -179,11 +179,11 @@
        }
 
        /// Stop or play the sprite.
-       void set_play_state(play_state s)
-       {
-           //if (m_play_state != s) m_time_remainder = 0;
-           m_play_state = s;
-       }
+       //
+       /// If stopped, any stream sound associated with this sprite
+       /// will also be stopped.
+       ///
+       void set_play_state(play_state s);
 
        play_state get_play_state() const { return m_play_state; }
 
@@ -743,11 +743,11 @@
 #endif
        }
 
-       /// Set the current m_sound_stream_id
-       virtual void set_sound_stream_id(int id){ m_sound_stream_id = id; }
-
-       /// Get the current m_sound_stream_id
-       virtual int get_sound_stream_id() { return m_sound_stream_id;}
+       /// Set the currently playing m_sound_stream_id
+       // 
+       // TODO: rename to setStreamingSoundId
+       //
+       void setStreamSoundId(int id);
 
        /// Remove this sprite from the stage.
        //
@@ -877,6 +877,8 @@
 
 private:
 
+       void stopStreamSound();
+
        /// Register this sprite as a listener of core broadcasters
        //
        /// This is currently only used for key events broadcaster

Index: server/parser/sound_definition.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/parser/sound_definition.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- server/parser/sound_definition.cpp  24 Nov 2007 17:21:45 -0000      1.10
+++ server/parser/sound_definition.cpp  19 Mar 2008 20:50:56 -0000      1.11
@@ -48,7 +48,7 @@
        if (handler)
        {
                // This makes it possible to stop only the stream when 
framejumping.
-               m->set_sound_stream_id(m_handler_id);
+               m->setStreamSoundId(m_handler_id);
                handler->play_sound(m_handler_id, 0, 0, m_start, NULL);
        }
 }

Index: server/vm/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v
retrieving revision 1.219
retrieving revision 1.220
diff -u -b -r1.219 -r1.220
--- server/vm/ASHandlers.cpp    18 Mar 2008 14:01:00 -0000      1.219
+++ server/vm/ASHandlers.cpp    19 Mar 2008 20:50:56 -0000      1.220
@@ -534,16 +534,8 @@
     assert( code[thread.pc] == SWF::ACTION_STOP );
 #endif
 
-    media::sound_handler* s = get_sound_handler();
-
     sprite_instance* tgt = env.get_target()->to_movie();
     assert(tgt);
-    int stream_id = tgt->get_sound_stream_id();
-
-    if (s != NULL && stream_id != -1)
-    {
-        s->stop_sound(stream_id);
-    }
 
     tgt->set_play_state(sprite_instance::STOP);
 }




reply via email to

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