diff -r 000000000000 -r b8ed18f6c07b mmlibs/mmfw/src/Client/Audio/mmfclientaudiooutputstream.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmlibs/mmfw/src/Client/Audio/mmfclientaudiooutputstream.h Thu Oct 07 22:34:12 2010 +0100 @@ -0,0 +1,133 @@ +// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#ifndef MMFCLIENTAUDIOOUTPUTSTREAM_H +#define MMFCLIENTAUDIOOUTPUTSTREAM_H + +#include +#include + +template +class CMMFFifo; +class CMMFBuffer; +class MMdaAudioOutputStreamCallback; +class TMdaPackage; +class MMMFAudioResourceNotificationCallback; + +class CMMFMdaAudioOutputStream; +NONSHARABLE_CLASS( CMMFMdaAudioOutputStream ): public CBase, + public MDevSoundObserver + { + enum TIsOpenState + { + EIsNotOpen, + EIsOpening, // Open() called but not responded to + EIsOpen, // Open callback made and successfully opened + }; +public: + static CMMFMdaAudioOutputStream* NewL(MMdaAudioOutputStreamCallback& aCallback); + static CMMFMdaAudioOutputStream* NewL(MMdaAudioOutputStreamCallback& aCallback, TInt aPriority, TInt aPref); + virtual ~CMMFMdaAudioOutputStream(); +// + void SetAudioPropertiesL(TInt aSampleRate, TInt aChannels); + void Open(TMdaPackage* aSettings); + void SetVolume(const TInt aVolume); + TInt Volume(); + TInt MaxVolume(); + void SetBalanceL(TInt aBalance = KMMFBalanceCenter); + TInt GetBalanceL() const; + void SetPriority(TInt aPriority, TInt aPref); + void WriteL(const TDesC8& aData); + void Stop(); + TInt Pause(); + TInt Resume(); + const TTimeIntervalMicroSeconds& Position(); + TInt GetBytes(); + void SetDataTypeL(TFourCC aAudioType); + TFourCC DataType() const; + TInt RegisterAudioResourceNotification(MMMFAudioResourceNotificationCallback& aCallback,TUid aNotificationEventUid,const TDesC8& aNotificationRegistrationData = KNullDesC8); + TInt CancelRegisterAudioResourceNotification(TUid aNotificationEventId); + TInt WillResumePlay(); + TAny* CustomInterface(TUid aInterfaceId); + TInt KeepOpenAtEnd(); + TInt RequestStop(); +public: + // from MDevSoundObserver + virtual void InitializeComplete(TInt aError); + virtual void ToneFinished(TInt aError); + virtual void BufferToBeFilled(CMMFBuffer* aBuffer); + virtual void PlayError(TInt aError); + virtual void BufferToBeEmptied(CMMFBuffer* aBuffer); + virtual void RecordError(TInt aError); + virtual void ConvertError(TInt aError); + virtual void DeviceMessage(TUid aMessageType, const TDesC8& aMsg); + virtual void SendEventToClient(const TMMFEvent& aEvent); + +private: + void RealSetAudioPropertiesL(TInt aSampleRate, TInt aChannels); + +private: + // class to allow asynchronous user callbacks + class CActiveCallback : public CActive + { + public: + ~CActiveCallback(); + CActiveCallback(MMdaAudioOutputStreamCallback& aCallback); + void Signal(const TInt aReason); + protected: + virtual void RunL(); + virtual void DoCancel(); + private: + MMdaAudioOutputStreamCallback& iCallback; + }; +private: + CMMFMdaAudioOutputStream(MMdaAudioOutputStreamCallback& aCallback); + void ConstructL(TInt aPriority, TInt aPref); + void StartPlayL(); + enum TState { EStopped, EPlaying, EStopping, EPaused}; + void EmptyFifo(TInt aError); + void StartShutDownTimer(); + static TInt ShutDownTimerComplete(TAny* aSamplesPlayed); + void DoShutDownTimerComplete(); +private: + MMdaAudioOutputStreamCallback& iCallback; + MMMFAudioResourceNotificationCallback* iAudioResourceNotificationCallBack; + CMMFFifo* iFifo; + TInt iFifoItemPos; + CMMFDevSound* iDevSound; + TState iState; + TTimeIntervalMicroSeconds iPosition; + CActiveCallback* iActiveCallback; + TUid iEventHolder; + TBuf8<256> iNotificationDataHolder; + // only for testing + friend class CTestStepUnitMMFAudClient; + CMMFBuffer* iBuffer; + TFourCC iDataTypeCode; + TIsOpenState iIsOpenState; + TBool iValuesCached; + TInt iSampleRate; + TInt iChannels; + TInt iVolume; + TBool iInitCallFrmSetDataType;//Flag to indicate that InitializeL is called from SetDataTypeL. + TInt iInitializeState; + CActiveSchedulerWait* iActiveSchedulerWait; + TBool iKeepOpenAtEnd; + CPeriodic* iShutDownTimer; + TInt iCurrentSamplesPlayed; + TBool iDevSoundIgnoresUnderflow; + }; + +#endif