javauis/amms_qt/mmacontrol/src.emc/cammsemcreverbsourcecontrol.cpp
changeset 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/amms_qt/mmacontrol/src.emc/cammsemcreverbsourcecontrol.cpp	Fri May 14 15:47:24 2010 +0300
@@ -0,0 +1,208 @@
+/*
+* 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 settings of an audio effect reverb source.
+*
+*/
+
+
+// INCLUDE FILES
+#include <logger.h>
+#include "cammsemcreverbsourcecontrol.h"
+#include "cammsbasereverbcontrol.h"
+#include "cammsemcreverbcontrol.h"
+
+// CONSTANTS
+const TInt KAMMSDisconnectReverbSource = 2147483647; // From JSR-234
+
+#ifdef _DEBUG
+const TInt KAMMSMaxRoomLevel = 0;
+#endif // _DEBUG
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CAMMSEMCReverbSourceControl::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CAMMSEMCReverbSourceControl* CAMMSEMCReverbSourceControl::NewLC(
+    CMMAPlayer* aPlayer,
+    CAMMSBaseReverbControl* aBaseReverbControl)
+{
+    CAMMSEMCReverbSourceControl* self =
+        new(ELeave)CAMMSEMCReverbSourceControl(aPlayer, aBaseReverbControl);
+
+    CleanupStack::PushL(self);
+
+    return self;
+}
+
+// Destructor
+CAMMSEMCReverbSourceControl::~CAMMSEMCReverbSourceControl()
+{
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCReverbSourceControl::~CAMMSEMCReverbSourceControl");
+
+    // Perform DeallocateControl, if the state change has not yet performed it.
+    DeallocateControl();
+
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSEMCReverbSourceControl::SetRoomLevelL
+// Sets the object specific level for the reverberant sound.
+// -----------------------------------------------------------------------------
+//
+void CAMMSEMCReverbSourceControl::SetRoomLevelL(TInt aLevel)
+{
+    LOG1( EJavaAMMS, EInfo, "AMMS:: CAMMSEMCReverbSourceControl::SetRoomLevelL +: %d", aLevel);
+// Check in debug build that aLevel is within valid range.
+    __ASSERT_DEBUG(
+        (aLevel <= KAMMSMaxRoomLevel) ||
+        (aLevel == KAMMSDisconnectReverbSource),
+        User::Invariant());
+
+    // With the JSR-234 value Integer.MIN_VALUE, the reflected sound for the
+    // given object can be disabled.
+    if (aLevel == KMinTInt)
+    {
+        LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCReverbSourceControl::SetRoomLevelL(Integer.MIN_VALUE)");
+        aLevel = 0;
+    }
+
+    // Check the allowed boundaries for room level.
+    TInt minLevel = 0;
+    TInt maxLevel = 0;
+    iRoomLevelControl->LevelRange(minLevel, maxLevel);
+    LOG2( EJavaAMMS, EInfo, "AMMS::CAMMSEMCReverbSourceControl::SetRoomLevelL boundaries %d, %d",
+               minLevel, maxLevel);
+
+    // Check the state of the effect. If it is in disabled state, enable it.
+    TBool enabled;
+    iRoomLevelControl->IsEnabled(enabled);
+    if (!enabled)
+    {
+        LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCReverbSourceControl::SetRoomLevelL calling EnableL");
+        iRoomLevelControl->Enable();
+    }
+
+    // With the JSR-234 value DISCONNECT, the object can be disconnected
+    // from the reverb.
+    if (aLevel == KAMMSDisconnectReverbSource)
+    {
+        // Do not call iReverbSource->DisableL(), instead set the room level to
+        // _minimum_ value (= smallest negative gain -> maximum attenuation).
+        // The CRoomLevel must also be kept enabled.
+        aLevel = minLevel;
+
+        LOG1( EJavaAMMS, EInfo, "AMMS::CAMMSEMCReverbSourceControl::SetRoomLevelL(DISCONNECT) %d",
+                  minLevel);
+    }
+    else
+    {
+        // Set the room level within allowed boundaries from EMC API
+        aLevel = Min(aLevel, maxLevel);
+        aLevel = Max(aLevel, minLevel);
+        LOG1( EJavaAMMS, EInfo, "AMMS::CAMMSEMCReverbSourceControl::SetRoomLevelL setting value: %d", aLevel);
+    }
+
+    // Sets the RoomLevel level, it will leave if aRoomLevel is not within range
+    // of Min and Max
+    iRoomLevelControl->SetRoomLevel(aLevel);
+
+    // Apply updated settings to EMC API.
+    iRoomLevelControl->Apply();
+
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCReverbSourceControl::SetRoomLevelL -");
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSEMCReverbSourceControl::PrepareControlL
+// Function which is called after the correct state is set in Player.
+// -----------------------------------------------------------------------------
+//
+void CAMMSEMCReverbSourceControl::PrepareControlL()
+{
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCReverbSourceControl::PrepareControlL");
+
+    if (!iRoomLevelControl)
+    {
+        //Create RoomLevel Effect Control
+        iStreamControl = (static_cast<CMMAEMCAudioPlayer*>(iMMAPlayer))->StreamControl();
+        iFactory = (static_cast<CMMAEMCAudioPlayer*>(iMMAPlayer))->MMFactory();
+
+        MEffectControl* temp(NULL);
+        User::LeaveIfError(iFactory->CreateEffectControl(KRoomLevelEffectControl, temp));
+        iRoomLevelControl  = static_cast<MRoomLevelControl*>(temp);
+
+
+        //Attach EMC Reverb Control to RoomLevelControl
+        MReverbControl* reverbControl = iBaseReverbControl->GetReverbControlL();
+        iRoomLevelControl->AttachReverb(*reverbControl);
+
+        //Add Effect to Stream Control
+        User::LeaveIfError(iStreamControl->AddEffect(*iRoomLevelControl));
+    }
+
+
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSEMCReverbSourceControl::DeallocateControl
+// Function which is called after the correct state is set in Player.
+// -----------------------------------------------------------------------------
+//
+void CAMMSEMCReverbSourceControl::DeallocateControl()
+{
+    LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCReverbSourceControl::DeallocateControl");
+    if (iRoomLevelControl)
+    {
+        /*
+        //idealy reverbControl should be checked for its existance and if it is there ,should be detached from RoomLevelControl.
+        //But in this case reverbControl is deleted till this position,so need not to do it.
+        if(reverbControl)
+            {
+            iRoomLevelControl->DetachReverb(*reverbControl);
+            }
+        */
+        iStreamControl->RemoveEffect(*iRoomLevelControl);
+        MEffectControl* objPtr2 = iRoomLevelControl;
+        iFactory->DeleteEffectControl(objPtr2);
+        iRoomLevelControl = NULL;
+    }
+
+
+
+
+}
+
+const TDesC& CAMMSEMCReverbSourceControl::ClassName() const
+{
+    return KAMMSEMCReverbSourceControl;
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSEMCReverbSourceControl::CAMMSEMCReverbSourceControl
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CAMMSEMCReverbSourceControl::CAMMSEMCReverbSourceControl(
+    CMMAPlayer* aPlayer,
+    CAMMSBaseReverbControl* aBaseReverbControl)
+        : CAMMSBaseReverbSourceControl(aPlayer), iBaseReverbControl(aBaseReverbControl)
+{
+
+    iMMAPlayer = aPlayer;
+
+}
+
+//  End of File