internetradio2.0/streamsourcesrc/irasfplayer.cpp
changeset 14 896e9dbc5f19
parent 12 608f67c22514
child 15 065198191975
--- a/internetradio2.0/streamsourcesrc/irasfplayer.cpp	Tue Jul 06 14:07:20 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,431 +0,0 @@
-/*
-* 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:  Implementation of streaming and playback on ASF channel url
-*
-*/
-
-
-/* ---------------------------------------------------------------------------
-*  Version history:
-*  Template version:
-*  <ccm_history>
-*
-*  Version: 1, Fri Sep 19 13:00:00 2008 by e0328782 Rohit
-*  Ref:
-*  Created
-*
-*  </ccm_history>
-* ============================================================================
-*/
-
-#include <e32property.h>
-#include "irpubsubkeys.h"
-
-#include "irasfplayer.h"				// this class
-#include "irctrlcommand.h"				// MIRCtrlCmdObserver
-#include "irstreamsourceobserver.h"		// MIRStreamSourceObserver
-#include "irdebug.h"
-#include "irmetadata.h"
-
-//Constants
-_LIT8( KMimeTypeASF, "audio/x-ms-wma" );
-const TInt KFour = 4;
-_LIT( KIRSongTitle, "title" );
-_LIT( KIRSongArtist, "artist" );
-_LIT( KTrailingAsf, ".asf" );
-_LIT( KTrailingWma, ".wma" );
-_LIT( KTrailingWmv, ".wmv" );
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// ---------------------------------------------------------------------------
-// CIRAsfPlayer::NewL
-// function returns an instance of CIRAsfPlayer
-// Two phase constructor
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CIRAsfPlayer* CIRAsfPlayer::NewL(MIRStreamSourceObserver& aStreamObserver,
-										  MIRCtrlCmdObserver& aCtrlCmdObserver)
-	{
-	IRLOG_DEBUG( "CIRAsfPlayer::NewL" );
-	CIRAsfPlayer* self = CIRAsfPlayer::NewLC(aStreamObserver, aCtrlCmdObserver );
-	CleanupStack::Pop(self);
-	IRLOG_DEBUG( "CIRAsfPlayer::NewL - Exiting." );
-	return self;
-	}
-
-// ---------------------------------------------------------------------------
-// CIRAsfPlayer::NewLC
-// function creates an instance of CIRAsfPlayer
-// Two phase constructor
-// ---------------------------------------------------------------------------
-//
-CIRAsfPlayer* CIRAsfPlayer::NewLC(MIRStreamSourceObserver& aStreamObserver,
-								  MIRCtrlCmdObserver& aCtrlCmdObserver)
-	{
-	IRLOG_DEBUG( "CIRAsfPlayer::NewLC" );
-	CIRAsfPlayer* self = new (ELeave) CIRAsfPlayer(aStreamObserver, aCtrlCmdObserver);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	IRLOG_DEBUG( "CIRAsfPlayer::NewLC - Exiting." );
-	return self;
-	}
-
-// ---------------------------------------------------------------------------
-// CIRAsfPlayer::~CIRAsfPlayer
-// Default Destructor
-// ---------------------------------------------------------------------------
-//
-CIRAsfPlayer::~CIRAsfPlayer()
-	{
-	IRLOG_DEBUG( "CIRAsfPlayer::~CIRAsfPlayer" );
-    if( iMdaAudioPlayer )
-	    {
-	    delete iMdaAudioPlayer;
-	    iMdaAudioPlayer = NULL;
-	    }
-
-	if( iMetaData )
-		{
-		delete 	iMetaData;
-		iMetaData = NULL;
-		}
-	iStationUri.Close();
-
-	IRLOG_DEBUG( "CIRAsfPlayer::~CIRAsfPlayer - Exiting." );
-	}
-
-//Function for Play control
-
-// ---------------------------------------------------------------------------
-// CIRAsfPlayer::PlayL
-// function to intiate the player and play the stream
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRAsfPlayer::PlayL(const TDesC& aUri)
-	{
-	IRRDEBUG2( "CIRAsfPlayer::PlayL - Entering aUri=%S", &aUri );
-
-    iStationUri.Close();
-    iStationUri.CreateL( aUri );
-
-	User::LeaveIfNull( iMdaAudioPlayer );
-    if( iMdaAudioPlayer )
-	    {
-	    iMdaAudioPlayer->Close();
-    	iMdaAudioPlayer->OpenUrlL( iStationUri, KUseDefaultIap, KMimeTypeASF );
-	    }
-
-	IRLOG_DEBUG( "CIRAsfPlayer::PlayL - Exiting." );
-	}
-
-// ---------------------------------------------------------------------------
-// CIRAsfPlayer::Play
-// function to resume playing (AsfPlayer should already initiated using Play(url))
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRAsfPlayer::Play()
-	{
-	IRLOG_DEBUG( "CIRAsfPlayer::Play" );
-
-	SetVolume( iCtrlCmdObserver.FetchVolume() );
-    if( iMdaAudioPlayer )
-	    {
-		iMdaAudioPlayer->Play();
-	    }
-
-	IRLOG_DEBUG( "CIRAsfPlayer::Play - Exiting." );
-	}
-
-// ---------------------------------------------------------------------------
-// CIRAsfPlayer::Stop
-// function to which stop the player
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRAsfPlayer::Stop()
-	{
-	IRLOG_DEBUG( "CIRAsfPlayer::Stop" );
-
-    if( iMdaAudioPlayer )
-	    {
-		iMdaAudioPlayer->Stop();
-	    }
-
-	IRLOG_DEBUG( "CIRAsfPlayer::Stop - Exiting." );
-	}
-
-										//Functions for Volume Control
-
-// ---------------------------------------------------------------------------
-// CIRAsfPlayer::SetVolume
-// function to set the volume
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRAsfPlayer::SetVolume(TInt aVolume )
-	{
-	IRLOG_DEBUG( "CIRAsfPlayer::SetVolume" );
-
-    if( iMdaAudioPlayer )
-	    {
-		iMdaAudioPlayer->SetVolume( aVolume );
-	    }
-
-	IRLOG_DEBUG( "CIRAsfPlayer::SetVolume - Exiting." );
-	}
-
-// ---------------------------------------------------------------------------
-// CIRAsfPlayer::Volume
-// function to returns the volume, integer level of volume is the Output
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TInt CIRAsfPlayer::Volume() const
-	{
-	IRLOG_DEBUG( "CIRAsfPlayer::Volume" );
-
-	TInt volume = 0;
-    if( iMdaAudioPlayer )
-	    {
-		iMdaAudioPlayer->GetVolume( volume );
-	    }
-
-	return volume;
-	}
-
-// ---------------------------------------------------------------------------
-// CIRAsfPlayer::MaxVolume
-// function to returns the maximum volume
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TInt CIRAsfPlayer::MaxVolume() const
-	{
-	IRLOG_DEBUG( "CIRAsfPlayer::MaxVolume" );
-
-	TInt volume = 0;
-    if( iMdaAudioPlayer )
-	    {
-		volume = iMdaAudioPlayer->MaxVolume();
-	    }
-
-	return volume;
-	}
-
-// Helper functions
-
-// ---------------------------------------------------------------------------
-// CIRAsfPlayer::DetectAsfChannel
-// Function is used to detect ASF channel by its url ending in .asf/.wma/.wmv
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TBool CIRAsfPlayer::DetectAsfChannel(const TDesC& aUri)
-	{
-	IRLOG_DEBUG("CIRAsfPlayer::DetectAsfChannel - Entering");
-	TPtrC ptr( aUri );
-	TPtrC UriTypePtr( ptr.Right(KFour) );
-
-	TBool bAsf = UriTypePtr == KTrailingAsf || UriTypePtr == KTrailingWma
-							   || UriTypePtr == KTrailingWmv;
-
-	IRRDEBUG2("CIRAsfPlayer::DetectAsfChannel - ASF Channel detected = %d", (TInt)bAsf);
-	IRLOG_DEBUG("CIRAsfPlayer::DetectAsfChannel - Exiting");
-	return bAsf;
-	}
-
-// Two-phase construction
-
-// ---------------------------------------------------------------------------
-// CIRAsfPlayer::CIRAsfPlayer
-// Default constructor
-// ---------------------------------------------------------------------------
-//
-CIRAsfPlayer::CIRAsfPlayer(MIRStreamSourceObserver& aStreamObserver,
-						   MIRCtrlCmdObserver& aCtrlCmdObserver):
-	iMdaAudioPlayer(NULL), iMetaData(NULL),
-	iCtrlCmdObserver( aCtrlCmdObserver ), iStreamObserver(aStreamObserver),
-	iState( ENotReady )
-	{
-	IRLOG_DEBUG( "CIRAsfPlayer::CIRAsfPlayer" );
-	}
-
-// ---------------------------------------------------------------------------
-// CIRAsfPlayer::ConstructL
-// Two phase constructor is used to intialize data members
-// Function can leave if CMdaAudioOutputStream::NewL leaves
-// ---------------------------------------------------------------------------
-//
-void CIRAsfPlayer::ConstructL()
-	{
-	IRLOG_DEBUG( "CIRAsfPlayer::ConstructL" );
-
-	iMdaAudioPlayer = CMdaAudioPlayerUtility::NewL( *this );
-	User::LeaveIfNull( iMdaAudioPlayer );
-
-	iMdaAudioPlayer->RegisterForAudioLoadingNotification( *this );
-
-	iMetaData = CIRMetaData::NewL();
-	User::LeaveIfNull( iMdaAudioPlayer );
-
-	IRLOG_DEBUG( "CIRAsfPlayer::ConstructL - Exiting." );
-	}
-
-//Call back functions
-
-// ---------------------------------------------------------------------------
-// MMdaAudioPlayerCallback::MapcInitComplete
-// Invoked with OpenUrl() success/fail result
-// ---------------------------------------------------------------------------
-//
-void CIRAsfPlayer::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/)
-	{
-	IRRDEBUG2( "CIRAsfPlayer::MapcInitComplete - Entering. aError = %d", aError );
-    if( KErrNone == aError )
-	    {
-	    iState = EReadyToPlay;
-	    Play();
-	    iStreamObserver.Asf_ConnectionEstablished();
-    	}
-	else
-		{
-		iState = ENotReady;
-		iStreamObserver.Asf_ErrorConnecting(aError);
-		}
-	IRLOG_DEBUG( "CIRAsfPlayer::MapcInitComplete - Exiting" );
-	}
-
-// ---------------------------------------------------------------------------
-// MMdaAudioPlayerCallback::MapcPlayComplete
-// Invoked after playback of an audio sample completes success/fail
-// ---------------------------------------------------------------------------
-//
-void CIRAsfPlayer::MapcPlayComplete(TInt aError)
-	{
-	IRRDEBUG2( "CIRAsfPlayer::MapcPlayComplete - Entering. aError = %d", aError );
-	if( KErrNone != aError )
-		{
-		iState = ENotReady;
-		iStreamObserver.Asf_ErrorConnecting(aError);
-		}
-	else
-		{
-		// won't hit this as playing from stream
-		}
-	IRLOG_DEBUG( "CIRAsfPlayer::MapcPlayComplete - Exiting" );
-	}
-
-// ---------------------------------------------------------------------------
-// MAudioLoadingObserver::MaloLoadingStarted
-//
-// ---------------------------------------------------------------------------
-//
-void CIRAsfPlayer::MaloLoadingStarted()
-	{
-	IRLOG_DEBUG( "CIRAsfPlayer::MaloLoadingStarted - Entering" );
-	TInt percentComplete = 0;
-
-	if( iMdaAudioPlayer )
-		{
-		iState = EReadyToPlay;
-
-		TRAPD( err, iMdaAudioPlayer->GetAudioLoadingProgressL( percentComplete ));
-		if(err == KErrNone)
-			iStreamObserver.Asf_UpdateProgress( percentComplete );
-		}
-	IRLOG_DEBUG( "CIRAsfPlayer::MaloLoadingStarted - Exiting" );
-	}
-
-// ---------------------------------------------------------------------------
-// MAudioLoadingObserver::MaloLoadingComplete
-//
-// ---------------------------------------------------------------------------
-//
-void CIRAsfPlayer::MaloLoadingComplete()
-	{
-	IRLOG_DEBUG( "CIRAsfPlayer::MaloLoadingComplete - Entering" );
-	TInt percentComplete = 0;
-
-	if( iMdaAudioPlayer )
-		{
-		iState = EPlaying;
-
-		TRAPD( err, iMdaAudioPlayer->GetAudioLoadingProgressL( percentComplete ));
-		if(err == KErrNone)
-			iStreamObserver.Asf_UpdateProgress( percentComplete );
-
-		TRAP( err, ReadMetadataL());
-		if(err != KErrNone)
-			{
-			IRLOG_WARNING( "CIRAsfPlayer::MaloLoadingComplete - Failed to read/publish metadata" );
-			}
-
-		// publish birtate
-		TUint bitrate = 0;
-		err = iMdaAudioPlayer->GetBitRate( bitrate );
-		RProperty::Set( KUidActiveInternetRadioApp, KIRPSBitrate, bitrate );
-		}
-	IRLOG_DEBUG( "CIRAsfPlayer::MaloLoadingComplete - Exiting" );
-	}
-
-// ---------------------------------------------------------------------------
-// CIRAsfPlayer::ReadMetadataL
-// Reads the meta data from the CMdaAudioPlayerUtility
-// ---------------------------------------------------------------------------
-//
-void CIRAsfPlayer::ReadMetadataL()
-	{
-    IRLOG_DEBUG( "CIRAsfPlayer::ReadMetadataL - Entering" );
-
-	if(iMetaData)
-		{
-	    // Erases old meta data information.
-	    iMetaData->SetArtistL( KNullDesC );
-	    iMetaData->SetSongL( KNullDesC );
-	    iMetaData->SetStreamUrlL( KNullDesC );
-
-		// Stream Url
-		iMetaData->SetStreamUrlL( iStationUri );
-
-	    TInt nMetadata = 0;
-	    TInt err = iMdaAudioPlayer->GetNumberOfMetaDataEntries( nMetadata );
-	    for( TInt ctr=0; ctr < nMetadata; ++ctr )
-	        {
-	        CMMFMetaDataEntry* pMetadataEntry = iMdaAudioPlayer->GetMetaDataEntryL( ctr );
-
-	        // Song Title
-	        if( pMetadataEntry->Name() == KIRSongTitle )
-	        	{
-	        	iMetaData->SetSongL( pMetadataEntry->Value() );
-	        	}
-	        // Song Artist
-	        else if( pMetadataEntry->Name() == KIRSongArtist )
-	        	{
-	        	iMetaData->SetArtistL( pMetadataEntry->Value() );
-	        	}
-	        }
-
-		if( iMetaData->Song().Length() == 0 )
-			{
-			IRLOG_WARNING( "CIRAsfPlayer::ExtractMetaDataL - song \"title\" not found in metadata" );
-			}
-		if( iMetaData->Artist().Length() == 0 )
-			{
-			IRLOG_WARNING( "CIRAsfPlayer::ExtractMetaDataL - song \"artist\" not found in metadata" );
-			}
-
-		// Notify observer
-		iStreamObserver.Asf_HandleMetaDataReceivedL( *iMetaData );
-
-	    IRLOG_DEBUG4( "CIRAsfPlayer::ReadMetadataL - Exiting (artist=%S, song=%S, streamUrl=%S)",
-	    		     &iMetaData->Artist(), &iMetaData->Song(), &iMetaData->StreamUrl() );
-		}
-	}