diff -ur ./indra/llaudio/audioengine.h ./indra/llaudio/audioengine.h --- ./indra/llaudio/audioengine.h 2008-03-15 21:23:17.000000000 +0000 +++ ./indra/llaudio/audioengine.h 2008-03-15 20:43:12.000000000 +0000 @@ -144,6 +144,7 @@ // use a value from 0.0 to 1.0, inclusive virtual void setInternetStreamGain(F32 vol) { mInternetStreamGain = vol; } virtual const char* getInternetStreamURL() { return ""; } + virtual void InitStreamer() = 0; // For debugging usage virtual LLVector3 getListenerPos(); diff -ur ./indra/llaudio/audioengine_openal.cpp ./indra/llaudio/audioengine_openal.cpp --- ./indra/llaudio/audioengine_openal.cpp 2008-03-15 21:24:16.000000000 +0000 +++ ./indra/llaudio/audioengine_openal.cpp 2008-03-15 20:14:23.000000000 +0000 @@ -185,21 +187,48 @@ // ------------ + +void LLAudioEngine_OpenAL::InitStreamer() +{ + + m_streamer=new LLMediaImplGStreamer (); + + if(!m_streamer) + { + llwarns << "LLAudioEngine_OpenAL::LLAudioEngine_OpenAL() Failed to create our private gstreamer audio instance" << llendl; + } + + if(m_streamer) + { + m_streamer->init (); + } + +} + + void LLAudioEngine_OpenAL::initInternetStream(){ - mInternetStreamURL = NULL; + mInternetStreamURL.erase(); + } -void LLAudioEngine_OpenAL::startInternetStream(const char* url){ - if(mInternetStreamURL){ - delete mInternetStreamURL; - } +void LLAudioEngine_OpenAL::startInternetStream(const char * url_cstr){ + + std::string url(url_cstr); + + if(!m_streamer) + return; - if (url) { + if (!url.empty()) { llinfos << "LLAudioEngine_OpenAL::startInternetStream() Starting internet stream: " << url << llendl; - mInternetStreamURL = new std::string(url); + mInternetStreamURL=url; + m_streamer->navigateTo ( url ); + llinfos << "Playing....." << llendl; + m_streamer->play (); + }else{ - llinfos << "LLAudioEngine_OpenAL::startInternetStream() Set internet stream to null" << llendl; - mInternetStreamURL = NULL; + llinfos << "LLAudioEngine_OpenAL seting stream to NULL"<< llendl; + mInternetStreamURL.erase(); + m_streamer->stop (); } } @@ -207,28 +236,53 @@ } void LLAudioEngine_OpenAL::stopInternetStream(){ + mInternetStreamURL.erase(); + m_streamer->stop (); } void LLAudioEngine_OpenAL::pauseInternetStream(int pause){ + + if(!m_streamer) + return; + + if(pause) + m_streamer->pause(); + else + m_streamer->play(); + } int LLAudioEngine_OpenAL::isInternetStreamPlaying(){ - if(mInternetStreamURL){ - return 2; // "Paused" - }else{ + + if(!m_streamer) return 0; + + if(m_streamer->isPlaying()) + { + return 1; // Active and playing + } + if(m_streamer->isPaused()) + { + return 2; // paused } + + return 0; // Stopped } void LLAudioEngine_OpenAL::getInternetStreamInfo(char* artist_out, char* title_out){ } void LLAudioEngine_OpenAL::setInternetStreamGain(F32 vol){ + // Set the gstreamer volume here + if(!m_streamer) + return; + + vol = llclamp(vol, 0.f, 1.f); + m_streamer->setVolume(vol); } const char* LLAudioEngine_OpenAL::getInternetStreamURL(){ - if(mInternetStreamURL){ - return mInternetStreamURL->c_str(); - } - return ""; + return mInternetStreamURL.c_str(); } + + diff -ur ./indra/llaudio/audioengine_openal.h ./indra/llaudio/audioengine_openal.h --- ./indra/llaudio/audioengine_openal.h 2008-03-15 21:24:16.000000000 +0000 +++ ./indra/llaudio/audioengine_openal.h 2008-03-15 20:24:17.000000000 +0000 @@ -5,6 +5,8 @@ #include "audioengine.h" #include "listener_openal.h" +#include "llmediaimplgstreamer.h" + class LLAudioEngine_OpenAL : public LLAudioEngine{ public: @@ -25,7 +27,7 @@ // Internet stream methods virtual void initInternetStream(); - virtual void startInternetStream(const char* url); + virtual void startInternetStream(const char * url_cstr); virtual void stopInternetStream(); virtual void updateInternetStream(); virtual void pauseInternetStream(int pause); @@ -33,13 +35,16 @@ virtual void getInternetStreamInfo(char* artist, char* title); virtual void setInternetStreamGain(F32 vol); virtual const char* getInternetStreamURL(); + virtual void InitStreamer(); void initWind(); void cleanupWind(); void updateWind(LLVector3 direction, F32 camera_altitude); protected: - std::string* mInternetStreamURL; + std::string mInternetStreamURL; + LLMediaImplGStreamer * m_streamer; + }; class LLAudioChannelOpenAL : public LLAudioChannel{ --- ./indra/llmedia/llmediaimplgstreamer.cpp 2008-03-15 23:06:08.000000000 +0000 +++ ./indra/llmedia/llmediaimplgstreamer.cpp 2008-03-15 23:06:02.000000000 +0000 @@ -618,4 +619,25 @@ return false; } +bool LLMediaImplGStreamer::isPaused() +{ + + if(getStatus() == LLMediaBase::STATUS_PAUSED) + return true; + + return false; + +} + +bool LLMediaImplGStreamer::isPlaying() +{ + + if(getStatus() == LLMediaBase::STATUS_STARTED) + return true; + + return false; + +} + + #endif // LL_GSTREAMER_ENABLED --- ./indra/llmedia/llmediaimplgstreamer.h 2008-03-15 23:06:08.000000000 +0000 +++ ./indra/llmedia/llmediaimplgstreamer.h 2008-03-15 23:02:41.000000000 +0000 @@ -80,12 +80,16 @@ bool stop(); bool play(); + bool pause(); LLMediaEmitter< LLMediaObserver > getEventEmitter() const {return mEventEmitter;}; + bool isPlaying(); + bool isPaused(); + private: // misc bool unload(); - bool pause(); + unsigned char* mediaData; int mMediaRowbytes; --- ./indra/newview/llstartup.cpp 2008-03-15 23:31:02.000000000 +0000 +++ ./indra/newview/llstartup.cpp 2008-03-15 21:24:16.000000000 +0000 @@ -641,6 +641,9 @@ LLViewerMedia::initClass(); LLViewerParcelMedia::initClass(); + if (gAudiop) + gAudiop->InitStreamer(); + if (gViewerWindow) { audio_update_volume(true);