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 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