upnpmpxplugins/upnpplaybackplugins/inc/upnpaudiopolicy.h
changeset 0 7f85d04be362
child 9 0b99b84ce2a1
--- /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