diff -r 000000000000 -r bde4ae8d615e os/mm/devsoundextensions/effects/AudioEqualizer/AudioEqualizerEffect/Src/AudioEqualizerBase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/mm/devsoundextensions/effects/AudioEqualizer/AudioEqualizerEffect/Src/AudioEqualizerBase.cpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,565 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implementation of the Audio Equalizer effect class +* +*/ + + + + +// INCLUDE FILES + +#ifdef _DEBUG +#include +#endif + +#include +#include +#include "AudioEqualizerProxy.h" +#include +#include +#include +#include +#include +#include + +#ifdef _DEBUG +#define DEBPRN0 RDebug::Printf( "%s", __PRETTY_FUNCTION__); +#define DEBPRN1(str) RDebug::Printf( "%s %s", __PRETTY_FUNCTION__, str ); +#else +#define DEBPRN0 +#define DEBPRN1(str) +#endif + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::CAudioEqualizer +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +EXPORT_C CAudioEqualizer::CAudioEqualizer() + : iAudioEqualizerData(0, 0), + iDataPckgTo(iAudioEqualizerData), + iBandChange(0) + { + } + +// Destructor +EXPORT_C CAudioEqualizer::~CAudioEqualizer() + { + delete iBandDataBuf; + iBandsData.Close(); + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::NewL +// Static function for creating an instance of the AudioEqualizer object. +// ----------------------------------------------------------------------------- +// +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL() + { + User::Leave(KErrNotSupported); + return NULL; + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::NewL +// Static function for creating an instance of the AudioEqualizer object. +// ----------------------------------------------------------------------------- +// +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL( + CMdaAudioConvertUtility& aUtility ) + { + DEBPRN0; + CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility); + CleanupStack::PushL(customInterface); + + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect); + + if ( !audioEqualizerProxy ) + { + DEBPRN1("No Adaptation Support - leaving"); + User::Leave(KErrNotSupported); + } + + CleanupStack::Pop(customInterface); + + return audioEqualizerProxy; + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::NewL +// Static function for creating an instance of the AudioEqualizer object. +// ----------------------------------------------------------------------------- +// +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL( + CMdaAudioInputStream& aUtility ) + { + DEBPRN0; + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)aUtility.CustomInterface(KUidAudioEqualizerEffect); + if (audioEqualizerProxy == NULL) + { + DEBPRN1("No Adaptation Support - leaving"); + User::Leave(KErrNotSupported); + } + return audioEqualizerProxy; + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::NewL +// Static function for creating an instance of the AudioEqualizer object. +// ----------------------------------------------------------------------------- +// +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL( + CMdaAudioOutputStream& aUtility ) + { + DEBPRN0; + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)aUtility.CustomInterface(KUidAudioEqualizerEffect); + if (audioEqualizerProxy == NULL) + { + DEBPRN1("No Adaptation Support - leaving"); + User::Leave(KErrNotSupported); + } + return audioEqualizerProxy; + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::NewL +// Static function for creating an instance of the AudioEqualizer object. +// ----------------------------------------------------------------------------- +// +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL( + CMdaAudioPlayerUtility& aUtility ) + { + DEBPRN0; + CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility); + CleanupStack::PushL(customInterface); + + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect); + + if ( !audioEqualizerProxy ) + { + DEBPRN1("No Adaptation Support - leaving"); + User::Leave(KErrNotSupported); + } + + CleanupStack::Pop(customInterface); + + return audioEqualizerProxy; + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::NewL +// Static function for creating an instance of the AudioEqualizer object. +// ----------------------------------------------------------------------------- +// +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL( + CMdaAudioRecorderUtility& aUtility, + TBool aRecordStream ) + { + DEBPRN0; + CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility, aRecordStream); + CleanupStack::PushL(customInterface); + + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect); + + if ( !audioEqualizerProxy ) + { + DEBPRN1("No Adaptation Support - leaving"); + User::Leave(KErrNotSupported); + } + + CleanupStack::Pop(customInterface); + + return audioEqualizerProxy; + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::NewL +// Static function for creating an instance of the AudioEqualizer object. +// ----------------------------------------------------------------------------- +// +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL( + CMdaAudioToneUtility& aUtility ) + { + DEBPRN0; + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)aUtility.CustomInterface(KUidAudioEqualizerEffect); + if (audioEqualizerProxy == NULL) + { + DEBPRN1("No Adaptation Support - leaving"); + User::Leave(KErrNotSupported); + } + return audioEqualizerProxy; + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::NewL +// Static function for creating an instance of the AudioEqualizer object. +// ----------------------------------------------------------------------------- +// +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL( + CMMFDevSound& aDevSound ) + { + DEBPRN0; + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)aDevSound.CustomInterface(KUidAudioEqualizerEffect); + if (audioEqualizerProxy == NULL) + { + DEBPRN1("No Adaptation Support - leaving"); + User::Leave(KErrNotSupported); + } + return audioEqualizerProxy; + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::NewL +// Static function for creating an instance of the AudioEqualizer object. +// ----------------------------------------------------------------------------- +// +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL( + CCustomCommandUtility* aUtility ) + { + DEBPRN0; + CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility); + CleanupStack::PushL(customInterface); + + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect); + if ( !audioEqualizerProxy ) + { + DEBPRN1("No Adaptation Support - leaving"); + User::Leave(KErrNotSupported); + } + + CleanupStack::Pop(customInterface); + + return audioEqualizerProxy; + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::NewL +// Static function for creating an instance of the AudioEqualizer object. +// ----------------------------------------------------------------------------- +// +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL( + MCustomInterface& aCustomInterface ) + { + DEBPRN0; + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)aCustomInterface.CustomInterface(KUidAudioEqualizerEffect); + + if ( !audioEqualizerProxy ) + { + DEBPRN1("No Adaptation Support - leaving"); + User::Leave(KErrNotSupported); + } + + return audioEqualizerProxy; + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::NewL +// Static function for creating an instance of the AudioEqualizer object. +// ----------------------------------------------------------------------------- +// +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL( + CMidiClientUtility& aUtility ) + { + DEBPRN0; + CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility); + CleanupStack::PushL(customInterface); + + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect); + + if ( !audioEqualizerProxy ) + { + DEBPRN1("No Adaptation Support - leaving"); + User::Leave(KErrNotSupported); + } + + CleanupStack::Pop(customInterface); + + return audioEqualizerProxy; + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::NewL +// Static function for creating an instance of the AudioEqualizer object. +// ----------------------------------------------------------------------------- +// +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL( + CDrmPlayerUtility& aUtility ) + { + DEBPRN0; + CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility); + CleanupStack::PushL(customInterface); + + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect); + + if ( !audioEqualizerProxy ) + { + DEBPRN1("No Adaptation Support - leaving"); + User::Leave(KErrNotSupported); + } + + CleanupStack::Pop(customInterface); + + return audioEqualizerProxy; + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::NewL +// Static function for creating an instance of the AudioEqualizer object. +// ----------------------------------------------------------------------------- +// +EXPORT_C CAudioEqualizer* CAudioEqualizer::NewL( + CVideoPlayerUtility& aUtility ) + { + DEBPRN0; + CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility); + CleanupStack::PushL(customInterface); + + CAudioEqualizerProxy* audioEqualizerProxy = (CAudioEqualizerProxy*)customInterface->CustomInterface(KUidAudioEqualizerEffect); + + if ( !audioEqualizerProxy ) + { + DEBPRN1("No Adaptation Support - leaving"); + User::Leave(KErrNotSupported); + } + + CleanupStack::Pop(customInterface); + + return audioEqualizerProxy; + } +// ----------------------------------------------------------------------------- +// CAudioEqualizer::BandLevel +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt32 CAudioEqualizer::BandLevel( + TUint8 aBand ) const + { + if( aBand > NumberOfBands() ) + { + return KErrArgument; + } + else + { + return iBandsData[aBand-1].iBandLevel; + } + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::BandWidth +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt32 CAudioEqualizer::BandWidth( + TUint8 aBand ) const + { + if( aBand > NumberOfBands() ) + { + return KErrArgument; + } + else + { + return iBandsData[aBand-1].iBandWidth; + } + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::CenterFrequency +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt32 CAudioEqualizer::CenterFrequency( + TUint8 aBand ) const + { + if( aBand > NumberOfBands() ) + { + return KErrArgument; + } + else + { + return iBandsData[aBand-1].iCenterFrequency; + } + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::CrossoverFrequency +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt32 CAudioEqualizer::CrossoverFrequency( + TUint8 aBand ) const + { + if( aBand > NumberOfBands() ) + { + return KErrArgument; + } + else + { + return iBandsData[aBand-1].iCrossoverFrequency; + } + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::DbLevelLimits +// ----------------------------------------------------------------------------- +// +EXPORT_C void CAudioEqualizer::DbLevelLimits( + TInt32& aMin, + TInt32& aMax ) + { + aMin = iAudioEqualizerData.iMindB; + aMax = iAudioEqualizerData.iMaxdB; + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::CrossoverFrequency +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint8 CAudioEqualizer::NumberOfBands() const + + { + return iBandsData.Count(); + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::SetBandLevelL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CAudioEqualizer::SetBandLevelL( + TInt8 aBand, + TInt32 aLevel ) + { + if( aBand > NumberOfBands() ) + { + User::Leave(KErrArgument); + } + else + { + TUint32 mask = 1; + iBandChange = iBandChange | (mask << aBand-1); + iBandsData[aBand-1].iBandLevel = aLevel; + } + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::Uid +// ----------------------------------------------------------------------------- +// +EXPORT_C TUid CAudioEqualizer::Uid() const + { + return KUidAudioEqualizerEffect; + } + + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::DoEffectData +// ----------------------------------------------------------------------------- +// +EXPORT_C const TDesC8& CAudioEqualizer::DoEffectData() + { + DEBPRN0; + iDataPckgTo = iAudioEqualizerData; + return iDataPckgTo; + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::SetEffectData +// ----------------------------------------------------------------------------- +// +EXPORT_C void CAudioEqualizer::SetEffectData( + const TDesC8& aEffectDataBuffer ) + { + DEBPRN0; + TEfAudioEqualizerDataPckg dataPckg; + dataPckg.Copy(aEffectDataBuffer); + iAudioEqualizerData = dataPckg(); + iEnabled = iAudioEqualizerData.iEnabled; + iEnforced = iAudioEqualizerData.iEnforced; + iHaveUpdateRights = iAudioEqualizerData.iHaveUpdateRights; + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::DoBandData +// ----------------------------------------------------------------------------- +// +EXPORT_C const TDesC8& CAudioEqualizer::DoBandDataL( + TUint8 aBand, + TBool aAllBands ) + { + + DEBPRN0; + if ( aAllBands ) + { + if ( iBandDataBuf ) + { + delete iBandDataBuf; + iBandDataBuf = NULL; + } + + iBandDataBuf = HBufC8::NewL(NumberOfBands() * sizeof(TEfAudioEqualizerBand)); + TPtr8 des = iBandDataBuf->Des(); + des.SetLength(iBandDataBuf->Size()); + RDesWriteStream writeStream(des); + + for (TInt i=0; i NumberOfBands() ) + { + User::Leave(KErrArgument); + } + iBandDataPckgTo = iBandsData[aBand-1]; + return iBandDataPckgTo; + } + } + +// ----------------------------------------------------------------------------- +// CAudioEqualizer::SetBandData +// ----------------------------------------------------------------------------- +// +EXPORT_C void CAudioEqualizer::SetBandDataL( + TInt aNumberOfBands, + const TDesC8& aBandDataBuffer ) + { + DEBPRN0; + if ( aNumberOfBands > 1 ) + { + RDesReadStream readStream(aBandDataBuffer); + for (TInt i=0; i> iBandsData[i]; + } + } + else + { + TEfAudioEqualizerBandDataPckg dataPckg; + TEfAudioEqualizerBand band; + dataPckg.Copy(aBandDataBuffer); + band = dataPckg(); + if ( band.iBandId > NumberOfBands() ) + { + User::Leave(KErrArgument); + } + iBandsData[band.iBandId-1] = band; + } + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +