diff --git a/include/osg/AudioStream b/include/osg/AudioStream index 989c99e3a..a9d5c124b 100644 --- a/include/osg/AudioStream +++ b/include/osg/AudioStream @@ -38,6 +38,8 @@ public: virtual double getDelay() const { return _delay; } virtual void setDelay(const double delay) { _delay = delay; } + virtual void setVolume(float) {} + virtual float getVolume() const { return 0.0f; } private: diff --git a/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp b/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp index bf67ae1c6..65ffe859c 100644 --- a/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp +++ b/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp @@ -112,6 +112,22 @@ void FFmpegDecoderAudio::close(bool waitForThreadToExit) } } +void FFmpegDecoderAudio::setVolume(float volume) +{ + if (m_audio_sink.valid()) + { + m_audio_sink->setVolume(volume); + } +} + +float FFmpegDecoderAudio::getVolume() const +{ + if (m_audio_sink.valid()) + { + return m_audio_sink->getVolume(); + } + return 0.0f; +} void FFmpegDecoderAudio::run() { diff --git a/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.hpp b/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.hpp index ecc260142..abe87817e 100644 --- a/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.hpp +++ b/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.hpp @@ -34,6 +34,9 @@ public: void pause(bool pause); void close(bool waitForThreadToExit); + void setVolume(float volume); + float getVolume() const; + virtual void run(); void setAudioSink(osg::ref_ptr audio_sink); diff --git a/src/osgPlugins/ffmpeg/FFmpegImageStream.cpp b/src/osgPlugins/ffmpeg/FFmpegImageStream.cpp index e25e1fb16..00a7b23e8 100644 --- a/src/osgPlugins/ffmpeg/FFmpegImageStream.cpp +++ b/src/osgPlugins/ffmpeg/FFmpegImageStream.cpp @@ -152,6 +152,15 @@ void FFmpegImageStream::quit(bool waitForThreadToExit) m_decoder->close(waitForThreadToExit); } +void FFmpegImageStream::setVolume(float volume) +{ + m_decoder->audio_decoder().setVolume(volume); +} + +float FFmpegImageStream::getVolume() const +{ + return m_decoder->audio_decoder().getVolume(); +} double FFmpegImageStream::getLength() const { diff --git a/src/osgPlugins/ffmpeg/FFmpegImageStream.hpp b/src/osgPlugins/ffmpeg/FFmpegImageStream.hpp index 2aaa0784f..cd4b200e4 100644 --- a/src/osgPlugins/ffmpeg/FFmpegImageStream.hpp +++ b/src/osgPlugins/ffmpeg/FFmpegImageStream.hpp @@ -33,6 +33,9 @@ namespace osgFFmpeg virtual void seek(double time); virtual void quit(bool waitForThreadToExit = true); + virtual void setVolume(float volume); + virtual float getVolume() const; + virtual double getLength() const; virtual double getReferenceTime () const; virtual double getFrameRate() const;