diff -r f9bb0fca356a -r 0fd27995241b javauis/amms_qt/mmacontrol/src.emc/cammsemcequalizercontrol.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/amms_qt/mmacontrol/src.emc/cammsemcequalizercontrol.cpp Tue May 11 16:07:20 2010 +0300 @@ -0,0 +1,456 @@ +/* +* Copyright (c) 2005-2007 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: Manipulates the equalization settings of a Player. +* +*/ + + +// INCLUDE FILES +#include +#include "cammsemcequalizercontrol.h" + + + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +CAMMSEMCEqualizerControl* CAMMSEMCEqualizerControl::NewLC(CMMAPlayer* aPlayer) +{ + CAMMSEMCEqualizerControl* self = + new(ELeave) CAMMSEMCEqualizerControl(aPlayer); + + CleanupStack::PushL(self); + self->ConstructL(); + + return self; +} + +// Destructor +CAMMSEMCEqualizerControl::~CAMMSEMCEqualizerControl() +{ + LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCEqualizerControl::~CAMMSEMCEqualizerControl"); + + // Perform DeallocateControl, if the state change has not yet performed it. + DeallocateControl(); + if (iAMMSEMCEqualizerEnvironmentalPresetUtility) + delete iAMMSEMCEqualizerEnvironmentalPresetUtility; + delete iPresetNames; +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::BandLevelL +// Gets the gain set for the given equalizer band. +// ----------------------------------------------------------------------------- +// +TInt CAMMSEMCEqualizerControl::BandLevelL(TInt aBand) +{ + // if aBand is out of range the method must leave with KErrArgument. + + if (aBand < 0 || aBand > (NumberOfBands() - 1)) + { + User::Leave(KErrArgument); + } + // Returns the band level in mB for the specified band + TInt bandlevel; + TInt aNativeBand = aBand + KAMMSBandOffset; + iMEqualizerControl->BandLevel(aNativeBand,bandlevel); + return bandlevel; + +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::MaxBandLevel +// Returns the maximum band level supported. +// ----------------------------------------------------------------------------- +// +TInt CAMMSEMCEqualizerControl::MaxBandLevel() +{ + // Get the dB range in mB for the equalizer. + TInt min,max; + iMEqualizerControl->DbLevelLimits(min,max); + return max; +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::MinBandLevel +// Returns the minimum band level supported. +// ----------------------------------------------------------------------------- +// +TInt CAMMSEMCEqualizerControl::MinBandLevel() +{ + // Get the dB range in mB for the equalizer. + TInt min,max; + iMEqualizerControl->DbLevelLimits(min,max); + return min; +} + + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::BandWidth +// Returns the band width in Hz for the specified band. +// ----------------------------------------------------------------------------- +// +TInt CAMMSEMCEqualizerControl::BandWidth(TInt aBand) +{ + TInt bndwdth; + TInt aNativeBand = aBand + KAMMSBandOffset; + iMEqualizerControl->BandWidth(aNativeBand,bndwdth); + return bndwdth; +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::CenterFrequency +// Returns the center frequency in Hz for a given band. +// ----------------------------------------------------------------------------- +// +TInt CAMMSEMCEqualizerControl::CenterFrequency(TInt aBand) +{ + TInt cntrfreq; + TInt aNativeBand = aBand + KAMMSBandOffset; + iMEqualizerControl->CenterFrequency(aNativeBand,cntrfreq); + return cntrfreq; +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::CrossoverFrequency +// Returns the cross-over frequency between the given frequency. +// ----------------------------------------------------------------------------- +// +TInt CAMMSEMCEqualizerControl::CrossoverFrequency(TInt aBand) +{ + TInt aCrossOverFreq; + TInt aNativeBand = aBand + KAMMSBandOffset; + iMEqualizerControl->CrossoverFrequency(aNativeBand, aCrossOverFreq); + return aCrossOverFreq; +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::NumberOfBands +// Gets the number of frequency bands that the equalizer supports. +// ----------------------------------------------------------------------------- +// +TInt CAMMSEMCEqualizerControl::NumberOfBands() +{ + // Returns the number of equalizer bands. + // AudioEqualizerBase: TUint8 NumberOfBands() const; + + TInt aNumOfBands; + iMEqualizerControl->NumberOfBands(aNumOfBands); + return aNumOfBands; + +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::SetBandLevelL +// Sets the given equalizer band to the given gain value. +// ----------------------------------------------------------------------------- +// +void CAMMSEMCEqualizerControl::SetBandLevelL( + TInt aLevel, + TInt aBand) +{ + LOG2( EJavaAMMS, EInfo, "AMMS::CAMMSEMCEqualizerControl::SetBandLevelL: level=%d, band=%d", + aLevel, aBand); + // If aBand or aLevel is out of valid range the method must leave + // with KErrArgument. + if (aBand < 0 || + aBand > (NumberOfBands() - 1) || + aLevel < MinBandLevel() || + aLevel > MaxBandLevel()) + { + User::Leave(KErrArgument); + } + TInt aNativeBand = aBand + KAMMSBandOffset; + // Sets the equalizer band level value in mB, ranging from Min to Max + iMEqualizerControl->SetBandLevel(aNativeBand, aLevel); + + ApplySettingsL(); +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::SetPresetL +// Sets the effect according to the given preset. +// ----------------------------------------------------------------------------- +// +void CAMMSEMCEqualizerControl::SetPresetL(const TDesC& aPreset) +{ + LOG1( EJavaAMMS, EInfo, "AMMS::CAMMSEMCEqualizerControl::SetPresetL \"%S\"", aPreset.Ptr()); + CAudioEqualizer *iAudioEqualizer = NULL; + iAMMSEMCEqualizerEnvironmentalPresetUtility->PrepareEmptyEqualizerUtilitiesL(); + iAMMSEMCEqualizerEnvironmentalPresetUtility->GetPresetNamesL(*iPresetNames); + TInt presetPosition = 0; + TInt findPreset = iPresetNames->Find(aPreset, presetPosition); + if (findPreset == 0) // Find returns zero, if a matching element is found. + { + iAudioEqualizer = iAMMSEMCEqualizerEnvironmentalPresetUtility->GetEqualizerAtPresetIndexL(presetPosition); + iCurrentPreset = presetPosition; + } + else + { + iAMMSEMCEqualizerEnvironmentalPresetUtility->DeleteEmptyEqualizerUtilities(); + User::Leave(KErrArgument); + } + + if (!iAudioEqualizer) + { + iAMMSEMCEqualizerEnvironmentalPresetUtility->DeleteEmptyEqualizerUtilities(); + return; + } + //Get all preset data here + // For each band of AudioEqualizer get the band level and set it to iMEqualizerControl + + TInt noOfbands = iAudioEqualizer->NumberOfBands(); + + for (TInt i = 0; i < noOfbands; i++) + { + // Band 0 in JSR-234 equals Band 1 in Effect API + TInt aNativeBand = i + KAMMSBandOffset; + TInt iBandLevel = iAudioEqualizer->BandLevel(aNativeBand); + iMEqualizerControl->SetBandLevel(aNativeBand, iBandLevel); + } + + iMEqualizerControl->Apply(); + iAMMSEMCEqualizerEnvironmentalPresetUtility->DeleteEmptyEqualizerUtilities(); +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::PresetNamesL +// Gets the available preset names. +// ----------------------------------------------------------------------------- +// +const CDesCArray& CAMMSEMCEqualizerControl::PresetNamesL() +{ + // Returns an array of all preset names (pre-defined and user-defined). + // The pre-defined presets are in the beginning of the list. + iAMMSEMCEqualizerEnvironmentalPresetUtility->PrepareEmptyEqualizerUtilitiesL(); + iAMMSEMCEqualizerEnvironmentalPresetUtility->GetPresetNamesL(*iPresetNames); + iAMMSEMCEqualizerEnvironmentalPresetUtility->DeleteEmptyEqualizerUtilities(); + return *iPresetNames; +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::PresetL +// Gets the current preset. +// ----------------------------------------------------------------------------- +// +const TDesC& CAMMSEMCEqualizerControl::PresetL() +{//if no preset is set, return null + if (iCurrentPreset < 0) + { + return KNullDesC; + } + + else + { + // Retrieves a Preset with the given index from the utility class + iAMMSEMCEqualizerEnvironmentalPresetUtility->PrepareEmptyEqualizerUtilitiesL(); // codescanner::leave + iAMMSEMCEqualizerEnvironmentalPresetUtility->GetPresetAtIndexL(iPresetName , iCurrentPreset); // codescanner::leave + iAMMSEMCEqualizerEnvironmentalPresetUtility->DeleteEmptyEqualizerUtilities(); + return iPresetName; + } +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::SetEnabledL +// Enables/disables the effect. +// ----------------------------------------------------------------------------- +// +void CAMMSEMCEqualizerControl::SetEnabledL(TBool aEnable) +{ + if (aEnable) + { + // Enable the effect. + + iMEqualizerControl->Enable(); + LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCEqualizerControl::SetEnabledL(true), calling Apply"); + iMEqualizerControl->Apply(); + } + else + { + // Disable the effect + + LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCEqualizerControl::SetEnabledL(false), calling Disable"); + iMEqualizerControl->Disable(); + iMEqualizerControl->Apply(); + } +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::PrepareControlL +// Function which is called after the correct state is set in Player. +// ----------------------------------------------------------------------------- +// +void CAMMSEMCEqualizerControl::PrepareControlL() +{ + // Perform the action only for the first time, skip if called afterwards + if (!iMEqualizerControl) + { + LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCEqualizerControl::PrepareControlL"); + //Create Equalizer Effect Control + iStreamControl = (static_cast(iMMAPlayer))->StreamControl(); + iFactory = (static_cast(iMMAPlayer))->MMFactory(); + + MEffectControl* temp(NULL); + User::LeaveIfError(iFactory->CreateEffectControl(KEqualizerEffectControl, temp)); + iMEqualizerControl = static_cast(temp); + User::LeaveIfError(iStreamControl->AddEffect(*iMEqualizerControl)); + iMEqualizerControl->Enable(); + } + + +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::DeallocateControl +// Function which is called after the correct state is set in Player. +// ----------------------------------------------------------------------------- +// +void CAMMSEMCEqualizerControl::DeallocateControl() +{ + if (iMEqualizerControl) + { + LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCEqualizerControl::DeallocateControl"); + + // Equalizer for Audio can be disabled or enabled + TRAPD(err,iMEqualizerControl->Disable()); + if (err != KErrNone) + { + //Some EMC Error + ELOG1( EJavaAMMS, "AMMS::CAMMSEMCEqualizerControl::DeallocateControl err = %d",err); + } + //return the control to factory + MEffectControl* temp = iMEqualizerControl; + iStreamControl->RemoveEffect(*temp); + // Delete the Effect + MEffectControl* tempCtrl = iMEqualizerControl; + iFactory->DeleteEffectControl(tempCtrl); + iMEqualizerControl = NULL; + } +} + + +const TDesC& CAMMSEMCEqualizerControl::ClassName() const +{ + return KAMMSEMCEqualizerControl; +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::SetEnforcedL +// Enforces the effect to be in use. +// ----------------------------------------------------------------------------- +// +void CAMMSEMCEqualizerControl::SetEnforcedL(TBool aEnforced) +{ + LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCEqualizerControl:SetEnforcedL"); + // Indicate the effect is to be enforced or not. ETrue = Enforced. + + iMEqualizerControl->Enforce(aEnforced); + + ApplySettingsL(); + +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::Enforced +// Returns the current enforced setting of the effect. +// ----------------------------------------------------------------------------- +// +TBool CAMMSEMCEqualizerControl::Enforced() +{ + // Returns ETrue if the effect is enforced, EFalse if not enforced. + TBool enforced; + iMEqualizerControl->IsEnforced(enforced); + return enforced; + +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::SetScopeL +// Sets the scope of the effect. +// ----------------------------------------------------------------------------- +// +void CAMMSEMCEqualizerControl::SetScopeL(TInt aScope) +{ + LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCEqualizerControl:SetScopeL"); + __ASSERT_DEBUG( + (aScope == CAMMSEffectControlGroup::EScopeLiveOnly), + User::Invariant()); + // Just to suppress warning in release build + (void)aScope; +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::Scope +// Returns the scope in which the effect is present. +// ----------------------------------------------------------------------------- +// +TInt CAMMSEMCEqualizerControl::Scope() +{ + // For now only the (LIVE_ONLY) scope is supported. + return CAMMSEffectControlGroup::EScopeLiveOnly; +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCAudioVirtualizerControl::ApplySettingsL +// Apply changed settings if Effect is in enabled state. +// ----------------------------------------------------------------------------- +void CAMMSEMCEqualizerControl::ApplySettingsL() +{ + LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCEqualizerControl:ApplySettingsL called, checking state"); + TBool enabled; + iMEqualizerControl->IsEnabled(enabled); + if (enabled) + { + LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCEqualizerControl:ApplySettingsL calling ApplyL"); + iMEqualizerControl->Apply(); + } +} + + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +void CAMMSEMCEqualizerControl::ConstructL() +{ + // Create array for preset names + iPresetNames = new(ELeave) CDesCArrayFlat(1); + + // Set current preset to a negative value as it is not set yet + iCurrentPreset = -1; + + CAMMSEffectControl::ConstructL(); + iAMMSEMCEqualizerEnvironmentalPresetUtility = new(ELeave)CAMMSEMCEqualizerEnvironmentalPresetUtility; + iAMMSEMCEqualizerEnvironmentalPresetUtility->ConstructL(); +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCEqualizerControl::CAMMSEMCEqualizerControl +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +CAMMSEMCEqualizerControl::CAMMSEMCEqualizerControl(CMMAPlayer* aPlayer) + : CAMMSBaseEqualizerControl(aPlayer) +{ + iMMAPlayer = aPlayer; +} + +// End of File + + +