From c4eceaebc3abebd169a6f4027bddd8ab61ba7a0d Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Sat, 14 Mar 2020 14:30:31 -0400
Subject: [PATCH] Pure virtual base class opt for streaming audio impls

---
 indra/llaudio/llstreamingaudio.h             | 15 ++++++++++++---
 indra/newview/CMakeLists.txt                 |  1 +
 indra/newview/llviewermedia_streamingaudio.h |  9 +++++++++
 3 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/indra/llaudio/llstreamingaudio.h b/indra/llaudio/llstreamingaudio.h
index 93479f9d598..4ceb037e09f 100644
--- a/indra/llaudio/llstreamingaudio.h
+++ b/indra/llaudio/llstreamingaudio.h
@@ -30,11 +30,13 @@
 
 #include "stdtypes.h" // from llcommon
 
+class LLSD;
+
 // Entirely abstract.  Based exactly on the historic API.
 class LLStreamingAudioInterface
 {
  public:
-	virtual ~LLStreamingAudioInterface() {}
+    virtual ~LLStreamingAudioInterface() = default;
 
 	virtual void start(const std::string& url) = 0;
 	virtual void stop() = 0;
@@ -45,8 +47,15 @@ class LLStreamingAudioInterface
 	virtual void setGain(F32 vol) = 0;
 	virtual F32 getGain() = 0;
 	virtual std::string getURL() = 0;
-	virtual bool supportsAdjustableBufferSizes(){return false;}
-	virtual void setBufferSizes(U32 streambuffertime, U32 decodebuffertime){};
+
+	virtual bool supportsAdjustableBufferSizes() = 0;
+	virtual void setBufferSizes(U32 streambuffertime, U32 decodebuffertime) = 0;
+
+	virtual bool supportsMetaData() = 0;
+	virtual const LLSD *getMetaData() = 0;
+	virtual bool hasNewMetaData() = 0;
+	virtual bool supportsWaveData() = 0;
+	virtual bool getWaveData(float* arr, S32 count, S32 stride = 1) = 0;
 };
 
 #endif // LL_STREAMINGAUDIO_H
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index dbe8b1fbb5b..b98a2985048 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1282,6 +1282,7 @@ set(viewer_HEADER_FILES
     llviewerkeyboard.h
     llviewerlayer.h
     llviewermedia.h
+    llviewermedia_streamingaudio.h
     llviewermediafocus.h
     llviewermediaobserver.h
     llviewermenu.h
diff --git a/indra/newview/llviewermedia_streamingaudio.h b/indra/newview/llviewermedia_streamingaudio.h
index 1e7f771e170..404065e9547 100644
--- a/indra/newview/llviewermedia_streamingaudio.h
+++ b/indra/newview/llviewermedia_streamingaudio.h
@@ -50,6 +50,15 @@ class LLStreamingAudio_MediaPlugins : public LLStreamingAudioInterface
 	/*virtual*/ F32 getGain();
 	/*virtual*/ std::string getURL();
 
+	virtual bool supportsAdjustableBufferSizes(){return false;}
+	virtual void setBufferSizes(U32 streambuffertime, U32 decodebuffertime){};
+
+	virtual bool supportsMetaData() { return false; }
+	virtual const LLSD *getMetaData() { return nullptr; }
+	virtual bool hasNewMetaData() { return false; }
+	virtual bool supportsWaveData() { return false; }
+	virtual bool getWaveData(float* arr, S32 count, S32 stride = 1){ return false; }
+
 private:
 	LLPluginClassMedia* initializeMedia(const std::string& media_type);
 
-- 
GitLab