diff -r 000000000000 -r 40261b775718 mmlibs/mmfw/src/Client/Audio/mmfclientaudioinputstream.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmlibs/mmfw/src/Client/Audio/mmfclientaudioinputstream.h Tue Feb 02 01:56:55 2010 +0200 @@ -0,0 +1,123 @@ +// 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 MMFCLIENTAUDIOINPUTSTREAM_H +#define MMFCLIENTAUDIOINPUTSTREAM_H + +#include +#include +#include + +template +class CMMFFifo; +class CMMFBuffer; +class MMdaAudioInputStreamCallback; +class TMdaPackage; + +class CMMFMdaAudioInputStream; +NONSHARABLE_CLASS( CMMFMdaAudioInputStream ): public CBase, + public MDevSoundObserver + { + enum TIsOpenState + { + EIsNotOpen, + EIsOpening, // Open() called but not responded to + EIsOpen, // Open callback made and successfully opened + }; +public: + static CMMFMdaAudioInputStream* NewL(MMdaAudioInputStreamCallback& aCallback); + static CMMFMdaAudioInputStream* NewL(MMdaAudioInputStreamCallback& aCallback, TInt aPriority, TInt aPref); + ~CMMFMdaAudioInputStream(); + + void SetAudioPropertiesL(TInt aSampleRate, TInt aChannels); + void Open(TMdaPackage* aSettings); + void SetGain(TInt aGain); + TInt Gain() const; + TInt MaxGain() const; + void SetBalanceL(TInt aBalance = KMMFBalanceCenter); + TInt GetBalanceL() const; + void SetPriority(TInt aPriority, TInt aPref); + void ReadL(TDes8& aData); + void Stop(); + const TTimeIntervalMicroSeconds& Position(); + TInt GetBytes(); + void SetDataTypeL(TFourCC aAudioType); + TFourCC DataType() const; + void GetSupportedBitRatesL(RArray& aSupportedBitRates); + TInt BitRateL() const; + void SetBitRateL(TInt aBitRate); + TAny* CustomInterface(TUid aInterfaceId); + void SetSingleBufferMode(TBool aSingleMode); + void RequestStop(); + void ShutDown(); + +public: + // from MDevSoundObserver + void InitializeComplete(TInt aError); + void ToneFinished(TInt aError); + void BufferToBeFilled(CMMFBuffer* aBuffer); + void PlayError(TInt aError); + void BufferToBeEmptied(CMMFBuffer* aBuffer); + void RecordError(TInt aError); + void ConvertError(TInt aError); + void DeviceMessage(TUid aMessageType, const TDesC8& aMsg); + +private: + void RealSetAudioPropertiesL(TInt aSampleRate, TInt aChannels); + +private: + // class to allow asynchronous user callbacks + class CActiveCallback : public CActive + { + public: + CActiveCallback(MMdaAudioInputStreamCallback& aCallback); + ~CActiveCallback(); + void Signal(const TInt aReason); + protected: + void RunL(); + void DoCancel(); + private: + MMdaAudioInputStreamCallback& iCallback; + }; +private: + enum TState { EStopped, ERecording, EStopping }; +private: + CMMFMdaAudioInputStream(MMdaAudioInputStreamCallback& aCallback); + void ConstructL(TInt aPriority, TInt aPref); + TInt Read(TDes8& aData); +private: + MMdaAudioInputStreamCallback& iCallback; + TTimeIntervalMicroSeconds iPosition; + CMMFDevSound* iDevSound; + CMMFFifo* iFifo; + TBool iSingleBuffer; + TPtr8 iStorageItem; + TPtr8 iBufferPtr; + TInt iState; + CActiveCallback* iActiveCallback; + TInt iBytesRecorded;//tracks bytes supplied by devsound + TFourCC iDataTypeCode; + TIsOpenState iIsOpenState; + TMdaAudioDataSettings iSettings; + TBool iAudioDataStored; + // only for testing + friend class CTestStepUnitMMFAudClient; + TBool iInitCallFrmSetDataType;//Flag to indicate that InitializeL is called from SetDataTypeL. + TInt iInitializeState; + CActiveSchedulerWait* iActiveSchedulerWait; + }; + +#endif