gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog backend/sound_handler_sdl.cpp s...


From: Tomas Groth
Subject: [Gnash-commit] gnash ChangeLog backend/sound_handler_sdl.cpp s...
Date: Mon, 16 Oct 2006 20:41:35 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Tomas Groth <tgc>       06/10/16 20:41:35

Modified files:
        .              : ChangeLog 
        backend        : sound_handler_sdl.cpp 
        server         : sprite_instance.cpp 

Log message:
        Fixed stop_all_sounds() and sound_sound().
        When a movie is stopped/paused or jumps to a new frame the audio 
playback now stops.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.1252&r2=1.1253
http://cvs.savannah.gnu.org/viewcvs/gnash/backend/sound_handler_sdl.cpp?cvsroot=gnash&r1=1.24&r2=1.25
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.65&r2=1.66

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.1252
retrieving revision 1.1253
diff -u -b -r1.1252 -r1.1253
--- ChangeLog   16 Oct 2006 19:01:38 -0000      1.1252
+++ ChangeLog   16 Oct 2006 20:41:35 -0000      1.1253
@@ -1,3 +1,10 @@
+2006-10-16 Tomas Groth Christensen <address@hidden>
+
+       * backend/sound_handler_sdl.cpp: Fixed stop_all_sounds() and
+       sound_sound().
+       * server/sprite_instance.cpp: When a movie is stopped/paused
+       or jumps to a new frame the audio playback now stops.
+
 2006-10-16 Sandro Santilli <address@hidden>
 
        * testsuite/misc-ming.all/ButtonEventsTest-Runner.cpp:

Index: backend/sound_handler_sdl.cpp
===================================================================
RCS file: /sources/gnash/gnash/backend/sound_handler_sdl.cpp,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -b -r1.24 -r1.25
--- backend/sound_handler_sdl.cpp       16 Oct 2006 14:33:38 -0000      1.24
+++ backend/sound_handler_sdl.cpp       16 Oct 2006 20:41:35 -0000      1.25
@@ -353,10 +353,27 @@
                // Invalid handle.
        } else {
 
-               for (uint32_t i = 0; i < 
m_sound_data[sound_handle]->m_active_sounds.size(); i++) {
-                       
m_sound_data[sound_handle]->m_active_sounds[i]->position = 
m_sound_data[sound_handle]->m_active_sounds[i]->data_size;
-                       
m_sound_data[sound_handle]->m_active_sounds[i]->raw_position = 
m_sound_data[sound_handle]->m_active_sounds[i]->raw_data_size;
-                       
m_sound_data[sound_handle]->m_active_sounds[i]->loop_count = 0;
+               for (int32_t i = 
(int32_t)m_sound_data[sound_handle]->m_active_sounds.size()-1; i >-1; i--) {
+
+                       // Stop sound, remove it from the active list (mp3)
+                       if (m_sound_data[sound_handle]->format == 2) {
+#ifdef USE_FFMPEG
+                               
avcodec_close(m_sound_data[sound_handle]->m_active_sounds[i]->cc);
+                               
av_parser_close(m_sound_data[sound_handle]->m_active_sounds[i]->parser);
+#elif defined(USE_MAD)
+                               
mad_synth_finish(&m_sound_data[sound_handle]->m_active_sounds[i]->synth);
+                               
mad_frame_finish(&m_sound_data[sound_handle]->m_active_sounds[i]->frame);
+                               
mad_stream_finish(&m_sound_data[sound_handle]->m_active_sounds[i]->stream);
+#endif
+                               delete[] 
m_sound_data[sound_handle]->m_active_sounds[i]->raw_data;
+                               
m_sound_data[sound_handle]->m_active_sounds.erase(m_sound_data[sound_handle]->m_active_sounds.begin()
 + i);
+                               soundsPlaying--;
+
+                       // Stop sound, remove it from the active list 
(adpcm/native16)
+                       } else {
+                               
m_sound_data[i]->m_active_sounds.erase(m_sound_data[sound_handle]->m_active_sounds.begin()
 + i);
+                               soundsPlaying--;
+                       }
                }
        }
        pthread_mutex_unlock(&mutex);
@@ -382,8 +399,8 @@
 // for what sounds is associated with what SWF.
 void   SDL_sound_handler::stop_all_sounds()
 {
-       int num_sounds = m_sound_data.size();
-       for (size_t i = num_sounds; i > 0; i--) //Optimized
+       int32_t num_sounds = (int32_t) m_sound_data.size()-1;
+       for (int32_t i = num_sounds; i > -1; i--) //Optimized
                stop_sound(i);
 }
 

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.65
retrieving revision 1.66
diff -u -b -r1.65 -r1.66
--- server/sprite_instance.cpp  16 Oct 2006 12:12:07 -0000      1.65
+++ server/sprite_instance.cpp  16 Oct 2006 20:41:35 -0000      1.66
@@ -113,6 +113,10 @@
        }
        assert(sprite);
        sprite->set_play_state(movie_interface::STOP);
+
+       // Stop all sounds as well
+       sound_handler* sh = get_sound_handler();
+       if (sh != NULL) sh->stop_all_sounds();
 }
 
 //removeMovieClip() : Void
@@ -1682,6 +1686,12 @@
                return;
        }
 
+       // Unless the target frame is the next one, stop playback of sounds
+       if (target_frame_number != m_current_frame+1) {
+               sound_handler* sh = get_sound_handler();
+               if (sh != NULL) sh->stop_all_sounds();
+       }
+
        size_t loaded_frames = get_loaded_frames();
        if ( target_frame_number > loaded_frames )
        {




reply via email to

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