os/mm/devsoundextensions/effects/EnvReverb/EnvironmentalReverbProxy/Src/EnvironmentalReverbProxy.cpp
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/mm/devsoundextensions/effects/EnvReverb/EnvironmentalReverbProxy/Src/EnvironmentalReverbProxy.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,325 @@
1.4 +/*
1.5 +* Copyright (c) 2004 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 Environmental Reverb proxy 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 "EnvironmentalReverbProxy.h"
1.31 +#include "EnvironmentalReverbEventObserver.h"
1.32 +#include "RoomLevelProxy.h"
1.33 +#include <CustomInterfaceUtility.h>
1.34 +
1.35 +
1.36 +
1.37 +// ============================ MEMBER FUNCTIONS ===============================
1.38 +
1.39 +// -----------------------------------------------------------------------------
1.40 +// CEnvironmentalReverbProxy::CEnvironmentalReverbProxy
1.41 +// C++ default constructor can NOT contain any code, that
1.42 +// might leave.
1.43 +// -----------------------------------------------------------------------------
1.44 +//
1.45 +CEnvironmentalReverbProxy::CEnvironmentalReverbProxy(
1.46 + TMMFMessageDestinationPckg aMessageHandler,
1.47 + MCustomCommand& aCustomCommand,
1.48 + CCustomInterfaceUtility* aCustomInterfaceUtility )
1.49 + : iCustomCommand(&aCustomCommand),
1.50 + iMessageHandler(aMessageHandler),
1.51 + iCustomInterfaceUtility(aCustomInterfaceUtility)
1.52 +
1.53 + {
1.54 + }
1.55 +
1.56 +// Destructor
1.57 +CEnvironmentalReverbProxy::~CEnvironmentalReverbProxy()
1.58 + {
1.59 + // Remove the custom interface message handler before we destroy the proxy.
1.60 +
1.61 + TInt numOfRoomLevel = iCRoomLevelProxyList.Count();
1.62 + if (numOfRoomLevel > 0)
1.63 + {
1.64 + for (TInt i = 0; i < numOfRoomLevel; ++i)
1.65 + {
1.66 + iCRoomLevelProxyList[i]->DettachReverb(*this);
1.67 + }
1.68 + };
1.69 + iCRoomLevelProxyList.Close();
1.70 + if(iCustomInterfaceUtility)
1.71 + iCustomInterfaceUtility->RemoveCustomInterface(iMessageHandler);
1.72 + delete iEnvironmentalReverbEventObserver;
1.73 + delete iCustomInterfaceUtility;
1.74 + }
1.75 +
1.76 +// -----------------------------------------------------------------------------
1.77 +// CEnvironmentalReverbProxy::NewL
1.78 +// Static function for creating an instance of the Environmental Reverb object.
1.79 +// -----------------------------------------------------------------------------
1.80 +//
1.81 +EXPORT_C CEnvironmentalReverbProxy* CEnvironmentalReverbProxy::NewL(
1.82 + TMMFMessageDestinationPckg aMessageHandler,
1.83 + MCustomCommand& aCustomCommand,
1.84 + CCustomInterfaceUtility* aCustomInterfaceUtility )
1.85 + {
1.86 + CEnvironmentalReverbProxy* self = new (ELeave) CEnvironmentalReverbProxy(aMessageHandler, aCustomCommand, aCustomInterfaceUtility);
1.87 + CleanupStack::PushL(self);
1.88 + self->ConstructL();
1.89 + CleanupStack::Pop(self);
1.90 + return self;
1.91 + }
1.92 +
1.93 +// -----------------------------------------------------------------------------
1.94 +// CEnvironmentalReverbProxy::ConstructL
1.95 +// -----------------------------------------------------------------------------
1.96 +//
1.97 +void CEnvironmentalReverbProxy::ConstructL()
1.98 + {
1.99 +#ifdef _DEBUG
1.100 + RDebug::Print(_L("CEnvironmentalReverbProxy::ConstructL"));
1.101 +#endif
1.102 + iEnvironmentalReverbEventObserver = CEnvironmentalReverbEventObserver::NewL(iMessageHandler, *iCustomCommand, *this);
1.103 + StartObserver();
1.104 + // sends a message to fetch initial data.
1.105 + TEfEnvReverbDataPckg dataPckgFrom;
1.106 + iCustomCommand->CustomCommandSync(iMessageHandler, (TInt)EErfInitialize, KNullDesC8, KNullDesC8, dataPckgFrom);
1.107 + SetEffectData(dataPckgFrom);
1.108 +
1.109 + }
1.110 +
1.111 +
1.112 +// -----------------------------------------------------------------------------
1.113 +// CEnvironmentalReverbProxy::GetUniqueId
1.114 +// return a TInt 32 integer
1.115 +// -----------------------------------------------------------------------------
1.116 +//
1.117 +TUint32 CEnvironmentalReverbProxy::GetUniqueId() const
1.118 + {
1.119 + return iReverbData.iEnvironmentalReverbId;
1.120 + }
1.121 +
1.122 +
1.123 +// -----------------------------------------------------------------------------
1.124 +// CEnvironmentalReverbProxy::AttachRoomLevel
1.125 +// Add the reference of aProxy to array
1.126 +// -----------------------------------------------------------------------------
1.127 +//
1.128 +TInt CEnvironmentalReverbProxy::RoomLevelAttached(CRoomLevelProxy& aProxy)
1.129 + {
1.130 +
1.131 + TInt error = iCRoomLevelProxyList.Find(&aProxy);
1.132 + if (error == KErrNotFound)
1.133 + {
1.134 + error = iCRoomLevelProxyList.Append(&aProxy);
1.135 + }
1.136 +
1.137 +
1.138 + return error;
1.139 +
1.140 + }
1.141 +
1.142 +
1.143 +// -----------------------------------------------------------------------------
1.144 +// CEnvironmentalReverbImpl::DetachRoomLevel
1.145 +// Remove the reference of aProxy from array
1.146 +// -----------------------------------------------------------------------------
1.147 +//
1.148 +TInt CEnvironmentalReverbProxy::RoomLevelDetached(CRoomLevelProxy& aProxy)
1.149 + {
1.150 + TInt found = iCRoomLevelProxyList.Find(&aProxy);
1.151 + if (found != KErrNotFound)
1.152 + {
1.153 + iCRoomLevelProxyList.Remove(found);
1.154 + found = KErrNone;
1.155 + }
1.156 + return found;
1.157 + }
1.158 +
1.159 +
1.160 +// -----------------------------------------------------------------------------
1.161 +// CEnvironmentalReverbProxy::ApplyL
1.162 +// Apply the Environmental Reverb settings.
1.163 +// -----------------------------------------------------------------------------
1.164 +//
1.165 +EXPORT_C void CEnvironmentalReverbProxy::ApplyL()
1.166 + {
1.167 +#ifdef _DEBUG
1.168 + RDebug::Print(_L("CEnvironmentalReverbProxy::Apply"));
1.169 +#endif
1.170 +
1.171 + if ( !iHaveUpdateRights )
1.172 + {
1.173 + User::Leave(KErrAccessDenied);
1.174 + }
1.175 +
1.176 + iReverbData.iEnabled = iEnabled;
1.177 + iReverbData.iEnforced = iEnforced;
1.178 + iReverbData.iHaveUpdateRights = iHaveUpdateRights;
1.179 + iCustomCommand->CustomCommandSync(iMessageHandler, (TInt)EErfApply, DoEffectData(), KNullDesC8);
1.180 +
1.181 + }
1.182 +
1.183 +
1.184 +// -----------------------------------------------------------------------------
1.185 +// CEnvironmentalReverbProxy::StartObserver
1.186 +// Starts the event observer. The event observer monitors asynchronous events
1.187 +// from the message handler.
1.188 +// -----------------------------------------------------------------------------
1.189 +//
1.190 +void CEnvironmentalReverbProxy::StartObserver()
1.191 + {
1.192 +#ifdef _DEBUG
1.193 + RDebug::Print(_L("CEnvironmentalReverbProxy::StartObserver"));
1.194 +#endif
1.195 +
1.196 + iEnvironmentalReverbEventObserver->Start();
1.197 + }
1.198 +
1.199 +// -----------------------------------------------------------------------------
1.200 +// CEnvironmentalReverbProxy::EnvironmentalReverbEvent
1.201 +// Checks which data member has changed and notify the observers.
1.202 +// -----------------------------------------------------------------------------
1.203 +//
1.204 +void CEnvironmentalReverbProxy::EnvironmentalReverbEvent(
1.205 + const TDesC8& aBuffer )
1.206 + {
1.207 +#ifdef _DEBUG
1.208 + RDebug::Print(_L("CEnvironmentalReverbProxy::EnvironmentalReverbEvent"));
1.209 +#endif
1.210 +
1.211 + TEfEnvReverbDataPckg dataPckgFrom;
1.212 + dataPckgFrom.Copy(aBuffer);
1.213 + TEfEnvironmentalReverb newReverbData = dataPckgFrom();
1.214 +
1.215 + TUint8 event = 0;
1.216 +
1.217 + if ( newReverbData.iEnabled != iReverbData.iEnabled )
1.218 + {
1.219 + iReverbData.iEnabled = newReverbData.iEnabled;
1.220 + iEnabled = newReverbData.iEnabled;
1.221 + if ( iReverbData.iEnabled )
1.222 + {
1.223 + event = MAudioEffectObserver::KEnabled;
1.224 + }
1.225 + else
1.226 + {
1.227 + event = MAudioEffectObserver::KDisabled;
1.228 + }
1.229 + }
1.230 + else if ( newReverbData.iEnforced != iReverbData.iEnforced )
1.231 + {
1.232 + iReverbData.iEnforced = newReverbData.iEnforced;
1.233 + iEnforced = newReverbData.iEnforced;
1.234 + if ( iReverbData.iEnforced )
1.235 + {
1.236 + event = MAudioEffectObserver::KEnforced;
1.237 + }
1.238 + else
1.239 + {
1.240 + event = MAudioEffectObserver::KNotEnforced;
1.241 + }
1.242 + }
1.243 + else if ( newReverbData.iHaveUpdateRights != iReverbData.iHaveUpdateRights )
1.244 + {
1.245 + iReverbData.iHaveUpdateRights = newReverbData.iHaveUpdateRights;
1.246 + iHaveUpdateRights = newReverbData.iHaveUpdateRights;
1.247 + if ( iReverbData.iHaveUpdateRights )
1.248 + {
1.249 + event = MAudioEffectObserver::KGainedUpdateRights;
1.250 + }
1.251 + else
1.252 + {
1.253 + event = MAudioEffectObserver::KLostUpdateRights;
1.254 + }
1.255 + }
1.256 + else if ( newReverbData.iDecayTime != iReverbData.iDecayTime )
1.257 + {
1.258 + iReverbData.iDecayTime = newReverbData.iDecayTime;
1.259 + event = MEnvironmentalReverbObserver::KDecayTimeChanged;
1.260 + }
1.261 + else if ( newReverbData.iDecayHFRatio != iReverbData.iDecayHFRatio )
1.262 + {
1.263 + iReverbData.iDecayHFRatio = newReverbData.iDecayHFRatio;
1.264 + event = MEnvironmentalReverbObserver::KDecayHFRatioChanged;
1.265 + }
1.266 + else if ( newReverbData.iDensity != iReverbData.iDensity )
1.267 + {
1.268 + iReverbData.iDensity = newReverbData.iDensity;
1.269 + event = MEnvironmentalReverbObserver::KDensityChanged;
1.270 + }
1.271 + else if ( newReverbData.iDiffusion != iReverbData.iDiffusion )
1.272 + {
1.273 + iReverbData.iDiffusion = newReverbData.iDiffusion;
1.274 + event = MEnvironmentalReverbObserver::KDiffusionChanged;
1.275 + }
1.276 + else if ( newReverbData.iReflectionsDelay != iReverbData.iReflectionsDelay )
1.277 + {
1.278 + iReverbData.iReflectionsDelay = newReverbData.iReflectionsDelay;
1.279 + event = MEnvironmentalReverbObserver::KReflectionsDelayChanged;
1.280 + }
1.281 + else if ( newReverbData.iReflectionsLevel != iReverbData.iReflectionsLevel )
1.282 + {
1.283 + iReverbData.iReflectionsLevel = newReverbData.iReflectionsLevel;
1.284 + event = MEnvironmentalReverbObserver::KReflectionsLevelChanged;
1.285 + }
1.286 + else if ( newReverbData.iReverbDelay != iReverbData.iReverbDelay )
1.287 + {
1.288 + iReverbData.iReverbDelay = newReverbData.iReverbDelay;
1.289 + event = MEnvironmentalReverbObserver::KReverbDelayChanged;
1.290 + }
1.291 + else if ( newReverbData.iReverbLevel != iReverbData.iReverbLevel )
1.292 + {
1.293 + iReverbData.iReverbLevel = newReverbData.iReverbLevel;
1.294 + event = MEnvironmentalReverbObserver::KReverbLevelChanged;
1.295 + }
1.296 + else if ( newReverbData.iRoomLevel != iReverbData.iRoomLevel )
1.297 + {
1.298 + iReverbData.iRoomLevel = newReverbData.iRoomLevel;
1.299 + event = MEnvironmentalReverbObserver::KRoomLevelChanged;
1.300 + }
1.301 + else if ( newReverbData.iRoomHFLevel != iReverbData.iRoomHFLevel )
1.302 + {
1.303 + iReverbData.iRoomHFLevel = newReverbData.iRoomHFLevel;
1.304 + event = MEnvironmentalReverbObserver::KRoomHFLevelChanged;
1.305 + }
1.306 + else if ( newReverbData.iEnvironmentalReverbId != iReverbData.iEnvironmentalReverbId )
1.307 + {
1.308 + iReverbData.iEnvironmentalReverbId = newReverbData.iEnvironmentalReverbId;
1.309 +// event = MEnvironmentalReverbObserver::KRoomHFLevelChanged;
1.310 + }
1.311 +
1.312 +
1.313 +
1.314 + if (!event)
1.315 + return;
1.316 +
1.317 + for ( TInt i = 0; i < iObservers.Count(); i++ )
1.318 + {
1.319 + iObservers[i]->EffectChanged(this, event);
1.320 + }
1.321 + }
1.322 +
1.323 +
1.324 +// ========================== OTHER EXPORTED FUNCTIONS =========================
1.325 +
1.326 +// End of File
1.327 +
1.328 +