diff --git a/examples/osgmovie/osgmovie.cpp b/examples/osgmovie/osgmovie.cpp index 94831f7b0..774e8241c 100644 --- a/examples/osgmovie/osgmovie.cpp +++ b/examples/osgmovie/osgmovie.cpp @@ -54,7 +54,7 @@ public: virtual void getUsage(osg::ApplicationUsage& usage) const; - typedef std::vector< osg::ref_ptr > ImageStreamList; + typedef std::vector< osg::observer_ptr > ImageStreamList; protected: @@ -203,7 +203,7 @@ bool MovieEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIAction ++itr) { std::cout<<"Play"<play(); + (*itr)->play(); } return true; } @@ -218,6 +218,28 @@ bool MovieEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIAction } return true; } + else if (ea.getKey()=='+') + { + for(ImageStreamList::iterator itr=_imageStreamList.begin(); + itr!=_imageStreamList.end(); + ++itr) + { + osg::ImageStream* movie = itr->get(); + movie->setVolume(movie->getVolume()+0.1f); + } + return true; + } + else if (ea.getKey()=='-') + { + for(ImageStreamList::iterator itr=_imageStreamList.begin(); + itr!=_imageStreamList.end(); + ++itr) + { + osg::ImageStream* movie = itr->get(); + movie->setVolume(movie->getVolume()-0.1f); + } + return true; + } else if (ea.getKey()=='r') { for(ImageStreamList::iterator itr=_imageStreamList.begin(); diff --git a/src/osgPlugins/quicktime/QuicktimeImageStream.cpp b/src/osgPlugins/quicktime/QuicktimeImageStream.cpp index 2ec7b2d4e..162f37732 100644 --- a/src/osgPlugins/quicktime/QuicktimeImageStream.cpp +++ b/src/osgPlugins/quicktime/QuicktimeImageStream.cpp @@ -26,6 +26,7 @@ #include "QuicktimeImageStream.h" #include #include +#include #include #include @@ -132,7 +133,7 @@ void QuicktimeImageStream::quit(bool wiatForThreadToExit) void QuicktimeImageStream::setVolume(float volume) { - _movieData->setVolume(volume); + _movieData->setVolume(osg::minimum(osg::maximum(volume,0.0f),1.0f)); } // Get and Set the playback volume of the stream. diff --git a/src/osgPlugins/xine/ReaderWriterXine.cpp b/src/osgPlugins/xine/ReaderWriterXine.cpp index 3eeb0644c..e62cb1a27 100644 --- a/src/osgPlugins/xine/ReaderWriterXine.cpp +++ b/src/osgPlugins/xine/ReaderWriterXine.cpp @@ -30,7 +30,8 @@ class XineImageStream : public osg::ImageStream _visual(0), _stream(0), _event_queue(0), - _ready(false) + _ready(false), + _volume(-1.0) { setOrigin(osg::Image::TOP_LEFT); } @@ -41,6 +42,21 @@ class XineImageStream : public osg::ImageStream META_Object(osgXine,XineImageStream); + void setVolume(float volume) + { + _volume = osg::minimum(osg::maximum(volume,0.0f),1.0f); + if (_stream) + { + xine_set_param(_stream, XINE_PARAM_AUDIO_VOLUME, static_cast(_volume*100.0f)); + osg::notify(osg::NOTICE)<<"Setting volume "<<_volume<(xine_get_param(_stream, XINE_PARAM_AUDIO_VOLUME))/100.0f; + } + else + { + setVolume(_volume); + } + } _event_queue = xine_event_new_queue(_stream); xine_event_create_listener_thread(_event_queue, event_listener, this); @@ -200,6 +228,7 @@ class XineImageStream : public osg::ImageStream xine_stream_t* _stream; xine_event_queue_t* _event_queue; bool _ready; + float _volume; protected: