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