internetradio2.0/uiinc/irmediaclient.h
changeset 0 09774dfdd46b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uiinc/irmediaclient.h	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,260 @@
+/*
+* Copyright (c) 2006-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:  ?Description
+*
+*/
+
+
+
+#ifndef IRMEDIACLIENT_H
+#define IRMEDIACLIENT_H
+
+#include <e32base.h>
+
+#include "ircontrolparams.h"
+#include "irmediaenginedef.h"
+#include <mdaaudiooutputstream.h>
+
+class CIRCtrlCmdObserver;
+class CIRMediaEngineInterface;
+
+//========================================class declaration CIRMediaEngineInterface============================================
+
+/**
+ * This is client class for irmediaengine which a ecom dll 
+ * Any request to media engine is routed through media client
+ * This client creates proper player for mp3 or acc/accp according 
+ * to the mime type To start a player StartNewPlayerL function is to be
+ * used, which in turn trigger play and this should be called before 
+ * calling play or stop functions
+ * The buffers are created and filled with data. 
+ * media engines instance is created and associates the filled buffer
+ * to media engine, finally the media engine's and buffer associated is deleted
+ * for each format we delete and recreate the player and buffer
+ * This also interacts with ircommandchannel.dll for filling data,triggering
+ * audiofadeout etc.
+ * 
+ * @code
+ *
+ * CIRCtrlCmdObserver* channel; //instance of CIRCtrlCmdObserver defined
+ *							   //in ircommandchannel.dll 
+ * client = CIRMediaClient* NewL(); //instance of media client
+ * TConfig config;
+ * TBuf<20> format;
+ * _LIT(KFormat,"audio/mpeg");
+ * client->StartNewPlayer(config,KFormat,channel); //Initiates the player
+ *             //Creates buffer fills the buffer, Creates instance of player 
+ *             //and associates filled buffer with it triggers playing.
+ *			   //Once this done irmediaengine takes care of buffering issues
+ *			   //Deletes the old instance of player as well as buffer associated
+ *			   //before creating a new one
+ * client->Stop(); //stop the player
+ * client->Play(); //plays the player
+ * client->SetVolume(); //sets the volume
+ * client->MaxVolume(); //gives the maximum volume
+ * client->Volume(); //returns the current volume
+ * client->BufferFilled(); //is a call back when buffer is filled this has to be called
+ * client->StopMediaBuffering(); //stop buffering when buffering is handled in irmediaengine 
+ * client->StopInitialBuffering(); //stop buffering when buffering is handled in
+ * 									//irmediaclient
+ * @endcode
+ * 
+ */
+
+NONSHARABLE_CLASS(CIRMediaClient) : public CBase
+	{											// Function declaration
+	
+	//Constructor functions
+public:
+	
+	/**
+	 * Function : NewL
+	 * Two Phase Constructor - NewL
+	 * @return an instance of the player component	
+	 */	 
+ 	 static CIRMediaClient* NewL(CIRCtrlCmdObserver* aChannel);
+
+ 	/**
+	 * Function : NewLC
+	 * Two Phase Constructor - NewLC
+	 * @return an instance of the player component
+	 */	
+  	 static CIRMediaClient* NewLC(CIRCtrlCmdObserver* aChannel);
+
+	/**
+	 * destructor function
+	 * destructor of the player component
+	 */
+  	~CIRMediaClient();
+
+private:  	
+	//Constructor function
+	
+	/**	
+	 * This is default Constructor
+	 * for the class CIRMediaClient
+	 */			
+    CIRMediaClient();
+    	
+	/**	
+	 * Two phase ConstructL
+	 * network component is taken as input
+	 * @param instance of network
+	 */  	
+    void ConstructL(CIRCtrlCmdObserver* aChannel);
+
+
+public: 
+	
+												// Function to control the play
+	  
+	/**
+	 * Function : Play
+	 * Starts to play the stream
+	 * @return KErrNone if player is existing if not it returns KErrNotFound
+	 */ 
+	 TInt Play();  
+	    
+	/**
+	 * Function : Stop
+	 * Stops to play the stream
+	 */	      
+  	 void Stop();
+   	     
+     											//Function to control the volume
+       
+	/**
+	 * Function : SetVolume
+	 * function to set the volume, 
+	 * @param integer level of volume is the input
+	 */		
+	 void SetVolume(TInt aVolume);
+	 
+	/**
+	 * Function : MaxVolume
+	 * @returns the maximum volume , integer value is the Output
+	 */			
+	TInt MaxVolume() const;
+	
+	/**
+	 * Function : Volume
+	 * function to returns the volume
+	 * @return integer level of voume is the Output
+	 */		
+	 TInt Volume() const;    
+
+	/**
+	 * Function: BufferFilled
+	 * Set the whether a Fill Buffer is currently active
+	 */
+  	 void BufferFilled();
+
+	/**
+	 * Function: StartNewPlayerL
+	 * Set the whether a Fill Buffer is currently active
+	 * @param configuration settings
+	 * @param format type
+	 * @param command channel's instance
+	 */
+	 void StartNewPlayerL(TConfig& aConfig,const TDesC8& aFormat);
+  	 
+	 /**
+	 * Function: StopMediaBuffering
+	 * stops buffering of media engine 
+	 */
+  	 void StopMediaBuffering();
+
+	 /**
+	 * Function: StopMediaBuffering
+	 * stops buffering from media client, media engine is not stopped 
+	 */
+	 void StopInitialBuffering();
+	 
+	 /**
+	 * Function: StartMediaBuffering
+	 * starts buffering of media engine 
+	 */
+	 void StartMediaBuffering();
+	/**
+    * GetMediaClientInstance()
+    * Returns the Audio Player  Instance
+    */
+	CMdaAudioOutputStream* GetPlayerInstance();
+	 
+private:
+	
+    /**
+     * Creates instance of the media engine ECom plugin.
+     * 
+     * @return ETrue, if the creation succeeded, EFalse otherwise 
+     */
+    TBool CreatePlayer();
+    
+	/**
+	 * initializes the player with codec settings, initialised buffer 
+	 * and Control command instance.
+	 * 
+	 * @param configuration settings
+	 * @param command channel's instance
+	 */	
+	 void InitializePlayer( TConfig& aConfig,CIRCtrlCmdObserver* aChannel);
+						
+
+private:
+								    	//data members
+
+			
+	//Instance of Interface definision			
+	CIRMediaEngineInterface* iPlayer;
+	
+	//Instance of channel through with data is sent UI
+	CIRCtrlCmdObserver* iChannel;
+	
+	//The instance of buffer which is currently playing
+	TUint8* iCurrentBuffer;
+
+	//The pointer to buffer which being created for a new player
+	TUint8* iTempBuffer;
+
+	//pointer to buffer being filled
+	TUint8* iInputBufferPtr;
+
+	//holds the format type
+	TBuf8<20> iFormat;
+
+	//buffer which is being filled
+	TPtr8 iInputBuffer;
+	
+	//hold the configuration information
+	TConfig iConfig;
+	
+	//Holds the percentage of data in the buffer
+	TInt iBufferPercentage;	
+	
+	//Set of commands that can be sent to command channel
+	TIRControlCommmand iCommand;
+	
+	//checks whether the player is a newly created player
+	TBool iNewPlayer;
+
+	//checks whether the execution of code is required for only first time or not 
+	TBool iFirstTime;
+
+	//checks whether to stop buffering
+	TBool iStopBuffering;
+	};
+
+#endif //IRMEDIACLIENT_H
+
+