os/mm/devsoundextensions/effects/EnvReverb/EnvironmentalReverbMessageHandler/src/EnvironmentalReverbMessageHandler.cpp
Update contrib.
2 * Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
14 * Description: Implementation of the EnvironmentalReverb effect message handler class.
21 #include "EnvironmentalReverbMessageHandler.h"
22 #include "EnvironmentalReverbMessageTypes.h"
23 #include <EnvironmentalReverbBase.h>
24 #include "EffectDataQueItem.h"
29 // ================= MEMBER FUNCTIONS =======================
31 // C++ default constructor can NOT contain any code, that
34 CEnvironmentalReverbMessageHandler::CEnvironmentalReverbMessageHandler(
35 CEnvironmentalReverb* aEnvironmentalReverb )
36 : CMMFObject(KUidEnvironmentalReverbEffect),
37 iEnvironmentalReverb(NULL),
42 iEnvironmentalReverb = aEnvironmentalReverb;
46 EXPORT_C CEnvironmentalReverbMessageHandler* CEnvironmentalReverbMessageHandler::NewL(
47 TAny* aCustomInterface )
49 CEnvironmentalReverb* environmentalReverb = (CEnvironmentalReverb*)aCustomInterface;
50 CEnvironmentalReverbMessageHandler* self = new (ELeave) CEnvironmentalReverbMessageHandler(environmentalReverb);
56 // -----------------------------------------------------------------------------
57 // CEnvironmentalReverbMessageHandler::ConstructL
58 // Symbian 2nd phase constructor can leave.
59 // Create and initializes the effect data queue.
60 // -----------------------------------------------------------------------------
62 void CEnvironmentalReverbMessageHandler::ConstructL()
64 iEffectDataQue = new(ELeave) TSglQue<CEffectDataQueItem>(_FOFF(CEffectDataQueItem, iLink));
68 // -----------------------------------------------------------------------------
69 // CEnvironmentalReverbMessageHandler::~CEnvironmentalReverbMessageHandler
70 // Before going away, unregister with the CI EnvironmentalReverb object.
71 // The observation message must be completed if outstanding.
72 // The effect data queue must be emptied and destroyed.
73 // -----------------------------------------------------------------------------
75 CEnvironmentalReverbMessageHandler::~CEnvironmentalReverbMessageHandler()
79 RDebug::Print(_L("CEnvironmentalReverbMessageHandler::~CEnvironmentalReverbMessageHandler"));
81 if(iEnvironmentalReverb)
82 iEnvironmentalReverb->UnRegisterObserver(*this);
87 if ( !iMessage->IsCompleted() )
89 iMessage->Complete(KErrCancel);
96 CEffectDataQueItem* queItem;
97 while ( !iEffectDataQue->IsEmpty() )
99 queItem = iEffectDataQue->First();
100 iEffectDataQue->Remove(*queItem);
104 delete iEffectDataQue;
107 delete iEnvironmentalReverb;
112 // ---------------------------------------------------------
113 // CEnvironmentalReverbMessageHandler::HandleRequest
114 // (other items were commented in a header).
115 // ---------------------------------------------------------
117 void CEnvironmentalReverbMessageHandler::HandleRequest(
118 TMMFMessage& aMessage )
120 ASSERT(aMessage.Destination().InterfaceId() == KUidEnvironmentalReverbEffect);
121 TRAPD(error,DoHandleRequestL(aMessage));
124 aMessage.Complete(error);
128 // ---------------------------------------------------------
129 // CEnvironmentalReverbMessageHandler::DoHandleRequestL
130 // Dispatches the message to the appropriate handler.
131 // ---------------------------------------------------------
133 void CEnvironmentalReverbMessageHandler::DoHandleRequestL(
134 TMMFMessage& aMessage )
136 switch( aMessage.Function() )
140 DoInitializeL(aMessage);
150 DoObserveL(aMessage);
158 aMessage.Complete(KErrNotSupported);
163 // ---------------------------------------------------------
164 // CEnvironmentalReverbMessageHandler::DoInitializeL
165 // ---------------------------------------------------------
167 void CEnvironmentalReverbMessageHandler::DoInitializeL(TMMFMessage& aMessage)
170 RDebug::Print(_L("CEnvironmentalReverbMessageHandler::DoInitializeL"));
172 aMessage.WriteDataToClient(iEnvironmentalReverb->DoEffectData());
173 aMessage.Complete(KErrNone);
178 // ---------------------------------------------------------
179 // CEnvironmentalReverbMessageHandler::DoApplyL
180 // Extracts the data from the message. The client EnvironmentalReverb
181 // data is applied to the CI EnvironmentalReverb object.
182 // ---------------------------------------------------------
184 void CEnvironmentalReverbMessageHandler::DoApplyL(
185 TMMFMessage& aMessage )
188 RDebug::Print(_L("CEnvironmentalReverbMessageHandler::DoApplyL"));
190 TEfEnvReverbDataPckg environmentalReverbPckgFromClient;
191 aMessage.ReadData1FromClient(environmentalReverbPckgFromClient);
192 iEnvironmentalReverb->SetEffectData(environmentalReverbPckgFromClient);
193 iEnvironmentalReverb->ApplyL();
194 aMessage.Complete(KErrNone);
197 // ---------------------------------------------------------
198 // CEnvironmentalReverbMessageHandler::DoObserveL
199 // Receives the observation request message and depending
200 // on the status of the effect data queue, the message is
201 // completed immediately or saved for later completion.
202 // ---------------------------------------------------------
204 void CEnvironmentalReverbMessageHandler::DoObserveL(
205 TMMFMessage& aMessage )
209 RDebug::Print(_L("CEnvironmentalReverbMessageHandler::DoObserveL"));
214 iEnvironmentalReverb->RegisterObserverL(*this);
218 if ( iEffectDataQue->IsEmpty() )
220 //iMessage = &aMessage;
221 iMessage = new(ELeave) TMMFMessage(aMessage);
225 TEfEnvReverbDataPckg dataPckg;
226 CEffectDataQueItem* item = iEffectDataQue->First();
227 dataPckg.Copy(item->EffectData());
228 aMessage.WriteDataToClient(dataPckg);
229 aMessage.Complete(KErrNone);
230 iEffectDataQue->Remove(*item);
235 // ---------------------------------------------------------
236 // CEnvironmentalReverbMessageHandler::EffectChanged
237 // The CI EnvironmentalReverb object has changed state.
238 // The observation message is completed if no data has been
239 // queued up. Otherwise, the CI EnvironmentalReverb object's data is
240 // packaged and queued.
241 // ---------------------------------------------------------
243 void CEnvironmentalReverbMessageHandler::EffectChanged(
244 const CAudioEffect* aAudioEffect,
248 RDebug::Print(_L("CEnvironmentalReverbMessageHandler::EffectChanged"));
251 if ( iMessage && !iMessage->IsCompleted() && iEffectDataQue->IsEmpty() )
253 iMessage->WriteDataToClient(((CEnvironmentalReverb*)aAudioEffect)->DoEffectData());
254 iMessage->Complete(KErrNone);
260 // Saves the data and complete an observation message next time around.
262 TRAPD(err1,data = ((CEnvironmentalReverb*)aAudioEffect)->DoEffectData().AllocL());
265 //CleanupStack::PushL(data);
266 CEffectDataQueItem* item = NULL;
267 TRAPD(err2,item = CEffectDataQueItem::NewL(data));
270 iEffectDataQue->AddLast(*item);
280 RDebug::Print(_L("CEnvironmentalReverbMessageHandler::EffectChanged Error Allocating Memory %d"),err1);
289 // ========================== OTHER EXPORTED FUNCTIONS =========================