Update contrib.
1 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
18 #include "logicalaudiocodec.h"
19 #include <a3f/audioprocessingunittypeuids.h>
21 #include <ecom/implementationproxy.h> // For making it ECom plugin
22 // Map the interface implementation UIDs to implementation factory functions
23 const TImplementationProxy ImplementationTable[] =
25 IMPLEMENTATION_PROXY_ENTRY(KAudioDecoderUid, CLogicalAudioCodec::NewL),
26 IMPLEMENTATION_PROXY_ENTRY(KAudioEncoderUid, CLogicalAudioCodec::NewL),
29 // Exported proxy for instantiation method resolution.
30 EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
32 aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
33 return ImplementationTable;
36 // ---------------------------------------------------------------------------
38 // ---------------------------------------------------------------------------
39 CLogicalAudioCodec* CLogicalAudioCodec::NewL(TAny* aParam)
41 DP_STATIC_CONTEXT(CLogicalAudioCodec::NewL *CD0*, CtxDevSound, DPLOCAL);
43 CLogicalAudioCodec* self = new(ELeave)CLogicalAudioCodec(aParam);
44 CleanupStack::PushL(self);
46 CleanupStack::Pop(self);
47 DP0_RET(self, "0x%x");
50 // ---------------------------------------------------------------------------
52 // ---------------------------------------------------------------------------
54 CLogicalAudioCodec::CLogicalAudioCodec(TAny* aParam) : CAudioProcessingUnit(aParam)
57 DP_CONTEXT(CLogicalAudioCodec::CLogicalAudioCodec *CD1*, CtxDevSound, DPLOCAL);
61 iSettingsObserver->ReceiveComponentSettingsChange(iType, ERegisterCodecObserver);
66 // ---------------------------------------------------------------------------
67 // Second phase constructor
68 // ---------------------------------------------------------------------------
69 void CLogicalAudioCodec::ConstructL()
71 DP_CONTEXT(CLogicalAudioCodec::ConstructL *CD1*, CtxDevSound, DPLOCAL);
76 // ---------------------------------------------------------------------------
78 // ---------------------------------------------------------------------------
79 CLogicalAudioCodec::~CLogicalAudioCodec()
81 DP_CONTEXT(CLogicalAudioCodec::~CLogicalAudioCodec *CD1*, CtxDevSound, DPLOCAL);
83 iAudioCodecObserver.Close();
87 // ---------------------------------------------------------------------------
88 // from class MAudioCodec
89 // CLogicalAudioCodec::SetFormat
90 // ---------------------------------------------------------------------------
91 TInt CLogicalAudioCodec::SetFormat(TUid aFormat)
93 DP_CONTEXT(CLogicalAudioCodec::SetFormat *CD1*, CtxDevSound, DPLOCAL);
98 iSettingsObserver->ReceiveComponentSettingsChange(iType, EComponentAlterationCodec);
100 DP0_RET(KErrNone, "%d");
103 // ---------------------------------------------------------------------------
104 // from class MAudioCodec
105 // CLogicalAudioCodec::SetSampleRate
106 // ---------------------------------------------------------------------------
107 TInt CLogicalAudioCodec::SetSampleRate(TInt aSampleRate)
109 DP_CONTEXT(CLogicalAudioCodec::SetSampleRate *CD1*, CtxDevSound, DPLOCAL);
111 iSampleRateConfig = aSampleRate;
112 if(iSettingsObserver)
114 iSettingsObserver->ReceiveComponentSettingsChange(iType, EComponentAlterationCodec);
116 DP0_RET(KErrNone, "%d");
119 // ---------------------------------------------------------------------------
120 // from class MAudioCodec
121 // CLogicalAudioCodec::SetMode
122 // ---------------------------------------------------------------------------
123 TInt CLogicalAudioCodec::SetMode(TUid aMode)
125 DP_CONTEXT(CLogicalAudioCodec::SetMode *CD1*, CtxDevSound, DPLOCAL);
128 if(iSettingsObserver)
130 iSettingsObserver->ReceiveComponentSettingsChange(iType, EComponentAlterationCodec);
132 DP0_RET(KErrNone, "%d");
135 // ---------------------------------------------------------------------------
136 // from class MAudioCodec
137 // CLogicalAudioCodec::GetSupportedSamplesRates
138 // ---------------------------------------------------------------------------
139 TInt CLogicalAudioCodec::GetSupportedSamplesRates(RArray<TInt>& aSupportedRates)
141 DP_CONTEXT(CLogicalAudioCodec::GetSupportedSamplesRates *CD1*, CtxDevSound, DPLOCAL);
144 if(iAdaptationStream)
146 err = iAdaptationStream->GetSupportedSampleRates(aSupportedRates);
155 // ---------------------------------------------------------------------------
156 // from class MAudioCodec
157 // CLogicalAudioCodec::GetSupportedMode
158 // ---------------------------------------------------------------------------
159 TInt CLogicalAudioCodec::GetSupportedModes(RArray<TUid>& aSupportedModes)
161 DP_CONTEXT(CLogicalAudioCodec::GetSupportedModes *CD1*, CtxDevSound, DPLOCAL);
164 if(iAdaptationStream)
166 err = iAdaptationStream->GetSupportedModes(aSupportedModes);
174 // ---------------------------------------------------------------------------
175 // from class MAudioProcessingUnit
176 // CLogicalAudioCodec::IsTypeOf
177 // ---------------------------------------------------------------------------
178 TBool CLogicalAudioCodec::IsTypeOf(TUid aTypeId) const
180 DP_CONTEXT(CLogicalAudioCodec::IsTypeOf *CD1*, CtxDevSound, DPLOCAL);
182 TBool result = EFalse;
183 if ( iType == aTypeId || aTypeId == KUidAudioCodec)
187 DP0_RET(result, "%d");
190 // ---------------------------------------------------------------------------
191 // from class MAudioProcessingUnit
192 // CLogicalAudioCodec::Interface
193 // ---------------------------------------------------------------------------
195 TAny* CLogicalAudioCodec::Interface(TUid aType)
197 DP_CONTEXT(CLogicalAudioCodec::Interface *CD1*, CtxDevSound, DPLOCAL);
200 TAny* interface = NULL;
201 if (aType == KUidAudioCodec)
203 interface = static_cast<MAudioCodec*>(this);
205 else if (aType == KUidAudioCodecAdaptationObserver)
207 interface = static_cast<MAudioCodecAdaptationObserver*>(this);
209 DP0_RET(interface, "0x%08x");
212 // ---------------------------------------------------------------------------
213 // from class MAudioCodecAdaptationObserver
214 // CLogicalAudioCodec::AllBuffersProcessed
215 // ---------------------------------------------------------------------------
216 void CLogicalAudioCodec::AllBuffersProcessed()
218 DP_CONTEXT(CLogicalAudioCodec::AllBuffersProcessed *CD1*, CtxDevSound, DPLOCAL);
223 // ---------------------------------------------------------------------------
224 // from class MAudioCodecAdaptationObserver
225 // CLogicalAudioCodec::GetSupportedConfigurationComplete
226 // ---------------------------------------------------------------------------
227 void CLogicalAudioCodec::GetSupportedAModesComplete(TInt aError)
229 DP_CONTEXT(CLogicalAudioCodec::GetSupportedModesComplete *CD1*, CtxDevSound, DPLOCAL);
231 TUint count = iAudioCodecObserver.Count();
232 for ( TUint idx(0); idx < count; idx++ )
234 iAudioCodecObserver[idx]->GetSupportedModesComplete(aError);
239 // ---------------------------------------------------------------------------
240 // from class MAudioCodecAdaptationObserver
241 // CLogicalAudioCodec::GetSupportedConfigurationComplete
242 // ---------------------------------------------------------------------------
243 void CLogicalAudioCodec::GetSupportedARatesComplete(TInt aError)
245 DP_CONTEXT(CLogicalAudioCodec::GetSupportedRatesComplete *CD1*, CtxDevSound, DPLOCAL);
247 TUint count = iAudioCodecObserver.Count();
248 for ( TUint idx(0); idx < count; idx++ )
250 iAudioCodecObserver[idx]->GetSupportedSampleRatesComplete(aError);
255 // ---------------------------------------------------------------------------
256 // from class MAudioCodecAdaptationObserver
257 // CLogicalAudioCodec::ProcessingUnitError
258 // ---------------------------------------------------------------------------
259 void CLogicalAudioCodec::ProcessingUnitError(TInt aError)
261 DP_CONTEXT(CLogicalAudioCodec::ProcessingUnitError *CD1*, CtxDevSound, DPLOCAL);
264 TUint count = iAudioProcessingUnitObservers.Count();
265 MAudioProcessingUnit* pUnit = static_cast<MAudioProcessingUnit*>(this);
266 for(TUint index=0; index < count; index++)
268 iAudioProcessingUnitObservers[index]->ProcessingUnitError(pUnit, aError);
273 // ---------------------------------------------------------------------------
274 // CLogicalAudioCodec::RegisterAudioCodecObserver
275 // ---------------------------------------------------------------------------
276 TInt CLogicalAudioCodec::RegisterAudioCodecObserver(MAudioCodecObserver& aObserver)
278 DP_CONTEXT(CLogicalAudioCodec::RegisterAudioCodecObserver *CD1*, CtxDevSound, DPLOCAL);
280 TInt err = iAudioCodecObserver.Find(&aObserver);
281 if(err == KErrNotFound)
283 err = iAudioCodecObserver.Append(&aObserver);
287 err = KErrAlreadyExists;
292 // ---------------------------------------------------------------------------
293 // CLogicalAudioCodec::UnregisterAudioCodecObserver
294 // ---------------------------------------------------------------------------
295 void CLogicalAudioCodec::UnregisterAudioCodecObserver(MAudioCodecObserver& aObserver)
297 DP_CONTEXT(CLogicalAudioCodec::UnregisterAudioCodecObserver *CD1*, CtxDevSound, DPLOCAL);
299 TInt idxOrErr = iAudioCodecObserver.Find(&aObserver);
300 if( idxOrErr != KErrNotFound )
302 iAudioCodecObserver.Remove(idxOrErr);