diff -r 6c158198356e -r ae942d28ec0e javauis/amms_qt/mmacontrol/src.emc/cammsemcspectatorlocationcontrol.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/amms_qt/mmacontrol/src.emc/cammsemcspectatorlocationcontrol.cpp Tue Aug 31 15:09:22 2010 +0300 @@ -0,0 +1,184 @@ +/* +* Copyright (c) 2005 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 virtual location of the SoundSource3D. +* +*/ + + +// INCLUDE FILES +#include +#include +#include "cammsemcspectatorlocationcontrol.h" + +#ifdef _DEBUG +// CONSTANTS +const TInt KAMMSMinRadius = 0; +#endif // _DEBUG + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CAMMSEMCSpectatorLocationControl::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +CAMMSEMCSpectatorLocationControl* CAMMSEMCSpectatorLocationControl::NewLC( + CMMAPlayer* aPlayer) +{ + CAMMSEMCSpectatorLocationControl* self = + new(ELeave) CAMMSEMCSpectatorLocationControl(aPlayer); + + CleanupStack::PushL(self); + + return self; +} + +// Destructor +CAMMSEMCSpectatorLocationControl::~CAMMSEMCSpectatorLocationControl() +{ + LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCSpectatorLocationControl::CAMMSEMCSpectatorLocationControl"); + // Perform DeallocateControl, if the state change has not yet performed it. + DeallocateControl(); +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCSpectatorLocationControl::PrepareControlL +// Function which is called after the correct state is set in Player. +// ----------------------------------------------------------------------------- +// +void CAMMSEMCSpectatorLocationControl::PrepareControlL() +{ + // Perform the action only for the first time, skip if called afterwards + if (!iMListenerLocationControl) + { + LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCSpectatorLocationControl::PrepareControlL"); + //Create Location Effect Control + iStreamControl = (static_cast(iMMAPlayer))->StreamControl(); + iFactory = (static_cast(iMMAPlayer))->MMFactory(); + + MEffectControl* temp(NULL); + User::LeaveIfError(iFactory->CreateEffectControl(KListenerLocationEffectControl, temp)); + iMListenerLocationControl = static_cast(temp); + User::LeaveIfError(iStreamControl->AddEffect(*iMListenerLocationControl)); + iMListenerLocationControl->Enable(); + } +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCSpectatorLocationControl::DeallocateControl +// Function which is called after the correct state is set in Player. +// ----------------------------------------------------------------------------- +// +void CAMMSEMCSpectatorLocationControl::DeallocateControl() +{ + if (iMListenerLocationControl) + { + LOG( EJavaAMMS, EInfo, "AMMS::CAMMSEMCSpectatorLocationControl::DeallocateControl"); + + // Location for Audio can be disabled or enabled + iMListenerLocationControl->Disable(); + //return the control to factory + MEffectControl* temp = iMListenerLocationControl; + iStreamControl->RemoveEffect(*temp); + // Delete the Effect + MEffectControl* tempCtrl = iMListenerLocationControl; + iFactory->DeleteEffectControl(tempCtrl); + iMListenerLocationControl = NULL; + } +} + +const TDesC& CAMMSEMCSpectatorLocationControl::ClassName() const +{ + return KAMMSEMCSpectatorLocationControl; +} + + +// ----------------------------------------------------------------------------- +// CAMMSEMCSpectatorLocationControl::SetLocationCartesianL +// Moves the object to the new location. +// ----------------------------------------------------------------------------- +void CAMMSEMCSpectatorLocationControl::SetLocationCartesianL( + TInt& aX, + TInt& aY, + TInt& aZ) +{ + // Sets the cartesian coordinates for the source location. + + LOG3( EJavaAMMS, EInfo, "AMMS::CAMMSEMCSpectatorLocationControl::SetLocationCartesianL: %d, %d, %d", + aX, aY, aZ); + + iMListenerLocationControl->SetLocationCartesian(aX, aY, aZ); + + // Apply updated settings to EMC API. + iMListenerLocationControl->Apply(); +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCSpectatorLocationControl::LocationCartesian +// Gets the coordinates of the current location. +// ----------------------------------------------------------------------------- +void CAMMSEMCSpectatorLocationControl::LocationCartesian( + TInt& aX, TInt& aY, TInt& aZ) +{ + // Gets the cartesian coordinates for the location of the Listener position. + // The coordinates of the positions are in millimeters. + iMListenerLocationControl->LocationCartesian(aX, aY, aZ); +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCSpectatorLocationControl::SetLocationSphericalL +// Moves the object to the new location. +// ----------------------------------------------------------------------------- +void CAMMSEMCSpectatorLocationControl::SetLocationSphericalL( + TInt& aAzimuth, + TInt& aElevation, + TInt& aRadius) +{ + // Check in debug build that aRadius is within valid range. + __ASSERT_DEBUG(aRadius >= KAMMSMinRadius, User::Invariant()); + + // Sets the spherical coordinates for the location of the source position. + // The parameters are thousandths of radians + + LOG3( EJavaAMMS, EInfo, "AMMS::CAMMSEMCSpectatorLocationControl::SetLocationSphericalL: %d, %d, %d", + aAzimuth, aElevation, aRadius); + + TInt32 convertedAzimuth = (TInt32)(aAzimuth * + KDegToRad * 1000); + + TInt32 convertedElevation = (TInt32)(aElevation * + KDegToRad * 1000); + + LOG2( EJavaAMMS, EInfo, "AMMS::CAMMSEMCSpectatorLocationControl::SetLocationSphericalL: %d, %d", + convertedAzimuth, convertedElevation); + + iMListenerLocationControl->SetLocationSpherical( + convertedAzimuth, convertedElevation, (TInt32&)aRadius); + + // Apply updated settings to EMC API. + iMListenerLocationControl->Apply(); +} + +// ----------------------------------------------------------------------------- +// CAMMSEMCSpectatorLocationControl::CAMMSEMCSpectatorLocationControl +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +CAMMSEMCSpectatorLocationControl::CAMMSEMCSpectatorLocationControl(CMMAPlayer* aPlayer) + : CAMMSLocationControl(aPlayer) +{ + iMMAPlayer = aPlayer; +} + +// End of File