mmhais/a3facl/src/audiostream/logicalaudiostream.h
changeset 0 40261b775718
--- /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