os/mm/devsoundextensions/effects/DistAtten/DistanceAttenuationEffect/Src/DistanceAttenuationBase.cpp
First public contribution.
2 * Copyright (c) 2006 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 DistanceAttenuation effect class
27 #include <DistanceAttenuationBase.h>
28 #include <CustomInterfaceUtility.h>
29 #include "DistanceAttenuationProxy.h"
30 #include <DrmAudioSamplePlayer.h>
31 #include <mdaaudioinputstream.h>
32 #include <mdaaudiooutputstream.h>
33 #include <mdaaudiotoneplayer.h>
34 #include <mmf/server/sounddevice.h>
35 #include <videoplayer.h>
38 #define DEBPRN0 RDebug::Printf( "%s", __PRETTY_FUNCTION__);
39 #define DEBPRN1(str) RDebug::Printf( "%s %s", __PRETTY_FUNCTION__, str );
45 // ============================ MEMBER FUNCTIONS ===============================
47 // -----------------------------------------------------------------------------
48 // CDistanceAttenuation::CDistanceAttenuation
49 // C++ default constructor can NOT contain any code, that
51 // -----------------------------------------------------------------------------
53 EXPORT_C CDistanceAttenuation::CDistanceAttenuation()
54 : iDistanceAttenuationData(0, 0, EFalse, 0,0),
55 iDataPckgTo(iDistanceAttenuationData)
60 EXPORT_C CDistanceAttenuation::~CDistanceAttenuation()
64 // -----------------------------------------------------------------------------
65 // CDistanceAttenuation::NewL
66 // Static function for creating an instance of the DistanceAttenuation object.
67 // -----------------------------------------------------------------------------
69 EXPORT_C CDistanceAttenuation* CDistanceAttenuation::NewL(CMdaAudioConvertUtility& aUtility)
73 CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
74 CleanupStack::PushL(customInterface);
76 CDistanceAttenuationProxy* distanceAttenuationProxy = (CDistanceAttenuationProxy*)customInterface->CustomInterface(KUidDistanceAttenuationEffect);
78 if ( !distanceAttenuationProxy )
80 DEBPRN1("No Adaptation Support - leaving");
81 User::Leave(KErrNotSupported);
84 CleanupStack::Pop(customInterface);
86 return distanceAttenuationProxy;
89 // -----------------------------------------------------------------------------
90 // CDistanceAttenuation::NewL
91 // Static function for creating an instance of the DistanceAttenuation object.
92 // -----------------------------------------------------------------------------
94 EXPORT_C CDistanceAttenuation* CDistanceAttenuation::NewL(
95 CMdaAudioInputStream& aUtility )
99 CDistanceAttenuationProxy* distanceAttenuationProxy = (CDistanceAttenuationProxy*)aUtility.CustomInterface(KUidDistanceAttenuationEffect);
101 if (distanceAttenuationProxy == NULL)
103 DEBPRN1("No Adaptation Support - leaving");
104 User::Leave(KErrNotSupported);
107 return distanceAttenuationProxy;
110 // -----------------------------------------------------------------------------
111 // CDistanceAttenuation::NewL
112 // Static function for creating an instance of the DistanceAttenuation object.
113 // -----------------------------------------------------------------------------
115 EXPORT_C CDistanceAttenuation* CDistanceAttenuation::NewL(
116 CMdaAudioOutputStream& aUtility)
120 CDistanceAttenuationProxy* distanceAttenuationProxy = (CDistanceAttenuationProxy*)aUtility.CustomInterface(KUidDistanceAttenuationEffect);
122 if (distanceAttenuationProxy == NULL)
124 DEBPRN1("No Adaptation Support - leaving");
125 User::Leave(KErrNotSupported);
128 return distanceAttenuationProxy;
131 // -----------------------------------------------------------------------------
132 // CDistanceAttenuation::NewL
133 // Static function for creating an instance of the DistanceAttenuation object.
134 // -----------------------------------------------------------------------------
136 EXPORT_C CDistanceAttenuation* CDistanceAttenuation::NewL(
137 CMdaAudioPlayerUtility& aUtility )
141 CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
142 CleanupStack::PushL(customInterface);
144 CDistanceAttenuationProxy* distanceAttenuationProxy = (CDistanceAttenuationProxy*)customInterface->CustomInterface(KUidDistanceAttenuationEffect);
146 if ( !distanceAttenuationProxy )
148 DEBPRN1("No Adaptation Support - leaving");
149 User::Leave(KErrNotSupported);
152 CleanupStack::Pop(customInterface);
154 return distanceAttenuationProxy;
157 // -----------------------------------------------------------------------------
158 // CDistanceAttenuation::NewL
159 // Static function for creating an instance of the DistanceAttenuation object.
160 // -----------------------------------------------------------------------------
162 EXPORT_C CDistanceAttenuation* CDistanceAttenuation::NewL(
163 CMdaAudioRecorderUtility& aUtility, TBool aRecordStream)
167 CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility, aRecordStream);
168 CleanupStack::PushL(customInterface);
170 CDistanceAttenuationProxy* distanceAttenuationProxy = (CDistanceAttenuationProxy*)customInterface->CustomInterface(KUidDistanceAttenuationEffect);
172 if ( !distanceAttenuationProxy )
174 DEBPRN1("No Adaptation Support - leaving");
175 User::Leave(KErrNotSupported);
178 CleanupStack::Pop(customInterface);
180 return distanceAttenuationProxy;
183 // -----------------------------------------------------------------------------
184 // CDistanceAttenuation::NewL
185 // Static function for creating an instance of the DistanceAttenuation object.
186 // -----------------------------------------------------------------------------
188 EXPORT_C CDistanceAttenuation* CDistanceAttenuation::NewL(
189 CMdaAudioToneUtility& aUtility)
193 CDistanceAttenuationProxy* distanceAttenuationProxy = (CDistanceAttenuationProxy*)aUtility.CustomInterface(KUidDistanceAttenuationEffect);
195 if (distanceAttenuationProxy == NULL)
197 DEBPRN1("No Adaptation Support - leaving");
198 User::Leave(KErrNotSupported);
201 return distanceAttenuationProxy;
205 // -----------------------------------------------------------------------------
206 // CDistanceAttenuation::NewL
207 // Static function for creating an instance of the DistanceAttenuation object.
208 // -----------------------------------------------------------------------------
210 EXPORT_C CDistanceAttenuation* CDistanceAttenuation::NewL(
211 CMMFDevSound& aDevSound )
215 CDistanceAttenuationProxy* distanceAttenuationProxy = (CDistanceAttenuationProxy*)aDevSound.CustomInterface(KUidDistanceAttenuationEffect);
217 if (distanceAttenuationProxy == NULL)
219 DEBPRN1("No Adaptation Support - leaving");
220 User::Leave(KErrNotSupported);
223 return distanceAttenuationProxy;
228 // -----------------------------------------------------------------------------
229 // CDistanceAttenuation::NewL
230 // Static function for creating an instance of the DistanceAttenuation object.
231 // -----------------------------------------------------------------------------
233 EXPORT_C CDistanceAttenuation* CDistanceAttenuation::NewL(
234 CCustomCommandUtility* aUtility)
238 CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
239 CleanupStack::PushL(customInterface);
241 CDistanceAttenuationProxy* distanceAttenuationProxy = (CDistanceAttenuationProxy*)customInterface->CustomInterface(KUidDistanceAttenuationEffect);
243 if ( !distanceAttenuationProxy )
245 DEBPRN1("No Adaptation Support - leaving");
246 User::Leave(KErrNotSupported);
249 CleanupStack::Pop(customInterface);
251 return distanceAttenuationProxy;
254 // -----------------------------------------------------------------------------
255 // CDistanceAttenuation::NewL
256 // Static function for creating an instance of the DistanceAttenuation object.
257 // -----------------------------------------------------------------------------
259 EXPORT_C CDistanceAttenuation* CDistanceAttenuation::NewL(
260 MCustomInterface& aCustomInterface )
264 CDistanceAttenuationProxy* distanceAttenuationProxy = (CDistanceAttenuationProxy*)aCustomInterface.CustomInterface(KUidDistanceAttenuationEffect);
266 if ( !distanceAttenuationProxy )
268 DEBPRN1("No Adaptation Support - leaving");
269 User::Leave(KErrNotSupported);
272 return distanceAttenuationProxy;
275 // -----------------------------------------------------------------------------
276 // CDistanceAttenuation::NewL
277 // Static function for creating an instance of the DistanceAttenuation object.
278 // -----------------------------------------------------------------------------
280 EXPORT_C CDistanceAttenuation* CDistanceAttenuation::NewL(
281 CMidiClientUtility& aUtility )
285 CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
286 CleanupStack::PushL(customInterface);
288 CDistanceAttenuationProxy* distanceAttenuationProxy = (CDistanceAttenuationProxy*)customInterface->CustomInterface(KUidDistanceAttenuationEffect);
290 if ( !distanceAttenuationProxy )
292 DEBPRN1("No Adaptation Support - leaving");
293 User::Leave(KErrNotSupported);
296 CleanupStack::Pop(customInterface);
298 return distanceAttenuationProxy;
301 // -----------------------------------------------------------------------------
302 // CDistanceAttenuation::NewL
303 // Static function for creating an instance of the DistanceAttenuation object.
304 // -----------------------------------------------------------------------------
306 EXPORT_C CDistanceAttenuation* CDistanceAttenuation::NewL(
307 CDrmPlayerUtility& aUtility )
311 CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
312 CleanupStack::PushL(customInterface);
314 CDistanceAttenuationProxy* distanceAttenuationProxy = (CDistanceAttenuationProxy*)customInterface->CustomInterface(KUidDistanceAttenuationEffect);
316 if ( !distanceAttenuationProxy )
318 DEBPRN1("No Adaptation Support - leaving");
319 User::Leave(KErrNotSupported);
322 CleanupStack::Pop(customInterface);
324 return distanceAttenuationProxy;
327 // -----------------------------------------------------------------------------
328 // CDistanceAttenuation::NewL
329 // Static function for creating an instance of the DistanceAttenuation object.
330 // -----------------------------------------------------------------------------
332 EXPORT_C CDistanceAttenuation* CDistanceAttenuation::NewL(
333 CVideoPlayerUtility& aUtility )
337 CCustomInterfaceUtility* customInterface = CCustomInterfaceUtility::NewL(aUtility);
338 CleanupStack::PushL(customInterface);
340 CDistanceAttenuationProxy* distanceAttenuationProxy = (CDistanceAttenuationProxy*)customInterface->CustomInterface(KUidDistanceAttenuationEffect);
342 if ( !distanceAttenuationProxy )
344 DEBPRN1("No Adaptation Support - leaving");
345 User::Leave(KErrNotSupported);
348 CleanupStack::Pop(customInterface);
350 return distanceAttenuationProxy;
353 // -----------------------------------------------------------------------------
354 // CDistanceAttenuation::DistanceAttenuation
355 // -----------------------------------------------------------------------------
358 EXPORT_C void CDistanceAttenuation::DistanceAttenuation(
359 TInt32& aRMin, TInt32& aRMax, TBool& aMuteAfterMax,
360 TUint32& aRollOffFactor, TUint32& aRoomRollOffFactor)
364 aRMin = iDistanceAttenuationData.iRMin;
365 aRMax = iDistanceAttenuationData.iRMax;
366 aMuteAfterMax = iDistanceAttenuationData.iMuteAfterMax;
367 aRollOffFactor = iDistanceAttenuationData.iRollOffFactor;
368 aRoomRollOffFactor = iDistanceAttenuationData.iRoomRollOffFactor;
372 // -----------------------------------------------------------------------------
373 // CDistanceAttenuation::RollOffFactorMax
374 // -----------------------------------------------------------------------------
376 EXPORT_C void CDistanceAttenuation::RollOffFactorMax(TUint32& aRollOfFactorMax)
378 aRollOfFactorMax = iDistanceAttenuationData.iRollOffFactorMax;
381 // -----------------------------------------------------------------------------
382 // CDistanceAttenuation::RoomRollOffFactorMax
383 // -----------------------------------------------------------------------------
385 EXPORT_C void CDistanceAttenuation::RoomRollOffFactorMax( TUint32& aRoomRollOfFactorMax )
387 aRoomRollOfFactorMax = iDistanceAttenuationData.iRoomRollOffFactorMax;
391 // -----------------------------------------------------------------------------
392 // CDistanceAttenuation::SetDistanceAttenuationL
393 // -----------------------------------------------------------------------------
396 EXPORT_C void CDistanceAttenuation::SetDistanceAttenuationL(
397 TInt32 aRMin, TInt32 aRMax, TBool aMuteAfterMax,
398 TUint32 aRollOffFactor, TUint32 aRoomRollOffFactor )
402 iDistanceAttenuationData.iRMin = aRMin;
403 iDistanceAttenuationData.iRMax = aRMax;
404 iDistanceAttenuationData.iMuteAfterMax = aMuteAfterMax;
406 if(aRollOffFactor <= iDistanceAttenuationData.iRollOffFactorMax)
407 iDistanceAttenuationData.iRollOffFactor = aRollOffFactor;
409 User::Leave(KErrArgument);
411 if(aRoomRollOffFactor <= iDistanceAttenuationData.iRoomRollOffFactorMax)
412 iDistanceAttenuationData.iRoomRollOffFactor = aRoomRollOffFactor;
414 User::Leave(KErrArgument);
419 // -----------------------------------------------------------------------------
420 // CDistanceAttenuation::Uid
421 // -----------------------------------------------------------------------------
423 EXPORT_C TUid CDistanceAttenuation::Uid() const
425 return KUidDistanceAttenuationEffect;
429 // -----------------------------------------------------------------------------
430 // CDistanceAttenuation::DoEffectData
431 // -----------------------------------------------------------------------------
433 EXPORT_C const TDesC8& CDistanceAttenuation::DoEffectData()
437 iDataPckgTo = iDistanceAttenuationData;
441 // -----------------------------------------------------------------------------
442 // CDistanceAttenuation::SetEffectData
443 // -----------------------------------------------------------------------------
445 EXPORT_C void CDistanceAttenuation::SetEffectData(
446 const TDesC8& aEffectDataBuffer )
450 TEfDistanceAttenuationDataPckg dataPckg;
451 dataPckg.Copy(aEffectDataBuffer);
452 iDistanceAttenuationData = dataPckg();
453 iEnabled = iDistanceAttenuationData.iEnabled;
454 iEnforced = iDistanceAttenuationData.iEnforced;
455 iHaveUpdateRights = iDistanceAttenuationData.iHaveUpdateRights;
459 // ========================== OTHER EXPORTED FUNCTIONS =========================