[Top][All Lists]
[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 "
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/character.cpp server/spr...,
Sandro Santilli <=