--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpmpxplugins/upnpplaybackplugins/inc/upnpaudiopolicy.h Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,191 @@
+/*
+* Copyright (c) 2008 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: Audio policy implementation for upnp remote plugin
+*
+*/
+
+
+
+
+
+
+#ifndef C_UPNPAUDIOPOLICY_H
+#define C_UPNPAUDIOPOLICY_H
+
+
+#include <mmf/server/sounddevice.h> // for MDevSoundObserver
+
+// FORWARD DECLARATIONS
+class MUPnPAudioPolicyObserver;
+class CMMFBuffer;
+class CMMFDevSound;
+
+/**
+ * A class that implements audio policy for upnp playback plugin.
+ * It registers for DevSound for a vrtual playback handle and is
+ * able to receive notifications from MMF. The purpose for this
+ * is to pause upnp playback when <br>
+ * - local playback begins <br>
+ * - there is an incoming call <br>
+ *
+ * @lib upnpmusicplugins.lib
+ * @since S60 v3.1
+ */
+class CUPnPAudioPolicy
+ : public CBase,
+ public MDevSoundObserver
+ {
+
+private:
+
+ /**
+ * State of audiopolicy
+ *
+ * @since Series 60 3.1
+ */
+ enum TAudioPolicyState
+ {
+ EStateUninitialised, // waiting initialise devSound, can not be used
+ EStatePlaying, // audiopolicy initialized and playback started
+ EStateStopped, // playback stopped
+ };
+
+public: // public services
+
+ /**
+ * constructor
+ * @param aPlaybackMachine the playback states engine
+ */
+ static CUPnPAudioPolicy* NewL(
+ MUPnPAudioPolicyObserver& aObserver );
+
+ /**
+ * destructor
+ */
+ CUPnPAudioPolicy::~CUPnPAudioPolicy();
+
+ /**
+ * request for start playback
+ */
+ void PlayL();
+
+ /**
+ * indicate playback stops
+ */
+ void Stop();
+
+protected: // MDevSoundObserver
+
+ /**
+ * see MDevSoundObserver
+ */
+ void InitializeComplete( TInt aError );
+
+ /**
+ * see MDevSoundObserver
+ */
+ void ToneFinished( TInt aError );
+
+ /**
+ * see MDevSoundObserver
+ */
+ void BufferToBeFilled( CMMFBuffer* aBuffer );
+
+ /**
+ * see MDevSoundObserver
+ */
+ void PlayError( TInt aError );
+
+ /**
+ * see MDevSoundObserver
+ */
+ void BufferToBeEmptied( CMMFBuffer* aBuffer );
+
+ /**
+ * see MDevSoundObserver
+ */
+ void RecordError( TInt aError );
+
+ /**
+ * see MDevSoundObserver
+ */
+ void ConvertError( TInt aError );
+
+ /**
+ * see MDevSoundObserver
+ */
+ void DeviceMessage( TUid aMessageType, const TDesC8& aMsg );
+
+ /**
+ * see MDevSoundObserver
+ */
+ void SendEventToClient( const TMMFEvent& aEvent );
+
+private: // private methods
+
+ /**
+ * default constructor
+ * @param aPlaybackMachine the playback states engine
+ */
+ CUPnPAudioPolicy(
+ MUPnPAudioPolicyObserver& aObserver );
+
+ /**
+ * 2nd phase constructor
+ */
+ void ConstructL();
+
+private: // data
+
+ /**
+ * the playback states engine
+ */
+ MUPnPAudioPolicyObserver& iObserver;
+
+ /**
+ * DevSound component for MMF access
+ */
+ CMMFDevSound* iDevSound;
+
+ /**
+ * Current AudioPolicy state
+ */
+ TAudioPolicyState iAudioPolicyState;
+
+ };
+
+/**
+ * Callback interface for audio policy class
+ */
+class MUPnPAudioPolicyObserver
+ {
+
+public:
+
+ /**
+ * A conflict was found between simultaneously playing audio
+ * resources. This means that this instance is active and
+ * meanwhile another party starts using audio resources in
+ * a way that has been defined to be illegal. The observer
+ * is expected to take apropriate actions after receiving
+ * this event - notifying the playback framework, which will
+ * then clear all resources and inform user.
+ *
+ * @param aError error to be issued to playback framework
+ */
+ virtual void AudioConflict( TInt aError ) = 0;
+
+ };
+
+#endif // C_UPNPAUDIOPOLICY_H