diff -r 000000000000 -r 40261b775718 mmhais/a3facl/src/audiostream/logicalaudiostream.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmhais/a3facl/src/audiostream/logicalaudiostream.h Tue Feb 02 01:56:55 2010 +0200 @@ -0,0 +1,221 @@ +/* +* Copyright (c) 2004-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 LOGICALAUDIOSTREAM_H +#define LOGICALAUDIOSTREAM_H + +#include +#include +#include +#include + +#include +#include + +#include "componentparameters.h" +#include "audiostreammanager.h" + +#include +#include "../shared/a3fbackdooraccess.h" +#include "../audiocontext/audiocontext.h" + +// TO BE REMOVED WHEN MMRC SERVER IS READY +#include "mlogicalchain.h" +#include "maudiostreamadaptationobserver.h" +#include "maudiocodecadaptationobserver.h" + +#include + +#include "mstreambuffercontrol.h" + + +class MLogicalSettingObserver; +class CLogicalAudioCodec; +class CLogicalAudioGainControl; +class CLogicalBufferSource; +class CLogicalBufferSink; +class CLogicalAudioDeviceSink; +class CLogicalAudioDeviceSource; + + +/** +This is the implementation of audio stream API. +@see MAudioStream +*/ + +NONSHARABLE_CLASS(CLogicalAudioStream) : public CAudioStreamManager, + public MCustomInterfaceSupport, + public MCustomInterfaceSupportObserver, + public MAudioStreamAdaptationObserver, + public MLogicalChain, + public MAudioCodecObserver, + public MA3FBackdoorAccessIf + { +friend class CAudioContext; + +public: + /** + Destructor. + + Deletes all objects and releases all resource owned by this instance. + */ + virtual ~CLogicalAudioStream(); + + // from MAudioStream + virtual TInt Initialize(); + virtual TInt Load(); + virtual TInt Activate(); + virtual TInt Stop(); + virtual TInt Unload(); + virtual TInt Uninitialize(); + virtual TInt Prime(); + virtual TInt Flush(); + + virtual TInt AddSource(MAudioProcessingUnit* aSource); + virtual TInt AddSink(MAudioProcessingUnit* aSink); + virtual TInt AddAudioCodec(MAudioProcessingUnit* aCodec); + virtual TInt AddGainControl(MAudioProcessingUnit* aGainControl); + virtual TInt RemoveProcessingUnit(MAudioProcessingUnit* aProcessingUnit); + virtual TInt ResetStreamTime(); + virtual TInt GetStreamTime(TTimeIntervalMicroSeconds& aStreamTime); + virtual TAny* Interface(TUid aType); + + // from MCustomInterfaceSupport + virtual TInt RequestCustomInterface(TUid aUid, TAny*& aPtr); + virtual TInt RegisterObserver(MCustomInterfaceSupportObserver& aObserver); + virtual void UnRegisterObserver(MCustomInterfaceSupportObserver& aObserver); + + // from MCustomInterfaceSupportObserver + virtual void CustomInterfaceRemoval(TUid aInterfaceUid, TAny* aPtr); + + // from MAudioStreamAdaptationObserver + void PhysicalAdaptationEvent(TPhysicalEvent aEvent, TInt aError); + void StateEvent(TInt aReason, TAudioState aNewState); + void AddProcessingUnitComplete(TUid aType, TInt aError); + void RemoveProcessingUnitComplete(TUid aType, TInt aError); + void ProcessingFinished (); + void FlushComplete (TInt aError); + + // from MLogicalChain + void SetMessageType(TMMRCMessageType aMessageType); + void ResetMessage(); + TUint MessageType(); + TUid AudioProcessingUnitUid(TInt aIndex); + TInt AudioProcessingUnitsCount(); + TAudioState StreamState(); + void SetStreamState(TAudioState aState); + TUid CodecFormat(); + TInt GetSampleRate(); + TUid GetMode(); + TInt Priority(); + void GetVolumeRampParameters(TUid& aRampOperation, TTimeIntervalMicroSeconds& aRampDuration); + MLogicalChain* CloneL(); + void Release(); + TAny* GetComponent(TUid aType); + + void CopySettings(const MLogicalChain& aChain); + void SetAdaptationSource(MMMFBufferSource& aSource); + void SetAdaptationSink(MMMFBufferSink& aSink); + void SetAdaptationGainControl(MAudioGainControl& aGain); + void SetStreamPositionControl(MStreamPositionControl& aControl ); + void SetCustomInterfaceProvider(MCustomInterfaceSupport& aControl); + void SetCodecConfiguration(RArray aSampleRate, RArray aMode); + void SetAdaptationStream(MConfigurationHelper& aStream); + void SetStreamBufferControl(MStreamBufferControl& aStreamBufferControl); + + // from MAudioCodecObserver + void SampleRateSet(TInt aError); + void ModeSet(TInt aError); + void GetSupportedSampleRatesComplete (TInt aError); + void GetSupportedModesComplete (TInt aError); + + // from MA3FBackdoorAccessIf + MAudioContext* AudioContext(); + MAudioStream* AudioStream(); + MAudioProcessingUnit* ProcessingUnit(TUid aType); + + /** + Create a new instance. + + @param aStream the stream implementation. Ownership of the pointer is transferred to the + create CAudioStream object instance. + @return CAudioStreamComponent* a pointer to the created instance. + */ + static CLogicalAudioStream* NewL(TUid aTypeId); + + //Get functions for configuration + void GetSupportedSampleRates(RArray& aSupportedRates); + void GetSupportedModes(RArray& aSupportedModes); + + virtual void SetParentContext(const CAudioContext& aContext); + +protected: + // Internal method + void MapUidToProcessingUnit(TUid aType, MAudioProcessingUnit*& aInstance); + + void CopyStreamSettings(const MLogicalChain& aChain); + void CopyCodecSettings(const MLogicalChain& aChain); + void CopyGainSettings(const MLogicalChain& aChain); + +private: + + void ConstructL(); + CLogicalAudioStream(); + TInt DoAddProcessingUnit(MAudioProcessingUnit* aUnit); + +private: + // Time processed + TTimeIntervalMicroSeconds iTimeProcessed; + + // Audio processing units at this context + RPointerArray iAudioProcessingUnits; + + // CI observers + RPointerArray iCISupportObservers; + + // Stream state + TAudioState iCurrentState; + + TAudioState iRequestState; + + // MLogical chain variables + MAudioProcessingUnit* iCodec; + + MAudioProcessingUnit* iGain; + + // General pointer, useful to manage all the audioprocessingunit + // never keeps specific information + MAudioProcessingUnit* iAudioProcessingUnit; + + // Adaptation interfaces + MStreamPositionControl* iPositionControl; + MStreamBufferControl* iStreamBufferControl; + + MCustomInterfaceSupport* iInterfaceProvider; + + // Message type + TUint iMessageType; + + TInt iContextPriority; + + // handle back to parent context + CAudioContext* iParentContext; + }; + +#endif // LOGICALAUDIOSTREAM_H