gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/character.cpp server/spr...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/character.cpp server/spr...
Date: Tue, 17 Jun 2008 13:43:38 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  08/06/17 13:43:38

Modified files:
        .              : ChangeLog 
        server         : character.cpp sprite_instance.cpp 
        server/asobj   : NetStream.cpp NetStream.h NetStreamFfmpeg.cpp 

Log message:
                * server/character.cpp (getWorldVolume): fix loss of precision.
                * server/asobj/NetStream.{cpp,h}: add setAudioController 
interface
                  to register a character to use for audio control.
                * server/asobj/NetStreamFfmpeg.cpp: use any registered audio
                  controller to controle volume.
                * server/sprite_instance.cpp: implement MovieClip.attachAudio
                  taking a NetStream argument.
        
        This one fixes volume control with FlowPlayer and player2.swf (youtube).
        New youtube player (watch.swf) fails due to some other actionscript 
        error (both volume control and seek control have problems there).

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.6959&r2=1.6960
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.cpp?cvsroot=gnash&r1=1.106&r2=1.107
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.552&r2=1.553
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStream.cpp?cvsroot=gnash&r1=1.99&r2=1.100
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStream.h?cvsroot=gnash&r1=1.66&r2=1.67
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStreamFfmpeg.cpp?cvsroot=gnash&r1=1.152&r2=1.153

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.6959
retrieving revision 1.6960
diff -u -b -r1.6959 -r1.6960
--- ChangeLog   17 Jun 2008 13:04:18 -0000      1.6959
+++ ChangeLog   17 Jun 2008 13:43:36 -0000      1.6960
@@ -1,5 +1,15 @@
 2008-06-17 Sandro Santilli <address@hidden>
 
+       * server/character.cpp (getWorldVolume): fix loss of precision.
+       * server/asobj/NetStream.{cpp,h}: add setAudioController interface
+         to register a character to use for audio control.
+       * server/asobj/NetStreamFfmpeg.cpp: use any registered audio
+         controller to controle volume.
+       * server/sprite_instance.cpp: implement MovieClip.attachAudio
+         taking a NetStream argument.
+
+2008-06-17 Sandro Santilli <address@hidden>
+
        * libmedia/ffmpeg/sound_handler_sdl.cpp: concatenate final
          volume to mixer.
 

Index: server/character.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/character.cpp,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -b -r1.106 -r1.107
--- server/character.cpp        17 Jun 2008 12:34:20 -0000      1.106
+++ server/character.cpp        17 Jun 2008 13:43:37 -0000      1.107
@@ -82,7 +82,7 @@
        int volume=_volume;
        if (m_parent != NULL)
        {
-           volume *= (m_parent->getVolume()/100);
+           volume = int(volume*m_parent->getVolume()/100.0);
        }
 
        return volume;

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.552
retrieving revision 1.553
diff -u -b -r1.552 -r1.553
--- server/sprite_instance.cpp  13 Jun 2008 09:13:05 -0000      1.552
+++ server/sprite_instance.cpp  17 Jun 2008 13:43:37 -0000      1.553
@@ -56,6 +56,7 @@
 #include "fill_style.h" // for beginGradientFill
 #include "styles.h" // for cap_style_e and join_style_e enums
 #include "PlaceObject2Tag.h" 
+#include "NetStream.h"
 
 #ifdef USE_SWFTREE
 # include "tree.hh"
@@ -280,9 +281,36 @@
 static as_value sprite_attach_audio(const fn_call& fn)
 {
   boost::intrusive_ptr<sprite_instance> sprite = 
ensureType<sprite_instance>(fn.this_ptr);
-  UNUSED(sprite);
 
-  LOG_ONCE( log_unimpl("MovieClip.attachAudio()") );
+  if ( ! fn.nargs )
+  {
+    IF_VERBOSE_ASCODING_ERRORS(
+    log_aserror("MovieClip.attachAudio(): %s", _("missing arguments"));
+    );
+    return as_value();
+  }
+
+  as_object* obj = fn.arg(0).to_object().get();
+  if ( ! obj )
+  { 
+    std::stringstream ss; fn.dump_args(ss);
+    // TODO: find out what to do here
+    log_error("MovieClip.attachAudio(%s): first arg doesn't cast to an 
object", ss.str());
+    return as_value();
+  }
+
+  NetStream* ns = dynamic_cast<NetStream*>(obj);
+  if ( ! ns )
+  { 
+    std::stringstream ss; fn.dump_args(ss);
+    // TODO: find out what to do here
+    log_error("MovieClip.attachAudio(%s): first arg doesn't cast to a 
NetStream", ss.str());
+    return as_value();
+  }
+
+  ns->setAudioController(sprite.get());
+
+  LOG_ONCE( log_unimpl("MovieClip.attachAudio() - TESTING") );
   return as_value();
 }
 

Index: server/asobj/NetStream.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetStream.cpp,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -b -r1.99 -r1.100
--- server/asobj/NetStream.cpp  16 Jun 2008 09:05:02 -0000      1.99
+++ server/asobj/NetStream.cpp  17 Jun 2008 13:43:37 -0000      1.100
@@ -23,6 +23,7 @@
 #endif
 
 #include "NetStream.h"
+#include "CharacterProxy.h"
 
 #include "smart_ptr.h" // GNASH_USE_GC
 #include "log.h"
@@ -629,6 +630,12 @@
        _statusQueue.clear();
 }
 
+void
+NetStream::setAudioController(character* ch)
+{
+       _audioController.reset(new CharacterProxy(ch));
+}
+
 #ifdef GNASH_USE_GC
 void
 NetStream::markReachableResources() const
@@ -638,6 +645,8 @@
 
        if ( m_statusHandler ) m_statusHandler->setReachable();
 
+       if ( _audioController ) _audioController->setReachable();
+
        // Invoke generic as_object marker
        markAsObjectReachable();
 }

Index: server/asobj/NetStream.h
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetStream.h,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -b -r1.66 -r1.67
--- server/asobj/NetStream.h    6 Jun 2008 21:06:55 -0000       1.66
+++ server/asobj/NetStream.h    17 Jun 2008 13:43:38 -0000      1.67
@@ -35,11 +35,13 @@
 #include "as_function.h" // for visibility of destructor by intrusive_ptr
 
 #include <deque>
+#include <boost/scoped_ptr.hpp>
 
 // Forward declarations
 namespace gnash {
        //class NetConnection;
        class VirtualClock;
+       class CharacterProxy;
 }
 
 namespace gnash {
@@ -224,6 +226,8 @@
 
        boost::intrusive_ptr<NetConnection> _netCon;
 
+       boost::scoped_ptr<CharacterProxy> _audioController;
+
        /// Set stream status.
        //
        /// Valid statuses are:
@@ -317,6 +321,9 @@
        /// except the FLV-parser (this might not be correct).
        virtual void close(){}
 
+       /// Make audio controlled by given character
+       void setAudioController(character* controller);
+ 
        /// Pauses/starts the playback of the media played by the current 
instance
        //
        /// @param mode

Index: server/asobj/NetStreamFfmpeg.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetStreamFfmpeg.cpp,v
retrieving revision 1.152
retrieving revision 1.153
diff -u -b -r1.152 -r1.153
--- server/asobj/NetStreamFfmpeg.cpp    16 Jun 2008 16:29:58 -0000      1.152
+++ server/asobj/NetStreamFfmpeg.cpp    17 Jun 2008 13:43:38 -0000      1.153
@@ -64,6 +64,14 @@
 
 namespace gnash {
 
+// AS-volume adjustment
+void adjust_volume(boost::int16_t* data, int size, int volume)
+{
+       for (int i=0; i < size*0.5; i++) {
+               data[i] = data[i] * volume/100;
+       }
+}
+
 
 NetStreamFfmpeg::NetStreamFfmpeg()
        :
@@ -463,6 +471,22 @@
        media::raw_mediadata_t* raw = new media::raw_mediadata_t();
        raw->m_data = _audioDecoder->decode(*frame, raw->m_size); 
 
+       if ( _audioController ) // TODO: let the sound_handler do this .. 
sounds cleaner
+       {
+               character* ch = _audioController->get();
+               if ( ch )
+               {
+                       int vol = ch->getWorldVolume();
+                       if ( vol != 100 )
+                       {
+                               // NOTE: adjust_volume assumes samples 
+                               // are 16 bits in size, and signed.
+                               // Size is still given in bytes..
+                               
adjust_volume(reinterpret_cast<boost::int16_t*>(raw->m_data), raw->m_size, vol);
+                       }
+               }
+       }
+
 #ifdef GNASH_DEBUG_DECODING
        log_debug("NetStreamFfmpeg::decodeNextAudioFrame: "
                "%d bytes of encoded audio "




reply via email to

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