--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/amms_qt/mmacontrol/src.emc/cammsprioritycontrol.cpp Tue Aug 31 15:09:22 2010 +0300
@@ -0,0 +1,232 @@
+/*
+* 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 priority of a Player.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <AudioPreference.h>
+#include <logger.h>
+#include <cmmamidiplayer.h>
+#include "cammsprioritycontrol.h"
+#include <cmmaplayerevent.h>
+#include <cmmaaudioplayer.h>
+#include <cmmaemcaudioplayer.h>
+#include <mmf/common/mmfcontroller.h>
+#include <midiclientutility.h>
+
+
+
+const TInt KErrorMessageSize = 32;
+_LIT(KErrPriorityError, "AMMS PC error: %d");
+
+// Default AMMS priority.
+const TInt KAMMSDefaultPriority = 50;
+
+// Reasonable MMF priorities.
+const TInt KAMMSMinMMFPriority = 71;
+const TInt KAMMSMaxMMFPriority = 89;
+
+#ifdef _DEBUG
+// CONSTANTS
+const TInt KAMMSMaxPriority = 100;
+const TInt KAMMSMinPriority = 0;
+#endif // _DEBUG
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CAMMSPriorityControl::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CAMMSPriorityControl* CAMMSPriorityControl::NewLC(CMMAPlayer* aPlayer)
+{
+ CAMMSPriorityControl* self = new(ELeave) CAMMSPriorityControl(aPlayer);
+
+ CleanupStack::PushL(self);
+
+ self->ConstructL();
+
+ return self;
+}
+
+// Destructor
+CAMMSPriorityControl::~CAMMSPriorityControl()
+{
+ LOG( EJavaAMMS, EInfo, "AMMS::CAMMSPriorityControl::~");
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSPriorityControl::SetPriorityL
+// Sets the priority using a linear point scale between 0 and 100.
+// -----------------------------------------------------------------------------
+//
+void CAMMSPriorityControl::SetPriorityL(TInt aPriority)
+{
+ LOG1( EJavaAMMS, EInfo, "AMMS::CAMMSPriorityControl::SetPriorityL %d", aPriority);
+
+ // Check in debug build that aPriority is within valid range.
+ __ASSERT_DEBUG(
+ (aPriority <= KAMMSMaxPriority) &&
+ (aPriority >= KAMMSMinPriority),
+ User::Invariant());
+
+ // Set a new priority only if it differs from the previous one.
+ if (aPriority != iVisiblePriority)
+ {
+ // Set the new priority to MMF only if the player is PREFETCHED
+ // (otherwise setting will leave). In other states, the new priority
+ // will be set when the player state changes to PREFETCHED.
+ if (iPlayer->State() == CMMAPlayer::EPrefetched)
+ {
+ SetPriorityToMmfL(aPriority);
+ }
+
+ iVisiblePriority = aPriority;
+ }
+
+ LOG( EJavaAMMS, EInfo, "AMMS::CAMMSPriorityControl::SetPriorityL -");
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSPriorityControl::Priority
+// Gets the priority.
+// -----------------------------------------------------------------------------
+TInt CAMMSPriorityControl::Priority()
+{
+ return iVisiblePriority;
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSPriorityControl::StateChanged
+// Called when player state is changed.
+// -----------------------------------------------------------------------------
+void CAMMSPriorityControl::StateChanged(TInt aState)
+{
+ LOG1( EJavaAMMS, EInfo, "AMMS::CAMMSPriorityControl::StateChanged +, state = %d",
+ aState);
+
+ // If the state was changed to PREFETCHED, set the buffered priority to
+ // MMF. Set a new priority only if it differs from the previous one.
+
+ if ((aState == CMMAPlayer::EPrefetched) &&
+ (iActualPriority != iVisiblePriority))
+ {
+ TRAPD(err, SetPriorityToMmfL(iVisiblePriority));
+
+ ELOG1( EJavaAMMS, "AMMS::CAMMSPriorityControl::StateChanged, err = %d", err);
+
+ if (err != KErrNone)
+ {
+ TBuf<KErrorMessageSize> errorMessage;
+ errorMessage.Format(KErrPriorityError, err);
+ iPlayer->PostStringEvent(CMMAPlayerEvent::EError, errorMessage);
+ }
+ }
+
+ LOG( EJavaAMMS, EInfo, "AMMS::CAMMSPriorityControl::StateChanged -");
+}
+
+const TDesC& CAMMSPriorityControl::ClassName() const
+{
+ LOG( EJavaAMMS, EInfo, "CAMMSPriorityControl::ClassName");
+
+ return KAMMSPriorityControl;
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSPriorityControl::SetPriorityToMmfL
+// Scales the given AMMS priority to MMF priority and sets it to MMF.
+// -----------------------------------------------------------------------------
+void CAMMSPriorityControl::SetPriorityToMmfL(TInt aAmmsPriority)
+{
+ LOG1( EJavaAMMS, EInfo, "AMMS::CAMMSPriorityControl::SetPriorityToMmfL %d",
+ aAmmsPriority);
+
+ // Scale the AMMS priority value to MMF priority value before setting it.
+ // The default priority used by MMA is 80. MMF priority can be between
+ // -100 and 100, but values between 71 and 89 are reasonable ones.
+ TInt newPriority = KAMMSMinMMFPriority + aAmmsPriority *
+ (KAMMSMaxMMFPriority - KAMMSMinMMFPriority) / 100; // CSI: 47 100% for scaled value #
+
+ LOG1( EJavaAMMS, EInfo, "AMMS::CAMMSPriorityControl::SetPriorityToMmfL, newPriority = %d",
+ newPriority);
+
+ // In case of MIDIPlayer, use CMidiClientUtility, otherwise RMMFController.
+ if (iPlayer->Type() == KMMAMIDIPlayer)
+ {
+ // In case of CMMAMIDIPlayer use CMidiClientUtility
+ CMMAMIDIPlayer* mmaMIDIPlayer =
+ reinterpret_cast< CMMAMIDIPlayer* >(iPlayer);
+
+ CMidiClientUtility* midiClientUtility = mmaMIDIPlayer->MidiClient();
+
+ midiClientUtility->SetPriorityL(newPriority,
+ KMMAMIDIPriorityPreference);
+ }
+ else if (iPlayer->Type() == KMMAAudioPlayer)
+ {
+ CMMAAudioPlayer* mmaAudioPlayer =
+ reinterpret_cast< CMMAAudioPlayer* >(iPlayer);
+
+ RMMFController& rmmfController = mmaAudioPlayer->Controller();
+
+ TMMFPrioritySettings prioritySettings;
+ prioritySettings.iPriority = newPriority;
+
+ User::LeaveIfError(
+ rmmfController.SetPrioritySettings(prioritySettings));
+ }
+ else if (iPlayer->Type() == KMMAEMCAudioPlayer)
+ {
+ MStreamControl* streamControl = (static_cast<CMMAEMCAudioPlayer*>(iPlayer))->StreamControl();
+ User::LeaveIfError(streamControl->SetPriority(newPriority, KMMAEMCPriorityPreference));
+ }
+
+ iActualPriority = aAmmsPriority;
+
+ LOG( EJavaAMMS, EInfo, "AMMS::CAMMSPriorityControl::SetPriorityToMmfL -");
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSPriorityControl::CAMMSPriorityControl
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CAMMSPriorityControl::CAMMSPriorityControl(CMMAPlayer* aPlayer)
+ : CAMMSControl(aPlayer),
+ iVisiblePriority(KAMMSDefaultPriority),
+ iActualPriority(KAMMSDefaultPriority)
+{
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSPlayerStateListener::ConstructL
+// 2nd phase constructor.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+void CAMMSPriorityControl::ConstructL()
+{
+ LOG( EJavaAMMS, EInfo, "AMMS::CAMMSPriorityControl::ConstructL +");
+
+ iPlayer->AddStateListenerL(this);
+
+ LOG( EJavaAMMS, EInfo, "AMMS::CAMMSPriorityControl::ConstructL -");
+}
+
+
+// End of File