First public contribution.
2 * Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
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".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
20 #ifndef LOGICALAUDIOSTREAM_H
21 #define LOGICALAUDIOSTREAM_H
24 #include <a3f/a3f_trace_utils.h>
25 #include <a3f/audioprocessingunittypeuids.h>
26 #include <a3f/a3fbase.h>
28 #include <a3f/maudioprocessingunitobserver.h>
29 #include <a3f/maudiostreamobserver.h>
31 #include "componentparameters.h"
32 #include "audiostreammanager.h"
34 #include <a3f/msynccisupport.h>
35 #include "../shared/a3fbackdooraccess.h"
36 #include "../audiocontext/audiocontext.h"
38 // TO BE REMOVED WHEN MMRC SERVER IS READY
39 #include "mlogicalchain.h"
40 #include "maudiostreamadaptationobserver.h"
41 #include "maudiocodecadaptationobserver.h"
43 #include <a3f/maudiocodecobserver.h>
45 #include "mstreambuffercontrol.h"
48 class MLogicalSettingObserver;
49 class CLogicalAudioCodec;
50 class CLogicalAudioGainControl;
51 class CLogicalBufferSource;
52 class CLogicalBufferSink;
53 class CLogicalAudioDeviceSink;
54 class CLogicalAudioDeviceSource;
58 This is the implementation of audio stream API.
62 NONSHARABLE_CLASS(CLogicalAudioStream) : public CAudioStreamManager,
63 public MCustomInterfaceSupport,
64 public MCustomInterfaceSupportObserver,
65 public MAudioStreamAdaptationObserver,
67 public MAudioCodecObserver,
68 public MA3FBackdoorAccessIf
70 friend class CAudioContext;
76 Deletes all objects and releases all resource owned by this instance.
78 virtual ~CLogicalAudioStream();
81 virtual TInt Initialize();
83 virtual TInt Activate();
85 virtual TInt Unload();
86 virtual TInt Uninitialize();
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);
99 // from MCustomInterfaceSupport
100 virtual TInt RequestCustomInterface(TUid aUid, TAny*& aPtr);
101 virtual TInt RegisterObserver(MCustomInterfaceSupportObserver& aObserver);
102 virtual void UnRegisterObserver(MCustomInterfaceSupportObserver& aObserver);
104 // from MCustomInterfaceSupportObserver
105 virtual void CustomInterfaceRemoval(TUid aInterfaceUid, TAny* aPtr);
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);
115 // from MLogicalChain
116 void SetMessageType(TMMRCMessageType aMessageType);
119 TUid AudioProcessingUnitUid(TInt aIndex);
120 TInt AudioProcessingUnitsCount();
121 TAudioState StreamState();
122 void SetStreamState(TAudioState aState);
124 TInt GetSampleRate();
127 void GetVolumeRampParameters(TUid& aRampOperation, TTimeIntervalMicroSeconds& aRampDuration);
128 MLogicalChain* CloneL();
130 TAny* GetComponent(TUid aType);
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);
142 // from MAudioCodecObserver
143 void SampleRateSet(TInt aError);
144 void ModeSet(TInt aError);
145 void GetSupportedSampleRatesComplete (TInt aError);
146 void GetSupportedModesComplete (TInt aError);
148 // from MA3FBackdoorAccessIf
149 MAudioContext* AudioContext();
150 MAudioStream* AudioStream();
151 MAudioProcessingUnit* ProcessingUnit(TUid aType);
154 Create a new instance.
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.
160 static CLogicalAudioStream* NewL(TUid aTypeId);
162 //Get functions for configuration
163 void GetSupportedSampleRates(RArray<TInt>& aSupportedRates);
164 void GetSupportedModes(RArray<TUid>& aSupportedModes);
166 virtual void SetParentContext(const CAudioContext& aContext);
170 void MapUidToProcessingUnit(TUid aType, MAudioProcessingUnit*& aInstance);
172 void CopyStreamSettings(const MLogicalChain& aChain);
173 void CopyCodecSettings(const MLogicalChain& aChain);
174 void CopyGainSettings(const MLogicalChain& aChain);
179 CLogicalAudioStream();
180 TInt DoAddProcessingUnit(MAudioProcessingUnit* aUnit);
184 TTimeIntervalMicroSeconds iTimeProcessed;
186 // Audio processing units at this context
187 RPointerArray<MAudioProcessingUnit> iAudioProcessingUnits;
190 RPointerArray<MCustomInterfaceSupportObserver> iCISupportObservers;
193 TAudioState iCurrentState;
195 TAudioState iRequestState;
197 // MLogical chain variables
198 MAudioProcessingUnit* iCodec;
200 MAudioProcessingUnit* iGain;
202 // General pointer, useful to manage all the audioprocessingunit
203 // never keeps specific information
204 MAudioProcessingUnit* iAudioProcessingUnit;
206 // Adaptation interfaces
207 MStreamPositionControl* iPositionControl;
208 MStreamBufferControl* iStreamBufferControl;
210 MCustomInterfaceSupport* iInterfaceProvider;
215 TInt iContextPriority;
217 // handle back to parent context
218 CAudioContext* iParentContext;
221 #endif // LOGICALAUDIOSTREAM_H