os/mm/mmhais/a3facl/src/audiostream/logicalaudiostream.h
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 /*
     2 * Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     8 *
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    11 *
    12 * Contributors:
    13 *
    14 * Description:
    15 *
    16 */
    17 
    18 
    19 
    20 #ifndef LOGICALAUDIOSTREAM_H
    21 #define LOGICALAUDIOSTREAM_H
    22 
    23 #include <e32base.h>
    24 #include <a3f/a3f_trace_utils.h>
    25 #include <a3f/audioprocessingunittypeuids.h>
    26 #include <a3f/a3fbase.h>
    27 
    28 #include <a3f/maudioprocessingunitobserver.h>
    29 #include <a3f/maudiostreamobserver.h>
    30 
    31 #include "componentparameters.h"
    32 #include "audiostreammanager.h"
    33 
    34 #include <a3f/msynccisupport.h>
    35 #include "../shared/a3fbackdooraccess.h"
    36 #include "../audiocontext/audiocontext.h"
    37 
    38 // TO BE REMOVED WHEN MMRC SERVER IS READY
    39 #include "mlogicalchain.h"
    40 #include "maudiostreamadaptationobserver.h"
    41 #include "maudiocodecadaptationobserver.h"
    42 
    43 #include <a3f/maudiocodecobserver.h>
    44 
    45 #include "mstreambuffercontrol.h"
    46 
    47 
    48 class MLogicalSettingObserver;
    49 class CLogicalAudioCodec;
    50 class CLogicalAudioGainControl;
    51 class CLogicalBufferSource;
    52 class CLogicalBufferSink;
    53 class CLogicalAudioDeviceSink;
    54 class CLogicalAudioDeviceSource;
    55 
    56 
    57 /**
    58 This is the implementation of audio stream API.
    59 @see MAudioStream
    60 */
    61 
    62 NONSHARABLE_CLASS(CLogicalAudioStream) :	public CAudioStreamManager,
    63 											public MCustomInterfaceSupport, 
    64 											public MCustomInterfaceSupportObserver, 
    65 											public MAudioStreamAdaptationObserver,
    66 											public MLogicalChain,
    67 											public MAudioCodecObserver,
    68 											public MA3FBackdoorAccessIf
    69 	{
    70 friend class CAudioContext;
    71 
    72 public:
    73 	/**
    74 	Destructor.
    75 	
    76 	Deletes all objects and releases all resource owned by this instance.
    77 	*/
    78 	virtual ~CLogicalAudioStream();
    79 
    80 	// from MAudioStream
    81 	virtual TInt Initialize();
    82 	virtual TInt Load();
    83 	virtual TInt Activate();
    84 	virtual TInt Stop();
    85 	virtual TInt Unload();
    86 	virtual TInt Uninitialize();
    87 	virtual TInt Prime();
    88 	virtual TInt Flush();
    89 
    90 	virtual TInt AddSource(MAudioProcessingUnit* aSource);
    91 	virtual TInt AddSink(MAudioProcessingUnit* aSink);
    92 	virtual TInt AddAudioCodec(MAudioProcessingUnit* aCodec);
    93 	virtual TInt AddGainControl(MAudioProcessingUnit* aGainControl);
    94 	virtual TInt RemoveProcessingUnit(MAudioProcessingUnit* aProcessingUnit);
    95 	virtual TInt ResetStreamTime();
    96 	virtual TInt GetStreamTime(TTimeIntervalMicroSeconds& aStreamTime);
    97 	virtual TAny* Interface(TUid aType);
    98 
    99 	// from MCustomInterfaceSupport
   100 	virtual TInt RequestCustomInterface(TUid aUid, TAny*& aPtr);
   101 	virtual TInt RegisterObserver(MCustomInterfaceSupportObserver& aObserver);
   102 	virtual void UnRegisterObserver(MCustomInterfaceSupportObserver& aObserver); 
   103 
   104 	// from MCustomInterfaceSupportObserver
   105 	virtual void CustomInterfaceRemoval(TUid aInterfaceUid, TAny* aPtr);
   106 
   107 	// from MAudioStreamAdaptationObserver
   108 	void PhysicalAdaptationEvent(TPhysicalEvent aEvent, TInt aError);
   109 	void StateEvent(TInt aReason, TAudioState aNewState);
   110 	void AddProcessingUnitComplete(TUid aType, TInt aError);
   111 	void RemoveProcessingUnitComplete(TUid aType, TInt aError);
   112 	void ProcessingFinished ();
   113 	void FlushComplete (TInt aError);
   114 	
   115 	// from MLogicalChain
   116 	void SetMessageType(TMMRCMessageType aMessageType);
   117 	void ResetMessage();
   118 	TUint MessageType();
   119 	TUid AudioProcessingUnitUid(TInt aIndex);
   120 	TInt AudioProcessingUnitsCount();
   121 	TAudioState StreamState();
   122 	void SetStreamState(TAudioState aState);
   123 	TUid CodecFormat();
   124 	TInt GetSampleRate();
   125 	TUid GetMode();
   126 	TInt Priority();
   127 	void GetVolumeRampParameters(TUid& aRampOperation, TTimeIntervalMicroSeconds& aRampDuration);
   128 	MLogicalChain* CloneL();
   129 	void Release();
   130 	TAny* GetComponent(TUid aType);
   131 
   132 	void CopySettings(const MLogicalChain& aChain);
   133 	void SetAdaptationSource(MMMFBufferSource& aSource);
   134 	void SetAdaptationSink(MMMFBufferSink& aSink);
   135 	void SetAdaptationGainControl(MAudioGainControl& aGain);
   136 	void SetStreamPositionControl(MStreamPositionControl& aControl );
   137 	void SetCustomInterfaceProvider(MCustomInterfaceSupport& aControl);
   138 	void SetCodecConfiguration(RArray<TInt> aSampleRate, RArray<TUid> aMode);
   139 	void SetAdaptationStream(MConfigurationHelper& aStream);
   140 	void SetStreamBufferControl(MStreamBufferControl& aStreamBufferControl);
   141 
   142 	// from MAudioCodecObserver
   143 	void SampleRateSet(TInt aError);
   144 	void ModeSet(TInt aError);
   145 	void GetSupportedSampleRatesComplete (TInt aError);
   146 	void GetSupportedModesComplete (TInt aError);
   147 	
   148 	// from MA3FBackdoorAccessIf
   149 	MAudioContext* AudioContext();
   150 	MAudioStream* AudioStream();
   151 	MAudioProcessingUnit* ProcessingUnit(TUid aType);
   152 
   153 	/**
   154 	Create a new instance.
   155 	
   156 	@param aStream the stream implementation. Ownership of the pointer is transferred to the 
   157 			create CAudioStream object instance.
   158 	@return CAudioStreamComponent* a pointer to the created instance.
   159 	*/
   160 	static CLogicalAudioStream* NewL(TUid aTypeId);
   161 	
   162 	//Get functions for configuration
   163 	void GetSupportedSampleRates(RArray<TInt>& aSupportedRates);
   164 	void GetSupportedModes(RArray<TUid>& aSupportedModes);
   165 	
   166 	virtual void SetParentContext(const CAudioContext& aContext);
   167 	
   168 protected:
   169 	// Internal method
   170 	void MapUidToProcessingUnit(TUid aType, MAudioProcessingUnit*& aInstance);
   171 
   172 	void CopyStreamSettings(const MLogicalChain& aChain);
   173 	void CopyCodecSettings(const MLogicalChain& aChain);
   174 	void CopyGainSettings(const MLogicalChain& aChain);
   175 
   176 private:
   177 
   178 	void ConstructL();
   179 	CLogicalAudioStream();
   180 	TInt DoAddProcessingUnit(MAudioProcessingUnit* aUnit);
   181 
   182 private:
   183 	// Time processed
   184 	TTimeIntervalMicroSeconds iTimeProcessed;
   185 
   186 	// Audio processing units at this context
   187 	RPointerArray<MAudioProcessingUnit>		iAudioProcessingUnits;
   188 	
   189 	// CI observers
   190 	RPointerArray<MCustomInterfaceSupportObserver>	iCISupportObservers;
   191 
   192 	// Stream state
   193 	TAudioState iCurrentState;
   194 	
   195 	TAudioState iRequestState;
   196 
   197 	// MLogical chain variables
   198 	MAudioProcessingUnit*		iCodec;
   199 
   200 	MAudioProcessingUnit*		iGain;
   201 
   202 	// General pointer, useful to manage all the audioprocessingunit
   203 	// never keeps specific information
   204 	MAudioProcessingUnit*		iAudioProcessingUnit;
   205 
   206 	// Adaptation interfaces
   207 	MStreamPositionControl*		iPositionControl;
   208 	MStreamBufferControl*		iStreamBufferControl;
   209 
   210 	MCustomInterfaceSupport*	iInterfaceProvider;
   211 
   212 	// Message type 
   213 	TUint		iMessageType;
   214 
   215 	TInt	iContextPriority;
   216 	
   217 	// handle back to parent context
   218 	CAudioContext* iParentContext;
   219 	};
   220 	
   221 #endif // LOGICALAUDIOSTREAM_H