1 #ifndef STREAMPLAYER_H
2 #define STREAMPLAYER_H
3 
4 #include<MdaAudioOutputStream.h>
5 
6 const TInt KSilenceBuffer = 256;
7 
8 class 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 
21 class MStreamProvider
22 	{
23 	public:
24 		virtual TPtrC8 Data() = 0;
25 	};
26 
NONSHARABLE_CLASS(CStreamPlayer)27 NONSHARABLE_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