os/mm/devsoundextensions/effects/AudioEqualizer/AudioEqualizerEffect/Src/AudioEqualizerBase.cpp
Update contrib.
2 * Copyright (c) 2006 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.
14 * Description: Implementation of the Audio Equalizer effect class
27 #include <AudioEqualizerBase.h>
28 #include <CustomInterfaceUtility.h>
29 #include "AudioEqualizerProxy.h"
31 #include <DrmAudioSamplePlayer.h>
32 #include <mdaaudioinputstream.h>
33 #include <mdaaudiooutputstream.h>
34 #include <mdaaudiotoneplayer.h>
35 #include <mmf/server/sounddevice.h>
38 #define DEBPRN0 RDebug::Printf( "%s", __PRETTY_FUNCTION__);
39 #define DEBPRN1(str) RDebug::Printf( "%s %s", __PRETTY_FUNCTION__, str );
45 // ============================ MEMBER FUNCTIONS ===============================
47 // -----------------------------------------------------------------------------
48 // CAudioEqualizer::CAudioEqualizer
49 // C++ default constructor can NOT contain any code, that
51 // -----------------------------------------------------------------------------
53 EXPORT_C CAudioEqualizer::CAudioEqualizer()
54 : iAudioEqualizerData(0, 0),
55 iDataPckgTo(iAudioEqualizerData),
61 EXPORT_C CAudioEqualizer::~CAudioEqualizer()
67 // -----------------------------------------------------------------------------
68 // CAudioEqualizer::NewL
69 // Static function for creating an instance of the AudioEqualizer object.
70 // -----------------------------------------------------------------------------
72 EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL()
74 User::Leave(KErrNotSupported);
78 // -----------------------------------------------------------------------------
79 // CAudioEqualizer::NewL
80 // Static function for creating an instance of the AudioEqualizer object.
81 // -----------------------------------------------------------------------------
83 EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
84 CMdaAudioConvertUtility& aUtility )
87 CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
88 CleanupStack::PushL(customInterface);
90 CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect);
92 if ( !audioEqualizerProxy )
94 DEBPRN1("No Adaptation Support - leaving");
95 User::Leave(KErrNotSupported);
98 CleanupStack::Pop(customInterface);
100 return audioEqualizerProxy;
103 // -----------------------------------------------------------------------------
104 // CAudioEqualizer::NewL
105 // Static function for creating an instance of the AudioEqualizer object.
106 // -----------------------------------------------------------------------------
108 EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
109 CMdaAudioInputStream& aUtility )
112 CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)aUtility.CustomInterface(KUidAudioEqualizerEffect);
113 if (audioEqualizerProxy == NULL)
115 DEBPRN1("No Adaptation Support - leaving");
116 User::Leave(KErrNotSupported);
118 return audioEqualizerProxy;
121 // -----------------------------------------------------------------------------
122 // CAudioEqualizer::NewL
123 // Static function for creating an instance of the AudioEqualizer object.
124 // -----------------------------------------------------------------------------
126 EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
127 CMdaAudioOutputStream& aUtility )
130 CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)aUtility.CustomInterface(KUidAudioEqualizerEffect);
131 if (audioEqualizerProxy == NULL)
133 DEBPRN1("No Adaptation Support - leaving");
134 User::Leave(KErrNotSupported);
136 return audioEqualizerProxy;
139 // -----------------------------------------------------------------------------
140 // CAudioEqualizer::NewL
141 // Static function for creating an instance of the AudioEqualizer object.
142 // -----------------------------------------------------------------------------
144 EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
145 CMdaAudioPlayerUtility& aUtility )
148 CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
149 CleanupStack::PushL(customInterface);
151 CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect);
153 if ( !audioEqualizerProxy )
155 DEBPRN1("No Adaptation Support - leaving");
156 User::Leave(KErrNotSupported);
159 CleanupStack::Pop(customInterface);
161 return audioEqualizerProxy;
164 // -----------------------------------------------------------------------------
165 // CAudioEqualizer::NewL
166 // Static function for creating an instance of the AudioEqualizer object.
167 // -----------------------------------------------------------------------------
169 EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
170 CMdaAudioRecorderUtility& aUtility,
171 TBool aRecordStream )
174 CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility, aRecordStream);
175 CleanupStack::PushL(customInterface);
177 CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect);
179 if ( !audioEqualizerProxy )
181 DEBPRN1("No Adaptation Support - leaving");
182 User::Leave(KErrNotSupported);
185 CleanupStack::Pop(customInterface);
187 return audioEqualizerProxy;
190 // -----------------------------------------------------------------------------
191 // CAudioEqualizer::NewL
192 // Static function for creating an instance of the AudioEqualizer object.
193 // -----------------------------------------------------------------------------
195 EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
196 CMdaAudioToneUtility& aUtility )
199 CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)aUtility.CustomInterface(KUidAudioEqualizerEffect);
200 if (audioEqualizerProxy == NULL)
202 DEBPRN1("No Adaptation Support - leaving");
203 User::Leave(KErrNotSupported);
205 return audioEqualizerProxy;
208 // -----------------------------------------------------------------------------
209 // CAudioEqualizer::NewL
210 // Static function for creating an instance of the AudioEqualizer object.
211 // -----------------------------------------------------------------------------
213 EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
214 CMMFDevSound& aDevSound )
217 CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)aDevSound.CustomInterface(KUidAudioEqualizerEffect);
218 if (audioEqualizerProxy == NULL)
220 DEBPRN1("No Adaptation Support - leaving");
221 User::Leave(KErrNotSupported);
223 return audioEqualizerProxy;
226 // -----------------------------------------------------------------------------
227 // CAudioEqualizer::NewL
228 // Static function for creating an instance of the AudioEqualizer object.
229 // -----------------------------------------------------------------------------
231 EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
232 CCustomCommandUtility* aUtility )
235 CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
236 CleanupStack::PushL(customInterface);
238 CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect);
239 if ( !audioEqualizerProxy )
241 DEBPRN1("No Adaptation Support - leaving");
242 User::Leave(KErrNotSupported);
245 CleanupStack::Pop(customInterface);
247 return audioEqualizerProxy;
250 // -----------------------------------------------------------------------------
251 // CAudioEqualizer::NewL
252 // Static function for creating an instance of the AudioEqualizer object.
253 // -----------------------------------------------------------------------------
255 EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
256 MCustomInterface& aCustomInterface )
259 CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)aCustomInterface.CustomInterface(KUidAudioEqualizerEffect);
261 if ( !audioEqualizerProxy )
263 DEBPRN1("No Adaptation Support - leaving");
264 User::Leave(KErrNotSupported);
267 return audioEqualizerProxy;
270 // -----------------------------------------------------------------------------
271 // CAudioEqualizer::NewL
272 // Static function for creating an instance of the AudioEqualizer object.
273 // -----------------------------------------------------------------------------
275 EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
276 CMidiClientUtility& aUtility )
279 CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
280 CleanupStack::PushL(customInterface);
282 CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect);
284 if ( !audioEqualizerProxy )
286 DEBPRN1("No Adaptation Support - leaving");
287 User::Leave(KErrNotSupported);
290 CleanupStack::Pop(customInterface);
292 return audioEqualizerProxy;
295 // -----------------------------------------------------------------------------
296 // CAudioEqualizer::NewL
297 // Static function for creating an instance of the AudioEqualizer object.
298 // -----------------------------------------------------------------------------
300 EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
301 CDrmPlayerUtility& aUtility )
304 CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
305 CleanupStack::PushL(customInterface);
307 CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect);
309 if ( !audioEqualizerProxy )
311 DEBPRN1("No Adaptation Support - leaving");
312 User::Leave(KErrNotSupported);
315 CleanupStack::Pop(customInterface);
317 return audioEqualizerProxy;
320 // -----------------------------------------------------------------------------
321 // CAudioEqualizer::NewL
322 // Static function for creating an instance of the AudioEqualizer object.
323 // -----------------------------------------------------------------------------
325 EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
326 CVideoPlayerUtility& aUtility )
329 CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
330 CleanupStack::PushL(customInterface);
332 CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect);
334 if ( !audioEqualizerProxy )
336 DEBPRN1("No Adaptation Support - leaving");
337 User::Leave(KErrNotSupported);
340 CleanupStack::Pop(customInterface);
342 return audioEqualizerProxy;
344 // -----------------------------------------------------------------------------
345 // CAudioEqualizer::BandLevel
346 // -----------------------------------------------------------------------------
348 EXPORT_C TInt32 CAudioEqualizer::BandLevel(
351 if( aBand > NumberOfBands() )
357 return iBandsData[aBand-1].iBandLevel;
361 // -----------------------------------------------------------------------------
362 // CAudioEqualizer::BandWidth
363 // -----------------------------------------------------------------------------
365 EXPORT_C TInt32 CAudioEqualizer::BandWidth(
368 if( aBand > NumberOfBands() )
374 return iBandsData[aBand-1].iBandWidth;
378 // -----------------------------------------------------------------------------
379 // CAudioEqualizer::CenterFrequency
380 // -----------------------------------------------------------------------------
382 EXPORT_C TInt32 CAudioEqualizer::CenterFrequency(
385 if( aBand > NumberOfBands() )
391 return iBandsData[aBand-1].iCenterFrequency;
395 // -----------------------------------------------------------------------------
396 // CAudioEqualizer::CrossoverFrequency
397 // -----------------------------------------------------------------------------
399 EXPORT_C TInt32 CAudioEqualizer::CrossoverFrequency(
402 if( aBand > NumberOfBands() )
408 return iBandsData[aBand-1].iCrossoverFrequency;
412 // -----------------------------------------------------------------------------
413 // CAudioEqualizer::DbLevelLimits
414 // -----------------------------------------------------------------------------
416 EXPORT_C void CAudioEqualizer::DbLevelLimits(
420 aMin = iAudioEqualizerData.iMindB;
421 aMax = iAudioEqualizerData.iMaxdB;
424 // -----------------------------------------------------------------------------
425 // CAudioEqualizer::CrossoverFrequency
426 // -----------------------------------------------------------------------------
428 EXPORT_C TUint8 CAudioEqualizer::NumberOfBands() const
431 return iBandsData.Count();
434 // -----------------------------------------------------------------------------
435 // CAudioEqualizer::SetBandLevelL
436 // -----------------------------------------------------------------------------
438 EXPORT_C void CAudioEqualizer::SetBandLevelL(
442 if( aBand > NumberOfBands() )
444 User::Leave(KErrArgument);
449 iBandChange = iBandChange | (mask << aBand-1);
450 iBandsData[aBand-1].iBandLevel = aLevel;
454 // -----------------------------------------------------------------------------
455 // CAudioEqualizer::Uid
456 // -----------------------------------------------------------------------------
458 EXPORT_C TUid CAudioEqualizer::Uid() const
460 return KUidAudioEqualizerEffect;
464 // -----------------------------------------------------------------------------
465 // CAudioEqualizer::DoEffectData
466 // -----------------------------------------------------------------------------
468 EXPORT_C const TDesC8& CAudioEqualizer::DoEffectData()
471 iDataPckgTo = iAudioEqualizerData;
475 // -----------------------------------------------------------------------------
476 // CAudioEqualizer::SetEffectData
477 // -----------------------------------------------------------------------------
479 EXPORT_C void CAudioEqualizer::SetEffectData(
480 const TDesC8& aEffectDataBuffer )
483 TEfAudioEqualizerDataPckg dataPckg;
484 dataPckg.Copy(aEffectDataBuffer);
485 iAudioEqualizerData = dataPckg();
486 iEnabled = iAudioEqualizerData.iEnabled;
487 iEnforced = iAudioEqualizerData.iEnforced;
488 iHaveUpdateRights = iAudioEqualizerData.iHaveUpdateRights;
491 // -----------------------------------------------------------------------------
492 // CAudioEqualizer::DoBandData
493 // -----------------------------------------------------------------------------
495 EXPORT_C const TDesC8& CAudioEqualizer::DoBandDataL(
509 iBandDataBuf = HBufC8::NewL(NumberOfBands() * sizeof(TEfAudioEqualizerBand));
510 TPtr8 des = iBandDataBuf->Des();
511 des.SetLength(iBandDataBuf->Size());
512 RDesWriteStream writeStream(des);
514 for (TInt i=0; i<NumberOfBands(); i++)
516 writeStream << iBandsData[i];
518 writeStream.CommitL();
519 return *iBandDataBuf;
523 if ( aBand > NumberOfBands() )
525 User::Leave(KErrArgument);
527 iBandDataPckgTo = iBandsData[aBand-1];
528 return iBandDataPckgTo;
532 // -----------------------------------------------------------------------------
533 // CAudioEqualizer::SetBandData
534 // -----------------------------------------------------------------------------
536 EXPORT_C void CAudioEqualizer::SetBandDataL(
538 const TDesC8& aBandDataBuffer )
541 if ( aNumberOfBands > 1 )
543 RDesReadStream readStream(aBandDataBuffer);
544 for (TInt i=0; i<NumberOfBands(); i++)
546 readStream >> iBandsData[i];
551 TEfAudioEqualizerBandDataPckg dataPckg;
552 TEfAudioEqualizerBand band;
553 dataPckg.Copy(aBandDataBuffer);
555 if ( band.iBandId > NumberOfBands() )
557 User::Leave(KErrArgument);
559 iBandsData[band.iBandId-1] = band;
563 // ========================== OTHER EXPORTED FUNCTIONS =========================