--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmfenh/progressivedownload/ProgressiveDownloadUtility/src/EMCPdProperties.h Wed Sep 01 12:23:00 2010 +0100
@@ -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 <e32std.h>
+#include <e32base.h>
+#include <f32file.h>
+#include "MAudioPlayUtility.h"
+#include "EMCPdPlayUtility.h"
+
+#include "mmfclientutility.h"
+
+#include <mmf/common/mmcaf.h>
+
+#include <StreamControl.h>
+#include <ControlObserver.h>
+#include <Events.h>
+#include <DataBufferSource.h>
+#include <DataBuffer.h>
+#include <MMControlFactory.h>
+#include <SinkControl.h>
+#include <MimeTypes.h>
+#include <VolumeControl.h>
+#include <StreamControlObserver.h>
+#include <SourceControlObserver.h>
+
+#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<TUid> iMediaIds;
+
+ CMMFControllerImplementationInformation* iControllerImplementationInformation;
+ TUid iControllerUid;
+
+
+ MStreamControl* iStreamControl;
+ MDataBufferSource* iMDataBufferSource;
+ MSinkControl* iMAudioSink;
+ MVolumeControl* iMVolumeControl;
+
+ RFs iFs;
+ CContentFile* iFile;
+ RFile iFileHandle;
+
+ RPointerArray<MDataBuffer> iBuffers;
+ RArray<TInt> 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<CMMFMetaDataEntry> iMetaDataEntries;
+ TBool iControllerLoaded;
+ TBool iDownloadComplete;
+ };
+
+#endif