internetradio2.0/uiinc/irmediaclient.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 19 Apr 2010 14:01:53 +0300
changeset 0 09774dfdd46b
permissions -rw-r--r--
Revision: 201011 Kit: 201015

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