diff src/audio/symbian/streamplayer.h @ 3975:e85e65aec22f SDL-1.2

Added S60 port.
author Ryan C. Gordon <icculus@icculus.org>
date Sun, 24 Jun 2007 18:26:35 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/audio/symbian/streamplayer.h	Sun Jun 24 18:26:35 2007 +0000
@@ -0,0 +1,89 @@
+#ifndef STREAMPLAYER_H
+#define STREAMPLAYER_H
+
+#include<MdaAudioOutputStream.h>
+
+const TInt KSilenceBuffer = 256;
+
+class MStreamObs
+    {
+    public:
+    	enum 
+    	{
+    	EInit, 
+    	EPlay,
+    	EWrite,
+    	EClose,	
+    	};
+        virtual void Complete(TInt aState, TInt aError) = 0;
+    };
+
+class MStreamProvider
+	{
+	public:
+		virtual TPtrC8 Data() = 0;	
+	};
+
+NONSHARABLE_CLASS(CStreamPlayer) : public CBase, public MMdaAudioOutputStreamCallback
+	{
+	public:
+		CStreamPlayer(MStreamProvider& aProvider, MStreamObs& aObs);
+		~CStreamPlayer();
+		void ConstructL();
+		
+		static TInt ClosestSupportedRate(TInt aRate);
+		
+		TInt OpenStream(TInt aRate, TInt aChannels, TUint32 aType = KMMFFourCCCodePCM16);
+		
+		void SetVolume(TInt aNew);
+		TInt Volume() const;
+		TInt MaxVolume() const;
+		
+		void Stop();
+		void Start();
+		void Open();
+		void Close();
+		
+		TBool Playing() const;
+		TBool Closed() const;
+		
+	private:
+
+		void MaoscOpenComplete(TInt aError) ;
+		void MaoscBufferCopied(TInt aError, const TDesC8& aBuffer);
+		void MaoscPlayComplete(TInt aError);
+	
+	private:
+		void Request();
+		void SetCapsL();
+
+	private:
+		MStreamProvider& iProvider;
+		MStreamObs& iObs;	
+		TInt iVolume;
+	
+		CMdaAudioOutputStream* iStream;
+	
+		TInt iRate;
+		TInt iChannels;
+		TUint32 iType;
+		
+		enum 
+			{
+				ENone = 0,
+				EInited = 0x1,
+				EStarted = 0x2,
+				EStopped = 0x4,
+				EVolumeChange = 0x8,
+				EDied		  = 0x10
+			};
+		
+		TInt iState;
+		TBuf8<KSilenceBuffer> iSilence;
+		TPtrC8 iPtr;
+	
+	};
+
+
+#endif
+