os/mm/devsoundextensions/effects/AudioEqualizer/AudioEqualizerEffect/Src/AudioEqualizerBase.cpp
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/mm/devsoundextensions/effects/AudioEqualizer/AudioEqualizerEffect/Src/AudioEqualizerBase.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,565 @@
1.4 +/*
1.5 +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
1.6 +* All rights reserved.
1.7 +* This component and the accompanying materials are made available
1.8 +* under the terms of "Eclipse Public License v1.0"
1.9 +* which accompanies this distribution, and is available
1.10 +* at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.11 +*
1.12 +* Initial Contributors:
1.13 +* Nokia Corporation - initial contribution.
1.14 +*
1.15 +* Contributors:
1.16 +*
1.17 +* Description: Implementation of the Audio Equalizer effect class
1.18 +*
1.19 +*/
1.20 +
1.21 +
1.22 +
1.23 +
1.24 +// INCLUDE FILES
1.25 +
1.26 +#ifdef _DEBUG
1.27 +#include <e32svr.h>
1.28 +#endif
1.29 +
1.30 +#include <AudioEqualizerBase.h>
1.31 +#include <CustomInterfaceUtility.h>
1.32 +#include "AudioEqualizerProxy.h"
1.33 +#include <s32mem.h>
1.34 +#include <DrmAudioSamplePlayer.h>
1.35 +#include <mdaaudioinputstream.h>
1.36 +#include <mdaaudiooutputstream.h>
1.37 +#include <mdaaudiotoneplayer.h>
1.38 +#include <mmf/server/sounddevice.h>
1.39 +
1.40 +#ifdef _DEBUG
1.41 +#define DEBPRN0 RDebug::Printf( "%s", __PRETTY_FUNCTION__);
1.42 +#define DEBPRN1(str) RDebug::Printf( "%s %s", __PRETTY_FUNCTION__, str );
1.43 +#else
1.44 +#define DEBPRN0
1.45 +#define DEBPRN1(str)
1.46 +#endif
1.47 +
1.48 +// ============================ MEMBER FUNCTIONS ===============================
1.49 +
1.50 +// -----------------------------------------------------------------------------
1.51 +// CAudioEqualizer::CAudioEqualizer
1.52 +// C++ default constructor can NOT contain any code, that
1.53 +// might leave.
1.54 +// -----------------------------------------------------------------------------
1.55 +//
1.56 +EXPORT_C CAudioEqualizer::CAudioEqualizer()
1.57 + : iAudioEqualizerData(0, 0),
1.58 + iDataPckgTo(iAudioEqualizerData),
1.59 + iBandChange(0)
1.60 + {
1.61 + }
1.62 +
1.63 +// Destructor
1.64 +EXPORT_C CAudioEqualizer::~CAudioEqualizer()
1.65 + {
1.66 + delete iBandDataBuf;
1.67 + iBandsData.Close();
1.68 + }
1.69 +
1.70 +// -----------------------------------------------------------------------------
1.71 +// CAudioEqualizer::NewL
1.72 +// Static function for creating an instance of the AudioEqualizer object.
1.73 +// -----------------------------------------------------------------------------
1.74 +//
1.75 +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL()
1.76 + {
1.77 + User::Leave(KErrNotSupported);
1.78 + return NULL;
1.79 + }
1.80 +
1.81 +// -----------------------------------------------------------------------------
1.82 +// CAudioEqualizer::NewL
1.83 +// Static function for creating an instance of the AudioEqualizer object.
1.84 +// -----------------------------------------------------------------------------
1.85 +//
1.86 +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
1.87 + CMdaAudioConvertUtility& aUtility )
1.88 + {
1.89 + DEBPRN0;
1.90 + CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
1.91 + CleanupStack::PushL(customInterface);
1.92 +
1.93 + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect);
1.94 +
1.95 + if ( !audioEqualizerProxy )
1.96 + {
1.97 + DEBPRN1("No Adaptation Support - leaving");
1.98 + User::Leave(KErrNotSupported);
1.99 + }
1.100 +
1.101 + CleanupStack::Pop(customInterface);
1.102 +
1.103 + return audioEqualizerProxy;
1.104 + }
1.105 +
1.106 +// -----------------------------------------------------------------------------
1.107 +// CAudioEqualizer::NewL
1.108 +// Static function for creating an instance of the AudioEqualizer object.
1.109 +// -----------------------------------------------------------------------------
1.110 +//
1.111 +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
1.112 + CMdaAudioInputStream& aUtility )
1.113 + {
1.114 + DEBPRN0;
1.115 + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)aUtility.CustomInterface(KUidAudioEqualizerEffect);
1.116 + if (audioEqualizerProxy == NULL)
1.117 + {
1.118 + DEBPRN1("No Adaptation Support - leaving");
1.119 + User::Leave(KErrNotSupported);
1.120 + }
1.121 + return audioEqualizerProxy;
1.122 + }
1.123 +
1.124 +// -----------------------------------------------------------------------------
1.125 +// CAudioEqualizer::NewL
1.126 +// Static function for creating an instance of the AudioEqualizer object.
1.127 +// -----------------------------------------------------------------------------
1.128 +//
1.129 +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
1.130 + CMdaAudioOutputStream& aUtility )
1.131 + {
1.132 + DEBPRN0;
1.133 + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)aUtility.CustomInterface(KUidAudioEqualizerEffect);
1.134 + if (audioEqualizerProxy == NULL)
1.135 + {
1.136 + DEBPRN1("No Adaptation Support - leaving");
1.137 + User::Leave(KErrNotSupported);
1.138 + }
1.139 + return audioEqualizerProxy;
1.140 + }
1.141 +
1.142 +// -----------------------------------------------------------------------------
1.143 +// CAudioEqualizer::NewL
1.144 +// Static function for creating an instance of the AudioEqualizer object.
1.145 +// -----------------------------------------------------------------------------
1.146 +//
1.147 +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
1.148 + CMdaAudioPlayerUtility& aUtility )
1.149 + {
1.150 + DEBPRN0;
1.151 + CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
1.152 + CleanupStack::PushL(customInterface);
1.153 +
1.154 + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect);
1.155 +
1.156 + if ( !audioEqualizerProxy )
1.157 + {
1.158 + DEBPRN1("No Adaptation Support - leaving");
1.159 + User::Leave(KErrNotSupported);
1.160 + }
1.161 +
1.162 + CleanupStack::Pop(customInterface);
1.163 +
1.164 + return audioEqualizerProxy;
1.165 + }
1.166 +
1.167 +// -----------------------------------------------------------------------------
1.168 +// CAudioEqualizer::NewL
1.169 +// Static function for creating an instance of the AudioEqualizer object.
1.170 +// -----------------------------------------------------------------------------
1.171 +//
1.172 +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
1.173 + CMdaAudioRecorderUtility& aUtility,
1.174 + TBool aRecordStream )
1.175 + {
1.176 + DEBPRN0;
1.177 + CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility, aRecordStream);
1.178 + CleanupStack::PushL(customInterface);
1.179 +
1.180 + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect);
1.181 +
1.182 + if ( !audioEqualizerProxy )
1.183 + {
1.184 + DEBPRN1("No Adaptation Support - leaving");
1.185 + User::Leave(KErrNotSupported);
1.186 + }
1.187 +
1.188 + CleanupStack::Pop(customInterface);
1.189 +
1.190 + return audioEqualizerProxy;
1.191 + }
1.192 +
1.193 +// -----------------------------------------------------------------------------
1.194 +// CAudioEqualizer::NewL
1.195 +// Static function for creating an instance of the AudioEqualizer object.
1.196 +// -----------------------------------------------------------------------------
1.197 +//
1.198 +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
1.199 + CMdaAudioToneUtility& aUtility )
1.200 + {
1.201 + DEBPRN0;
1.202 + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)aUtility.CustomInterface(KUidAudioEqualizerEffect);
1.203 + if (audioEqualizerProxy == NULL)
1.204 + {
1.205 + DEBPRN1("No Adaptation Support - leaving");
1.206 + User::Leave(KErrNotSupported);
1.207 + }
1.208 + return audioEqualizerProxy;
1.209 + }
1.210 +
1.211 +// -----------------------------------------------------------------------------
1.212 +// CAudioEqualizer::NewL
1.213 +// Static function for creating an instance of the AudioEqualizer object.
1.214 +// -----------------------------------------------------------------------------
1.215 +//
1.216 +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
1.217 + CMMFDevSound& aDevSound )
1.218 + {
1.219 + DEBPRN0;
1.220 + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)aDevSound.CustomInterface(KUidAudioEqualizerEffect);
1.221 + if (audioEqualizerProxy == NULL)
1.222 + {
1.223 + DEBPRN1("No Adaptation Support - leaving");
1.224 + User::Leave(KErrNotSupported);
1.225 + }
1.226 + return audioEqualizerProxy;
1.227 + }
1.228 +
1.229 +// -----------------------------------------------------------------------------
1.230 +// CAudioEqualizer::NewL
1.231 +// Static function for creating an instance of the AudioEqualizer object.
1.232 +// -----------------------------------------------------------------------------
1.233 +//
1.234 +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
1.235 + CCustomCommandUtility* aUtility )
1.236 + {
1.237 + DEBPRN0;
1.238 + CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
1.239 + CleanupStack::PushL(customInterface);
1.240 +
1.241 + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect);
1.242 + if ( !audioEqualizerProxy )
1.243 + {
1.244 + DEBPRN1("No Adaptation Support - leaving");
1.245 + User::Leave(KErrNotSupported);
1.246 + }
1.247 +
1.248 + CleanupStack::Pop(customInterface);
1.249 +
1.250 + return audioEqualizerProxy;
1.251 + }
1.252 +
1.253 +// -----------------------------------------------------------------------------
1.254 +// CAudioEqualizer::NewL
1.255 +// Static function for creating an instance of the AudioEqualizer object.
1.256 +// -----------------------------------------------------------------------------
1.257 +//
1.258 +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
1.259 + MCustomInterface& aCustomInterface )
1.260 + {
1.261 + DEBPRN0;
1.262 + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)aCustomInterface.CustomInterface(KUidAudioEqualizerEffect);
1.263 +
1.264 + if ( !audioEqualizerProxy )
1.265 + {
1.266 + DEBPRN1("No Adaptation Support - leaving");
1.267 + User::Leave(KErrNotSupported);
1.268 + }
1.269 +
1.270 + return audioEqualizerProxy;
1.271 + }
1.272 +
1.273 +// -----------------------------------------------------------------------------
1.274 +// CAudioEqualizer::NewL
1.275 +// Static function for creating an instance of the AudioEqualizer object.
1.276 +// -----------------------------------------------------------------------------
1.277 +//
1.278 +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
1.279 + CMidiClientUtility& aUtility )
1.280 + {
1.281 + DEBPRN0;
1.282 + CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
1.283 + CleanupStack::PushL(customInterface);
1.284 +
1.285 + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect);
1.286 +
1.287 + if ( !audioEqualizerProxy )
1.288 + {
1.289 + DEBPRN1("No Adaptation Support - leaving");
1.290 + User::Leave(KErrNotSupported);
1.291 + }
1.292 +
1.293 + CleanupStack::Pop(customInterface);
1.294 +
1.295 + return audioEqualizerProxy;
1.296 + }
1.297 +
1.298 +// -----------------------------------------------------------------------------
1.299 +// CAudioEqualizer::NewL
1.300 +// Static function for creating an instance of the AudioEqualizer object.
1.301 +// -----------------------------------------------------------------------------
1.302 +//
1.303 +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
1.304 + CDrmPlayerUtility& aUtility )
1.305 + {
1.306 + DEBPRN0;
1.307 + CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
1.308 + CleanupStack::PushL(customInterface);
1.309 +
1.310 + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect);
1.311 +
1.312 + if ( !audioEqualizerProxy )
1.313 + {
1.314 + DEBPRN1("No Adaptation Support - leaving");
1.315 + User::Leave(KErrNotSupported);
1.316 + }
1.317 +
1.318 + CleanupStack::Pop(customInterface);
1.319 +
1.320 + return audioEqualizerProxy;
1.321 + }
1.322 +
1.323 +// -----------------------------------------------------------------------------
1.324 +// CAudioEqualizer::NewL
1.325 +// Static function for creating an instance of the AudioEqualizer object.
1.326 +// -----------------------------------------------------------------------------
1.327 +//
1.328 +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL(
1.329 + CVideoPlayerUtility& aUtility )
1.330 + {
1.331 + DEBPRN0;
1.332 + CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
1.333 + CleanupStack::PushL(customInterface);
1.334 +
1.335 + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect);
1.336 +
1.337 + if ( !audioEqualizerProxy )
1.338 + {
1.339 + DEBPRN1("No Adaptation Support - leaving");
1.340 + User::Leave(KErrNotSupported);
1.341 + }
1.342 +
1.343 + CleanupStack::Pop(customInterface);
1.344 +
1.345 + return audioEqualizerProxy;
1.346 + }
1.347 +// -----------------------------------------------------------------------------
1.348 +// CAudioEqualizer::BandLevel
1.349 +// -----------------------------------------------------------------------------
1.350 +//
1.351 +EXPORT_C TInt32 CAudioEqualizer::BandLevel(
1.352 + TUint8 aBand ) const
1.353 + {
1.354 + if( aBand > NumberOfBands() )
1.355 + {
1.356 + return KErrArgument;
1.357 + }
1.358 + else
1.359 + {
1.360 + return iBandsData[aBand-1].iBandLevel;
1.361 + }
1.362 + }
1.363 +
1.364 +// -----------------------------------------------------------------------------
1.365 +// CAudioEqualizer::BandWidth
1.366 +// -----------------------------------------------------------------------------
1.367 +//
1.368 +EXPORT_C TInt32 CAudioEqualizer::BandWidth(
1.369 + TUint8 aBand ) const
1.370 + {
1.371 + if( aBand > NumberOfBands() )
1.372 + {
1.373 + return KErrArgument;
1.374 + }
1.375 + else
1.376 + {
1.377 + return iBandsData[aBand-1].iBandWidth;
1.378 + }
1.379 + }
1.380 +
1.381 +// -----------------------------------------------------------------------------
1.382 +// CAudioEqualizer::CenterFrequency
1.383 +// -----------------------------------------------------------------------------
1.384 +//
1.385 +EXPORT_C TInt32 CAudioEqualizer::CenterFrequency(
1.386 + TUint8 aBand ) const
1.387 + {
1.388 + if( aBand > NumberOfBands() )
1.389 + {
1.390 + return KErrArgument;
1.391 + }
1.392 + else
1.393 + {
1.394 + return iBandsData[aBand-1].iCenterFrequency;
1.395 + }
1.396 + }
1.397 +
1.398 +// -----------------------------------------------------------------------------
1.399 +// CAudioEqualizer::CrossoverFrequency
1.400 +// -----------------------------------------------------------------------------
1.401 +//
1.402 +EXPORT_C TInt32 CAudioEqualizer::CrossoverFrequency(
1.403 + TUint8 aBand ) const
1.404 + {
1.405 + if( aBand > NumberOfBands() )
1.406 + {
1.407 + return KErrArgument;
1.408 + }
1.409 + else
1.410 + {
1.411 + return iBandsData[aBand-1].iCrossoverFrequency;
1.412 + }
1.413 + }
1.414 +
1.415 +// -----------------------------------------------------------------------------
1.416 +// CAudioEqualizer::DbLevelLimits
1.417 +// -----------------------------------------------------------------------------
1.418 +//
1.419 +EXPORT_C void CAudioEqualizer::DbLevelLimits(
1.420 + TInt32& aMin,
1.421 + TInt32& aMax )
1.422 + {
1.423 + aMin = iAudioEqualizerData.iMindB;
1.424 + aMax = iAudioEqualizerData.iMaxdB;
1.425 + }
1.426 +
1.427 +// -----------------------------------------------------------------------------
1.428 +// CAudioEqualizer::CrossoverFrequency
1.429 +// -----------------------------------------------------------------------------
1.430 +//
1.431 +EXPORT_C TUint8 CAudioEqualizer::NumberOfBands() const
1.432 +
1.433 + {
1.434 + return iBandsData.Count();
1.435 + }
1.436 +
1.437 +// -----------------------------------------------------------------------------
1.438 +// CAudioEqualizer::SetBandLevelL
1.439 +// -----------------------------------------------------------------------------
1.440 +//
1.441 +EXPORT_C void CAudioEqualizer::SetBandLevelL(
1.442 + TInt8 aBand,
1.443 + TInt32 aLevel )
1.444 + {
1.445 + if( aBand > NumberOfBands() )
1.446 + {
1.447 + User::Leave(KErrArgument);
1.448 + }
1.449 + else
1.450 + {
1.451 + TUint32 mask = 1;
1.452 + iBandChange = iBandChange | (mask << aBand-1);
1.453 + iBandsData[aBand-1].iBandLevel = aLevel;
1.454 + }
1.455 + }
1.456 +
1.457 +// -----------------------------------------------------------------------------
1.458 +// CAudioEqualizer::Uid
1.459 +// -----------------------------------------------------------------------------
1.460 +//
1.461 +EXPORT_C TUid CAudioEqualizer::Uid() const
1.462 + {
1.463 + return KUidAudioEqualizerEffect;
1.464 + }
1.465 +
1.466 +
1.467 +// -----------------------------------------------------------------------------
1.468 +// CAudioEqualizer::DoEffectData
1.469 +// -----------------------------------------------------------------------------
1.470 +//
1.471 +EXPORT_C const TDesC8& CAudioEqualizer::DoEffectData()
1.472 + {
1.473 + DEBPRN0;
1.474 + iDataPckgTo = iAudioEqualizerData;
1.475 + return iDataPckgTo;
1.476 + }
1.477 +
1.478 +// -----------------------------------------------------------------------------
1.479 +// CAudioEqualizer::SetEffectData
1.480 +// -----------------------------------------------------------------------------
1.481 +//
1.482 +EXPORT_C void CAudioEqualizer::SetEffectData(
1.483 + const TDesC8& aEffectDataBuffer )
1.484 + {
1.485 + DEBPRN0;
1.486 + TEfAudioEqualizerDataPckg dataPckg;
1.487 + dataPckg.Copy(aEffectDataBuffer);
1.488 + iAudioEqualizerData = dataPckg();
1.489 + iEnabled = iAudioEqualizerData.iEnabled;
1.490 + iEnforced = iAudioEqualizerData.iEnforced;
1.491 + iHaveUpdateRights = iAudioEqualizerData.iHaveUpdateRights;
1.492 + }
1.493 +
1.494 +// -----------------------------------------------------------------------------
1.495 +// CAudioEqualizer::DoBandData
1.496 +// -----------------------------------------------------------------------------
1.497 +//
1.498 +EXPORT_C const TDesC8& CAudioEqualizer::DoBandDataL(
1.499 + TUint8 aBand,
1.500 + TBool aAllBands )
1.501 + {
1.502 +
1.503 + DEBPRN0;
1.504 + if ( aAllBands )
1.505 + {
1.506 + if ( iBandDataBuf )
1.507 + {
1.508 + delete iBandDataBuf;
1.509 + iBandDataBuf = NULL;
1.510 + }
1.511 +
1.512 + iBandDataBuf = HBufC8::NewL(NumberOfBands() * sizeof(TEfAudioEqualizerBand));
1.513 + TPtr8 des = iBandDataBuf->Des();
1.514 + des.SetLength(iBandDataBuf->Size());
1.515 + RDesWriteStream writeStream(des);
1.516 +
1.517 + for (TInt i=0; i<NumberOfBands(); i++)
1.518 + {
1.519 + writeStream << iBandsData[i];
1.520 + }
1.521 + writeStream.CommitL();
1.522 + return *iBandDataBuf;
1.523 + }
1.524 + else
1.525 + {
1.526 + if ( aBand > NumberOfBands() )
1.527 + {
1.528 + User::Leave(KErrArgument);
1.529 + }
1.530 + iBandDataPckgTo = iBandsData[aBand-1];
1.531 + return iBandDataPckgTo;
1.532 + }
1.533 + }
1.534 +
1.535 +// -----------------------------------------------------------------------------
1.536 +// CAudioEqualizer::SetBandData
1.537 +// -----------------------------------------------------------------------------
1.538 +//
1.539 +EXPORT_C void CAudioEqualizer::SetBandDataL(
1.540 + TInt aNumberOfBands,
1.541 + const TDesC8& aBandDataBuffer )
1.542 + {
1.543 + DEBPRN0;
1.544 + if ( aNumberOfBands > 1 )
1.545 + {
1.546 + RDesReadStream readStream(aBandDataBuffer);
1.547 + for (TInt i=0; i<NumberOfBands(); i++)
1.548 + {
1.549 + readStream >> iBandsData[i];
1.550 + }
1.551 + }
1.552 + else
1.553 + {
1.554 + TEfAudioEqualizerBandDataPckg dataPckg;
1.555 + TEfAudioEqualizerBand band;
1.556 + dataPckg.Copy(aBandDataBuffer);
1.557 + band = dataPckg();
1.558 + if ( band.iBandId > NumberOfBands() )
1.559 + {
1.560 + User::Leave(KErrArgument);
1.561 + }
1.562 + iBandsData[band.iBandId-1] = band;
1.563 + }
1.564 + }
1.565 +
1.566 +// ========================== OTHER EXPORTED FUNCTIONS =========================
1.567 +
1.568 +