1#ifndef STREAMPLAYER_H
2#define STREAMPLAYER_H
3
4#include<MdaAudioOutputStream.h>
5
6const TInt KSilenceBuffer = 256;
7
8class MStreamObs
9    {
10    public:
11    	enum
12    	{
13    	EInit,
14    	EPlay,
15    	EWrite,
16    	EClose,
17    	};
18        virtual void Complete(TInt aState, TInt aError) = 0;
19    };
20
21class MStreamProvider
22	{
23	public:
24		virtual TPtrC8 Data() = 0;
25	};
26
27NONSHARABLE_CLASS(CStreamPlayer) : public CBase, public MMdaAudioOutputStreamCallback
28	{
29	public:
30		CStreamPlayer(MStreamProvider& aProvider, MStreamObs& aObs);
31		~CStreamPlayer();
32		void ConstructL();
33
34		static TInt ClosestSupportedRate(TInt aRate);
35
36		TInt OpenStream(TInt aRate, TInt aChannels, TUint32 aType = KMMFFourCCCodePCM16);
37
38		void SetVolume(TInt aNew);
39		TInt Volume() const;
40		TInt MaxVolume() const;
41
42		void Stop();
43		void Start();
44		void Open();
45		void Close();
46
47		TBool Playing() const;
48		TBool Closed() const;
49
50	private:
51
52		void MaoscOpenComplete(TInt aError) ;
53		void MaoscBufferCopied(TInt aError, const TDesC8& aBuffer);
54		void MaoscPlayComplete(TInt aError);
55
56	private:
57		void Request();
58		void SetCapsL();
59
60	private:
61		MStreamProvider& iProvider;
62		MStreamObs& iObs;
63		TInt iVolume;
64
65		CMdaAudioOutputStream* iStream;
66
67		TInt iRate;
68		TInt iChannels;
69		TUint32 iType;
70
71		enum
72			{
73				ENone = 0,
74				EInited = 0x1,
75				EStarted = 0x2,
76				EStopped = 0x4,
77				EVolumeChange = 0x8,
78				EDied		  = 0x10
79			};
80
81		TInt iState;
82		TBuf8<KSilenceBuffer> iSilence;
83		TPtrC8 iPtr;
84
85	};
86
87
88#endif
89
90