sl@0: // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #ifndef AUDIODEVICE_H sl@0: #define AUDIODEVICE_H sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: #ifdef SYMBIAN_MDF_SHAREDCHUNK_SOUNDDRIVER sl@0: #include "mdasoundadapter.h" sl@0: #else sl@0: #include sl@0: #endif sl@0: sl@0: class CMMFBuffer; sl@0: sl@0: /* sl@0: Audio Sink/Source processing unit sl@0: */ sl@0: class CAudioDevice : public CMdfProcessingUnit sl@0: { sl@0: public: sl@0: /* sl@0: Audio Sink/Source input port sl@0: */ sl@0: class CInputPort: public CActive, sl@0: public MMdfInputPort, sl@0: public MPlayCustomInterface sl@0: { sl@0: public: sl@0: static CInputPort* NewL(CAudioDevice& aParent); sl@0: sl@0: // from MMdfInputPort sl@0: TInt MipConfigure(const TPuConfig& aConfiguration); sl@0: TInt MipGetConfig(TPuConfig& aConfigurationSetup); sl@0: void MipInitialize(); sl@0: void MipSetObserver(const MMdfInputPortObserver& aInputPortObserver); sl@0: CMMFBuffer* MipCreateBuffer(TInt aBufferSize); sl@0: TInt MipUseBuffer(CMMFBuffer& aBuffer); sl@0: TInt MipFreeBuffer(CMMFBuffer* aBuffer); sl@0: TInt MipTunnelRequest(const MMdfOutputPort& aOutputPortToBeConnectedTo, sl@0: TTunnelFlags& aTunnelFlags, TSupplierType& aSupplierType); sl@0: void MipWriteData(CMMFBuffer& aBuffer); sl@0: void MipDisconnectTunnel(); sl@0: void MipRestartTunnel(); sl@0: TBool MipIsTunnelled() const; sl@0: TInt MipIndex() const; sl@0: TUint32 MipBufferSize() const; sl@0: TInt MipCreateCustomInterface(TUid aUid); sl@0: TAny* MipCustomInterface(TUid aUid); sl@0: sl@0: // from MPlayCustomInterface sl@0: void SetVolume(TUint aVolume); sl@0: TUint Volume(); sl@0: TUint BytesPlayed(); sl@0: void SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration); sl@0: TTimeIntervalMicroSeconds& VolumeRamp(); sl@0: TInt SampleRate(); sl@0: TInt Channels(); sl@0: sl@0: // from CActive sl@0: void RunL(); sl@0: void DoCancel(); sl@0: sl@0: // CInputPort sl@0: void Execute(); sl@0: void Pause(); sl@0: void Stop(); sl@0: ~CInputPort(); sl@0: sl@0: private: sl@0: explicit CInputPort(CAudioDevice& aParent); sl@0: void ConstructL(); sl@0: private: sl@0: CMMFBuffer* iCurrentBuffer; sl@0: CAudioDevice& iParent; sl@0: MMdfOutputPort* iPortConnectedTo; sl@0: RPointerArray iBuffers; sl@0: MMdfInputPortObserver* iObserver; sl@0: TInt iSampleRate; sl@0: TInt iChannels; sl@0: TBool iInterleaved; sl@0: TUint iVolume; sl@0: TTimeIntervalMicroSeconds iRampDuration; sl@0: TUint iBytesPlayed; sl@0: TBool iPaused; sl@0: TBool iStopped; sl@0: TUint iBufferSize; sl@0: }; sl@0: /* sl@0: Audio Sink/Source output port sl@0: */ sl@0: class COutputPort: public CActive, sl@0: public MMdfOutputPort, sl@0: public MRecordCustomInterface sl@0: { sl@0: public: sl@0: static COutputPort* NewL(CAudioDevice& aParent); sl@0: sl@0: // from MMdfOutputPort sl@0: TInt MopConfigure(const TPuConfig& aConfiguration); sl@0: TInt MopGetConfig(TPuConfig& aConfigurationSetup); sl@0: void MopInitialize(); sl@0: void MopSetObserver(const MMdfOutputPortObserver& aOutputPortObserver); sl@0: CMMFBuffer* MopCreateBuffer(TInt aBufferSize); sl@0: TInt MopUseBuffer(CMMFBuffer& aBuffer); sl@0: TInt MopFreeBuffer(CMMFBuffer* aBuffer); sl@0: TInt MopTunnelRequest(const MMdfInputPort& aInputPortToBeConnectedTo, sl@0: TTunnelFlags& aTunnelFlags, TSupplierType& aSupplierType); sl@0: void MopReadData(CMMFBuffer& aBuffer); sl@0: void MopDisconnectTunnel(); sl@0: void MopRestartTunnel(); sl@0: TBool MopIsTunnelled() const; sl@0: TInt MopIndex() const; sl@0: TUint32 MopBufferSize() const; sl@0: TInt MopCreateCustomInterface(TUid aUid); sl@0: TAny* MopCustomInterface(TUid aUid); sl@0: sl@0: // from MRecordCustomInterface sl@0: void SetGain(TUint aGain); sl@0: TUint Gain(); sl@0: TUint BytesRecorded(); sl@0: TInt SampleRate(); sl@0: TInt Channels(); sl@0: sl@0: // from CActive sl@0: void RunL(); sl@0: void DoCancel(); sl@0: sl@0: // COutputPort sl@0: ~COutputPort(); sl@0: void Execute(); sl@0: void Pause(); sl@0: void Stop(); sl@0: sl@0: private: sl@0: explicit COutputPort(CAudioDevice& aParent); sl@0: void ConstructL(); sl@0: private: sl@0: CMMFBuffer* iCurrentBuffer; sl@0: CAudioDevice& iParent; sl@0: RPointerArray iBuffers; sl@0: MMdfOutputPortObserver* iObserver; sl@0: MMdfInputPort* iPortConnectedTo; sl@0: TInt iSampleRate; sl@0: TInt iChannels; sl@0: TBool iInterleaved; sl@0: TUint iGain; sl@0: TUint iBytesRecorded; sl@0: TBool iPaused; sl@0: TUint iBufferSize; sl@0: }; sl@0: public: sl@0: static CAudioDevice* NewL(); sl@0: // from CMdfProcessingUnit sl@0: TInt Create(const MMdfProcessingUnitObserver& aProcessingUnitObserver); sl@0: TInt GetInputPorts(RPointerArray& aComponentInputPorts); sl@0: TInt GetOutputPorts(RPointerArray& aComponentOutputPorts); sl@0: TInt Configure(const TPuConfig& aConfigurationSetup); sl@0: TInt GetConfig(TPuConfig& aConfigurationSetup); sl@0: void Initialize(); sl@0: void Execute (); sl@0: TInt Pause (); sl@0: void Stop (); sl@0: TProcessingUnitState State(); sl@0: TInt CreateCustomInterface(TUid aUid); sl@0: TAny* CustomInterface(TUid aUid); sl@0: sl@0: // CAudioDevice sl@0: RMdaDevSound& SoundDevice(); sl@0: MMdfProcessingUnitObserver* Observer(); sl@0: ~CAudioDevice(); sl@0: sl@0: private: sl@0: CAudioDevice(); sl@0: void ConstructL(); sl@0: private: sl@0: CInputPort* iInputPort; sl@0: COutputPort* iOutputPort; sl@0: RMdaDevSound iSoundDevice; sl@0: MMdfProcessingUnitObserver* iObserver; sl@0: TProcessingUnitState iState; sl@0: }; sl@0: sl@0: #endif // AUDIODEVICE_H