Added support for setting volume in xine plugin, manual adjustment of volume

in osgmove example, and clamping to 0 to 1.0 range in quicktime plugin
This commit is contained in:
Robert Osfield 2007-11-04 16:08:05 +00:00
parent 6f47d924d6
commit 2e2ddba49e
3 changed files with 56 additions and 4 deletions

View File

@ -54,7 +54,7 @@ public:
virtual void getUsage(osg::ApplicationUsage& usage) const; virtual void getUsage(osg::ApplicationUsage& usage) const;
typedef std::vector< osg::ref_ptr<osg::ImageStream> > ImageStreamList; typedef std::vector< osg::observer_ptr<osg::ImageStream> > ImageStreamList;
protected: protected:
@ -203,7 +203,7 @@ bool MovieEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIAction
++itr) ++itr)
{ {
std::cout<<"Play"<<std::endl; std::cout<<"Play"<<std::endl;
(*itr)->play(); (*itr)->play();
} }
return true; return true;
} }
@ -218,6 +218,28 @@ bool MovieEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIAction
} }
return true; 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') else if (ea.getKey()=='r')
{ {
for(ImageStreamList::iterator itr=_imageStreamList.begin(); for(ImageStreamList::iterator itr=_imageStreamList.begin();

View File

@ -26,6 +26,7 @@
#include "QuicktimeImageStream.h" #include "QuicktimeImageStream.h"
#include <osg/Notify> #include <osg/Notify>
#include <osg/Timer> #include <osg/Timer>
#include <osg/Math>
#include <OpenThreads/ScopedLock> #include <OpenThreads/ScopedLock>
#include <OpenThreads/Thread> #include <OpenThreads/Thread>
@ -132,7 +133,7 @@ void QuicktimeImageStream::quit(bool wiatForThreadToExit)
void QuicktimeImageStream::setVolume(float volume) 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. // Get and Set the playback volume of the stream.

View File

@ -30,7 +30,8 @@ class XineImageStream : public osg::ImageStream
_visual(0), _visual(0),
_stream(0), _stream(0),
_event_queue(0), _event_queue(0),
_ready(false) _ready(false),
_volume(-1.0)
{ {
setOrigin(osg::Image::TOP_LEFT); setOrigin(osg::Image::TOP_LEFT);
} }
@ -41,6 +42,21 @@ class XineImageStream : public osg::ImageStream
META_Object(osgXine,XineImageStream); 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<int>(_volume*100.0f));
osg::notify(osg::NOTICE)<<"Setting volume "<<_volume<<std::endl;
}
}
float getVolume() const
{
return _volume;
}
bool open(xine_t* xine, const std::string& filename) bool open(xine_t* xine, const std::string& filename)
{ {
if (filename==getFileName()) return true; if (filename==getFileName()) return true;
@ -70,6 +86,18 @@ class XineImageStream : public osg::ImageStream
// set up stream // set up stream
_stream = xine_stream_new(_xine, _ao, _vo); _stream = xine_stream_new(_xine, _ao, _vo);
if (_stream)
{
if (_volume < 0.0)
{
_volume = static_cast<float>(xine_get_param(_stream, XINE_PARAM_AUDIO_VOLUME))/100.0f;
}
else
{
setVolume(_volume);
}
}
_event_queue = xine_event_new_queue(_stream); _event_queue = xine_event_new_queue(_stream);
xine_event_create_listener_thread(_event_queue, event_listener, this); xine_event_create_listener_thread(_event_queue, event_listener, this);
@ -200,6 +228,7 @@ class XineImageStream : public osg::ImageStream
xine_stream_t* _stream; xine_stream_t* _stream;
xine_event_queue_t* _event_queue; xine_event_queue_t* _event_queue;
bool _ready; bool _ready;
float _volume;
protected: protected: