/** 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 DECLARATIONSclass 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