diff -r 80975da52420 -r 43d09473c595 mmfenh/progressivedownload/ProgressiveDownloadUtility/src/AudioPdPlayUtility.cpp --- a/mmfenh/progressivedownload/ProgressiveDownloadUtility/src/AudioPdPlayUtility.cpp Mon May 03 12:59:52 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,947 +0,0 @@ -/* -* Copyright (c) 2004 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: Progressive Download Utility -* -*/ - -#include -#include -#include -#include "AudioPdPlayUtility.h" -#include "AudioPdProperties.h" -#include "progressivedownloadsourceuids.hrh" - -#include - -//void Panic(TInt aPanicCode); - -const TUid KUidProgressiveDlSource = {KProgressiveDownloadSourceUid}; - -void Panic(TInt aPanicCode) - { - _LIT(KProgressiveDownloadUtility, "ProgressiveDownloadUtility"); - User::Panic(KProgressiveDownloadUtility, aPanicCode); - } - -CAudioPdPlayUtility* CAudioPdPlayUtility::NewL(MAudioPdPlayUtilityCallback& aCallback) - { - CAudioPdPlayUtility* self = new(ELeave) CAudioPdPlayUtility(); - CleanupStack::PushL(self); - - self->iProperties = CAudioPdProperties::NewL(aCallback); - CleanupStack::Pop(self); - return self; - } - -CAudioPdPlayUtility::~CAudioPdPlayUtility() - { - delete iProperties; - } - -CAudioPdPlayUtility::CAudioPdPlayUtility() - { - - } - -void CAudioPdPlayUtility::ConstructL() - { - - } - -//For Download Status -void CAudioPdPlayUtility::HandleDownloadEventL(TUint aTransactionID, - TBrCtlDownloadEvent aEvent, - TUint aValue) - { - iProperties->HandleDownloadEventL(aTransactionID,aEvent,aValue); - } - - -void CAudioPdPlayUtility::Play() - { - iProperties->Play(); - } -void CAudioPdPlayUtility::Stop() - { - iProperties->Stop(); - } -TInt CAudioPdPlayUtility::Pause() - { - return iProperties->Pause(); - } -void CAudioPdPlayUtility::SetVolume(TInt aVolume) - { - iProperties->SetVolume(aVolume); - } -void CAudioPdPlayUtility::SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence) - { - iProperties->SetRepeats(aRepeatNumberOfTimes,aTrailingSilence); - } -void CAudioPdPlayUtility::SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration) - { - iProperties->SetVolumeRamp(aRampDuration); - } -const TTimeIntervalMicroSeconds& CAudioPdPlayUtility::Duration() - { - return iProperties->Duration(); - } -TInt CAudioPdPlayUtility:: MaxVolume() - { - return iProperties->MaxVolume(); - } -void CAudioPdPlayUtility::Close() - { - iProperties->Close(); - } -TInt CAudioPdPlayUtility::GetPosition(TTimeIntervalMicroSeconds& aPosition) - { - return iProperties->GetPosition(aPosition); - } -void CAudioPdPlayUtility::SetPosition(const TTimeIntervalMicroSeconds& aPosition) - { - iProperties->SetPosition(aPosition); - } - -TInt CAudioPdPlayUtility::SetPriority(TInt aPriority, TMdaPriorityPreference aPref) - { - return iProperties->SetPriority(aPriority,aPref); - } -TInt CAudioPdPlayUtility::GetVolume(TInt& aVolume) - { - return iProperties->GetVolume(aVolume); - } -TInt CAudioPdPlayUtility::GetNumberOfMetaDataEntries(TInt& aNumEntries) - { - return iProperties->GetNumberOfMetaDataEntries(aNumEntries); - } - - -CMMFMetaDataEntry* CAudioPdPlayUtility::GetMetaDataEntryL(TInt aMetaDataIndex) - { - return iProperties->GetMetaDataEntryL(aMetaDataIndex); - } - -TInt CAudioPdPlayUtility::SetPlayWindow(const TTimeIntervalMicroSeconds& aStart, - const TTimeIntervalMicroSeconds& aEnd) - { - return iProperties->SetPlayWindow(aStart,aEnd); - } - -TInt CAudioPdPlayUtility::ClearPlayWindow() - { - return iProperties->ClearPlayWindow(); - } -TInt CAudioPdPlayUtility::SetBalance(TInt aBalance) - { - return iProperties->SetBalance(aBalance); - } -TInt CAudioPdPlayUtility::GetBalance(TInt& aBalance) - { - return iProperties->GetBalance(aBalance); - } -TInt CAudioPdPlayUtility::GetBitRate(TUint& aBitRate) - { - return iProperties->GetBitRate(aBitRate); - } - - -void CAudioPdPlayUtility::RegisterForAudioLoadingNotification(MAudioLoadingObserver& aCallback) - { - iProperties->RegisterForAudioLoadingNotification(aCallback); - } - -void CAudioPdPlayUtility::GetAudioLoadingProgressL(TInt& aPercentageProgress) - { - iProperties->GetAudioLoadingProgressL(aPercentageProgress); - } - -const CMMFControllerImplementationInformation& CAudioPdPlayUtility::ControllerImplementationInformationL() - { - return iProperties->ControllerImplementationInformationL(); - } - - -TInt CAudioPdPlayUtility::CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom) - { - return iProperties->CustomCommandSync(aDestination, aFunction, aDataTo1, aDataTo2, aDataFrom); - } -TInt CAudioPdPlayUtility::CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2) - { - return iProperties->CustomCommandSync(aDestination, aFunction, aDataTo1, aDataTo2); - } -void CAudioPdPlayUtility::CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus) - { - iProperties->CustomCommandAsync(aDestination, aFunction, aDataTo1, aDataTo2, aDataFrom, aStatus); - } -void CAudioPdPlayUtility::CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus) - { - iProperties->CustomCommandAsync(aDestination, aFunction, aDataTo1, aDataTo2, aStatus); - } - -void CAudioPdPlayUtility::OpenFileL(const TDesC& aFileName) - { - iProperties->OpenFileL(aFileName); - } - - -void CAudioPdPlayUtility::OpenFileL(const RFile& aFile) - { - RFile& file = const_cast(aFile); - iProperties->OpenFileL(file); - } - - -void CAudioPdPlayUtility::OpenFileL(const TMMSource& aSource) - { - iProperties->OpenFileL(aSource); - } - -void CAudioPdPlayUtility::DlCompleteOpenFileL(const TDesC& aFileName) - { - iProperties->DlCompleteOpenFileL(aFileName); - } - -TInt CAudioPdPlayUtility::GetFilePosition(TInt& aFilePosition) - { - return iProperties->GetFilePosition(aFilePosition); - } - -TInt CAudioPdPlayUtility::SetFileSize(TInt aFileSize) - { - return iProperties->SetFileSize(aFileSize); - } - -TInt CAudioPdPlayUtility::SetBytesDownloaded(TInt aBytesDownloaded, TBool aDownloadComplete) - { - return iProperties->SetBytesDownloaded(aBytesDownloaded,aDownloadComplete); - } - -MMMFDRMCustomCommand* CAudioPdPlayUtility::GetDRMCustomCommand() - { - //ASSERT(iProperties); - return iProperties->GetDRMCustomCommand(); - } - - -TInt CAudioPdPlayUtility::CheckAudioPlayerState() - { - return iProperties->CheckAudioPlayerState(); - } - - -//=============================================================== -// CAudioPdProperties implementation begins -// -//=============================================================== -CAudioPdProperties* CAudioPdProperties::NewL(MAudioPdPlayUtilityCallback& aCallback) - { - CAudioPdProperties* self = new(ELeave) CAudioPdProperties(aCallback); - CleanupStack::PushL(self); - self->ConstructL(aCallback); - CleanupStack::Pop(self); - return self; - } -CAudioPdProperties* CAudioPdProperties::NewLC(MAudioPdPlayUtilityCallback& /*aCallback*/) - { - return NULL; - } - -CAudioPdProperties::~CAudioPdProperties() - { - - delete iControllerImplementationInformation; - delete iAsyncCallBack; - delete iRepeatTrailingSilenceTimer; - delete iFindAndOpenController; - delete iControllerEventMonitor; - iMediaIds.Close(); - iController.Close(); - } - -CAudioPdProperties::CAudioPdProperties(/*MMdaAudioPlayerCallback*/MAudioPdPlayUtilityCallback& aCallback): - iCallback(aCallback), - iAudioPlayDeviceCommands(iController), - iAudioPlayControllerCommands(iController), - iDRMCustomCommands(iController) - { - iState = EStopped; - iPrioritySettings.iPriority = KAudioPriorityRealOnePlayer;//80 - iPrioritySettings.iPref =(TMdaPriorityPreference) KAudioPrefRealOneLocalPlayback;// 0x01420001; - iPlayStart = TTimeIntervalMicroSeconds(0); - iPlayEnd = TTimeIntervalMicroSeconds(0); - iPlayWindowSet = ENone; - iSourceHandle = NULL; - } - -void CAudioPdProperties::ConstructL(MAudioPdPlayUtilityCallback& /*aCallback*/) - { - - iControllerEventMonitor = CMMFControllerEventMonitor::NewL(*this, iController); - iRepeatTrailingSilenceTimer = CRepeatTrailingSilenceTimer::NewL(*this); - iAsyncCallBack = CMMFMdaAudioPlayerCallBack::NewL(iCallback); - User::LeaveIfError(iMediaIds.Append(KUidMediaTypeAudio)); - iFindAndOpenController = CMMFFindAndOpenController::NewL(*this); - iFindAndOpenController->Configure(iMediaIds[0], iPrioritySettings); - iFindAndOpenController->ConfigureController(iController, *iControllerEventMonitor, CMMFFindAndOpenController::EPlayback); - - } - -void CAudioPdProperties::MfaocComplete( - TInt& aError, - RMMFController* /*aController*/, - TUid aControllerUid, - TMMFMessageDestination* aSourceHandle, - TMMFMessageDestination* /*aSinkHandle*/) - { - - iSourceHandle = aSourceHandle; - - if (aError == KErrNone) - { - iControllerUid = aControllerUid; - - // Get the clip duration - iDuration = TTimeIntervalMicroSeconds(0); - aError = iController.GetDuration(iDuration); - - // If an error occurred in any of the above, close the controller. - if (aError != KErrNone) - { - iControllerEventMonitor->Cancel(); - iController.Close(); - } - } - - iAsyncCallBack->InitComplete(aError, iDuration); - } - -void CAudioPdProperties::HandleDownloadEventL(TUint aTransactionID, - TBrCtlDownloadEvent aEvent, - TUint aValue) - { - iCallback.HandleDownloadEventL(aTransactionID,aEvent,aValue); - - } - - -void CAudioPdProperties::OpenFileL(const TDesC& aFileName) - { - TMMFileSource filesource(aFileName, ContentAccess::KDefaultContentObject, ContentAccess::EPlay); - OpenFileL(filesource); - } - - -void CAudioPdProperties::OpenFileL(const RFile& aFile) - { - RFile& file = const_cast(aFile); - TMMFileHandleSource filesource(file, KNullDesC, ContentAccess::EPlay); - OpenFileL(filesource); - } - -void CAudioPdProperties::OpenFileL(const TMMSource& aSource) - { - // If iAsyncCallBack is already active, we're still in the process of notifying the client - // that a previous request to Open...(...) has completed. - if (iAsyncCallBack->IsActive()) - User::Leave(KErrNotReady); - - - if (aSource.SourceType()==KUidMMFileHandleSource) - { - - RFile& fileHandle = static_cast(aSource).Handle(); - - iFindAndOpenController->ConfigureSourceSink( - CMMFFindAndOpenController::TSourceSink(KUidProgressiveDlSource,fileHandle), - CMMFFindAndOpenController::TSourceSink(KUidMmfAudioOutput)); - - } - if (aSource.SourceType()==KUidMMFileSource) - { - const TDesC& fileName = static_cast(aSource).Name(); - - iFindAndOpenController->ConfigureSourceSink( - CMMFFindAndOpenController::TSourceSink(KUidProgressiveDlSource, - CMMFFindAndOpenController::GetConfigFile(fileName)), - CMMFFindAndOpenController::TSourceSink(KUidMmfAudioOutput)); - - } - - iFindAndOpenController->OpenByFileSource(aSource); - } - -void CAudioPdProperties::DlCompleteOpenFileL(const TDesC& aFileName) - { - if (iAsyncCallBack->IsActive()) - User::Leave(KErrNotReady); - - Close(); - - TMMFileSource filesource(aFileName, ContentAccess::KDefaultContentObject, ContentAccess::EPlay); - - - iFindAndOpenController->ConfigureSourceSink( - TMMFileSource(aFileName, filesource.UniqueId(), filesource.Intent(), filesource.IsUIEnabled()), - CMMFFindAndOpenController::TSourceSink(KUidMmfAudioOutput)); - - iFindAndOpenController->OpenByFileSource(filesource); - - - } - - -void CAudioPdProperties::Play() - { - // if we're already playing, call the client's callback with KErrNotReady. - // This is what the controller would do if we allowed the Play() - // to propagate down. Need to do it here too (for consistency) - // in case we're in a trailing silence period. - if (iState == EPlaying) - { - iAsyncCallBack->PlayComplete(KErrNotReady); - return; - } - - // cancel the repeat timer in case the client has called Play() - // without waiting for the previous play to complete - iRepeatTrailingSilenceTimer->Cancel(); - // Reset played count - iNumberOfTimesPlayed = 0; - - DoPlay(); - } - -void CAudioPdProperties::DoPlay() - { -#if defined(__AUDIO_PROFILING) - RDebug::ProfileStart(4); -#endif // defined(__AUDIO_PROFILING) - TInt err = KErrNone; - if (iState != EPaused) - { - err = iController.Prime(); - -#if defined(__AUDIO_PROFILING) - RDebug::ProfileEnd(4); -#endif // defined(__AUDIO_PROFILING) - - // make sure we don't set the position outside the play window - - // but allow it to remain unchanged if it's within the window - if (iPlayWindowSet == ESet && - (iPosition < iPlayStart || iPosition >= iPlayEnd)) - iPosition = iPlayStart; - - if (err==KErrNone) - err = iController.SetPosition(iPosition); - } - - if (err==KErrNone) - { - if (iPlayWindowSet == ESet) - err = iAudioPlayControllerCommands.SetPlaybackWindow(iPlayStart, iPlayEnd); - else if (iPlayWindowSet == EClear) - { - err = iAudioPlayControllerCommands.DeletePlaybackWindow(); - iPlayWindowSet = ENone; // assume window will stay cleared - } - } - - if (err==KErrNone) - { -#if defined(__AUDIO_PROFILING) - RDebug::ProfileStart(5); -#endif // defined(__AUDIO_PROFILING) - - err = iController.Play(); - -#if defined(__AUDIO_PROFILING) - RDebug::ProfileEnd(5); -#endif // defined(__AUDIO_PROFILING) - } - - if (err!=KErrNone) - iAsyncCallBack->PlayComplete(err); - else - { - iState = EPlaying; - iCallback.Playing(); - } - } - - -void CAudioPdProperties::Stop() - { - if (iState==EPlaying || iState==EPaused) - { - // cancel the repeat timer in case the client has called Stop() - // during the trailing silence period - iRepeatTrailingSilenceTimer->Cancel(); - - iController.Stop(); - iPosition = iPlayStart; - iState = EStopped; - } - - } -TInt CAudioPdProperties::Pause() - { - TInt err = KErrNone; - if (iState==EPlaying) - { - err = iController.Pause(); - if (!err || err==KErrNotReady) - err = iController.GetPosition(iPosition); - iState = EPaused; - iCallback.Paused(); - } - return err; - } -void CAudioPdProperties::SetVolume(TInt aVolume) - { - TInt err = iAudioPlayDeviceCommands.SetVolume(aVolume); - - __ASSERT_ALWAYS(err==KErrNone, Panic(EMMFMediaClientBadArgument)); - } -void CAudioPdProperties::SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence) - { - iNumberOfTimesToRepeat = aRepeatNumberOfTimes; - iTrailingSilence = aTrailingSilence; - } -void CAudioPdProperties::SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration) - { - iAudioPlayDeviceCommands.SetVolumeRamp(aRampDuration); - } -const TTimeIntervalMicroSeconds& CAudioPdProperties::Duration() - { - TInt err = iController.GetDuration(iDuration); - if (err) - { - iDuration = 0; - } - return iDuration; - } -TInt CAudioPdProperties:: MaxVolume() - { - TInt maxVolume = 0; -#ifdef _DEBUG - TInt error = -#endif - iAudioPlayDeviceCommands.GetMaxVolume(maxVolume); - __ASSERT_DEBUG(error==KErrNone, Panic(EMMFMediaClientPanicServerCommunicationProblem)); - return maxVolume; - } -void CAudioPdProperties::Close() - { - // Reset the audio player state. - Stop(); - iControllerEventMonitor->Cancel(); - iController.Close(); - } -TInt CAudioPdProperties::GetPosition(TTimeIntervalMicroSeconds& aPosition) - { - TInt error = KErrNone; -// if (iState==EPlaying) - //For progressivedownload pause and resume I need to get the - //last position even if not playing. - error = iController.GetPosition(iPosition); - - aPosition = iPosition; - return error; - } -void CAudioPdProperties::SetPosition(const TTimeIntervalMicroSeconds& aPosition) - { - // Clip the position if aPosition is greater than the duration - // or if aPosition is negative. - const TTimeIntervalMicroSeconds maxPosition(Duration()); - const TTimeIntervalMicroSeconds minPosition(0); - - if (aPosition > maxPosition) - iPosition = maxPosition; - else if (aPosition < minPosition) - iPosition = minPosition; - else - iPosition = aPosition; - - if (iState==EPlaying || iState==EPaused || iState == EStopped) - { - iController.SetPosition(iPosition); - } -// else if (iState == EPaused) -// { -// Stop(); // We call stop so that DevSound's internal buffers are reset -// } - } - -TInt CAudioPdProperties::SetPriority(TInt aPriority, TMdaPriorityPreference aPref) - { - iPrioritySettings.iPref = aPref; - iPrioritySettings.iPriority = aPriority; - iFindAndOpenController->Configure(iMediaIds[0], iPrioritySettings); - - return iController.SetPrioritySettings(iPrioritySettings); - } -TInt CAudioPdProperties::GetVolume(TInt& aVolume) - { - TInt error = iAudioPlayDeviceCommands.GetVolume(aVolume); - return error; - } -TInt CAudioPdProperties::GetNumberOfMetaDataEntries(TInt& aNumEntries) - { - TInt error = iController.GetNumberOfMetaDataEntries(aNumEntries); - return error; - } - - -CMMFMetaDataEntry* CAudioPdProperties::GetMetaDataEntryL(TInt aMetaDataIndex) - { - return iController.GetMetaDataEntryL(aMetaDataIndex); - } - -TInt CAudioPdProperties::SetPlayWindow(const TTimeIntervalMicroSeconds& aPlayStart, - const TTimeIntervalMicroSeconds& aPlayEnd) - { - TInt error = KErrNone; - - if (aPlayStart >= TTimeIntervalMicroSeconds(0) && - aPlayStart < iDuration && - aPlayStart < aPlayEnd && - aPlayEnd <= iDuration ) - { - iPlayStart = aPlayStart; - iPlayEnd = aPlayEnd; - iPlayWindowSet = ESet; - - if (iState==EPlaying) - error = iAudioPlayControllerCommands.SetPlaybackWindow(aPlayStart, aPlayEnd); - } - else - error = KErrArgument; - - return error; - } - -TInt CAudioPdProperties::ClearPlayWindow() - { - // clear play window start - very important because this is assigned - // to iPosition when we stop & is used to set the position on the next Play() - iPosition = iPlayStart = iPlayEnd = TTimeIntervalMicroSeconds(0); - - iPlayWindowSet = EClear; - TInt err = KErrNone; - if (iState==EPlaying) - err = iAudioPlayControllerCommands.DeletePlaybackWindow(); - return err; - } -TInt CAudioPdProperties::SetBalance(TInt aBalance) - { - TInt err = iAudioPlayDeviceCommands.SetBalance(aBalance); - return err; - } -TInt CAudioPdProperties::GetBalance(TInt& aBalance) - { - TInt err = iAudioPlayDeviceCommands.GetBalance(aBalance); - return err; - } - -TInt CAudioPdProperties::GetBitRate(TUint& aBitRate) - { - RMMFAudioControllerCustomCommands controller(iController); - TInt err = controller.GetSourceBitRate(aBitRate); - return err; - } - -void CAudioPdProperties::RegisterForAudioLoadingNotification(MAudioLoadingObserver& aLoadingObserver) - { - iLoadingObserver = &aLoadingObserver; - } - -void CAudioPdProperties::GetAudioLoadingProgressL(TInt& aPercentageProgress) - { - User::LeaveIfError(iAudioPlayControllerCommands.GetLoadingProgress(aPercentageProgress)); - } - -const CMMFControllerImplementationInformation& CAudioPdProperties::ControllerImplementationInformationL() - { - if (!iControllerImplementationInformation) - { - if (iControllerUid==KNullUid) - User::Leave(KErrNotReady); - iControllerImplementationInformation = CMMFControllerImplementationInformation::NewL(iControllerUid); - } - return *iControllerImplementationInformation; - } - -TInt CAudioPdProperties::CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom) - { - return iController.CustomCommandSync(aDestination, aFunction, aDataTo1, aDataTo2, aDataFrom); - } -TInt CAudioPdProperties::CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2) - { - return iController.CustomCommandSync(aDestination, aFunction, aDataTo1, aDataTo2); - } -void CAudioPdProperties::CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus) - { - iController.CustomCommandAsync(aDestination, aFunction, aDataTo1, aDataTo2, aDataFrom, aStatus); - } -void CAudioPdProperties::CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus) - { - iController.CustomCommandAsync(aDestination, aFunction, aDataTo1, aDataTo2, aStatus); - } - -TInt CAudioPdProperties::GetFilePosition(TInt& aFilePosition) - { - TInt err = KErrNone; - TPckgBuf dataFrom; - - if(iSourceHandle != NULL) - { - TMMFMessageDestinationPckg destPckg(*iSourceHandle); - err =CustomCommandSync(destPckg, EGETFILEPOSITION, KNullDesC8, KNullDesC8, dataFrom); - } - else - { - err = KErrNotFound; - } - - if(err==KErrNone) - aFilePosition = dataFrom(); - - return err; - } - -TInt CAudioPdProperties::SetFileSize(TInt aFileSize) - { - TInt err = KErrNone; - if(iSourceHandle != NULL) - { - TMMFMessageDestinationPckg destPckg(*iSourceHandle); - TPckgBuf data1(aFileSize); - err = CustomCommandSync(destPckg, ESETFILESIZE, data1, KNullDesC8); - } - else - { - err = KErrNotFound; - } - return err; - } - -TInt CAudioPdProperties::SetBytesDownloaded(TInt aBytesDownloaded, TBool /*aDownloadComplete*/) - { - TInt err = KErrNone; - if(iSourceHandle != NULL) - { - TMMFMessageDestinationPckg destPckg(*iSourceHandle); - TPckgBuf data1(aBytesDownloaded); - err = CustomCommandSync(destPckg, ESETBYTESDOWNLOADED, data1, KNullDesC8); - } - else - { - err = KErrNotFound; - } - - return err; - } - - -MMMFDRMCustomCommand* CAudioPdProperties::GetDRMCustomCommand() - { - if (iDRMCustomCommands.IsSupported()) - { - return static_cast(&iDRMCustomCommands); - } - else - { - return NULL; - } - } - - -TInt CAudioPdProperties::CheckAudioPlayerState() - { - return iState; - } -void CAudioPdProperties::HandleEvent(const TMMFEvent& aEvent) - { - // handle loading started/complete messages first, as the later code does not explicitly check the event type - if (aEvent.iEventType==KMMFEventCategoryAudioLoadingStarted) - { - if (iLoadingObserver) - iLoadingObserver->MaloLoadingStarted(); - } - else if (aEvent.iEventType==KMMFEventCategoryAudioLoadingComplete) - { - if (iLoadingObserver) - iLoadingObserver->MaloLoadingComplete(); - } - else if (aEvent.iEventType==KMMFEventCategoryPlaybackComplete) - { - TInt oldState = iState; - iPosition = iPlayStart; - if (aEvent.iErrorCode == KErrNone) - { - //If we weren't playing, ignore the event. - if(oldState == EPlaying) - { - //we finished playing the clip so repeat if required - iNumberOfTimesPlayed++; - if ((iNumberOfTimesPlayed>iNumberOfTimesToRepeat) && (iNumberOfTimesToRepeat!=KMdaRepeatForever)) - { - //we've repeated enough times now - iNumberOfTimesPlayed = 0; - iState = EStopped; - iCallback.MapcPlayComplete(KErrNone); - } - else - { - // We need to repeat the clip - // we're truncating the trailingsilence here so maximum time is ~37mins - TTimeIntervalMicroSeconds32 silence = I64INT(iTrailingSilence.Int64()); - iRepeatTrailingSilenceTimer->After(silence); - } - } - } - else - { //aEvent.iErrorCode != KErrNone - //if we weren't playing, don't advise Client. - iState = EStopped; - if(oldState == EPlaying) - iCallback.MapcPlayComplete(aEvent.iErrorCode); - } - } - - // else we have an unexpected event that cannot be dealt with by the client. - // We will simply ignore this. - } - - -void CAudioPdProperties::RepeatTrailingSilenceTimerComplete() - { - // reset the position for subsequent plays - iPosition = iPlayStart; - DoPlay(); - } - - -CRepeatTrailingSilenceTimer* CRepeatTrailingSilenceTimer::NewL(MRepeatTrailingSilenceTimerObs& aObs) - { - CRepeatTrailingSilenceTimer* s = new(ELeave) CRepeatTrailingSilenceTimer(aObs); - CleanupStack::PushL(s); - s->ConstructL(); - CleanupStack::Pop(); - return s; - } - -void CRepeatTrailingSilenceTimer::RunL() - { - iObs.RepeatTrailingSilenceTimerComplete(); - } - -CRepeatTrailingSilenceTimer::CRepeatTrailingSilenceTimer(MRepeatTrailingSilenceTimerObs& aObs) : - CTimer(EPriorityHigh), - iObs(aObs) - { - CActiveScheduler::Add(this); - } - - -CMMFMdaAudioPlayerCallBack* CMMFMdaAudioPlayerCallBack::NewL(MAudioPdPlayUtilityCallback& aCallback) - { - return new(ELeave) CMMFMdaAudioPlayerCallBack(aCallback); - } - -CMMFMdaAudioPlayerCallBack::CMMFMdaAudioPlayerCallBack(MAudioPdPlayUtilityCallback& aCallback) : - CActive(CActive::EPriorityHigh), iCallback(aCallback) - { - CActiveScheduler::Add(this); - } - -CMMFMdaAudioPlayerCallBack::~CMMFMdaAudioPlayerCallBack() - { - Cancel(); - } - -void CMMFMdaAudioPlayerCallBack::InitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration) - { - iError = aError; - iDuration = aDuration; - iState = ECallbackInitComplete; - if (!IsActive()) - { - TRequestStatus* s = &iStatus; - SetActive(); - User::RequestComplete(s, KErrNone); - } - } - -void CMMFMdaAudioPlayerCallBack::PlayComplete(TInt aError) - { - iError = aError; - iState = ECallbackPlayComplete; - if (!IsActive()) - { - TRequestStatus* s = &iStatus; - SetActive(); - User::RequestComplete(s, KErrNone); - } - } - - -void CMMFMdaAudioPlayerCallBack::PlayingCallback() - { - iState = ECallbackPlaying; - if (!IsActive()) - { - TRequestStatus* s = &iStatus; - SetActive(); - User::RequestComplete(s, KErrNone); - } - } - -void CMMFMdaAudioPlayerCallBack::PausedCallback() - { - iState = ECallbackPaused; - if (!IsActive()) - { - TRequestStatus* s = &iStatus; - SetActive(); - User::RequestComplete(s, KErrNone); - } - } - - -void CMMFMdaAudioPlayerCallBack::RunL() - { - switch (iState) - { - case ECallbackInitComplete: - iCallback.MapcInitComplete(iError, iDuration); - break; - case ECallbackPlayComplete: - iCallback.MapcPlayComplete(iError); - break; - case ECallbackPlaying: - iCallback.Playing(); - break; - case ECallbackPaused: - iCallback.Paused(); - break; - - } - } - -void CMMFMdaAudioPlayerCallBack::DoCancel() - { - // Nothing to cancel - } -