--- /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 <e32base.h>
+#include <a3f/a3f_trace_utils.h>
+#include <a3f/audioprocessingunittypeuids.h>
+#include <a3f/a3fbase.h>
+
+#include <a3f/maudioprocessingunitobserver.h>
+#include <a3f/maudiostreamobserver.h>
+
+#include "componentparameters.h"
+#include "audiostreammanager.h"
+
+#include <a3f/msynccisupport.h>
+#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 <a3f/maudiocodecobserver.h>
+
+#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<TInt> aSampleRate, RArray<TUid> 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<TInt>& aSupportedRates);
+ void GetSupportedModes(RArray<TUid>& 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<MAudioProcessingUnit> iAudioProcessingUnits;
+
+ // CI observers
+ RPointerArray<MCustomInterfaceSupportObserver> 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