diff -r 000000000000 -r 71ca22bcf22a mmfenh/progressivedownload/ProgressiveDownloadUtility/src/EMCPdProperties.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmfenh/progressivedownload/ProgressiveDownloadUtility/src/EMCPdProperties.h Tue Feb 02 01:08:46 2010 +0200 @@ -0,0 +1,299 @@ +/* +* 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 +* +*/ + + +#ifndef __EMCPDPROPERTIES_H__ +#define __EMCPDPROPERTIES_H__ + +#include +#include +#include +#include "MAudioPlayUtility.h" +#include "EMCPdPlayUtility.h" + +#include "mmfclientutility.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "BufferEmptiedEventAO.h" +#include "ContentFile.h" + +using namespace multimedia; + +using multimedia::MStreamControl; +using multimedia::MControlObserver; +using multimedia::MDataBufferSource; +using multimedia::MDataBuffer; +using multimedia::MControl; +using multimedia::CMultimediaFactory; +using multimedia::MSinkControl; +using multimedia::MVolumeControl; +using multimedia::MSourceControlObserver; +using multimedia::MStreamControlObserver; + +//static const TUid KUidMmfAudioController = {KMmfUidControllerAudio}; + + +/** +Mixin class to allow notification that the timed silence has finished. +*/ +class MRepeatTrailingSilenceTimerObs + { +public: + virtual void RepeatTrailingSilenceTimerComplete() = 0; + }; + +/** +CTimer-based active object that waits the requested time before notifying its observer. +*/ +class CRepeatTrailingSilenceTimer : public CTimer + { +public: + static CRepeatTrailingSilenceTimer* NewL(MRepeatTrailingSilenceTimerObs& aObs); + void RunL(); +private: + CRepeatTrailingSilenceTimer(MRepeatTrailingSilenceTimerObs& aObs); +private: + MRepeatTrailingSilenceTimerObs& iObs; + }; + +/** +Active object utility class to allow the callback to be called asynchronously. +This should help prevent re-entrant code in clients of the mediaframework. +*/ +class CMMFMdaAudioPlayerCallBack : public CActive + { +public: + enum TCallbackState { + ECallbackInitComplete, + ECallbackPlayComplete, + ECallbackPlaying, + ECallbackPaused + }; + + +public: + static CMMFMdaAudioPlayerCallBack* NewL(MAudioPdPlayUtilityCallback& aCallback); + ~CMMFMdaAudioPlayerCallBack(); + void InitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration); + void PlayComplete(TInt aError); + void PlayingCallback(); + void PausedCallback(); +private: + CMMFMdaAudioPlayerCallBack(MAudioPdPlayUtilityCallback& aCallback); + void RunL(); + void DoCancel(); +private: + MAudioPdPlayUtilityCallback& iCallback; + TInt iError; + TTimeIntervalMicroSeconds iDuration; + TCallbackState iState; + }; + + + +/** +Concrete implementation of the CAudioPdPlayUtility API. +@see CAudioPdPlayUtility +*/ + +class CAudioPdProperties: public CBase, + public MControlObserver, + public MBufferEmptiedObserver, + public MMMFDRMCustomCommand + { + +public: + + enum TMMFAudioPlayerState + { + EStopped, + EOpening, + EPaused, + EPlaying, + EBuffering, + EPrimed + }; + + static CAudioPdProperties* NewL(MAudioPdPlayUtilityCallback& aCallback); + static CAudioPdProperties* NewLC(MAudioPdPlayUtilityCallback& aCallback); + + ~CAudioPdProperties(); + + + //For Download Status + void HandleDownloadEventL(TUint aTransactionID, + TBrCtlDownloadEvent aEvent, + TUint aValue); + + + //For Audio control + void Play(); + void Stop(); + TInt Pause(); + void SetVolume(TInt aVolume); + void SetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence); + void SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration); + const TTimeIntervalMicroSeconds& Duration(); + TInt MaxVolume(); + void Close(); + TInt GetPosition(TTimeIntervalMicroSeconds& aPosition); + void SetPosition(const TTimeIntervalMicroSeconds& aPosition); + + TInt SetPriority(TInt aPriority, TMdaPriorityPreference aPref); + TInt GetVolume(TInt& aVolume); + TInt GetNumberOfMetaDataEntries(TInt& aNumEntries); + CMMFMetaDataEntry* GetMetaDataEntryL(TInt aMetaDataIndex); + TInt SetPlayWindow(const TTimeIntervalMicroSeconds& aStart, + const TTimeIntervalMicroSeconds& aEnd); + TInt ClearPlayWindow(); + TInt SetBalance(TInt aBalance = KMMFBalanceCenter); + TInt GetBalance(TInt& aBalance); + TInt GetBitRate(TUint& aBitRate); + + void RegisterForAudioLoadingNotification(MAudioLoadingObserver& aCallback); + void GetAudioLoadingProgressL(TInt& aPercentageProgress); + const CMMFControllerImplementationInformation& ControllerImplementationInformationL(); + + TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom); + TInt CustomCommandSync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2); + void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TDes8& aDataFrom, TRequestStatus& aStatus); + void CustomCommandAsync(const TMMFMessageDestinationPckg& aDestination, TInt aFunction, const TDesC8& aDataTo1, const TDesC8& aDataTo2, TRequestStatus& aStatus); + + + MMMFDRMCustomCommand* GetDRMCustomCommand(); + + void OpenFileL(const TDesC& aFileName); + void OpenFileL(const RFile& aFile); + + void DlCompleteOpenFileL(const TDesC& aFileName); + + TInt GetFilePosition(TInt& aFilePosition); + TInt SetFileSize(TInt aFileSize); + TInt SetBytesDownloaded(TInt aBytesDownloaded, TBool isDownloadComplete); + + TInt CheckAudioPlayerState(); + + TInt DisableAutomaticIntent(TBool aDisableAutoIntent); + TInt ExecuteIntent(ContentAccess::TIntent aIntent); + TInt EvaluateIntent(ContentAccess::TIntent aIntent); + TInt SetAgentProperty(ContentAccess::TAgentProperty aProperty, TInt aValue); + +private: + + void Event( MControl* aControl, TUint aEventType, TAny* aEventObject ); + void BufferEmptiedBySource(); + void FillSourceBuffers(); + void CreateAudioBuffersL(); + void DetermineFNMimeType(const TDesC& aFileName, TDes8& aMimeType); + void DetermineFHMimeType(const RFile& aFile, TDes8& aMimeType); + TInt ReadFromFileAndWriteToStream(TInt aIndex) ; + TInt ExtractDRMRestrictionsL(); + TInt ReOpenCAF(); + + CAudioPdProperties(/*MMdaAudioPlayerCallback*/MAudioPdPlayUtilityCallback& aCallback); + void ConstructL(MAudioPdPlayUtilityCallback& aCallback); + +private: + + //MAudioPdPlayUtilityCallback* iAudioPdPlayCallback; + + // last play window command + enum TPlayWindowCommand + { + ENone, + ESet, + EClear + }; + + MAudioPdPlayUtilityCallback& iCallback; + CMMFMdaAudioPlayerCallBack* iAsyncCallBack; + + MAudioLoadingObserver* iLoadingObserver; + RMMFController iController; + RMMFController* iControllerPtr; + TMMFAudioPlayerState iState; + TTimeIntervalMicroSeconds iDuration; // Needed because of api "Duration()" that returns a reference + TMMFPrioritySettings iPrioritySettings; + + TInt iNumberOfTimesPlayed; + TInt iNumberOfTimesToRepeat; + TTimeIntervalMicroSeconds iTrailingSilence; + + // Custom command handlers + RMMFAudioPlayDeviceCustomCommands iAudioPlayDeviceCommands; + RMMFAudioPlayControllerCustomCommands iAudioPlayControllerCommands; + RMMFDRMCustomCommands iDRMCustomCommands; + + // Current playback time so we can resume from where we were stopped + TTimeIntervalMicroSeconds iPosition; + + // Play window start and end times and whether it has been set + TTimeIntervalMicroSeconds iPlayStart; + TTimeIntervalMicroSeconds iPlayEnd; + TPlayWindowCommand iPlayWindowSet; + //RArray iMediaIds; + + CMMFControllerImplementationInformation* iControllerImplementationInformation; + TUid iControllerUid; + + + MStreamControl* iStreamControl; + MDataBufferSource* iMDataBufferSource; + MSinkControl* iMAudioSink; + MVolumeControl* iMVolumeControl; + + RFs iFs; + CContentFile* iFile; + RFile iFileHandle; + + RPointerArray iBuffers; + RArray iAvailable; + TBool iIsEOFReached; + TInt iBytesReadFromFile; + TInt iFileSizeInBytes; + CMultimediaFactory* iFactory; + HBufC8* iMimeType; + MStreamControl::TStreamState iStreamState; + CBufferEmptiedEventAO* iBufferEmptiedEventAO; + TInt iFileSize; + TBool iBuffering; + TInt iBytesDownloaded; + TBool iStopCalled; + HBufC* iFileName; + TBool isProtected; + TBool iDisableAutoIntent; + TBool iMetaDataRead; + // Metadata entries, if supported + RPointerArray iMetaDataEntries; + TBool iControllerLoaded; + TBool iDownloadComplete; + }; + +#endif